Android NDK C ++ openGL ES 2 дает плохое отображение

0

Я пытаюсь реализовать игру openGL ES 2.0, используя NDK в C++. Мое тестовое устройство было ASUS Zenphone 5 Я уверен, что он поддерживает openGL ES 2.0, так как он может запускать игры на основе openGL ES 2 из игрового магазина очень плавно, а также образец helloGl2 в androind NDK.

Когда я вызвал glCreateShader журнал cat дал ошибку "вызванный unimplemented api" по ошибке в googling, я узнал, что это было потому, что приложение использовало контекст OpenGL ES 1 по умолчанию.

Поэтому я изменил код создания контекста EGL:

context = eglCreateContext(display, config, NULL, NULL);

в

EGLint contextAttrs[] = {
        EGL_CONTEXT_CLIENT_VERSION,2,EGL_NONE
};

context = eglCreateContext(display, config, NULL, contextAttrs);

Теперь это дало другую ошибку

 E/libEGL(12670): validate_display:257 error 3008 (EGL_BAD_DISPLAY)

Однако, когда я тестировал его на галактике s3 (GT-I9100), не было никакой ошибки BAD DISPLAY ERROR, но приложение разбилось при вызове glCreateShader с фатальным сигналом SIGSEV

Что здесь происходит?

  • 0
    Как вы устанавливаете значение display ? Вы также можете показать код выбора config . Даже при том, что ошибка действительно предполагает, что проблема с дисплеем.
  • 0
    Да, извините, я только что понял, что должен был также опубликовать код дисплея, поскольку последняя проблема оказывается в атрибутах eglchooseconfig (EGL_RENDERABLE_TYPE, EGL_OPENGL_ES2_BIT), в любом случае спасибо за ввод
Теги:
android-ndk
opengl-es

1 ответ

2
Лучший ответ

Если вы создаете контекст ES 2, вам также необходимо включить EGL_RENDERABLE_TYPE, EGL_OPENGL_ES2_BIT в атрибуты для конфигурации EGL, этого недостаточно для добавления EGL_CONTEXT_CLIENT_VERSION, 2 в атрибуты контекста.

Кроме того, убедитесь, что вы связываетесь с libGLESv2.so(-lGLESv2 в LOCAL_LDLIBS) и убедитесь, что вы случайно не связываетесь с libGLESv1_CM.so. (Использование их обоих в том же процессе требует немного дополнительных обманов.)

  • 0
    Ой офигенный человек! это сделало трюк! Я должен был добавить EGL_RENDERABLE_TYPE, EGL_OPENGL_ES2_BIT и заблокировать все ошибки, ушедшие
  • 0
    Какие это могут быть примеры, которые ссылаются на GLESv2, но используют только API GLES 1 (и я полагаю, что для настройки контекста GLES 1 используется EGL)? Когда я нашел GLESv2 в каталоге примеров NDK, я не нашел ни одного примера, который был бы помечен неправильно.
Показать ещё 1 комментарий

Ещё вопросы

Сообщество Overcoder
Наверх
Меню