Glad: Определения без суффиксов не следует определять для OpenGL ES

Созданный на 18 июн. 2020  ·  8Комментарии  ·  Источник: Dav1dde/glad

Я заметил, что в моих сгенерированных файлах (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 ".

bug glad1 glad2

Все 8 Комментарий

Это нетривиально исправить в 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

Была ли эта страница полезной?
0 / 5 - 0 рейтинги