9

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?

4

1 回答 1

10

正如规范中明确指出的:

作为包含void* pNext成员的结构的任何参数的值必须pNextNULL,或者指向由启用的扩展定义的有效结构。

是为了扩展。

如果每个结构的第一个成员是 sType,扩展在需要不同/额外参数时不能只定义自己的结构类型吗?

那是不可扩展的。

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

有了pNext,你就没有这个问题了。每个扩展数据结构不仅有自己的内部sType字段,而且毫无疑问也会有自己的pNext字段。所以多个扩展可以扩展相同的数据结构。

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

于 2016-04-12T03:53:01.450 回答