2017-06-13 6 views
0

Open GLESを通してアンドロイドネイティブコードでイメージをレンダリングする必要があります。イメージのバイト配列はJavaコードで生成され、パラメータとしてネイティブコードに送信されます。ネイティブコードを使用してレンダリングすると常に黒い画面が表示されます。ネイティブコードは次のとおりです。レンダリングイメージを開くGLES android ndk

JNIEXPORT int JNICALL 
    Java_com_example_hellojni_MyView_renderByEgl(JNIEnv *env, jobject instance, jobject surface, 
               jint width, jint height, jbyteArray byteArray_) { 
     EGLDisplay display; 
     EGLConfig config; 
     EGLContext context; 
     EGLSurface eglSurface; 
     ANativeWindow* pWindow = ANativeWindow_fromSurface(env, surface); 
     EGLint num_config; 
     display = eglGetDisplay(EGL_DEFAULT_DISPLAY); 
     eglInitialize(display, NULL, NULL); 
     eglBindAPI(EGL_OPENGL_ES_API); 
     eglChooseConfig(display, attribute_list, &config, 1, &num_config); 
     context = eglCreateContext(display, config, EGL_NO_CONTEXT, NULL); 
     eglSurface = eglCreateWindowSurface(display, config, pWindow, NULL); 
     eglMakeCurrent(display, eglSurface, eglSurface, context); 
     jboolean isCopy; 
     unsigned char * pCData = (unsigned char*)(*env)->GetByteArrayElements(env, byteArray_, &isCopy); 
     if(isCopy) 
     { 
      (*env)-> ReleaseByteArrayElements(env, byteArray_, pCData, JNI_ABORT); 
     } 
     glTexImage2D(GL_TEXTURE_2D,0,10,10,width,height,GL_RGBA,GL_UNSIGNED_BYTE,pCData); 
    glFlush(); 
     eglSwapBuffers(display, eglSurface); 
     sleep(10); 
     return EXIT_SUCCESS; 
    } 

答えて

0

OpenGLコードは多くの根本的な間違いで完全に間違っています。ジオメトリ、シェイダープログラム、または描画呼び出しをしていないようです。 glTexImage2Dを呼び出すと、テクスチャオブジェクトにデータがアップロードされるだけで、画面に何も描画されません。

Android SDKの一部を使用して基本を習得することから始めます。 Javaが必要です)またはAndroid NDK(ネイティブコードが必要な場合)OpenGL ESチュートリアルを使用して、まずテクスチャリングを行ってください。基本を学び、2番目のステップとしてNDKとJavaの相互作用について心配してください。

+0

私はイメージをレンダリングしたいだけです.EGLSurfaceにバッファを書き込む方法はありますか? –