Безопасно ли использовать константы более высокой версии OpenGL, которые не поддерживаются драйвером?
Например, я использую GL_LUMINANCE_ALPHA для переноса двухкомпонентных данных в текстуру. Кто-то сказал мне, что некоторые внутренние константы формата, такие как GL_LUMINACE_ALPHA, не поддерживаются в OpenGL 3.0(может быть 4.0?) Или выше, поэтому используйте GL_RG или GL_RG8 и т. Д.
Однако моя целевая версия OpenGL - 2.0 или выше, а спецификация OpenGL 2.0 не содержит GL_RG / GL_RG8. В этом случае, я думаю, есть три возможности:
- Используйте GL_RG / GL_RG8, если программа может работать хорошо даже на устройствах, которые поддерживают только OpenGL 2.0.
- Сохраняйте старые константы, если программа может хорошо работать с устройствами, версия OpenGL которых настолько высока, что старые константы не рекомендуются.
- Определите версию OpenGL во время выполнения и выберите константы для каждой версии.
Что мне выбрать? Я не хочу брать 3., если только мне это не нужно, потому что это усложняет и усложняет ситуацию.
1 ответ
Нет, использовать токены OpenGL, о которых водитель ничего не знает, небезопасно. К счастью, подавляющее большинство вызовов API просто поднимут GL_INVALID_ENUM
ошибка, и операция сорвется на ранней стадии, прежде чем у нее появится шанс все испортить.
Решая ваш GL_LUMINANCE_ALPHA
Дилемма займет гораздо больше, чем просто обмен токеном GL_RG8
, Вам нужно будет либо использовать текстуры, либо цвета в вашем шейдере, чтобы сделать так, чтобы цвет вашей текстуры был (R, R, R, G).
Решите, на какую версию OpenGL вы нацеливаетесь ранее, или напишите отдельные пути кода. Но это никогда не будет так просто, как переключение значений enum во время выполнения.