(Примечание: это из основной ветки, которая, как я полагаю, рад-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
Есть ли для этого какая-то очевидная причина, по которой мне не хватает, или способы заставить ее работать так, как ожидалось?
Да мастер ветка рада 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, и теперь он должен сообщать правильную группу перечислений.
Самый полезный комментарий
@MinusGix, так как Khronos MR был объединен, я обновил парсер соответственно в glad и glad2, и теперь он должен сообщать правильную группу перечислений.