A lot of the structures used in Vulkan have a sType member, which identifies the type of the structure, and a pNext member, for extension-specific structures. This answer explains quite well what the sType member is for, and why it is needed. It briefly touches on pNext, although I'm not sure I understand the rationale behind it.
If the first member of every structure is sType, couldn't extensions just define their own structure types when they need different/extra parameters?
答案 0 :(得分:6)
如说明书中明确规定:
包含
void*
pNext
成员的结构的任何参数的值pNext
必须为NULL
,或者指向已定义的有效结构通过已启用的扩展程序。
是扩展程序。
如果每个结构的第一个成员都是sType,那么当它们需要不同/额外的参数时,不能定义它们自己的结构类型吗?
那不可扩展。
只有一个sType
字段。那么两个扩展如何使用新值扩展相同的API?同样,旧扩展如何与新版本的Vulkan一起使用,而Vulkan本身使用sType
标识的不同数据结构。
使用pNext
,您不会遇到此问题。每个扩展数据结构不仅具有自己的内部sType
字段,而且毫无疑问也会有自己的pNext
字段。因此,多个扩展可以扩展相同的数据结构。
sType
并不需要这样做,因为它只会在较高版本的Vulkan中更改。