渲染图像打开GLES android ndk

时间:2017-06-13 15:10:24

标签: opengl-es android-ndk

我需要通过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;
    }

1 个答案:

答案 0 :(得分:0)

您的OpenGL代码完全错误,存在许多基本错误;你似乎没有任何几何,着色器程序或任何绘制调用。对glTexImage2D的调用只是将数据上传到纹理对象(您没有),它不会向屏幕呈现任何内容......

首先使用一些Android SDK(如果你想要Java)或Android NDK(如果你想要本机代码)来学习基础知识OpenGL ES教程并首先在那里进行纹理处理。学习基础知识,并担心将NDK与Java交互作为第二步......