【问题标题】:Render image Open GLES android ndk渲染图像 Open GLES android ndk
【发布时间】:2017-06-13 15:10:23
【问题描述】:

我需要在 Android 原生代码中通过 Open GLES 渲染图像。图像的字节数组在java代码中生成并作为参数发送到native代码。但是通过native代码渲染总是显示黑屏。本机代码为:

 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;
    }

【问题讨论】:

    标签: opengl-es android-ndk


    【解决方案1】:

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

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

    【讨论】:

    • 我只是想渲染一个图像。有没有办法将缓冲区写入 EGLSurface?
    猜你喜欢
    • 2014-01-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-09
    • 1970-01-01
    • 1970-01-01
    • 2016-01-22
    • 1970-01-01
    相关资源
    最近更新 更多