Я заметил, что в моих сгенерированных файлах (glad v1) я получаю как суффиксированные (например, glObjectLabelKHR), так и несуффиксированные (например, glObjectLabel) версии многих функций и типов.
Как минимум, это пустая трата памяти и загрузка повторяющихся указателей функций в ЦП, но я считаю, что это фактически нарушает спецификацию. В определении KHR_debug (https://www.khronos.org/registry/OpenGL/extensions/KHR/KHR_debug.txt) говорится следующее:
В этой спецификации расширения используются имена без суффиксов для новых точек входа, типов и токенов. Это верно для реализаций против OpenGL. Однако при реализации в контексте OpenGL ES всем новым точкам входа, типам и токенам присваиваются суффиксы KHR.
плюс подобные предложения повсюду.
В идеале я бы хотел, чтобы генератор игнорировал версии без суффиксов. Это возможно?
Изменить: чтобы уточнить, эти функции не являются частью спецификации OpenGL ES 3.1, которую я запрашиваю у рад. Моя командная строка: "python -m glad --out-path. --Profile =" core "--api =" gles2 = 3.1 "--generator =" c "--spec =" gl "--extensions = "GL_KHR_debug" - воспроизводимый --no-loader ".
Это нетривиально исправить в glad1. Решение о том, какие функции / команды включить в расширение, принимается до того, как станет известно, какой API сгенерировать.
Glad2 изначально сделал это правильно, но с Vulkan 1.1. теперь требуется разрешить псевдонимы, а для glObjectLabelKHR
задан псевдоним glObjectLabel
. Причина, по которой требуется разрешать псевдонимы, заключается в том, что спецификация стала странной с продвижением символов расширения vk 1.0 в ядро vk 1.1.
Это определенно ошибка в обеих версиях :(.
Исправлено в glad2, на самом деле не связано с описанной выше проблемой, но относительно похоже.
Я не знаю, хочу ли я исправить это в glad1, то, как выполняются инструкции require
, совершенно неверно.
Я рад (это не каламбур), это было быстрое исправление! Полагаю, это означает, что мне придется попробовать glad v2 сейчас ...
Я нахожу спецификацию довольно запутанной относительно того, должен ли суффикс _KHR применяться ко всем токенам, используемым расширением, или только к новым. Я предполагаю, что только те значения, которые указаны в этой таблице, из документа расширения (другие уже должны существовать):
BUFFER 0x82E0
SHADER 0x82E1
PROGRAM 0x82E2
VERTEX_ARRAY
QUERY 0x82E3
PROGRAM_PIPELINE 0x82E4
TRANSFORM_FEEDBACK
SAMPLER 0x82E6
TEXTURE
RENDERBUFFER
FRAMEBUFFER
Я получаю GL_BUFFER_KHR
(а не GL_BUFFER
), как ожидалось. Я получаю GL_FRAMEBUFFER
(а не GL_FRAMEBUFFER_KHR
), как я думаю . Однако я получаю GL_VERTEX_ARRAY_KHR
(а не GL_VERTEX_ARRAY
), чего я не понимаю.
Любое понимание?
GL_FRAMEBUFFER
является частью gles2 2.0.GL_BUFFER_KHR
GL_KHR_debug
взят из GL_VERTEX_ARRAY_KHR
GL_KHR_debug
взят из GL_VERTEX_ARRAY
- это только gles2 3.2, но вы генерируете 3.1 <extension name="GL_KHR_debug" supported="gl|glcore|gles1|gles2">
<require api="gl" comment="KHR extensions *mandate* suffixes for ES, unlike for GL">
<enum name="GL_DEBUG_OUTPUT_SYNCHRONOUS"/>
<enum name="GL_DEBUG_NEXT_LOGGED_MESSAGE_LENGTH"/>
<enum name="GL_DEBUG_CALLBACK_FUNCTION"/>
<enum name="GL_DEBUG_CALLBACK_USER_PARAM"/>
<enum name="GL_DEBUG_SOURCE_API"/>
<enum name="GL_DEBUG_SOURCE_WINDOW_SYSTEM"/>
<enum name="GL_DEBUG_SOURCE_SHADER_COMPILER"/>
<enum name="GL_DEBUG_SOURCE_THIRD_PARTY"/>
<enum name="GL_DEBUG_SOURCE_APPLICATION"/>
<enum name="GL_DEBUG_SOURCE_OTHER"/>
<enum name="GL_DEBUG_TYPE_ERROR"/>
<enum name="GL_DEBUG_TYPE_DEPRECATED_BEHAVIOR"/>
<enum name="GL_DEBUG_TYPE_UNDEFINED_BEHAVIOR"/>
<enum name="GL_DEBUG_TYPE_PORTABILITY"/>
<enum name="GL_DEBUG_TYPE_PERFORMANCE"/>
<enum name="GL_DEBUG_TYPE_OTHER"/>
<enum name="GL_DEBUG_TYPE_MARKER"/>
<enum name="GL_DEBUG_TYPE_PUSH_GROUP"/>
<enum name="GL_DEBUG_TYPE_POP_GROUP"/>
<enum name="GL_DEBUG_SEVERITY_NOTIFICATION"/>
<enum name="GL_MAX_DEBUG_GROUP_STACK_DEPTH"/>
<enum name="GL_DEBUG_GROUP_STACK_DEPTH"/>
<enum name="GL_BUFFER"/>
<enum name="GL_SHADER"/>
<enum name="GL_PROGRAM"/>
<enum name="GL_VERTEX_ARRAY"/>
<enum name="GL_QUERY"/>
<enum name="GL_PROGRAM_PIPELINE"/>
<enum name="GL_SAMPLER"/>
<enum name="GL_MAX_LABEL_LENGTH"/>
<enum name="GL_MAX_DEBUG_MESSAGE_LENGTH"/>
<enum name="GL_MAX_DEBUG_LOGGED_MESSAGES"/>
<enum name="GL_DEBUG_LOGGED_MESSAGES"/>
<enum name="GL_DEBUG_SEVERITY_HIGH"/>
<enum name="GL_DEBUG_SEVERITY_MEDIUM"/>
<enum name="GL_DEBUG_SEVERITY_LOW"/>
<enum name="GL_DEBUG_OUTPUT"/>
<enum name="GL_CONTEXT_FLAG_DEBUG_BIT"/>
<enum name="GL_STACK_OVERFLOW"/>
<enum name="GL_STACK_UNDERFLOW"/>
<command name="glDebugMessageControl"/>
<command name="glDebugMessageInsert"/>
<command name="glDebugMessageCallback"/>
<command name="glGetDebugMessageLog"/>
<command name="glPushDebugGroup"/>
<command name="glPopDebugGroup"/>
<command name="glObjectLabel"/>
<command name="glGetObjectLabel"/>
<command name="glObjectPtrLabel"/>
<command name="glGetObjectPtrLabel"/>
<command name="glGetPointerv"/>
</require>
<require api="gles2">
<enum name="GL_DEBUG_OUTPUT_SYNCHRONOUS_KHR"/>
<enum name="GL_DEBUG_NEXT_LOGGED_MESSAGE_LENGTH_KHR"/>
<enum name="GL_DEBUG_CALLBACK_FUNCTION_KHR"/>
<enum name="GL_DEBUG_CALLBACK_USER_PARAM_KHR"/>
<enum name="GL_DEBUG_SOURCE_API_KHR"/>
<enum name="GL_DEBUG_SOURCE_WINDOW_SYSTEM_KHR"/>
<enum name="GL_DEBUG_SOURCE_SHADER_COMPILER_KHR"/>
<enum name="GL_DEBUG_SOURCE_THIRD_PARTY_KHR"/>
<enum name="GL_DEBUG_SOURCE_APPLICATION_KHR"/>
<enum name="GL_DEBUG_SOURCE_OTHER_KHR"/>
<enum name="GL_DEBUG_TYPE_ERROR_KHR"/>
<enum name="GL_DEBUG_TYPE_DEPRECATED_BEHAVIOR_KHR"/>
<enum name="GL_DEBUG_TYPE_UNDEFINED_BEHAVIOR_KHR"/>
<enum name="GL_DEBUG_TYPE_PORTABILITY_KHR"/>
<enum name="GL_DEBUG_TYPE_PERFORMANCE_KHR"/>
<enum name="GL_DEBUG_TYPE_OTHER_KHR"/>
<enum name="GL_DEBUG_TYPE_MARKER_KHR"/>
<enum name="GL_DEBUG_TYPE_PUSH_GROUP_KHR"/>
<enum name="GL_DEBUG_TYPE_POP_GROUP_KHR"/>
<enum name="GL_DEBUG_SEVERITY_NOTIFICATION_KHR"/>
<enum name="GL_MAX_DEBUG_GROUP_STACK_DEPTH_KHR"/>
<enum name="GL_DEBUG_GROUP_STACK_DEPTH_KHR"/>
<enum name="GL_BUFFER_KHR"/>
<enum name="GL_SHADER_KHR"/>
<enum name="GL_PROGRAM_KHR"/>
<enum name="GL_VERTEX_ARRAY_KHR"/>
<enum name="GL_QUERY_KHR"/>
<enum name="GL_PROGRAM_PIPELINE_KHR"/>
<enum name="GL_SAMPLER_KHR"/>
<enum name="GL_MAX_LABEL_LENGTH_KHR"/>
<enum name="GL_MAX_DEBUG_MESSAGE_LENGTH_KHR"/>
<enum name="GL_MAX_DEBUG_LOGGED_MESSAGES_KHR"/>
<enum name="GL_DEBUG_LOGGED_MESSAGES_KHR"/>
<enum name="GL_DEBUG_SEVERITY_HIGH_KHR"/>
<enum name="GL_DEBUG_SEVERITY_MEDIUM_KHR"/>
<enum name="GL_DEBUG_SEVERITY_LOW_KHR"/>
<enum name="GL_DEBUG_OUTPUT_KHR"/>
<enum name="GL_CONTEXT_FLAG_DEBUG_BIT_KHR"/>
<enum name="GL_STACK_OVERFLOW_KHR"/>
<enum name="GL_STACK_UNDERFLOW_KHR"/>
<command name="glDebugMessageControlKHR"/>
<command name="glDebugMessageInsertKHR"/>
<command name="glDebugMessageCallbackKHR"/>
<command name="glGetDebugMessageLogKHR"/>
<command name="glPushDebugGroupKHR"/>
<command name="glPopDebugGroupKHR"/>
<command name="glObjectLabelKHR"/>
<command name="glGetObjectLabelKHR"/>
<command name="glObjectPtrLabelKHR"/>
<command name="glGetObjectPtrLabelKHR"/>
<command name="glGetPointervKHR"/>
</require>
<require api="gl" profile="compatibility">
<enum name="GL_DISPLAY_LIST"/>
</require>
</extension>
Источник: https://raw.githubusercontent.com/KhronosGroup/OpenGL-Registry/master/xml/gl.xml
Большое тебе спасибо. В этом есть смысл; Я был сбит с толку, потому что не смог найти, где был определен GL_VERTEX_ARRAY.
Счастлив, что закрыл эту проблему, а мы оставим ее нерешенной в glad1?
Да, если подумать, я не буду исправлять это в рад1. Да, это ошибка, но она генерирует слишком много символов, поэтому в итоге «просто» раздражает.
Спасибо за отчет!
PS: Возможно, вы захотите проверить последний коммит от glad2, я создал слишком много новых строк.
Спасибо за быстрое исправление!
PS: Возможно, вы захотите проверить последний коммит от glad2, я создал слишком много новых строк.
Я заметил = P