Glad: Не у всех Enum есть группа

Созданный на 11 янв. 2020  ·  6Комментарии  ·  Источник: Dav1dde/glad

(Примечание: это из основной ветки, которая, как я полагаю, рад-1.)
В настоящее время я пытаюсь написать генератор C ++ для Glad (больше в соответствии с обычными способами написания на C ++, такими как использование enum class name : underlying type {} а не много-много #define s).

Одна вещь, которую я заметил при изменении CPPGenerator(Generator) (по большей части, это прямая копия генератора C) в методе write_enums заключается в том, что некоторые перечисления не имеют свойства группы, хотя кажется, что они должны.
Например: GL_POINTS - это запись внутри группы PrimitiveType , но ее значение группы не установлено ( None ), и поэтому я не могу правильно получить ее группу и сгенерируйте перечисление.
В настоящее время я использую: python3 -m glad --out-path=buildcpp --spec=gl --api="gl=,gles1=,gles2=" --generator=cpp
Чтобы показать это, с помощью обычного генератора C:
Измените обычный метод генератора C write_enums чтобы он имел:

if enum.name == "GL_POINTS":
    print('{} - {}'.format(enum.name, enum.group))

Внутри цикла for и при запуске он распечатает:

GL_POINTS - None
GL_POINTS - None
GL_POINTS - None

При запуске с python3 -m glad --out-path=buildc --spec=gl --api="gl=,gles1=,gles2=" --generator=c
Есть ли для этого какая-то очевидная причина, по которой мне не хватает, или способы заставить ее работать так, как ожидалось?

glad1 question

Самый полезный комментарий

@MinusGix, так как Khronos MR был объединен, я обновил парсер соответственно в glad и glad2, и теперь он должен сообщать правильную группу перечислений.

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

Да мастер ветка рада 1.

Причина в том, что в XML не определена группа:

    <enums namespace="GL" start="0x0000" end="0x7FFF" vendor="ARB" comment="Mostly OpenGL 1.0/1.1 enum assignments. Unused ranges should generally remain unused.">
        <enum value="0x0000" name="GL_POINTS"/>
        <enum value="0x0001" name="GL_LINES"/>

Сравнить с:

    <enums namespace="GL" start="0x8B30" end="0x8B3F" group="ShaderType" vendor="ARB">
        <enum value="0x8B30" name="GL_FRAGMENT_SHADER"/>
        <enum value="0x8B30" name="GL_FRAGMENT_SHADER_ARB"/>
        <enum value="0x8B31" name="GL_VERTEX_SHADER"/>
        <enum value="0x8B31" name="GL_VERTEX_SHADER_ARB"/>
            <unused start="0x8B32" end="0x8B3F" comment="For shader types"/>
    </enums>

Поэтому вам, вероятно, придется отказаться от этих перечислений до глобальных определений или других методов.

Я рекомендую вам изучить glad2, это может потребовать немного больше работы, так как это немного менее просто, но это то, что делает его лучше и проще в использовании в долгосрочной перспективе. Также помогает использование механизма шаблонов для генерации кода (jinja2). Кроме того, у него есть система плагинов, которая должна упростить подключение.

Несвязанные (или, возможно, частично связанные?) Вы видели: https://github.com/KhronosGroup/OpenGL-Registry/issues/335 и пр https://github.com/KhronosGroup/OpenGL-Registry/pull / 343

Нет, спасибо, что обратил на это мое внимание. Это кажется разумным изменением и должно быть совместимо с радостью. К сожалению, изначально меня не пометили.

Для этого мне придется обновить синтаксический анализатор, но это должно быть минимальное изменение и значительно поможет вашему делу.

Приношу свои извинения за то, что не пометил вас раньше, изначально я пометил только известные дескрипторы авторов GitHub в разделе «Языковые привязки» на веб-сайте Khronos.

Дайте мне знать, как вы будете работать с новой схемой после ее объединения. :)

@Perksey, не беспокойтесь, вы не найдете все инструменты, которые есть, используя спецификации, но это часть проблемы.

Ждем ваших изменений!

@MinusGix, так как Khronos MR был объединен, я обновил парсер соответственно в glad и glad2, и теперь он должен сообщать правильную группу перечислений.

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