Я пытаюсь реализовать игру 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
Что здесь происходит?
Если вы создаете контекст ES 2, вам также необходимо включить EGL_RENDERABLE_TYPE, EGL_OPENGL_ES2_BIT
в атрибуты для конфигурации EGL, этого недостаточно для добавления EGL_CONTEXT_CLIENT_VERSION, 2
в атрибуты контекста.
Кроме того, убедитесь, что вы связываетесь с libGLESv2.so(-lGLESv2
в LOCAL_LDLIBS
) и убедитесь, что вы случайно не связываетесь с libGLESv1_CM.so. (Использование их обоих в том же процессе требует немного дополнительных обманов.)
display
? Вы также можете показать код выбораconfig
. Даже при том, что ошибка действительно предполагает, что проблема с дисплеем.