如何在android ndk中使用GraphicBuffer

我问这是在如何提高在android中的opengl es显示性能我的问题的答案。 我试图构build与ndk-r9d一起使用GraphicBuffer的代码。 但是这是说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); 

我能做些什么来让它运行……

提前致谢..

Solutions Collecting From Web of "如何在android ndk中使用GraphicBuffer"

我现在也在处理这个问题。

许多博客说,需要一个Android源代码副本与您的项目链接。 我相信在运行时从libui.so获得函数是更优雅的,这是Aleksandar Stojiljkovic提到的“替代方法”。

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

不幸的是,它从这里被删除,但你可以在那里得到一些答案: http : //community.arm.com/groups/arm-mali-graphics/blog/2013/10/24/eglimage–updating-a-texture-没有抄写,记忆下的android

简而言之,您将需要构buildAndroid平台代码,并创build将包装访问GraphicBuffer和所需的API并构buildAndroid代码库的库。 正如其他人所说,你需要维护图书馆…

这是一种替代方法: https : //code.google.com/p/chromium/codesearch#chromium/src/third_party/deqp/src/framework/platform/android/tcuAndroidInternals.cpp&l=167

GraphicBuffer在android的命名空间中。

要么添加:

使用命名空间android;

或者用android :: GraphicBuffer引用GraphicBuffer