Purpose of pNext in Vulkan structures

时间:2016-04-12 00:56:55

标签: vulkan

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?

1 个答案:

答案 0 :(得分:6)

如说明书中明确规定:

  

包含void* pNext成员的结构的任何参数的值pNext必须为NULL,或者指向已定义的有效结构通过已启用的扩展程序。

是扩展程序。

  

如果每个结构的第一个成员都是sType,那么当它们需要不同/额外的参数时,不能定义它们自己的结构类型吗?

那不可扩展。

只有一个sType字段。那么两个扩展如何使用新值扩展相同的API?同样,旧扩展如何与新版本的Vulkan一起使用,而Vulkan本身使用sType标识的不同数据结构。

使用pNext,您不会遇到此问题。每个扩展数据结构不仅具有自己的内部sType字段,而且毫无疑问也会有自己的pNext字段。因此,多个扩展可以扩展相同的数据结构。

sType并不需要这样做,因为它只会在较高版本的Vulkan中更改。