我需要通过Android本机代码中的Open GLES渲染图像。图像的字节数组在java代码中生成,并作为参数发送到本机代码。但是,通过本机代码呈现始终显示黑屏。本机代码是:
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 :(得分:0)
您的OpenGL代码完全错误,存在许多基本错误;你似乎没有任何几何,着色器程序或任何绘制调用。对glTexImage2D
的调用只是将数据上传到纹理对象(您没有),它不会向屏幕呈现任何内容......
首先使用一些Android SDK(如果你想要Java)或Android NDK(如果你想要本机代码)来学习基础知识OpenGL ES教程并首先在那里进行纹理处理。学习基础知识,并担心将NDK与Java交互作为第二步......