我问这个问题是引用How to improve opengl es display performance in android上我的问题的答案。我试图构建将图形缓冲区与ndk-r9d结合使用的代码。但是这是因为在此范围内未声明GraphicBuffer。对eglCreateImageKHR和glEGLImageTargetTexture2DOES的注释相同。

我添加了EGL/eglext.h和GLES2/gl2ext.h。我试图包括ui/GraphicBuffer.h,但没有接受。是否有另一个头文件要添加?

为了避免使用glTexSubImage2D(),我添加了以下给出的代码。

  GraphicBuffer * pGraphicBuffer = new GraphicBuffer(frame_width, frame_height, PIXEL_FORMAT_RGB_565, GraphicBuffer::USAGE_SW_WRITE_OFTEN | GraphicBuffer::USAGE_HW_TEXTURE);

        // Lock the buffer to get a pointer
        unsigned char * pBitmap = NULL;
        pGraphicBuffer->lock(GraphicBuffer::USAGE_SW_WRITE_OFTEN,(void **)&pBitmap);

        // Write 2D image to pBitmap
        memcpy(pBitmap, frame_buffer, frame_width * frame_height * 3);

        // Unlock to allow OpenGL ES to use it
        pGraphicBuffer->unlock();

        EGLClientBuffer ClientBufferAddress = pGraphicBuffer->getNativeBuffer();
        EGLint SurfaceType = EGL_NATIVE_BUFFER_ANDROID;

        // Make an EGL Image at the same address of the native client buffer
        EGLDisplay eglDisplayHandle = eglGetDisplay(EGL_DEFAULT_DISPLAY);

        // Create an EGL Image with these attributes
        EGLint eglImageAttributes[] = {EGL_WIDTH, frame_width, EGL_HEIGHT, frame_height, EGL_MATCH_FORMAT_KHR,  EGL_FORMAT_RGB_565_KHR, EGL_IMAGE_PRESERVED_KHR, EGL_TRUE, EGL_NONE};

        EGLImageKHR eglImageHandle = eglCreateImageKHR(eglDisplayHandle, EGL_NO_CONTEXT, SurfaceType, ClientBufferAddress, eglImageAttributes);

        // Create a texture and bind it to GL_TEXTURE_2D
/*        EGLint TextureHandle;
        glGenTextures(1, &TextureHandle);
        glBindTexture(GL_TEXTURE_2D, TextureHandle);
*/
        // Attach the EGL Image to the same texture
        glEGLImageTargetTexture2DOES(GL_TEXTURE_2D, eglImageHandle);

我该怎么办才能使其运行……

提前致谢..

最佳答案

这些天,我也在努力解决这个问题。

许多博客表示,需要将Android源代码的副本与您的项目链接在一起。我相信在运行时从libui.so获取功能更为优雅,这是Aleksandar Stojiljkovic提到的“替代方法”。

我已经写了一个简单的库来做到这一点。 Here是。

10-06 03:40