2014-12-26 2 views
0

C++에서 NDK를 사용하여 OpenGL ES 2.0 게임을 구현하려고합니다. 내 테스트 장치는 ASUS Zenphone 5였습니다. 저는 OpenGL ES 2를 기반으로 한 게임을 매우 부드럽게 재생할 수 있고, androind NDK의 helloGl2 샘플을 실행할 수 있으므로 OpenGL ES 2.0을 지원한다고 확신합니다.Android NDK C++ OpenGL ES 2 컨텍스트가 잘못된 디스플레이를 나타냅니다.

glCreateShader log cat을 호출하면 "unimplemented api"라는 오류가 나타났습니다. 기본적으로 응용 프로그램이 OpenGL ES 1 컨텍스트를 사용하고 있었기 때문에 조금만 알아 냈습니다. 내가 은하에 그것을 테스트 할 때이

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

그러나 다른 오류를 준

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

이제

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

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

에 :

은 그래서에서 EGL 컨텍스트 생성 코드를 수정 s3 (GT-I9100) 잘못된 디스플레이 오류가 없었지만 치명적인 신호 SI가 표시된 glCreateShader를 호출 할 때 응용 프로그램이 충돌했습니다. GSEV

여기 무슨 일이 일어나나요?

+0

어떻게'display' 값을 설정하고 있습니까? 'config' 선택 코드를 보여주고 싶을 수도 있습니다. 오류가 실제로 문제가 디스플레이에 있다고 제안하더라도. –

+0

예, 유감스럽게도 마지막 문제가 eglchooseconfig 속성 (EGL_RENDERABLE_TYPE, EGL_OPENGL_ES2_BIT)에있는 것으로 밝혀 졌기 때문에 표시 코드를 게시해야한다는 것을 알았습니다. 어쨌든 입력에 감사드립니다. – Allahjane

답변

2

ES 2 컨텍스트를 만드는 경우 EGL 구성의 속성에 EGL_RENDERABLE_TYPE, EGL_OPENGL_ES2_BIT을 포함해야하므로 EGL_CONTEXT_CLIENT_VERSION, 2을 컨텍스트 속성에 추가하는 것으로 충분하지 않습니다.

또한 libGLESv2.so (-lGLESv2 : LOCAL_LDLIBS)에 연결되어 있는지 확인하고 실수로 libGLESv1_CM.so에 연결하지 않았는지 확인하십시오. (두 프로세스를 같은 프로세스에서 사용하는 것은 약간의 속임수가 필요합니다.)

+0

Oye awesome man! 그 트릭을 했어! EGL_RENDERABLE_TYPE, EGL_OPENGL_ES2_BIT 및 bam을 모두 추가해야했습니다. – Allahjane

+0

GLESv2에 대한 링크가 있지만 GLES 1 API 만 사용하고 (GLES 1 컨텍스트를 설정하기 위해 EGL을 사용합니다.) 어떤 예가 될까요? NDES 샘플 디렉토리에서 GLESv2를 찾았을 때 올바르게 레이블이 지정되지 않은 예제를 찾지 못했습니다. – mstorsjo

+0

NDK에서'native-activity' 샘플을 의미한다면, GLESv1_CM에만 연결됩니다. – mstorsjo

관련 문제