2015-09-22 2 views
0

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

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

ответ

1

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

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

+0

Спасибо за ваш комментарий! Поэтому вчера я смог протестировать свое приложение на другом устройстве (HTC M8), и я получал ошибку, которая подразумевала, что у меня не было контекста GLES 3. Поэтому я проверил свой код и сравнил его с некоторым примером кода, и оказалось, что я создаю свой контекст, не предоставляя список атрибутов, чтобы указать, что мне нужен контекст ES 3. Итак, я думал, что экран по умолчанию не соответствует контексту ES 3, но после прочтения вашего комментария имеет смысл, что Shield имеет полную реализацию OpenGL и по умолчанию это соответствует. Спасибо за помощь! – Martin

+0

И, кстати, я проверил его снова с помощью glEnable (GL_PROGRAM_POINT_SIZE), и теперь частицы правильного размера. – Martin

Смежные вопросы