gl_PointSize не работает должным образом на Nvidia Shield

Я заметил, что не могу изменить размер точек в вершинном шейдере с помощью gl_PointSize в моем приложении OpenGL ES 3.0 для Android. В конце концов я обнаружил, что должен был включить GL_PROGRAM_POINT_SIZE, хотя это значение перечисления не определено в заголовочном файле gl. В итоге я добавил glEnable(0x8642);

Теперь все работает нормально, но это ошибка? Или есть причина, по которой мне нужно включить это. Я знаю, что мне нужно сделать это в контексте совместимости в Windows, но я думал, что на Android я буду работать с чистым контекстом ES 3.0. Может быть, мой контекст GL был настроен неправильно?


person Martin    schedule 22.09.2015    source источник


Ответы (1)


Это похоже на ошибку. Режим, который включается с помощью GL_PROGRAM_POINT_SIZE в полной версии OpenGL (и отключен по умолчанию), всегда активен в OpenGL ES, и его нельзя отключить.

Я считаю, что некоторые из новых устройств Shield также полностью поддерживают OpenGL. Я подозреваю, что их базовый драйвер является общим, и настройка этого состояния не регулируется, когда он работает с ES API.

person Reto Koradi    schedule 23.09.2015
comment
Спасибо за ваш комментарий! Итак, вчера я смог протестировать свое приложение на другом устройстве (HTC M8) и получил сообщение об ошибке, которое означало, что у меня нет контекста GLES 3. Итак, я проверил свой код и сравнил его с некоторым примером кода, и оказалось, что я создавал свой контекст, не предоставляя список атрибутов, чтобы указать, что мне нужен контекст ES 3. Поэтому я подумал, что экран по умолчанию просто использует контекст ES 3, но после прочтения вашего комментария становится понятно, что экран имеет полную реализацию OpenGL, и по умолчанию он соответствует этому. Спасибо за помощь! - person Martin; 23.09.2015
comment
И, кстати, я снова протестировал его с удаленным glEnable(GL_PROGRAM_POINT_SIZE), и теперь частицы имеют правильный размер. - person Martin; 23.09.2015