pNext 在 Vulkan 结构中的用途
Purpose of pNext in Vulkan structures
Vulkan 中使用的许多结构都有一个 sType 成员,它标识结构的类型,还有一个 pNext 成员, 对于特定于扩展的结构。 很好地解释了 sType 成员的用途,以及为什么需要它。它简要介绍了 pNext,但我不确定我是否理解其背后的基本原理。
如果每个结构的第一个成员是 sType,扩展在需要 different/extra 参数时不能只定义自己的结构类型吗?
正如规范中明确指出的那样:
Any parameter that is a structure containing a void*
pNext
member must have a value of pNext
that is either NULL
, or points to a valid structure that is defined by an enabled extension.
用于扩展。
If the first member of every structure is sType, couldn't extensions just define their own structure types when they need different/extra parameters?
那是不可扩展的。
只有一个 sType
字段。那么两个扩展如何用新值扩展相同的 API 呢?同样,旧的扩展如何与新版本的 Vulkan 一起工作,新版本本身使用由 sType
.
标识的不同数据结构
使用 pNext
,您就没有这个问题。每个扩展数据结构不仅有自己的内部 sType
字段,而且毫无疑问也有自己的 pNext
字段。所以多个扩展可以扩展相同的数据结构。
sType
不需要这个,因为它只会在更高版本的 Vulkan 中更改。
Vulkan 中使用的许多结构都有一个 sType 成员,它标识结构的类型,还有一个 pNext 成员, 对于特定于扩展的结构。
如果每个结构的第一个成员是 sType,扩展在需要 different/extra 参数时不能只定义自己的结构类型吗?
正如规范中明确指出的那样:
Any parameter that is a structure containing a
void*
pNext
member must have a value ofpNext
that is eitherNULL
, or points to a valid structure that is defined by an enabled extension.
用于扩展。
If the first member of every structure is sType, couldn't extensions just define their own structure types when they need different/extra parameters?
那是不可扩展的。
只有一个 sType
字段。那么两个扩展如何用新值扩展相同的 API 呢?同样,旧的扩展如何与新版本的 Vulkan 一起工作,新版本本身使用由 sType
.
使用 pNext
,您就没有这个问题。每个扩展数据结构不仅有自己的内部 sType
字段,而且毫无疑问也有自己的 pNext
字段。所以多个扩展可以扩展相同的数据结构。
sType
不需要这个,因为它只会在更高版本的 Vulkan 中更改。