Vulkan结构中pNext的目的

And*_*son 5 vulkan

Vulkan中使用的许多结构都有一个sType成员,用于标识结构的类型,以及一个pNext成员,用于特定于扩展的结构.这个答案很好地解释了sType成员的用途,以及为什么需要它.它简要介绍了pNext,虽然我不确定我理解它背后的基本原理.

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

Nic*_*las 6

如规范中明确规定:

任何参数是含有一个结构void* pNext构件必须具有值pNext要么是NULL,或点到由启用扩展中定义的有效结构.

这是扩展.

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

这不可能是可扩展的.

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

有了pNext,你没有那个问题.每个扩展数据结构不仅有自己的内部sType字段,而且毫无疑问它也有自己的pNext字段.因此,多个扩展可以扩展相同的数据结构.

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

  • 是的,每当我问一个问题并且你回答它时,我感觉有点像白痴...... (2认同)
  • @OnaFriday p表示指针,pp表示指针指针.您可以根据需要为指针间接的相应级别添加尽可能多的'p'. (2认同)