2014-12-17 8 views
1

나는 glTexImage2D, 모두 괜찮를 사용하여 내가 모든 터치 이벤트에 새로운 이미지를 그릴 onDrawFrame를 사용하는 렌더러에 GLSurfaceView.Renderer, 를 사용 액티비티가 있지만 변경할 때 이미지가 화면을 onDrawFrame 약 1/2 초 간 누구든지이 문제를 해결할 수 있습니까?의 OpenGL ES, onDrawFrame 성능

활동 :

onCreate(){.. 
    glSurfaceView.setRenderer(renderer); 

....

private Renderer renderer = new Renderer() { 

...

렌더러 :

onSurfaceCreated(){.. 
GLUtils.texImage2D(GLES20.GL_TEXTURE_2D, 0, bitmap, 0); 

렌더러 :

onDrawFrame(){.. 
if(mytoucheventFired){ 
GLUtils.texImage2D(GLES20.GL_TEXTURE_2D, 0, anotherBitmap, 0); 
} 
+0

방법 큰 텍스처/비트 맵입니까? 두 번째 비트 맵 (anotherBitmap)이 이미 미리로드되었거나'onDrawFrame() '에서도 발생하고 있습니까? –

답변

0

네이티브 코드의 텍스처에 이미지를로드하면 즉, NDK를 사용하고 glTexImage2D를 호출하면 도움이 될 수 있습니다. GLUtils.texImage2D는 자바 비트 맵을 네이티브 코드에서 피하거나 가속 할 수있는 OpenGL 텍스처로 변환하기 위해 픽셀 당 작업을 추가로 수행 할 수 있습니다.

glTexImage2D는 전통적으로 빠른 작업이 아닙니다. 잔인 함에도 불구하고 OpenGL의 영역을 벗어나려고한다면 기본 텍스처 데이터에 대한 주소를 가져 와서 직접적으로로드하여 glTexImage2D를 능가 할 수 있습니다.

당신이해야하는 주요 기능 중 일부

은 다음과 같습니다 : 안드로이드 (다시 네이티브 코드에서)에서 당신은 EGL_KHR_image_base라는 EGL 확장을 사용하여 주소를 얻을 수

EGLImageKHR eglCreateImageKHR(
         EGLDisplay dpy, 
         EGLContext ctx, 
         EGLenum target, 
         EGLClientBuffer buffer, 
         const EGLint *attrib_list) 

EGLBoolean eglDestroyImageKHR(
         EGLDisplay dpy, 
         EGLImageKHR image) 

그리고

void glEGLImageTargetTexture2DOES(
         GLenum target, 
         GLeglImageOES image)