diff --git a/tools/emulator/opengl/host/libs/libOpenglRender/RenderControl.cpp b/tools/emulator/opengl/host/libs/libOpenglRender/RenderControl.cpp index 9c973e9f6..c5097a4ab 100644 --- a/tools/emulator/opengl/host/libs/libOpenglRender/RenderControl.cpp +++ b/tools/emulator/opengl/host/libs/libOpenglRender/RenderControl.cpp @@ -224,13 +224,14 @@ static void rcDestroyColorBuffer(uint32_t colorbuffer) fb->DestroyColorBuffer( colorbuffer ); } -static void rcFlushWindowColorBuffer(uint32_t windowSurface) +static int rcFlushWindowColorBuffer(uint32_t windowSurface) { FrameBuffer *fb = FrameBuffer::getFB(); if (!fb) { - return; + return -1; } fb->flushWindowSurfaceColorBuffer(windowSurface); + return 0; } static void rcSetWindowColorBuffer(uint32_t windowSurface, @@ -296,17 +297,18 @@ static void rcReadColorBuffer(uint32_t colorBuffer, // XXX: TBD - should be implemented } -static void rcUpdateColorBuffer(uint32_t colorBuffer, +static int rcUpdateColorBuffer(uint32_t colorBuffer, GLint x, GLint y, GLint width, GLint height, GLenum format, GLenum type, void* pixels) { FrameBuffer *fb = FrameBuffer::getFB(); if (!fb) { - return; + return -1; } fb->updateColorBuffer(colorBuffer, x, y, width, height, format, type, pixels); + return 0; } void initRenderControlContext(renderControl_decoder_context_t *dec) diff --git a/tools/emulator/opengl/system/egl/egl.cpp b/tools/emulator/opengl/system/egl/egl.cpp index 698aa842c..50fb2c56b 100644 --- a/tools/emulator/opengl/system/egl/egl.cpp +++ b/tools/emulator/opengl/system/egl/egl.cpp @@ -325,8 +325,12 @@ EGLBoolean egl_window_surface_t::connect() if (nativeWindow->dequeueBuffer(nativeWindow, &buffer) != NO_ERROR) { setErrorReturn(EGL_BAD_ALLOC, EGL_FALSE); } + buffer->common.incRef(&buffer->common); + // lock the buffer + nativeWindow->lockBuffer(nativeWindow, buffer); + DEFINE_AND_VALIDATE_HOST_CONNECTION(EGL_FALSE); rcEnc->rcSetWindowColorBuffer(rcEnc, rcSurface, ((cb_handle_t *)(buffer->handle))->hostHandle); @@ -360,6 +364,9 @@ EGLBoolean egl_window_surface_t::swapBuffers() setErrorReturn(EGL_BAD_ALLOC, EGL_FALSE); } + // lock the buffer + nativeWindow->lockBuffer(nativeWindow, buffer); + rcEnc->rcSetWindowColorBuffer(rcEnc, rcSurface, ((cb_handle_t *)(buffer->handle))->hostHandle); return EGL_TRUE; diff --git a/tools/emulator/opengl/system/renderControl_enc/renderControl.in b/tools/emulator/opengl/system/renderControl_enc/renderControl.in index 37a8e9013..9ee3d3f1e 100644 --- a/tools/emulator/opengl/system/renderControl_enc/renderControl.in +++ b/tools/emulator/opengl/system/renderControl_enc/renderControl.in @@ -13,11 +13,11 @@ GL_ENTRY(void, rcDestroyWindowSurface, uint32_t windowSurface) GL_ENTRY(uint32_t, rcCreateColorBuffer, uint32_t width, uint32_t height, GLenum internalFormat) GL_ENTRY(void, rcDestroyColorBuffer, uint32_t colorbuffer) GL_ENTRY(void, rcSetWindowColorBuffer, uint32_t windowSurface, uint32_t colorBuffer) -GL_ENTRY(void, rcFlushWindowColorBuffer, uint32_t windowSurface) +GL_ENTRY(int, rcFlushWindowColorBuffer, uint32_t windowSurface) GL_ENTRY(EGLint, rcMakeCurrent, uint32_t context, uint32_t drawSurf, uint32_t readSurf) GL_ENTRY(void, rcFBPost, uint32_t colorBuffer) GL_ENTRY(void, rcFBSetSwapInterval, EGLint interval) GL_ENTRY(void, rcBindTexture, uint32_t colorBuffer) GL_ENTRY(EGLint, rcColorBufferCacheFlush, uint32_t colorbuffer, EGLint postCount,int forRead) GL_ENTRY(void, rcReadColorBuffer, uint32_t colorbuffer, GLint x, GLint y, GLint width, GLint height, GLenum format, GLenum type, void *pixels) -GL_ENTRY(void, rcUpdateColorBuffer, uint32_t colorbuffer, GLint x, GLint y, GLint width, GLint height, GLenum format, GLenum type, void *pixels) +GL_ENTRY(int, rcUpdateColorBuffer, uint32_t colorbuffer, GLint x, GLint y, GLint width, GLint height, GLenum format, GLenum type, void *pixels)