Назначение pNext в Vulkan структурах

Многие из структур, используемых в Vulkan, имеют элемент sType, который идентифицирует тип структуры, и элемент pNext для структур, специфичных для расширения. Этот ответ довольно хорошо объясняет, для чего нужен элемент sType и зачем он нужен. Это кратко затрагивает pNext, хотя я не уверен, что понимаю причину этого.

Если первым членом каждой структуры является sType, могут ли расширения просто определять свои собственные типы структур, когда им нужны разные / дополнительные параметры?

1 ответ

Решение

Как четко указано в спецификации:

Любой параметр, который является структурой, содержащей void*pNext член должен иметь значение pNext это либо NULLили указывает на допустимую структуру, которая определяется включенным расширением.

Это для расширений.

Если первым членом каждой структуры является sType, могут ли расширения просто определять свои собственные типы структур, когда им нужны разные / дополнительные параметры?

Это не будет продолжаемо.

Здесь только один sType поле. Так как же два расширения могут расширять один и тот же API новыми значениями? Точно так же, как старое расширение могло бы работать вместе с новыми версиями Vulkan, которое само использует другую структуру данных, идентифицированную sType,

С pNextУ вас нет этой проблемы. Каждая структура данных расширения будет иметь не только свои внутренние sType поле, но оно, несомненно, также будет иметь свои собственные pNext поле. Таким образом, несколько расширений могут расширять одни и те же структуры данных.

sType это не нужно, потому что это будет изменено только в более высоких версиях Vulkan.

Другие вопросы по тегам