Назначение pNext в Vulkan структурах
Многие из структур, используемых в Vulkan, имеют элемент sType, который идентифицирует тип структуры, и элемент pNext для структур, специфичных для расширения. Этот ответ довольно хорошо объясняет, для чего нужен элемент sType и зачем он нужен. Это кратко затрагивает pNext, хотя я не уверен, что понимаю причину этого.
Если первым членом каждой структуры является sType, могут ли расширения просто определять свои собственные типы структур, когда им нужны разные / дополнительные параметры?
1 ответ
Как четко указано в спецификации:
Любой параметр, который является структурой, содержащей
void*
pNext
член должен иметь значениеpNext
это либоNULL
или указывает на допустимую структуру, которая определяется включенным расширением.
Это для расширений.
Если первым членом каждой структуры является sType, могут ли расширения просто определять свои собственные типы структур, когда им нужны разные / дополнительные параметры?
Это не будет продолжаемо.
Здесь только один sType
поле. Так как же два расширения могут расширять один и тот же API новыми значениями? Точно так же, как старое расширение могло бы работать вместе с новыми версиями Vulkan, которое само использует другую структуру данных, идентифицированную sType
,
С pNext
У вас нет этой проблемы. Каждая структура данных расширения будет иметь не только свои внутренние sType
поле, но оно, несомненно, также будет иметь свои собственные pNext
поле. Таким образом, несколько расширений могут расширять одни и те же структуры данных.
sType
это не нужно, потому что это будет изменено только в более высоких версиях Vulkan.