Wie zu verwenden GraphicBuffer im android-ndk

Bitte ich dies mit Hinweis auf eine Antwort für meine Frage bei Wie zur Verbesserung der opengl-es-anzeigen-Leistung in android . Ich war versucht, um den code zu erstellen, die verwendet GraphicBuffer mit ndk-r9d. aber Es ist zu sagen GraphicBuffer ist nicht deklariert, in diesem Umfang. Die gleichen Kommentare für eglCreateImageKHR und glEGLImageTargetTexture2DOES.

Habe ich Hinzugefügt EGL/eglext.h und GLES2/gl2ext.h . Ich habe versucht, um ui/GraphicBuffer.h aber es ist nicht Einnahme es. Gibt es eine andere header-Datei Hinzugefügt werden ?

Den unten angegebenen code habe ich Hinzugefügt, um zu vermeiden, die Verwendung von 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);

Was kann ich tun, um es auszuführen......

Vielen Dank im Voraus..

InformationsquelleAutor Kevin K | 2014-04-24
Schreibe einen Kommentar