From d8b376d76def201b399383261c3b028b190fa815 Mon Sep 17 00:00:00 2001 From: Guy Zadickario Date: Wed, 27 Jul 2011 13:23:57 +0300 Subject: [PATCH] opengles emulator: fixed EGLContext and EGLSurface ref-counting. Handle EGL context and surfaces destrouction using ref counting pointer (SmartPtr) rather then maintaining a "markForDeletion" flag. This has required to re-arrange the ThreadInfo structure to be local to EGL rather then in the GLcommon area so that we will be able to place a ref-counted pointer to the current context in the TLS. That fixes the crash during exit of covgl conformance test. Change-Id: I6f0a2e49c6f21eb75b654cab4346c764715c449b --- .../host/libs/Translator/EGL/EglContext.cpp | 20 +- .../host/libs/Translator/EGL/EglContext.h | 8 +- .../host/libs/Translator/EGL/EglImp.cpp | 128 +++------ .../libs/Translator/EGL/EglPbufferSurface.h | 5 +- .../libs/Translator/EGL/EglPixmapSurface.cpp | 7 +- .../libs/Translator/EGL/EglPixmapSurface.h | 4 +- .../host/libs/Translator/EGL/EglSurface.cpp | 5 + .../host/libs/Translator/EGL/EglSurface.h | 29 +- .../libs/Translator/EGL/EglWindowSurface.cpp | 8 +- .../libs/Translator/EGL/EglWindowSurface.h | 4 +- .../host/libs/Translator/EGL/ThreadInfo.cpp | 4 +- .../{include/GLcommon => EGL}/ThreadInfo.h | 9 +- .../libs/Translator/GLES_CM/GLEScmImp.cpp | 111 ++++---- .../libs/Translator/GLES_V2/GLESv2Imp.cpp | 267 +++++++++--------- .../Translator/include/GLcommon/GLEScontext.h | 1 + .../Translator/include/GLcommon/GLESmacros.h | 52 ++-- .../include/GLcommon/TranslatorIfaces.h | 4 +- 17 files changed, 326 insertions(+), 340 deletions(-) rename tools/emulator/opengl/host/libs/Translator/{include/GLcommon => EGL}/ThreadInfo.h (84%) diff --git a/tools/emulator/opengl/host/libs/Translator/EGL/EglContext.cpp b/tools/emulator/opengl/host/libs/Translator/EGL/EglContext.cpp index 122316842..c2ea4a781 100644 --- a/tools/emulator/opengl/host/libs/Translator/EGL/EglContext.cpp +++ b/tools/emulator/opengl/host/libs/Translator/EGL/EglContext.cpp @@ -14,21 +14,26 @@ * limitations under the License. */ #include "EglContext.h" +#include "EglDisplay.h" +#include "EglGlobalInfo.h" +#include "EglOsApi.h" unsigned int EglContext::s_nextContextHndl = 0; +extern EglGlobalInfo* g_eglInfo; // defined in EglImp.cpp + bool EglContext::usingSurface(SurfacePtr surface) { return surface.Ptr() == m_read.Ptr() || surface.Ptr() == m_draw.Ptr(); } -EglContext::EglContext(EGLNativeContextType context,ContextPtr shared_context, +EglContext::EglContext(EglDisplay *dpy, EGLNativeContextType context,ContextPtr shared_context, EglConfig* config,GLEScontext* glesCtx,GLESVersion ver,ObjectNameManager* mngr): +m_dpy(dpy), m_native(context), m_config(config), m_glesContext(glesCtx), m_read(NULL), m_draw(NULL), -m_destroy(false), m_version(ver), m_mngr(mngr) { @@ -40,6 +45,17 @@ m_mngr(mngr) EglContext::~EglContext() { + + // + // remove the context in the underlying OS layer + // + EglOS::destroyContext(m_dpy->nativeType(),m_native); + + // + // call the client-api to remove the GLES context + // + g_eglInfo->getIface(version())->deleteGLESContext(m_glesContext); + if (m_mngr) { m_mngr->deleteShareGroup(m_native); diff --git a/tools/emulator/opengl/host/libs/Translator/EGL/EglContext.h b/tools/emulator/opengl/host/libs/Translator/EGL/EglContext.h index 1f5463151..e4917c68a 100644 --- a/tools/emulator/opengl/host/libs/Translator/EGL/EglContext.h +++ b/tools/emulator/opengl/host/libs/Translator/EGL/EglContext.h @@ -32,15 +32,15 @@ class EglContext; typedef SmartPtr ContextPtr; +class EglDisplay; + class EglContext { public: - EglContext(EGLNativeContextType context,ContextPtr shared_context,EglConfig* config,GLEScontext* glesCtx,GLESVersion ver,ObjectNameManager* mngr); + EglContext(EglDisplay *dpy, EGLNativeContextType context,ContextPtr shared_context,EglConfig* config,GLEScontext* glesCtx,GLESVersion ver,ObjectNameManager* mngr); bool usingSurface(SurfacePtr surface); EGLNativeContextType nativeType(){return m_native;}; - void markForDestruction(){m_destroy = true;} - bool destroy(){ return m_destroy;} bool getAttrib(EGLint attrib,EGLint* value); SurfacePtr read(){ return m_read;}; SurfacePtr draw(){ return m_draw;}; @@ -57,13 +57,13 @@ public: private: static unsigned int s_nextContextHndl; + EglDisplay *m_dpy; EGLNativeContextType m_native; EglConfig* m_config; GLEScontext* m_glesContext; ShareGroupPtr m_shareGroup; SurfacePtr m_read; SurfacePtr m_draw; - bool m_destroy; GLESVersion m_version; ObjectNameManager *m_mngr; unsigned int m_hndl; diff --git a/tools/emulator/opengl/host/libs/Translator/EGL/EglImp.cpp b/tools/emulator/opengl/host/libs/Translator/EGL/EglImp.cpp index 8b64b94a0..fd9779fb7 100644 --- a/tools/emulator/opengl/host/libs/Translator/EGL/EglImp.cpp +++ b/tools/emulator/opengl/host/libs/Translator/EGL/EglImp.cpp @@ -22,7 +22,7 @@ #include #include #include -#include +#include "ThreadInfo.h" #include #include @@ -44,13 +44,14 @@ EglImage *attachEGLImage(unsigned int imageId); void detachEGLImage(unsigned int imageId); +GLEScontext* getGLESContext(); #define tls_thread EglThreadInfo::get() EglGlobalInfo* g_eglInfo = EglGlobalInfo::getInstance(); static EGLiface s_eglIface = { - getThreadInfo : getThreadInfo, // implemented in ThreadInfo.cpp + getGLESContext : getGLESContext, eglAttachEGLImage:attachEGLImage, eglDetachEGLImage:detachEGLImage }; @@ -125,6 +126,12 @@ static int s_eglExtentionsSize = sizeof(s_eglExtentions) / VALIDATE_CONTEXT_RETURN(EGLContext,EGL_FALSE) +GLEScontext* getGLESContext() +{ + ThreadInfo* thread = getThreadInfo(); + return thread->glesContext; +} + EGLAPI EGLint EGLAPIENTRY eglGetError(void) { CURRENT_THREAD(); EGLint err = tls_thread->getError(); @@ -479,7 +486,7 @@ EGLAPI EGLSurface EGLAPIENTRY eglCreateWindowSurface(EGLDisplay display, EGLConf if(!EglOS::checkWindowPixelFormatMatch(dpy->nativeType(),win,cfg,&width,&height)) { RETURN_ERROR(EGL_NO_SURFACE,EGL_BAD_ALLOC); } - SurfacePtr wSurface(new EglWindowSurface(win,cfg,width,height)); + SurfacePtr wSurface(new EglWindowSurface(dpy, win,cfg,width,height)); if(!wSurface.Ptr()) { RETURN_ERROR(EGL_NO_SURFACE,EGL_BAD_ALLOC); } @@ -495,7 +502,7 @@ EGLAPI EGLSurface EGLAPIENTRY eglCreatePbufferSurface(EGLDisplay display, EGLCon } - SurfacePtr pbSurface(new EglPbufferSurface(cfg)); + SurfacePtr pbSurface(new EglPbufferSurface(dpy,cfg)); if(!pbSurface.Ptr()) { RETURN_ERROR(EGL_NO_SURFACE,EGL_BAD_ALLOC); } @@ -549,7 +556,7 @@ EGLAPI EGLSurface EGLAPIENTRY eglCreatePixmapSurface(EGLDisplay display, EGLConf if(!EglOS::checkPixmapPixelFormatMatch(dpy->nativeType(),pixmap,cfg,&width,&height)) { RETURN_ERROR(EGL_NO_SURFACE,EGL_BAD_ALLOC); } - SurfacePtr pixSurface(new EglPixmapSurface(pixmap,cfg)); + SurfacePtr pixSurface(new EglPixmapSurface(dpy, pixmap,cfg)); if(!pixSurface.Ptr()) { RETURN_ERROR(EGL_NO_SURFACE,EGL_BAD_ALLOC); } @@ -557,18 +564,6 @@ EGLAPI EGLSurface EGLAPIENTRY eglCreatePixmapSurface(EGLDisplay display, EGLConf return dpy->addSurface(pixSurface); } -static bool destroySurfaceIfNotCurrent(EglDisplay* dpy,SurfacePtr surface) { - - ThreadInfo* thread = getThreadInfo(); - EglContext* currCtx = static_cast(thread->eglContext); - if((!currCtx) || (currCtx && !currCtx->usingSurface(surface))){ - if(surface->type() == EglSurface::PBUFFER) { - EglOS::releasePbuffer(dpy->nativeType(),surface->native()); - } - return true; - } - return false; -} EGLAPI EGLBoolean EGLAPIENTRY eglDestroySurface(EGLDisplay display, EGLSurface surface) { VALIDATE_DISPLAY(display); SurfacePtr srfc = dpy->getSurface(surface); @@ -576,10 +571,7 @@ EGLAPI EGLBoolean EGLAPIENTRY eglDestroySurface(EGLDisplay display, EGLSurface s RETURN_ERROR(EGL_FALSE,EGL_BAD_SURFACE); } - srfc->markForDestruction(); //mark surface for destruction - if(destroySurfaceIfNotCurrent(dpy,srfc)) { //removes surface from the list if not current - dpy->removeSurface(surface); - } + dpy->removeSurface(surface); return EGL_TRUE; } @@ -650,7 +642,7 @@ EGLAPI EGLContext EGLAPIENTRY eglCreateContext(EGLDisplay display, EGLConfig con EGLNativeContextType nativeContext = EglOS::createContext(dpy->nativeType(),cfg,globalSharedContext); if(nativeContext) { - ContextPtr ctx(new EglContext(nativeContext,sharedCtxPtr,cfg,glesCtx,version,dpy->getManager(version))); + ContextPtr ctx(new EglContext(dpy, nativeContext,sharedCtxPtr,cfg,glesCtx,version,dpy->getManager(version))); return dpy->addContext(ctx); } else { iface->deleteGLESContext(glesCtx); @@ -659,25 +651,11 @@ EGLAPI EGLContext EGLAPIENTRY eglCreateContext(EGLDisplay display, EGLConfig con return EGL_NO_CONTEXT; } -static bool destroyContextIfNotCurrent(EglDisplay* dpy,ContextPtr ctx ) { - ThreadInfo* thread = getThreadInfo(); - EglContext* currCtx = static_cast(thread->eglContext); - if(ctx.Ptr() != currCtx ){ - EglOS::destroyContext(dpy->nativeType(),ctx->nativeType()); - return true; - } - return false; -} - EGLAPI EGLBoolean EGLAPIENTRY eglDestroyContext(EGLDisplay display, EGLContext context) { VALIDATE_DISPLAY(display); VALIDATE_CONTEXT(context); - ctx->markForDestruction(); //mark for destruction - if(destroyContextIfNotCurrent(dpy,ctx)){ //removes the context from the list if it is not current - g_eglInfo->getIface(ctx->version())->deleteGLESContext(ctx->getGlesContext()); - dpy->removeContext(context); - } + dpy->removeContext(context); return EGL_TRUE; } @@ -692,15 +670,15 @@ EGLAPI EGLBoolean EGLAPIENTRY eglMakeCurrent(EGLDisplay display, EGLSurface draw } ThreadInfo* thread = getThreadInfo(); - EglContext* prevCtx = static_cast(thread->eglContext); + ContextPtr prevCtx = thread->eglContext; if(releaseContext) { //releasing current context - if(prevCtx) { + if(prevCtx.Ptr()) { g_eglInfo->getIface(prevCtx->version())->flush(); if(!EglOS::makeCurrent(dpy->nativeType(),NULL,NULL,NULL)) { RETURN_ERROR(EGL_FALSE,EGL_BAD_ACCESS); } - thread->updateInfo(NULL,dpy,NULL,ShareGroupPtr(NULL),dpy->getManager(prevCtx->version())); + thread->updateInfo(ContextPtr(NULL),dpy,NULL,ShareGroupPtr(NULL),dpy->getManager(prevCtx->version())); } } else { //assining new context VALIDATE_CONTEXT(context); @@ -709,10 +687,10 @@ EGLAPI EGLBoolean EGLAPIENTRY eglMakeCurrent(EGLDisplay display, EGLSurface draw EglSurface* newDrawPtr = newDrawSrfc.Ptr(); EglSurface* newReadPtr = newReadSrfc.Ptr(); - EglContext* newCtx = ctx.Ptr(); + ContextPtr newCtx = ctx; - if (newCtx && prevCtx) { - if (newCtx == prevCtx) { + if (newCtx.Ptr() && prevCtx.Ptr()) { + if (newCtx.Ptr() == prevCtx.Ptr()) { if (newDrawPtr == prevCtx->draw().Ptr() && newReadPtr == prevCtx->read().Ptr()) { // nothing to do @@ -749,7 +727,7 @@ EGLAPI EGLBoolean EGLAPIENTRY eglMakeCurrent(EGLDisplay display, EGLSurface draw if(newDrawPtr->type() == EglSurface::PIXMAP && !EglOS::validNativePixmap(nativeDisplay,nativeDraw)) { RETURN_ERROR(EGL_FALSE,EGL_BAD_NATIVE_PIXMAP); } - if(prevCtx) { + if(prevCtx.Ptr()) { g_eglInfo->getIface(prevCtx->version())->flush(); } if(!EglOS::makeCurrent(dpy->nativeType(),newReadPtr,newDrawPtr,newCtx->nativeType())) { @@ -763,33 +741,11 @@ EGLAPI EGLBoolean EGLAPIENTRY eglMakeCurrent(EGLDisplay display, EGLSurface draw g_eglInfo->getIface(newCtx->version())->initContext(newCtx->getGlesContext(),newCtx->getShareGroup()); } - SurfacePtr prevRead; - SurfacePtr prevDraw; - //removing terminated surfaces & context - if(prevCtx && releaseContext) { - prevRead = prevCtx->read(); - if(prevRead->destroy()){ - if(destroySurfaceIfNotCurrent(dpy,prevRead)) { //removes surface from the list if not current - dpy->removeSurface(prevRead); - } - } - prevDraw = prevCtx->draw(); - if(prevDraw->destroy()){ - if(destroySurfaceIfNotCurrent(dpy,prevDraw)) { //removes surface from the list if not current - dpy->removeSurface(prevDraw); - } - } - - if(prevCtx->destroy()) { - ContextPtr prevCtxPtr = ContextPtr(prevCtx); - if(destroyContextIfNotCurrent(dpy,prevCtxPtr)){ //removes the context from the list if it is not current - g_eglInfo->getIface(prevCtx->version())->deleteGLESContext(prevCtx->getGlesContext()); - dpy->removeContext(prevCtxPtr); - } - } - + // release previous context surface binding + if(prevCtx.Ptr() && releaseContext) { prevCtx->setSurfaces(SurfacePtr(NULL),SurfacePtr(NULL)); } + return EGL_TRUE; } @@ -808,7 +764,7 @@ EGLAPI EGLBoolean EGLAPIENTRY eglSwapBuffers(EGLDisplay display, EGLSurface surf VALIDATE_DISPLAY(display); VALIDATE_SURFACE(surface,Srfc); ThreadInfo* thread = getThreadInfo(); - EglContext* currentCtx = static_cast(thread->eglContext); + ContextPtr currentCtx = thread->eglContext; //if surface not window return @@ -816,7 +772,7 @@ EGLAPI EGLBoolean EGLAPIENTRY eglSwapBuffers(EGLDisplay display, EGLSurface surf RETURN_ERROR(EGL_TRUE,EGL_SUCCESS); } - if(!currentCtx || !currentCtx->usingSurface(Srfc) || !EglOS::validNativeWin(dpy->nativeType(),Srfc.Ptr()->native())) { + if(!currentCtx.Ptr() || !currentCtx->usingSurface(Srfc) || !EglOS::validNativeWin(dpy->nativeType(),Srfc.Ptr()->native())) { RETURN_ERROR(EGL_FALSE,EGL_BAD_SURFACE); } @@ -827,8 +783,8 @@ EGLAPI EGLBoolean EGLAPIENTRY eglSwapBuffers(EGLDisplay display, EGLSurface surf EGLAPI EGLBoolean EGLAPIENTRY eglSwapInterval(EGLDisplay display, EGLint interval) { VALIDATE_DISPLAY(display); ThreadInfo* thread = getThreadInfo(); - EglContext* currCtx = static_cast(thread->eglContext); - if(currCtx) { + ContextPtr currCtx = thread->eglContext; + if(currCtx.Ptr()) { if(!currCtx->read().Ptr() || !currCtx->draw().Ptr() || currCtx->draw()->type()!=EglSurface::WINDOW) { RETURN_ERROR(EGL_FALSE,EGL_BAD_CURRENT_SURFACE); } @@ -843,8 +799,8 @@ EGLAPI EGLBoolean EGLAPIENTRY eglSwapInterval(EGLDisplay display, EGLint interva EGLAPI EGLContext EGLAPIENTRY eglGetCurrentContext(void) { ThreadInfo* thread = getThreadInfo(); EglDisplay* dpy = static_cast(thread->eglDisplay); - EglContext* ctx = static_cast(thread->eglContext); - if(dpy && ctx){ + ContextPtr ctx = thread->eglContext; + if(dpy && ctx.Ptr()){ // This double check is required because a context might still be current after it is destroyed - in which case // its handle should be invalid, that is EGL_NO_CONTEXT should be returned even though the context is current EGLContext c = (EGLContext)ctx->getHndl(); @@ -861,9 +817,9 @@ EGLAPI EGLSurface EGLAPIENTRY eglGetCurrentSurface(EGLint readdraw) { ThreadInfo* thread = getThreadInfo(); EglDisplay* dpy = static_cast(thread->eglDisplay); - EglContext* ctx = static_cast(thread->eglContext); + ContextPtr ctx = thread->eglContext; - if(dpy && ctx) { + if(dpy && ctx.Ptr()) { SurfacePtr surface = readdraw == EGL_READ ? ctx->read() : ctx->draw(); if(surface.Ptr()) { @@ -884,7 +840,7 @@ EGLAPI EGLSurface EGLAPIENTRY eglGetCurrentSurface(EGLint readdraw) { EGLAPI EGLDisplay EGLAPIENTRY eglGetCurrentDisplay(void) { ThreadInfo* thread = getThreadInfo(); - return (thread->eglContext) ? thread->eglDisplay : EGL_NO_DISPLAY; + return (thread->eglContext.Ptr()) ? thread->eglDisplay : EGL_NO_DISPLAY; } EGLAPI EGLBoolean EGLAPIENTRY eglWaitGL(void) { @@ -898,9 +854,9 @@ EGLAPI EGLBoolean EGLAPIENTRY eglWaitNative(EGLint engine) { RETURN_ERROR(EGL_FALSE,EGL_BAD_PARAMETER); } ThreadInfo* thread = getThreadInfo(); - EglContext* currCtx = static_cast(thread->eglContext); + ContextPtr currCtx = thread->eglContext; EglDisplay* dpy = static_cast(thread->eglDisplay); - if(currCtx) { + if(currCtx.Ptr()) { SurfacePtr read = currCtx->read(); SurfacePtr draw = currCtx->draw(); @@ -946,8 +902,8 @@ EGLAPI EGLenum EGLAPIENTRY eglQueryAPI(void) { EGLAPI EGLBoolean EGLAPIENTRY eglWaitClient(void) { ThreadInfo* thread = getThreadInfo(); - EglContext* currCtx = static_cast(thread->eglContext); - if(currCtx) { + ContextPtr currCtx = thread->eglContext; + if(currCtx.Ptr()) { if(!currCtx->read().Ptr() || !currCtx->draw().Ptr()) { RETURN_ERROR(EGL_FALSE,EGL_BAD_CURRENT_SURFACE); } @@ -1026,8 +982,8 @@ EglImage *attachEGLImage(unsigned int imageId) { ThreadInfo* thread = getThreadInfo(); EglDisplay* dpy = static_cast(thread->eglDisplay); - EglContext* ctx = static_cast(thread->eglContext); - if (ctx) { + ContextPtr ctx = thread->eglContext; + if (ctx.Ptr()) { ImagePtr img = dpy->getImage(reinterpret_cast(imageId)); if(img.Ptr()) { ctx->attachImage(imageId,img); @@ -1041,8 +997,8 @@ void detachEGLImage(unsigned int imageId) { ThreadInfo* thread = getThreadInfo(); EglDisplay* dpy = static_cast(thread->eglDisplay); - EglContext* ctx = static_cast(thread->eglContext); - if (ctx) { + ContextPtr ctx = thread->eglContext; + if (ctx.Ptr()) { ctx->detachImage(imageId); } } diff --git a/tools/emulator/opengl/host/libs/Translator/EGL/EglPbufferSurface.h b/tools/emulator/opengl/host/libs/Translator/EGL/EglPbufferSurface.h index 184cc47e1..9740170a5 100644 --- a/tools/emulator/opengl/host/libs/Translator/EGL/EglPbufferSurface.h +++ b/tools/emulator/opengl/host/libs/Translator/EGL/EglPbufferSurface.h @@ -18,9 +18,12 @@ #include "EglSurface.h" +class EglDisplay; + class EglPbufferSurface:public EglSurface { public: - EglPbufferSurface(EglConfig* config):EglSurface(PBUFFER,config,0,0), + EglPbufferSurface(EglDisplay *dpy, EglConfig* config): + EglSurface(dpy,PBUFFER,config,0,0), m_texFormat(EGL_NO_TEXTURE), m_texTarget(EGL_NO_TEXTURE), m_texMipmap(EGL_FALSE), diff --git a/tools/emulator/opengl/host/libs/Translator/EGL/EglPixmapSurface.cpp b/tools/emulator/opengl/host/libs/Translator/EGL/EglPixmapSurface.cpp index 245e23fc6..208759424 100644 --- a/tools/emulator/opengl/host/libs/Translator/EGL/EglPixmapSurface.cpp +++ b/tools/emulator/opengl/host/libs/Translator/EGL/EglPixmapSurface.cpp @@ -23,7 +23,12 @@ bool EglPixmapSurface::alreadyAssociatedWithConfig(EGLNativePixmapType pix) { } -EglPixmapSurface::EglPixmapSurface(EGLNativePixmapType pix,EglConfig* config):EglSurface(PIXMAP,config,0,0),m_pixmap(pix) { +EglPixmapSurface::EglPixmapSurface(EglDisplay *dpy, + EGLNativePixmapType pix, + EglConfig* config) : + EglSurface(dpy, PIXMAP,config,0,0), + m_pixmap(pix) +{ s_associatedPixmaps.insert(pix); m_native = EglOS::createPixmapSurface(pix); } diff --git a/tools/emulator/opengl/host/libs/Translator/EGL/EglPixmapSurface.h b/tools/emulator/opengl/host/libs/Translator/EGL/EglPixmapSurface.h index eb42fabcb..f027eabf4 100644 --- a/tools/emulator/opengl/host/libs/Translator/EGL/EglPixmapSurface.h +++ b/tools/emulator/opengl/host/libs/Translator/EGL/EglPixmapSurface.h @@ -20,9 +20,11 @@ #include #include "EglSurface.h" +class EglDisplay; + class EglPixmapSurface: public EglSurface { public: - EglPixmapSurface(EGLNativePixmapType pix,EglConfig* config); + EglPixmapSurface(EglDisplay *dpy, EGLNativePixmapType pix,EglConfig* config); ~EglPixmapSurface(); bool getAttrib(EGLint attrib,EGLint* val); diff --git a/tools/emulator/opengl/host/libs/Translator/EGL/EglSurface.cpp b/tools/emulator/opengl/host/libs/Translator/EGL/EglSurface.cpp index 27455d39e..7f658b6cb 100644 --- a/tools/emulator/opengl/host/libs/Translator/EGL/EglSurface.cpp +++ b/tools/emulator/opengl/host/libs/Translator/EGL/EglSurface.cpp @@ -19,6 +19,11 @@ unsigned int EglSurface::s_nextSurfaceHndl = 0; EglSurface::~EglSurface(){ + + if(m_type == EglSurface::PBUFFER) { + EglOS::releasePbuffer(m_dpy->nativeType(),m_native); + } + if(m_native) EglOS::destroySurface(m_native); } diff --git a/tools/emulator/opengl/host/libs/Translator/EGL/EglSurface.h b/tools/emulator/opengl/host/libs/Translator/EGL/EglSurface.h index 3fc484078..d65f48064 100644 --- a/tools/emulator/opengl/host/libs/Translator/EGL/EglSurface.h +++ b/tools/emulator/opengl/host/libs/Translator/EGL/EglSurface.h @@ -23,9 +23,10 @@ #include "EglConfig.h" class EglSurface; - typedef SmartPtr SurfacePtr; +class EglDisplay; + class EglSurface { public: typedef enum { @@ -38,8 +39,6 @@ public: virtual bool setAttrib(EGLint attrib,EGLint val); virtual bool getAttrib(EGLint attrib,EGLint* val) = 0; void setDim(int width,int height){ m_width = width; m_height = height;}; - void markForDestruction(){m_destroy = true;}; - bool destroy(){return m_destroy;}; EglConfig* getConfig(){return m_config;}; unsigned int getHndl(){return m_hndl;}; virtual ~EglSurface(); @@ -47,19 +46,29 @@ public: private: static unsigned int s_nextSurfaceHndl; ESurfaceType m_type; - bool m_destroy; unsigned int m_hndl; protected: - EglSurface(ESurfaceType type,EglConfig* config,EGLint width,EGLint height):m_type(type), - m_destroy(false), - m_config(config), - m_width(width), - m_height(height), - m_native(NULL){ m_hndl = ++s_nextSurfaceHndl;}; + EglSurface(EglDisplay *dpy, + ESurfaceType type, + EglConfig* config, + EGLint width, + EGLint height) : + m_type(type), + m_config(config), + m_width(width), + m_height(height), + m_native(NULL), + m_dpy(dpy) + { + m_hndl = ++s_nextSurfaceHndl; + } + +protected: EglConfig* m_config; EGLint m_width; EGLint m_height; EGLNativeSurfaceType m_native; + EglDisplay *m_dpy; }; #endif diff --git a/tools/emulator/opengl/host/libs/Translator/EGL/EglWindowSurface.cpp b/tools/emulator/opengl/host/libs/Translator/EGL/EglWindowSurface.cpp index f32cb18b0..7bff8961a 100644 --- a/tools/emulator/opengl/host/libs/Translator/EGL/EglWindowSurface.cpp +++ b/tools/emulator/opengl/host/libs/Translator/EGL/EglWindowSurface.cpp @@ -23,7 +23,13 @@ bool EglWindowSurface::alreadyAssociatedWithConfig(EGLNativeWindowType win) { } -EglWindowSurface::EglWindowSurface(EGLNativeWindowType win,EglConfig* config,unsigned int width,unsigned int height):EglSurface(WINDOW,config,width,height),m_win(win){ +EglWindowSurface::EglWindowSurface(EglDisplay *dpy, + EGLNativeWindowType win, + EglConfig* config, + unsigned int width,unsigned int height) : + EglSurface(dpy, WINDOW,config,width,height), + m_win(win) +{ s_associatedWins.insert(win); m_native = EglOS::createWindowSurface(win); } diff --git a/tools/emulator/opengl/host/libs/Translator/EGL/EglWindowSurface.h b/tools/emulator/opengl/host/libs/Translator/EGL/EglWindowSurface.h index 17249e0d8..460a29355 100644 --- a/tools/emulator/opengl/host/libs/Translator/EGL/EglWindowSurface.h +++ b/tools/emulator/opengl/host/libs/Translator/EGL/EglWindowSurface.h @@ -21,9 +21,11 @@ #include "EglSurface.h" #include "EglConfig.h" +class EglDisplay; + class EglWindowSurface: public EglSurface { public: - EglWindowSurface(EGLNativeWindowType win,EglConfig* config,unsigned width,unsigned int height); + EglWindowSurface(EglDisplay *dpy, EGLNativeWindowType win,EglConfig* config,unsigned width,unsigned int height); ~EglWindowSurface(); bool getAttrib(EGLint attrib,EGLint* val); diff --git a/tools/emulator/opengl/host/libs/Translator/EGL/ThreadInfo.cpp b/tools/emulator/opengl/host/libs/Translator/EGL/ThreadInfo.cpp index 8acf8a13c..d1d018fa5 100644 --- a/tools/emulator/opengl/host/libs/Translator/EGL/ThreadInfo.cpp +++ b/tools/emulator/opengl/host/libs/Translator/EGL/ThreadInfo.cpp @@ -14,10 +14,10 @@ * limitations under the License. */ -#include +#include "ThreadInfo.h" -void ThreadInfo::updateInfo(EglContext* eglCtx, +void ThreadInfo::updateInfo(ContextPtr eglCtx, EglDisplay* dpy, GLEScontext* glesCtx, ShareGroupPtr share, diff --git a/tools/emulator/opengl/host/libs/Translator/include/GLcommon/ThreadInfo.h b/tools/emulator/opengl/host/libs/Translator/EGL/ThreadInfo.h similarity index 84% rename from tools/emulator/opengl/host/libs/Translator/include/GLcommon/ThreadInfo.h rename to tools/emulator/opengl/host/libs/Translator/EGL/ThreadInfo.h index 69b8ac44b..9ee55bf6a 100644 --- a/tools/emulator/opengl/host/libs/Translator/include/GLcommon/ThreadInfo.h +++ b/tools/emulator/opengl/host/libs/Translator/EGL/ThreadInfo.h @@ -16,22 +16,21 @@ #ifndef THREAD_INFO_H #define THREAD_INFO_H -#include "objectNameManager.h" +#include "EglContext.h" -class EglContext; class EglDisplay; class GLEScontext; struct ThreadInfo { - ThreadInfo():eglContext(NULL),glesContext(NULL),objManager(NULL){} + ThreadInfo():glesContext(NULL),objManager(NULL){} - void updateInfo(EglContext* eglctx, + void updateInfo(ContextPtr eglctx, EglDisplay* dpy, GLEScontext* glesCtx, ShareGroupPtr share, ObjectNameManager* manager); - EglContext* eglContext; + ContextPtr eglContext; EglDisplay* eglDisplay; GLEScontext* glesContext; ShareGroupPtr shareGroup; diff --git a/tools/emulator/opengl/host/libs/Translator/GLES_CM/GLEScmImp.cpp b/tools/emulator/opengl/host/libs/Translator/GLES_CM/GLEScmImp.cpp index 677f251bb..6c63762af 100644 --- a/tools/emulator/opengl/host/libs/Translator/GLES_CM/GLEScmImp.cpp +++ b/tools/emulator/opengl/host/libs/Translator/GLES_CM/GLEScmImp.cpp @@ -30,7 +30,6 @@ #include #include #include -#include #include #include #include @@ -178,16 +177,16 @@ static ObjectLocalName TextureLocalName(GLenum target, unsigned int tex) { static TextureData* getTextureData(ObjectLocalName tex){ GET_CTX_RET(NULL); - if(!thrd->shareGroup->isObject(TEXTURE,tex)) + if(!ctx->shareGroup()->isObject(TEXTURE,tex)) { return NULL; } TextureData *texData = NULL; - ObjectDataPtr objData = thrd->shareGroup->getObjectData(TEXTURE,tex); + ObjectDataPtr objData = ctx->shareGroup()->getObjectData(TEXTURE,tex); if(!objData.Ptr()){ texData = new TextureData(); - thrd->shareGroup->setObjectData(TEXTURE, tex, ObjectDataPtr(texData)); + ctx->shareGroup()->setObjectData(TEXTURE, tex, ObjectDataPtr(texData)); } else { texData = (TextureData*)objData.Ptr(); } @@ -203,8 +202,8 @@ static TextureData* getTextureTargetData(GLenum target){ GL_API GLboolean GL_APIENTRY glIsBuffer(GLuint buffer) { GET_CTX_RET(GL_FALSE) - if(buffer && thrd->shareGroup.Ptr()) { - ObjectDataPtr objData = thrd->shareGroup->getObjectData(VERTEXBUFFER,buffer); + if(buffer && ctx->shareGroup().Ptr()) { + ObjectDataPtr objData = ctx->shareGroup()->getObjectData(VERTEXBUFFER,buffer); return objData.Ptr() ? ((GLESbuffer*)objData.Ptr())->wasBinded():GL_FALSE; } return GL_FALSE; @@ -292,13 +291,13 @@ GL_API void GL_APIENTRY glBindBuffer( GLenum target, GLuint buffer) { SET_ERROR_IF(!GLEScmValidate::bufferTarget(target),GL_INVALID_ENUM); //if buffer wasn't generated before,generate one - if(buffer && thrd->shareGroup.Ptr() && !thrd->shareGroup->isObject(VERTEXBUFFER,buffer)){ - thrd->shareGroup->genName(VERTEXBUFFER,buffer); - thrd->shareGroup->setObjectData(VERTEXBUFFER,buffer,ObjectDataPtr(new GLESbuffer())); + if(buffer && ctx->shareGroup().Ptr() && !ctx->shareGroup()->isObject(VERTEXBUFFER,buffer)){ + ctx->shareGroup()->genName(VERTEXBUFFER,buffer); + ctx->shareGroup()->setObjectData(VERTEXBUFFER,buffer,ObjectDataPtr(new GLESbuffer())); } ctx->bindBuffer(target,buffer); if (buffer) { - GLESbuffer* vbo = (GLESbuffer*)thrd->shareGroup->getObjectData(VERTEXBUFFER,buffer).Ptr(); + GLESbuffer* vbo = (GLESbuffer*)ctx->shareGroup()->getObjectData(VERTEXBUFFER,buffer).Ptr(); vbo->setBinded(); } } @@ -312,12 +311,12 @@ GL_API void GL_APIENTRY glBindTexture( GLenum target, GLuint texture) { ObjectLocalName localTexName = TextureLocalName(target,texture); GLuint globalTextureName = localTexName; - if(thrd->shareGroup.Ptr()){ - globalTextureName = thrd->shareGroup->getGlobalName(TEXTURE,localTexName); + if(ctx->shareGroup().Ptr()){ + globalTextureName = ctx->shareGroup()->getGlobalName(TEXTURE,localTexName); //if texture wasn't generated before,generate one if(!globalTextureName){ - thrd->shareGroup->genName(TEXTURE,localTexName); - globalTextureName = thrd->shareGroup->getGlobalName(TEXTURE,localTexName); + ctx->shareGroup()->genName(TEXTURE,localTexName); + globalTextureName = ctx->shareGroup()->getGlobalName(TEXTURE,localTexName); } TextureData* texData = getTextureData(localTexName); @@ -478,9 +477,9 @@ GL_API void GL_APIENTRY glCullFace( GLenum mode) { GL_API void GL_APIENTRY glDeleteBuffers( GLsizei n, const GLuint *buffers) { GET_CTX() SET_ERROR_IF(n<0,GL_INVALID_VALUE); - if(thrd->shareGroup.Ptr()) { + if(ctx->shareGroup().Ptr()) { for(int i=0; i < n; i++){ - thrd->shareGroup->deleteName(VERTEXBUFFER,buffers[i]); + ctx->shareGroup()->deleteName(VERTEXBUFFER,buffers[i]); ctx->unbindBuffer(buffers[i]); } } @@ -489,12 +488,12 @@ GL_API void GL_APIENTRY glDeleteBuffers( GLsizei n, const GLuint *buffers) { GL_API void GL_APIENTRY glDeleteTextures( GLsizei n, const GLuint *textures) { GET_CTX() SET_ERROR_IF(n<0,GL_INVALID_VALUE); - if(thrd->shareGroup.Ptr()) { + if(ctx->shareGroup().Ptr()) { for(int i=0; i < n; i++){ if(textures[i] != 0) { - thrd->shareGroup->deleteName(TEXTURE,textures[i]); - const GLuint globalTextureName = thrd->shareGroup->getGlobalName(TEXTURE,textures[i]); + ctx->shareGroup()->deleteName(TEXTURE,textures[i]); + const GLuint globalTextureName = ctx->shareGroup()->getGlobalName(TEXTURE,textures[i]); ctx->dispatcher().glDeleteTextures(1,&globalTextureName); if(ctx->getBindedTexture(GL_TEXTURE_2D) == textures[i]) @@ -666,20 +665,20 @@ GL_API void GL_APIENTRY glFrustumx( GLfixed left, GLfixed right, GLfixed bottom GL_API void GL_APIENTRY glGenBuffers( GLsizei n, GLuint *buffers) { GET_CTX() SET_ERROR_IF(n<0,GL_INVALID_VALUE); - if(thrd->shareGroup.Ptr()) { + if(ctx->shareGroup().Ptr()) { for(int i=0; ishareGroup->genName(VERTEXBUFFER, 0, true); + buffers[i] = ctx->shareGroup()->genName(VERTEXBUFFER, 0, true); //generating vbo object related to this buffer name - thrd->shareGroup->setObjectData(VERTEXBUFFER,buffers[i],ObjectDataPtr(new GLESbuffer())); + ctx->shareGroup()->setObjectData(VERTEXBUFFER,buffers[i],ObjectDataPtr(new GLESbuffer())); } } } GL_API void GL_APIENTRY glGenTextures( GLsizei n, GLuint *textures) { GET_CTX(); - if(thrd->shareGroup.Ptr()) { + if(ctx->shareGroup().Ptr()) { for(int i=0; ishareGroup->genName(TEXTURE, 0, true); + textures[i] = ctx->shareGroup()->genName(TEXTURE, 0, true); } } } @@ -870,15 +869,15 @@ GL_API void GL_APIENTRY glGetIntegerv( GLenum pname, GLint *params) { ctx->dispatcher().glGetIntegerv(GL_TEXTURE_GEN_S,¶ms[0]); break; case GL_FRAMEBUFFER_BINDING_OES: - if (thrd->shareGroup.Ptr()) { + if (ctx->shareGroup().Ptr()) { ctx->dispatcher().glGetIntegerv(pname,&i); - *params = thrd->shareGroup->getLocalName(FRAMEBUFFER,i); + *params = ctx->shareGroup()->getLocalName(FRAMEBUFFER,i); } break; case GL_RENDERBUFFER_BINDING_OES: - if (thrd->shareGroup.Ptr()) { + if (ctx->shareGroup().Ptr()) { ctx->dispatcher().glGetIntegerv(pname,&i); - *params = thrd->shareGroup->getLocalName(RENDERBUFFER,i); + *params = ctx->shareGroup()->getLocalName(RENDERBUFFER,i); } break; case GL_NUM_COMPRESSED_TEXTURE_FORMATS: @@ -1445,7 +1444,7 @@ GL_API void GL_APIENTRY glTexImage2D( GLenum target, GLint level, GLint interna ctx->dispatcher().glTexImage2D(target,level,internalformat,width,height,border,format,type,pixels); - if (thrd->shareGroup.Ptr()){ + if (ctx->shareGroup().Ptr()){ TextureData *texData = getTextureTargetData(target); SET_ERROR_IF(texData==NULL,GL_INVALID_OPERATION); if(texData) { @@ -1574,7 +1573,7 @@ GL_API void GL_APIENTRY glTexSubImage2D( GLenum target, GLint level, GLint xoff ctx->dispatcher().glTexSubImage2D(target,level,xoffset,yoffset,width,height,format,type,pixels); - if (thrd->shareGroup.Ptr()){ + if (ctx->shareGroup().Ptr()){ TextureData *texData = getTextureTargetData(target); SET_ERROR_IF(texData==NULL,GL_INVALID_OPERATION); if(texData && texData->requiresAutoMipmap) @@ -1615,15 +1614,15 @@ GL_API void GL_APIENTRY glEGLImageTargetTexture2DOES(GLenum target, GLeglImageOE // Create the texture object in the underlying EGL implementation, // flag to the OpenGL layer to skip the image creation and map the // current binded texture object to the existing global object. - if (thrd->shareGroup.Ptr()) { + if (ctx->shareGroup().Ptr()) { ObjectLocalName tex = TextureLocalName(target,ctx->getBindedTexture(target)); - unsigned int oldGlobal = thrd->shareGroup->getGlobalName(TEXTURE, tex); + unsigned int oldGlobal = ctx->shareGroup()->getGlobalName(TEXTURE, tex); // Delete old texture object if (oldGlobal) { ctx->dispatcher().glDeleteTextures(1, &oldGlobal); } // replace mapping and bind the new global object - thrd->shareGroup->replaceGlobalName(TEXTURE, tex,img->globalTexName); + ctx->shareGroup()->replaceGlobalName(TEXTURE, tex,img->globalTexName); ctx->dispatcher().glBindTexture(GL_TEXTURE_2D, img->globalTexName); TextureData *texData = getTextureTargetData(target); SET_ERROR_IF(texData==NULL,GL_INVALID_OPERATION); @@ -1666,8 +1665,8 @@ GL_API void GL_APIENTRY glBlendFuncSeparateOES(GLenum srcRGB, GLenum dstRGB, GLe GL_API GLboolean GL_APIENTRY glIsRenderbufferOES(GLuint renderbuffer) { GET_CTX_RET(GL_FALSE) RET_AND_SET_ERROR_IF(!ctx->getCaps()->GL_EXT_FRAMEBUFFER_OBJECT,GL_INVALID_OPERATION,GL_FALSE); - if(renderbuffer && thrd->shareGroup.Ptr()){ - return thrd->shareGroup->isObject(RENDERBUFFER,renderbuffer) ? GL_TRUE :GL_FALSE; + if(renderbuffer && ctx->shareGroup().Ptr()){ + return ctx->shareGroup()->isObject(RENDERBUFFER,renderbuffer) ? GL_TRUE :GL_FALSE; } return ctx->dispatcher().glIsRenderbufferEXT(renderbuffer); } @@ -1678,11 +1677,11 @@ GL_API void GLAPIENTRY glBindRenderbufferOES(GLenum target, GLuint renderbuffer) SET_ERROR_IF(!GLEScmValidate::renderbufferTarget(target),GL_INVALID_ENUM); //if buffer wasn't generated before,generate one - if(renderbuffer && thrd->shareGroup.Ptr() && !thrd->shareGroup->isObject(RENDERBUFFER,renderbuffer)){ - thrd->shareGroup->genName(RENDERBUFFER,renderbuffer); + if(renderbuffer && ctx->shareGroup().Ptr() && !ctx->shareGroup()->isObject(RENDERBUFFER,renderbuffer)){ + ctx->shareGroup()->genName(RENDERBUFFER,renderbuffer); } - int globalBufferName = (renderbuffer != 0) ? thrd->shareGroup->getGlobalName(RENDERBUFFER,renderbuffer) : 0; + int globalBufferName = (renderbuffer != 0) ? ctx->shareGroup()->getGlobalName(RENDERBUFFER,renderbuffer) : 0; ctx->dispatcher().glBindRenderbufferEXT(target,globalBufferName); } @@ -1690,7 +1689,7 @@ GL_API void GLAPIENTRY glDeleteRenderbuffersOES(GLsizei n, const GLuint *renderb GET_CTX() SET_ERROR_IF(!ctx->getCaps()->GL_EXT_FRAMEBUFFER_OBJECT,GL_INVALID_OPERATION); for (int i=0;ishareGroup->getGlobalName(RENDERBUFFER,renderbuffers[i]); + GLuint globalBufferName = ctx->shareGroup()->getGlobalName(RENDERBUFFER,renderbuffers[i]); ctx->dispatcher().glDeleteRenderbuffersEXT(1,&globalBufferName); } } @@ -1699,9 +1698,9 @@ GL_API void GLAPIENTRY glGenRenderbuffersOES(GLsizei n, GLuint *renderbuffers) { GET_CTX() SET_ERROR_IF(!ctx->getCaps()->GL_EXT_FRAMEBUFFER_OBJECT,GL_INVALID_OPERATION); SET_ERROR_IF(n<0,GL_INVALID_VALUE); - if(thrd->shareGroup.Ptr()) { + if(ctx->shareGroup().Ptr()) { for(int i=0; ishareGroup->genName(RENDERBUFFER, 0, true); + renderbuffers[i] = ctx->shareGroup()->genName(RENDERBUFFER, 0, true); } } } @@ -1725,8 +1724,8 @@ GL_API void GLAPIENTRY glGetRenderbufferParameterivOES(GLenum target, GLenum pna GL_API GLboolean GLAPIENTRY glIsFramebufferOES(GLuint framebuffer) { GET_CTX_RET(GL_FALSE) RET_AND_SET_ERROR_IF(!ctx->getCaps()->GL_EXT_FRAMEBUFFER_OBJECT,GL_INVALID_OPERATION,GL_FALSE); - if (framebuffer && thrd->shareGroup.Ptr()) { - return thrd->shareGroup->isObject(FRAMEBUFFER,framebuffer) ? GL_TRUE : GL_FALSE; + if (framebuffer && ctx->shareGroup().Ptr()) { + return ctx->shareGroup()->isObject(FRAMEBUFFER,framebuffer) ? GL_TRUE : GL_FALSE; } return ctx->dispatcher().glIsFramebufferEXT(framebuffer); } @@ -1735,10 +1734,10 @@ GL_API void GLAPIENTRY glBindFramebufferOES(GLenum target, GLuint framebuffer) { GET_CTX() SET_ERROR_IF(!ctx->getCaps()->GL_EXT_FRAMEBUFFER_OBJECT,GL_INVALID_OPERATION); SET_ERROR_IF(!GLEScmValidate::framebufferTarget(target) ,GL_INVALID_ENUM); - if (framebuffer && thrd->shareGroup.Ptr() && !thrd->shareGroup->isObject(FRAMEBUFFER,framebuffer)) { - thrd->shareGroup->genName(FRAMEBUFFER,framebuffer); + if (framebuffer && ctx->shareGroup().Ptr() && !ctx->shareGroup()->isObject(FRAMEBUFFER,framebuffer)) { + ctx->shareGroup()->genName(FRAMEBUFFER,framebuffer); } - int globalBufferName = (framebuffer!=0) ? thrd->shareGroup->getGlobalName(FRAMEBUFFER,framebuffer) : 0; + int globalBufferName = (framebuffer!=0) ? ctx->shareGroup()->getGlobalName(FRAMEBUFFER,framebuffer) : 0; ctx->dispatcher().glBindFramebufferEXT(target,globalBufferName); } @@ -1746,7 +1745,7 @@ GL_API void GLAPIENTRY glDeleteFramebuffersOES(GLsizei n, const GLuint *framebuf GET_CTX() SET_ERROR_IF(!ctx->getCaps()->GL_EXT_FRAMEBUFFER_OBJECT,GL_INVALID_OPERATION); for (int i=0;ishareGroup->getGlobalName(FRAMEBUFFER,framebuffers[i]); + GLuint globalBufferName = ctx->shareGroup()->getGlobalName(FRAMEBUFFER,framebuffers[i]); ctx->dispatcher().glDeleteFramebuffersEXT(1,&globalBufferName); } } @@ -1755,9 +1754,9 @@ GL_API void GLAPIENTRY glGenFramebuffersOES(GLsizei n, GLuint *framebuffers) { GET_CTX() SET_ERROR_IF(!ctx->getCaps()->GL_EXT_FRAMEBUFFER_OBJECT,GL_INVALID_OPERATION); SET_ERROR_IF(n<0,GL_INVALID_VALUE); - if (thrd->shareGroup.Ptr()) { + if (ctx->shareGroup().Ptr()) { for (int i=0;ishareGroup->genName(FRAMEBUFFER, 0, true); + framebuffers[i] = ctx->shareGroup()->genName(FRAMEBUFFER, 0, true); } } } @@ -1774,10 +1773,10 @@ GL_API void GLAPIENTRY glFramebufferTexture2DOES(GLenum target, GLenum attachmen SET_ERROR_IF(!ctx->getCaps()->GL_EXT_FRAMEBUFFER_OBJECT,GL_INVALID_OPERATION); SET_ERROR_IF(!GLEScmValidate::framebufferTarget(target) || !GLEScmValidate::framebufferAttachment(attachment) || !GLEScmValidate::textureTargetEx(textarget),GL_INVALID_ENUM); - if (thrd->shareGroup.Ptr() && !thrd->shareGroup->isObject(TEXTURE,texture)) { - thrd->shareGroup->genName(TEXTURE,texture); + if (ctx->shareGroup().Ptr() && !ctx->shareGroup()->isObject(TEXTURE,texture)) { + ctx->shareGroup()->genName(TEXTURE,texture); } - GLuint globalTexName = thrd->shareGroup->getGlobalName(TEXTURE,texture); + GLuint globalTexName = ctx->shareGroup()->getGlobalName(TEXTURE,texture); ctx->dispatcher().glFramebufferTexture2DEXT(target,attachment,textarget,globalTexName,level); } @@ -1786,10 +1785,10 @@ GL_API void GLAPIENTRY glFramebufferRenderbufferOES(GLenum target, GLenum attach SET_ERROR_IF(!ctx->getCaps()->GL_EXT_FRAMEBUFFER_OBJECT,GL_INVALID_OPERATION); SET_ERROR_IF(!GLEScmValidate::framebufferTarget(target) || !GLEScmValidate::framebufferAttachment(attachment) || !GLEScmValidate::renderbufferTarget(renderbuffertarget), GL_INVALID_ENUM); - if (thrd->shareGroup.Ptr() && !thrd->shareGroup->isObject(RENDERBUFFER,renderbuffer)) { - thrd->shareGroup->genName(RENDERBUFFER,renderbuffer); + if (ctx->shareGroup().Ptr() && !ctx->shareGroup()->isObject(RENDERBUFFER,renderbuffer)) { + ctx->shareGroup()->genName(RENDERBUFFER,renderbuffer); } - GLuint globalBufferName = thrd->shareGroup->getGlobalName(RENDERBUFFER,renderbuffer); + GLuint globalBufferName = ctx->shareGroup()->getGlobalName(RENDERBUFFER,renderbuffer); ctx->dispatcher().glFramebufferRenderbufferEXT(target,attachment,renderbuffertarget,globalBufferName); } @@ -2012,7 +2011,7 @@ void glDrawTexOES (T x, T y, T z, T width, T height) { unsigned int texname = ctx->getBindedTexture(GL_TEXTURE0+i,GL_TEXTURE_2D); ObjectLocalName tex = TextureLocalName(GL_TEXTURE_2D,texname); ctx->dispatcher().glClientActiveTexture(GL_TEXTURE0+i); - ObjectDataPtr objData = thrd->shareGroup->getObjectData(TEXTURE,tex); + ObjectDataPtr objData = ctx->shareGroup()->getObjectData(TEXTURE,tex); if (objData.Ptr()) { texData = (TextureData*)objData.Ptr(); //calculate texels diff --git a/tools/emulator/opengl/host/libs/Translator/GLES_V2/GLESv2Imp.cpp b/tools/emulator/opengl/host/libs/Translator/GLES_V2/GLESv2Imp.cpp index 5329556db..fd918f484 100644 --- a/tools/emulator/opengl/host/libs/Translator/GLES_V2/GLESv2Imp.cpp +++ b/tools/emulator/opengl/host/libs/Translator/GLES_V2/GLESv2Imp.cpp @@ -25,7 +25,6 @@ #include #include #include -#include #include #include "GLESv2Context.h" #include "GLESv2Validate.h" @@ -124,10 +123,10 @@ static ObjectLocalName TextureLocalName(GLenum target,unsigned int tex) { static TextureData* getTextureData(ObjectLocalName tex) { GET_CTX_RET(NULL); TextureData *texData = NULL; - ObjectDataPtr objData = thrd->shareGroup->getObjectData(TEXTURE,tex); + ObjectDataPtr objData = ctx->shareGroup()->getObjectData(TEXTURE,tex); if(!objData.Ptr()){ texData = new TextureData(); - thrd->shareGroup->setObjectData(TEXTURE, tex, ObjectDataPtr(texData)); + ctx->shareGroup()->setObjectData(TEXTURE, tex, ObjectDataPtr(texData)); } else { texData = (TextureData*)objData.Ptr(); } @@ -149,14 +148,14 @@ GL_APICALL void GL_APIENTRY glActiveTexture(GLenum texture){ GL_APICALL void GL_APIENTRY glAttachShader(GLuint program, GLuint shader){ GET_CTX(); - if(thrd->shareGroup.Ptr()) { - const GLuint globalProgramName = thrd->shareGroup->getGlobalName(SHADER,program); + if(ctx->shareGroup().Ptr()) { + const GLuint globalProgramName = ctx->shareGroup()->getGlobalName(SHADER,program); SET_ERROR_IF(globalProgramName==0, GL_INVALID_VALUE); - const GLuint globalShaderName = thrd->shareGroup->getGlobalName(SHADER,shader); + const GLuint globalShaderName = ctx->shareGroup()->getGlobalName(SHADER,shader); SET_ERROR_IF(globalShaderName==0, GL_INVALID_VALUE); - ObjectDataPtr programData = thrd->shareGroup->getObjectData(SHADER,program); - ObjectDataPtr shaderData = thrd->shareGroup->getObjectData(SHADER,shader); + ObjectDataPtr programData = ctx->shareGroup()->getObjectData(SHADER,program); + ObjectDataPtr shaderData = ctx->shareGroup()->getObjectData(SHADER,shader); SET_ERROR_IF(!shaderData.Ptr() || !programData.Ptr() ,GL_INVALID_OPERATION); SET_ERROR_IF(!(shaderData.Ptr()->getDataType() ==SHADER_DATA) || !(programData.Ptr()->getDataType()==PROGRAM_DATA) ,GL_INVALID_OPERATION); @@ -171,8 +170,8 @@ GL_APICALL void GL_APIENTRY glAttachShader(GLuint program, GLuint shader){ GL_APICALL void GL_APIENTRY glBindAttribLocation(GLuint program, GLuint index, const GLchar* name){ GET_CTX(); - if(thrd->shareGroup.Ptr()) { - const GLuint globalProgramName = thrd->shareGroup->getGlobalName(SHADER,program); + if(ctx->shareGroup().Ptr()) { + const GLuint globalProgramName = ctx->shareGroup()->getGlobalName(SHADER,program); SET_ERROR_IF(globalProgramName==0, GL_INVALID_VALUE); ctx->dispatcher().glBindAttribLocation(globalProgramName,index,name); } @@ -182,13 +181,13 @@ GL_APICALL void GL_APIENTRY glBindBuffer(GLenum target, GLuint buffer){ GET_CTX(); SET_ERROR_IF(!GLESv2Validate::bufferTarget(target),GL_INVALID_ENUM); //if buffer wasn't generated before,generate one - if(buffer && thrd->shareGroup.Ptr() && !thrd->shareGroup->isObject(VERTEXBUFFER,buffer)){ - thrd->shareGroup->genName(VERTEXBUFFER,buffer); - thrd->shareGroup->setObjectData(VERTEXBUFFER,buffer,ObjectDataPtr(new GLESbuffer())); + if(buffer && ctx->shareGroup().Ptr() && !ctx->shareGroup()->isObject(VERTEXBUFFER,buffer)){ + ctx->shareGroup()->genName(VERTEXBUFFER,buffer); + ctx->shareGroup()->setObjectData(VERTEXBUFFER,buffer,ObjectDataPtr(new GLESbuffer())); } ctx->bindBuffer(target,buffer); if (buffer) { - GLESbuffer* vbo = (GLESbuffer*)thrd->shareGroup->getObjectData(VERTEXBUFFER,buffer).Ptr(); + GLESbuffer* vbo = (GLESbuffer*)ctx->shareGroup()->getObjectData(VERTEXBUFFER,buffer).Ptr(); vbo->setBinded(); } } @@ -198,12 +197,12 @@ GL_APICALL void GL_APIENTRY glBindFramebuffer(GLenum target, GLuint framebuffer SET_ERROR_IF(!GLESv2Validate::framebufferTarget(target),GL_INVALID_ENUM); GLuint globalFrameBufferName = framebuffer; - if(framebuffer && thrd->shareGroup.Ptr()){ - globalFrameBufferName = thrd->shareGroup->getGlobalName(FRAMEBUFFER,framebuffer); + if(framebuffer && ctx->shareGroup().Ptr()){ + globalFrameBufferName = ctx->shareGroup()->getGlobalName(FRAMEBUFFER,framebuffer); //if framebuffer wasn't generated before,generate one if(!globalFrameBufferName){ - thrd->shareGroup->genName(FRAMEBUFFER,framebuffer); - globalFrameBufferName = thrd->shareGroup->getGlobalName(FRAMEBUFFER,framebuffer); + ctx->shareGroup()->genName(FRAMEBUFFER,framebuffer); + globalFrameBufferName = ctx->shareGroup()->getGlobalName(FRAMEBUFFER,framebuffer); } } ctx->dispatcher().glBindFramebufferEXT(target,globalFrameBufferName); @@ -214,12 +213,12 @@ GL_APICALL void GL_APIENTRY glBindRenderbuffer(GLenum target, GLuint renderbuff SET_ERROR_IF(!GLESv2Validate::renderbufferTarget(target),GL_INVALID_ENUM); GLuint globalRenderBufferName = renderbuffer; - if(renderbuffer && thrd->shareGroup.Ptr()){ - globalRenderBufferName = thrd->shareGroup->getGlobalName(RENDERBUFFER,renderbuffer); + if(renderbuffer && ctx->shareGroup().Ptr()){ + globalRenderBufferName = ctx->shareGroup()->getGlobalName(RENDERBUFFER,renderbuffer); //if renderbuffer wasn't generated before,generate one if(!globalRenderBufferName){ - thrd->shareGroup->genName(RENDERBUFFER,renderbuffer); - globalRenderBufferName = thrd->shareGroup->getGlobalName(RENDERBUFFER,renderbuffer); + ctx->shareGroup()->genName(RENDERBUFFER,renderbuffer); + globalRenderBufferName = ctx->shareGroup()->getGlobalName(RENDERBUFFER,renderbuffer); } } ctx->dispatcher().glBindRenderbufferEXT(target,globalRenderBufferName); @@ -233,12 +232,12 @@ GL_APICALL void GL_APIENTRY glBindTexture(GLenum target, GLuint texture){ ObjectLocalName localTexName = TextureLocalName(target,texture); GLuint globalTextureName = localTexName; - if(thrd->shareGroup.Ptr()){ - globalTextureName = thrd->shareGroup->getGlobalName(TEXTURE,localTexName); + if(ctx->shareGroup().Ptr()){ + globalTextureName = ctx->shareGroup()->getGlobalName(TEXTURE,localTexName); //if texture wasn't generated before,generate one if(!globalTextureName){ - thrd->shareGroup->genName(TEXTURE,localTexName); - globalTextureName = thrd->shareGroup->getGlobalName(TEXTURE,localTexName); + ctx->shareGroup()->genName(TEXTURE,localTexName); + globalTextureName = ctx->shareGroup()->getGlobalName(TEXTURE,localTexName); } TextureData* texData = getTextureData(localTexName); @@ -327,8 +326,8 @@ GL_APICALL void GL_APIENTRY glColorMask(GLboolean red, GLboolean green, GLboole GL_APICALL void GL_APIENTRY glCompileShader(GLuint shader){ GET_CTX(); - if(thrd->shareGroup.Ptr()) { - const GLuint globalShaderName = thrd->shareGroup->getGlobalName(SHADER,shader); + if(ctx->shareGroup().Ptr()) { + const GLuint globalShaderName = ctx->shareGroup()->getGlobalName(SHADER,shader); SET_ERROR_IF(globalShaderName==0, GL_INVALID_VALUE); ctx->dispatcher().glCompileShader(globalShaderName); } @@ -366,11 +365,11 @@ GL_APICALL void GL_APIENTRY glCopyTexSubImage2D(GLenum target, GLint level, GLi GL_APICALL GLuint GL_APIENTRY glCreateProgram(void){ GET_CTX_RET(0); const GLuint globalProgramName = ctx->dispatcher().glCreateProgram(); - if(thrd->shareGroup.Ptr() && globalProgramName) { + if(ctx->shareGroup().Ptr() && globalProgramName) { ProgramData* programInfo = new ProgramData(); - const GLuint localProgramName = thrd->shareGroup->genName(SHADER, 0, true); - thrd->shareGroup->replaceGlobalName(SHADER,localProgramName,globalProgramName); - thrd->shareGroup->setObjectData(SHADER,localProgramName,ObjectDataPtr(programInfo)); + const GLuint localProgramName = ctx->shareGroup()->genName(SHADER, 0, true); + ctx->shareGroup()->replaceGlobalName(SHADER,localProgramName,globalProgramName); + ctx->shareGroup()->setObjectData(SHADER,localProgramName,ObjectDataPtr(programInfo)); return localProgramName; } if(globalProgramName){ @@ -382,11 +381,11 @@ GL_APICALL GLuint GL_APIENTRY glCreateProgram(void){ GL_APICALL GLuint GL_APIENTRY glCreateShader(GLenum type){ GET_CTX_V2_RET(0); const GLuint globalShaderName = ctx->dispatcher().glCreateShader(type); - if(thrd->shareGroup.Ptr() && globalShaderName) { - const GLuint localShaderName = thrd->shareGroup->genName(SHADER, 0, true); + if(ctx->shareGroup().Ptr() && globalShaderName) { + const GLuint localShaderName = ctx->shareGroup()->genName(SHADER, 0, true); ShaderParser* sp = new ShaderParser(type); - thrd->shareGroup->replaceGlobalName(SHADER,localShaderName,globalShaderName); - thrd->shareGroup->setObjectData(SHADER,localShaderName,ObjectDataPtr(sp)); + ctx->shareGroup()->replaceGlobalName(SHADER,localShaderName,globalShaderName); + ctx->shareGroup()->setObjectData(SHADER,localShaderName,ObjectDataPtr(sp)); return localShaderName; } if(globalShaderName){ @@ -403,9 +402,9 @@ GL_APICALL void GL_APIENTRY glCullFace(GLenum mode){ GL_APICALL void GL_APIENTRY glDeleteBuffers(GLsizei n, const GLuint* buffers){ GET_CTX(); SET_ERROR_IF(n<0,GL_INVALID_VALUE); - if(thrd->shareGroup.Ptr()) { + if(ctx->shareGroup().Ptr()) { for(int i=0; i < n; i++){ - thrd->shareGroup->deleteName(VERTEXBUFFER,buffers[i]); + ctx->shareGroup()->deleteName(VERTEXBUFFER,buffers[i]); } } } @@ -413,10 +412,10 @@ GL_APICALL void GL_APIENTRY glDeleteBuffers(GLsizei n, const GLuint* buffers){ GL_APICALL void GL_APIENTRY glDeleteFramebuffers(GLsizei n, const GLuint* framebuffers){ GET_CTX(); SET_ERROR_IF(n<0,GL_INVALID_VALUE); - if(thrd->shareGroup.Ptr()) { + if(ctx->shareGroup().Ptr()) { for(int i=0; i < n; i++){ - const GLuint globalFrameBufferName = thrd->shareGroup->getGlobalName(FRAMEBUFFER,framebuffers[i]); - thrd->shareGroup->deleteName(FRAMEBUFFER,framebuffers[i]); + const GLuint globalFrameBufferName = ctx->shareGroup()->getGlobalName(FRAMEBUFFER,framebuffers[i]); + ctx->shareGroup()->deleteName(FRAMEBUFFER,framebuffers[i]); ctx->dispatcher().glDeleteFramebuffersEXT(1,&globalFrameBufferName); } } @@ -425,10 +424,10 @@ GL_APICALL void GL_APIENTRY glDeleteFramebuffers(GLsizei n, const GLuint* frame GL_APICALL void GL_APIENTRY glDeleteRenderbuffers(GLsizei n, const GLuint* renderbuffers){ GET_CTX(); SET_ERROR_IF(n<0,GL_INVALID_VALUE); - if(thrd->shareGroup.Ptr()) { + if(ctx->shareGroup().Ptr()) { for(int i=0; i < n; i++){ - const GLuint globalRenderBufferName = thrd->shareGroup->getGlobalName(RENDERBUFFER,renderbuffers[i]); - thrd->shareGroup->deleteName(RENDERBUFFER,renderbuffers[i]); + const GLuint globalRenderBufferName = ctx->shareGroup()->getGlobalName(RENDERBUFFER,renderbuffers[i]); + ctx->shareGroup()->deleteName(RENDERBUFFER,renderbuffers[i]); ctx->dispatcher().glDeleteRenderbuffersEXT(1,&globalRenderBufferName); } } @@ -437,11 +436,11 @@ GL_APICALL void GL_APIENTRY glDeleteRenderbuffers(GLsizei n, const GLuint* rend GL_APICALL void GL_APIENTRY glDeleteTextures(GLsizei n, const GLuint* textures){ GET_CTX(); SET_ERROR_IF(n<0,GL_INVALID_VALUE); - if(thrd->shareGroup.Ptr()) { + if(ctx->shareGroup().Ptr()) { for(int i=0; i < n; i++){ if (textures[i]!=0) { - const GLuint globalTextureName = thrd->shareGroup->getGlobalName(TEXTURE,textures[i]); - thrd->shareGroup->deleteName(TEXTURE,textures[i]); + const GLuint globalTextureName = ctx->shareGroup()->getGlobalName(TEXTURE,textures[i]); + ctx->shareGroup()->deleteName(TEXTURE,textures[i]); ctx->dispatcher().glDeleteTextures(1,&globalTextureName); if (ctx->getBindedTexture(GL_TEXTURE_2D) == textures[i]) @@ -455,20 +454,20 @@ GL_APICALL void GL_APIENTRY glDeleteTextures(GLsizei n, const GLuint* textures) GL_APICALL void GL_APIENTRY glDeleteProgram(GLuint program){ GET_CTX(); - if(program && thrd->shareGroup.Ptr()) { - const GLuint globalProgramName = thrd->shareGroup->getGlobalName(SHADER,program); + if(program && ctx->shareGroup().Ptr()) { + const GLuint globalProgramName = ctx->shareGroup()->getGlobalName(SHADER,program); SET_ERROR_IF(!globalProgramName, GL_INVALID_VALUE); - thrd->shareGroup->deleteName(SHADER,program); + ctx->shareGroup()->deleteName(SHADER,program); ctx->dispatcher().glDeleteProgram(globalProgramName); } } GL_APICALL void GL_APIENTRY glDeleteShader(GLuint shader){ GET_CTX(); - if(shader && thrd->shareGroup.Ptr()) { - const GLuint globalShaderName = thrd->shareGroup->getGlobalName(SHADER,shader); + if(shader && ctx->shareGroup().Ptr()) { + const GLuint globalShaderName = ctx->shareGroup()->getGlobalName(SHADER,shader); SET_ERROR_IF(!globalShaderName, GL_INVALID_VALUE); - thrd->shareGroup->deleteName(SHADER,shader); + ctx->shareGroup()->deleteName(SHADER,shader); ctx->dispatcher().glDeleteShader(globalShaderName); } @@ -489,13 +488,13 @@ GL_APICALL void GL_APIENTRY glDepthRangef(GLclampf zNear, GLclampf zFar){ GL_APICALL void GL_APIENTRY glDetachShader(GLuint program, GLuint shader){ GET_CTX(); - if(thrd->shareGroup.Ptr()) { - const GLuint globalProgramName = thrd->shareGroup->getGlobalName(SHADER,program); + if(ctx->shareGroup().Ptr()) { + const GLuint globalProgramName = ctx->shareGroup()->getGlobalName(SHADER,program); SET_ERROR_IF(globalProgramName==0, GL_INVALID_VALUE); - const GLuint globalShaderName = thrd->shareGroup->getGlobalName(SHADER,shader); + const GLuint globalShaderName = ctx->shareGroup()->getGlobalName(SHADER,shader); SET_ERROR_IF(globalShaderName==0, GL_INVALID_VALUE); - ObjectDataPtr objData = thrd->shareGroup->getObjectData(SHADER,program); + ObjectDataPtr objData = ctx->shareGroup()->getObjectData(SHADER,program); SET_ERROR_IF(!objData.Ptr(),GL_INVALID_OPERATION); SET_ERROR_IF(!(objData.Ptr()->getDataType()==PROGRAM_DATA) ,GL_INVALID_OPERATION); @@ -599,8 +598,8 @@ GL_APICALL void GL_APIENTRY glFramebufferRenderbuffer(GLenum target, GLenum att GLESv2Validate::renderbufferTarget(renderbuffertarget) && GLESv2Validate::framebufferAttachment(attachment)),GL_INVALID_ENUM); - if(thrd->shareGroup.Ptr()) { - GLuint globalRenderbufferName = thrd->shareGroup->getGlobalName(RENDERBUFFER,renderbuffer); + if(ctx->shareGroup().Ptr()) { + GLuint globalRenderbufferName = ctx->shareGroup()->getGlobalName(RENDERBUFFER,renderbuffer); ctx->dispatcher().glFramebufferRenderbufferEXT(target,attachment,renderbuffertarget,globalRenderbufferName); } @@ -613,9 +612,9 @@ GL_APICALL void GL_APIENTRY glFramebufferTexture2D(GLenum target, GLenum attach GLESv2Validate::framebufferAttachment(attachment)),GL_INVALID_ENUM); SET_ERROR_IF(level != 0, GL_INVALID_VALUE); - if(thrd->shareGroup.Ptr()) { + if(ctx->shareGroup().Ptr()) { ObjectLocalName texname = TextureLocalName(textarget,texture); - GLuint globalTextureName = thrd->shareGroup->getGlobalName(TEXTURE,texname); + GLuint globalTextureName = ctx->shareGroup()->getGlobalName(TEXTURE,texname); ctx->dispatcher().glFramebufferTexture2DEXT(target,attachment,textarget,globalTextureName,level); } } @@ -629,11 +628,11 @@ GL_APICALL void GL_APIENTRY glFrontFace(GLenum mode){ GL_APICALL void GL_APIENTRY glGenBuffers(GLsizei n, GLuint* buffers){ GET_CTX(); SET_ERROR_IF(n<0,GL_INVALID_VALUE); - if(thrd->shareGroup.Ptr()) { + if(ctx->shareGroup().Ptr()) { for(int i=0; ishareGroup->genName(VERTEXBUFFER, 0, true); + buffers[i] = ctx->shareGroup()->genName(VERTEXBUFFER, 0, true); //generating vbo object related to this buffer name - thrd->shareGroup->setObjectData(VERTEXBUFFER,buffers[i],ObjectDataPtr(new GLESbuffer())); + ctx->shareGroup()->setObjectData(VERTEXBUFFER,buffers[i],ObjectDataPtr(new GLESbuffer())); } } } @@ -647,9 +646,9 @@ GL_APICALL void GL_APIENTRY glGenerateMipmap(GLenum target){ GL_APICALL void GL_APIENTRY glGenFramebuffers(GLsizei n, GLuint* framebuffers){ GET_CTX(); SET_ERROR_IF(n<0,GL_INVALID_VALUE); - if(thrd->shareGroup.Ptr()) { + if(ctx->shareGroup().Ptr()) { for(int i=0; ishareGroup->genName(FRAMEBUFFER, 0 ,true); + framebuffers[i] = ctx->shareGroup()->genName(FRAMEBUFFER, 0 ,true); } } } @@ -657,9 +656,9 @@ GL_APICALL void GL_APIENTRY glGenFramebuffers(GLsizei n, GLuint* framebuffers){ GL_APICALL void GL_APIENTRY glGenRenderbuffers(GLsizei n, GLuint* renderbuffers){ GET_CTX(); SET_ERROR_IF(n<0,GL_INVALID_VALUE); - if(thrd->shareGroup.Ptr()) { + if(ctx->shareGroup().Ptr()) { for(int i=0; ishareGroup->genName(RENDERBUFFER, 0, true); + renderbuffers[i] = ctx->shareGroup()->genName(RENDERBUFFER, 0, true); } } } @@ -667,17 +666,17 @@ GL_APICALL void GL_APIENTRY glGenRenderbuffers(GLsizei n, GLuint* renderbuffers GL_APICALL void GL_APIENTRY glGenTextures(GLsizei n, GLuint* textures){ GET_CTX(); SET_ERROR_IF(n<0,GL_INVALID_VALUE); - if(thrd->shareGroup.Ptr()) { + if(ctx->shareGroup().Ptr()) { for(int i=0; ishareGroup->genName(TEXTURE, 0, true); + textures[i] = ctx->shareGroup()->genName(TEXTURE, 0, true); } } } GL_APICALL void GL_APIENTRY glGetActiveAttrib(GLuint program, GLuint index, GLsizei bufsize, GLsizei* length, GLint* size, GLenum* type, GLchar* name){ GET_CTX(); - if(thrd->shareGroup.Ptr()) { - const GLuint globalProgramName = thrd->shareGroup->getGlobalName(SHADER,program); + if(ctx->shareGroup().Ptr()) { + const GLuint globalProgramName = ctx->shareGroup()->getGlobalName(SHADER,program); SET_ERROR_IF(globalProgramName==0, GL_INVALID_VALUE); ctx->dispatcher().glGetActiveAttrib(globalProgramName,index,bufsize,length,size,type,name); } @@ -685,8 +684,8 @@ GL_APICALL void GL_APIENTRY glGetActiveAttrib(GLuint program, GLuint index, GLs GL_APICALL void GL_APIENTRY glGetActiveUniform(GLuint program, GLuint index, GLsizei bufsize, GLsizei* length, GLint* size, GLenum* type, GLchar* name){ GET_CTX(); - if(thrd->shareGroup.Ptr()) { - const GLuint globalProgramName = thrd->shareGroup->getGlobalName(SHADER,program); + if(ctx->shareGroup().Ptr()) { + const GLuint globalProgramName = ctx->shareGroup()->getGlobalName(SHADER,program); SET_ERROR_IF(globalProgramName==0, GL_INVALID_VALUE); ctx->dispatcher().glGetActiveUniform(globalProgramName,index,bufsize,length,size,type,name); } @@ -694,20 +693,20 @@ GL_APICALL void GL_APIENTRY glGetActiveUniform(GLuint program, GLuint index, GL GL_APICALL void GL_APIENTRY glGetAttachedShaders(GLuint program, GLsizei maxcount, GLsizei* count, GLuint* shaders){ GET_CTX(); - if(thrd->shareGroup.Ptr()) { - const GLuint globalProgramName = thrd->shareGroup->getGlobalName(SHADER,program); + if(ctx->shareGroup().Ptr()) { + const GLuint globalProgramName = ctx->shareGroup()->getGlobalName(SHADER,program); SET_ERROR_IF(globalProgramName==0, GL_INVALID_VALUE); ctx->dispatcher().glGetAttachedShaders(globalProgramName,maxcount,count,shaders); for(int i=0 ; i < *count ;i++){ - shaders[i] = thrd->shareGroup->getLocalName(SHADER,shaders[i]); + shaders[i] = ctx->shareGroup()->getLocalName(SHADER,shaders[i]); } } } GL_APICALL int GL_APIENTRY glGetAttribLocation(GLuint program, const GLchar* name){ GET_CTX_RET(-1); - if(thrd->shareGroup.Ptr()) { - const GLuint globalProgramName = thrd->shareGroup->getGlobalName(SHADER,program); + if(ctx->shareGroup().Ptr()) { + const GLuint globalProgramName = ctx->shareGroup()->getGlobalName(SHADER,program); RET_AND_SET_ERROR_IF(globalProgramName==0, GL_INVALID_VALUE,-1); return ctx->dispatcher().glGetAttribLocation(globalProgramName,name); } @@ -835,21 +834,21 @@ GL_APICALL void GL_APIENTRY glGetIntegerv(GLenum pname, GLint* params){ switch (pname) { case GL_CURRENT_PROGRAM: - if (thrd->shareGroup.Ptr()) { + if (ctx->shareGroup().Ptr()) { ctx->dispatcher().glGetIntegerv(pname,&i); - *params = thrd->shareGroup->getLocalName(SHADER,i); + *params = ctx->shareGroup()->getLocalName(SHADER,i); } break; case GL_FRAMEBUFFER_BINDING: - if (thrd->shareGroup.Ptr()) { + if (ctx->shareGroup().Ptr()) { ctx->dispatcher().glGetIntegerv(pname,&i); - *params = thrd->shareGroup->getLocalName(FRAMEBUFFER,i); + *params = ctx->shareGroup()->getLocalName(FRAMEBUFFER,i); } break; case GL_RENDERBUFFER_BINDING: - if (thrd->shareGroup.Ptr()) { + if (ctx->shareGroup().Ptr()) { ctx->dispatcher().glGetIntegerv(pname,&i); - *params = thrd->shareGroup->getLocalName(RENDERBUFFER,i); + *params = ctx->shareGroup()->getLocalName(RENDERBUFFER,i); } break; @@ -922,13 +921,13 @@ GL_APICALL void GL_APIENTRY glGetRenderbufferParameteriv(GLenum target, GLenum GL_APICALL void GL_APIENTRY glGetProgramiv(GLuint program, GLenum pname, GLint* params){ GET_CTX(); - if(thrd->shareGroup.Ptr()) { - const GLuint globalProgramName = thrd->shareGroup->getGlobalName(SHADER,program); + if(ctx->shareGroup().Ptr()) { + const GLuint globalProgramName = ctx->shareGroup()->getGlobalName(SHADER,program); SET_ERROR_IF(globalProgramName==0, GL_INVALID_VALUE); switch(pname) { case GL_LINK_STATUS: { - ObjectDataPtr objData = thrd->shareGroup->getObjectData(SHADER,program); + ObjectDataPtr objData = ctx->shareGroup()->getObjectData(SHADER,program); SET_ERROR_IF(!objData.Ptr() ,GL_INVALID_OPERATION); SET_ERROR_IF(objData.Ptr()->getDataType()!=PROGRAM_DATA,GL_INVALID_OPERATION); ProgramData* programData = (ProgramData*)objData.Ptr(); @@ -938,7 +937,7 @@ GL_APICALL void GL_APIENTRY glGetProgramiv(GLuint program, GLenum pname, GLint* //validate status should not return GL_TRUE if link failed case GL_VALIDATE_STATUS: { - ObjectDataPtr objData = thrd->shareGroup->getObjectData(SHADER,program); + ObjectDataPtr objData = ctx->shareGroup()->getObjectData(SHADER,program); SET_ERROR_IF(!objData.Ptr() ,GL_INVALID_OPERATION); SET_ERROR_IF(objData.Ptr()->getDataType()!=PROGRAM_DATA,GL_INVALID_OPERATION); ProgramData* programData = (ProgramData*)objData.Ptr(); @@ -956,8 +955,8 @@ GL_APICALL void GL_APIENTRY glGetProgramiv(GLuint program, GLenum pname, GLint* GL_APICALL void GL_APIENTRY glGetProgramInfoLog(GLuint program, GLsizei bufsize, GLsizei* length, GLchar* infolog){ GET_CTX(); - if(thrd->shareGroup.Ptr()) { - const GLuint globalProgramName = thrd->shareGroup->getGlobalName(SHADER,program); + if(ctx->shareGroup().Ptr()) { + const GLuint globalProgramName = ctx->shareGroup()->getGlobalName(SHADER,program); SET_ERROR_IF(globalProgramName==0, GL_INVALID_VALUE); ctx->dispatcher().glGetProgramInfoLog(globalProgramName,bufsize,length,infolog); } @@ -965,8 +964,8 @@ GL_APICALL void GL_APIENTRY glGetProgramInfoLog(GLuint program, GLsizei bufsize GL_APICALL void GL_APIENTRY glGetShaderiv(GLuint shader, GLenum pname, GLint* params){ GET_CTX(); - if(thrd->shareGroup.Ptr()) { - const GLuint globalShaderName = thrd->shareGroup->getGlobalName(SHADER,shader); + if(ctx->shareGroup().Ptr()) { + const GLuint globalShaderName = ctx->shareGroup()->getGlobalName(SHADER,shader); SET_ERROR_IF(globalShaderName==0, GL_INVALID_VALUE); ctx->dispatcher().glGetShaderiv(globalShaderName,pname,params); } @@ -974,8 +973,8 @@ GL_APICALL void GL_APIENTRY glGetShaderiv(GLuint shader, GLenum pname, GLint* p GL_APICALL void GL_APIENTRY glGetShaderInfoLog(GLuint shader, GLsizei bufsize, GLsizei* length, GLchar* infolog){ GET_CTX(); - if(thrd->shareGroup.Ptr()) { - const GLuint globalShaderName = thrd->shareGroup->getGlobalName(SHADER,shader); + if(ctx->shareGroup().Ptr()) { + const GLuint globalShaderName = ctx->shareGroup()->getGlobalName(SHADER,shader); SET_ERROR_IF(globalShaderName==0, GL_INVALID_VALUE); ctx->dispatcher().glGetShaderInfoLog(globalShaderName,bufsize,length,infolog); } @@ -1012,10 +1011,10 @@ GL_APICALL void GL_APIENTRY glGetShaderPrecisionFormat(GLenum shadertype, GLenu GL_APICALL void GL_APIENTRY glGetShaderSource(GLuint shader, GLsizei bufsize, GLsizei* length, GLchar* source){ GET_CTX(); - if(thrd->shareGroup.Ptr()) { - const GLuint globalShaderName = thrd->shareGroup->getGlobalName(SHADER,shader); + if(ctx->shareGroup().Ptr()) { + const GLuint globalShaderName = ctx->shareGroup()->getGlobalName(SHADER,shader); SET_ERROR_IF(globalShaderName == 0,GL_INVALID_VALUE); - ObjectDataPtr objData = thrd->shareGroup->getObjectData(SHADER,shader); + ObjectDataPtr objData = ctx->shareGroup()->getObjectData(SHADER,shader); SET_ERROR_IF(!objData.Ptr(),GL_INVALID_OPERATION); SET_ERROR_IF(objData.Ptr()->getDataType()!=SHADER_DATA,GL_INVALID_OPERATION); const char* src = ((ShaderParser*)objData.Ptr())->getOriginalSrc(); @@ -1067,8 +1066,8 @@ GL_APICALL void GL_APIENTRY glGetTexParameteriv(GLenum target, GLenum pname, GL GL_APICALL void GL_APIENTRY glGetUniformfv(GLuint program, GLint location, GLfloat* params){ GET_CTX(); - if(thrd->shareGroup.Ptr()) { - const GLuint globalProgramName = thrd->shareGroup->getGlobalName(SHADER,program); + if(ctx->shareGroup().Ptr()) { + const GLuint globalProgramName = ctx->shareGroup()->getGlobalName(SHADER,program); SET_ERROR_IF(globalProgramName==0, GL_INVALID_VALUE); ctx->dispatcher().glGetUniformfv(globalProgramName,location,params); } @@ -1076,8 +1075,8 @@ GL_APICALL void GL_APIENTRY glGetUniformfv(GLuint program, GLint location, GLfl GL_APICALL void GL_APIENTRY glGetUniformiv(GLuint program, GLint location, GLint* params){ GET_CTX(); - if(thrd->shareGroup.Ptr()) { - const GLuint globalProgramName = thrd->shareGroup->getGlobalName(SHADER,program); + if(ctx->shareGroup().Ptr()) { + const GLuint globalProgramName = ctx->shareGroup()->getGlobalName(SHADER,program); SET_ERROR_IF(globalProgramName==0, GL_INVALID_VALUE); ctx->dispatcher().glGetUniformiv(globalProgramName,location,params); } @@ -1085,8 +1084,8 @@ GL_APICALL void GL_APIENTRY glGetUniformiv(GLuint program, GLint location, GLin GL_APICALL int GL_APIENTRY glGetUniformLocation(GLuint program, const GLchar* name){ GET_CTX_RET(-1); - if(thrd->shareGroup.Ptr()) { - const GLuint globalProgramName = thrd->shareGroup->getGlobalName(SHADER,program); + if(ctx->shareGroup().Ptr()) { + const GLuint globalProgramName = ctx->shareGroup()->getGlobalName(SHADER,program); RET_AND_SET_ERROR_IF(globalProgramName==0, GL_INVALID_VALUE,-1); return ctx->dispatcher().glGetUniformLocation(globalProgramName,name); } @@ -1190,8 +1189,8 @@ GL_APICALL GLboolean GL_APIENTRY glIsEnabled(GLenum cap){ GL_APICALL GLboolean GL_APIENTRY glIsBuffer(GLuint buffer){ GET_CTX_RET(GL_FALSE) - if(buffer && thrd->shareGroup.Ptr()) { - ObjectDataPtr objData = thrd->shareGroup->getObjectData(VERTEXBUFFER,buffer); + if(buffer && ctx->shareGroup().Ptr()) { + ObjectDataPtr objData = ctx->shareGroup()->getObjectData(VERTEXBUFFER,buffer); return objData.Ptr() ? ((GLESbuffer*)objData.Ptr())->wasBinded():GL_FALSE; } return GL_FALSE; @@ -1199,16 +1198,16 @@ GL_APICALL GLboolean GL_APIENTRY glIsBuffer(GLuint buffer){ GL_APICALL GLboolean GL_APIENTRY glIsFramebuffer(GLuint framebuffer){ GET_CTX_RET(GL_FALSE) - if(framebuffer && thrd->shareGroup.Ptr()){ - return thrd->shareGroup->isObject(FRAMEBUFFER,framebuffer) ? GL_TRUE :GL_FALSE; + if(framebuffer && ctx->shareGroup().Ptr()){ + return ctx->shareGroup()->isObject(FRAMEBUFFER,framebuffer) ? GL_TRUE :GL_FALSE; } return GL_FALSE; } GL_APICALL GLboolean GL_APIENTRY glIsRenderbuffer(GLuint renderbuffer){ GET_CTX_RET(GL_FALSE) - if(renderbuffer && thrd->shareGroup.Ptr()){ - return thrd->shareGroup->isObject(RENDERBUFFER,renderbuffer) ? GL_TRUE :GL_FALSE; + if(renderbuffer && ctx->shareGroup().Ptr()){ + return ctx->shareGroup()->isObject(RENDERBUFFER,renderbuffer) ? GL_TRUE :GL_FALSE; } return GL_FALSE; } @@ -1223,9 +1222,9 @@ GL_APICALL GLboolean GL_APIENTRY glIsTexture(GLuint texture){ GL_APICALL GLboolean GL_APIENTRY glIsProgram(GLuint program){ GET_CTX_RET(GL_FALSE) - if(program && thrd->shareGroup.Ptr() && - thrd->shareGroup->isObject(SHADER,program)) { - const GLuint globalProgramName = thrd->shareGroup->getGlobalName(SHADER,program); + if(program && ctx->shareGroup().Ptr() && + ctx->shareGroup()->isObject(SHADER,program)) { + const GLuint globalProgramName = ctx->shareGroup()->getGlobalName(SHADER,program); return ctx->dispatcher().glIsProgram(globalProgramName); } return GL_FALSE; @@ -1233,9 +1232,9 @@ GL_APICALL GLboolean GL_APIENTRY glIsProgram(GLuint program){ GL_APICALL GLboolean GL_APIENTRY glIsShader(GLuint shader){ GET_CTX_RET(GL_FALSE) - if(shader && thrd->shareGroup.Ptr() && - thrd->shareGroup->isObject(SHADER,shader)) { - const GLuint globalShaderName = thrd->shareGroup->getGlobalName(SHADER,shader); + if(shader && ctx->shareGroup().Ptr() && + ctx->shareGroup()->isObject(SHADER,shader)) { + const GLuint globalShaderName = ctx->shareGroup()->getGlobalName(SHADER,shader); return ctx->dispatcher().glIsShader(globalShaderName); } return GL_FALSE; @@ -1249,11 +1248,11 @@ GL_APICALL void GL_APIENTRY glLineWidth(GLfloat width){ GL_APICALL void GL_APIENTRY glLinkProgram(GLuint program){ GET_CTX(); GLint linkStatus = GL_FALSE; - if(thrd->shareGroup.Ptr()) { - const GLuint globalProgramName = thrd->shareGroup->getGlobalName(SHADER,program); + if(ctx->shareGroup().Ptr()) { + const GLuint globalProgramName = ctx->shareGroup()->getGlobalName(SHADER,program); SET_ERROR_IF(globalProgramName==0, GL_INVALID_VALUE); - ObjectDataPtr objData = thrd->shareGroup->getObjectData(SHADER,program); + ObjectDataPtr objData = ctx->shareGroup()->getObjectData(SHADER,program); SET_ERROR_IF(!objData.Ptr(), GL_INVALID_OPERATION); SET_ERROR_IF(objData.Ptr()->getDataType()!=PROGRAM_DATA, GL_INVALID_OPERATION); ProgramData* programData = (ProgramData*)objData.Ptr(); @@ -1263,8 +1262,8 @@ GL_APICALL void GL_APIENTRY glLinkProgram(GLuint program){ /* validating that the fragment & vertex shaders were compiled successfuly*/ GLint fCompileStatus = GL_FALSE; GLint vCompileStatus = GL_FALSE; - GLuint fragmentShaderGlobal = thrd->shareGroup->getGlobalName(SHADER,fragmentShader); - GLuint vertexShaderGlobal = thrd->shareGroup->getGlobalName(SHADER,vertexShader); + GLuint fragmentShaderGlobal = ctx->shareGroup()->getGlobalName(SHADER,fragmentShader); + GLuint vertexShaderGlobal = ctx->shareGroup()->getGlobalName(SHADER,vertexShader); ctx->dispatcher().glGetShaderiv(fragmentShaderGlobal,GL_COMPILE_STATUS,&fCompileStatus); ctx->dispatcher().glGetShaderiv(vertexShaderGlobal,GL_COMPILE_STATUS,&vCompileStatus); @@ -1339,9 +1338,9 @@ GL_APICALL void GL_APIENTRY glShaderBinary(GLsizei n, const GLuint* shaders, GL SET_ERROR_IF( (ctx->dispatcher().glShaderBinary == NULL), GL_INVALID_OPERATION); - if(thrd->shareGroup.Ptr()){ + if(ctx->shareGroup().Ptr()){ for(int i=0; i < n ; i++){ - const GLuint globalShaderName = thrd->shareGroup->getGlobalName(SHADER,shaders[i]); + const GLuint globalShaderName = ctx->shareGroup()->getGlobalName(SHADER,shaders[i]); SET_ERROR_IF(globalShaderName == 0,GL_INVALID_VALUE); ctx->dispatcher().glShaderBinary(1,&globalShaderName,binaryformat,binary,length); } @@ -1351,10 +1350,10 @@ GL_APICALL void GL_APIENTRY glShaderBinary(GLsizei n, const GLuint* shaders, GL GL_APICALL void GL_APIENTRY glShaderSource(GLuint shader, GLsizei count, const GLchar** string, const GLint* length){ GET_CTX_V2(); SET_ERROR_IF(count < 0,GL_INVALID_VALUE); - if(thrd->shareGroup.Ptr()){ - const GLuint globalShaderName = thrd->shareGroup->getGlobalName(SHADER,shader); + if(ctx->shareGroup().Ptr()){ + const GLuint globalShaderName = ctx->shareGroup()->getGlobalName(SHADER,shader); SET_ERROR_IF(globalShaderName == 0,GL_INVALID_VALUE); - ObjectDataPtr objData = thrd->shareGroup->getObjectData(SHADER,shader); + ObjectDataPtr objData = ctx->shareGroup()->getObjectData(SHADER,shader); SET_ERROR_IF(!objData.Ptr(),GL_INVALID_OPERATION); SET_ERROR_IF(objData.Ptr()->getDataType()!=SHADER_DATA,GL_INVALID_OPERATION); ShaderParser* sp = (ShaderParser*)objData.Ptr(); @@ -1401,7 +1400,7 @@ GL_APICALL void GL_APIENTRY glTexImage2D(GLenum target, GLint level, GLint inte SET_ERROR_IF(!(GLESv2Validate::pixelOp(format,type) && internalformat == ((GLint)format)),GL_INVALID_OPERATION); SET_ERROR_IF(border != 0,GL_INVALID_VALUE); - if (thrd->shareGroup.Ptr()){ + if (ctx->shareGroup().Ptr()){ TextureData *texData = getTextureTargetData(target); if(texData) { texData->width = width; @@ -1544,8 +1543,8 @@ GL_APICALL void GL_APIENTRY glUniformMatrix4fv(GLint location, GLsizei count, G GL_APICALL void GL_APIENTRY glUseProgram(GLuint program){ GET_CTX(); - if(thrd->shareGroup.Ptr()) { - const GLuint globalProgramName = thrd->shareGroup->getGlobalName(SHADER,program); + if(ctx->shareGroup().Ptr()) { + const GLuint globalProgramName = ctx->shareGroup()->getGlobalName(SHADER,program); SET_ERROR_IF(program!=0 && globalProgramName==0,GL_INVALID_VALUE); ctx->dispatcher().glUseProgram(globalProgramName); } @@ -1553,8 +1552,8 @@ GL_APICALL void GL_APIENTRY glUseProgram(GLuint program){ GL_APICALL void GL_APIENTRY glValidateProgram(GLuint program){ GET_CTX(); - if(thrd->shareGroup.Ptr()) { - const GLuint globalProgramName = thrd->shareGroup->getGlobalName(SHADER,program); + if(ctx->shareGroup().Ptr()) { + const GLuint globalProgramName = ctx->shareGroup()->getGlobalName(SHADER,program); SET_ERROR_IF(globalProgramName==0, GL_INVALID_VALUE); ctx->dispatcher().glValidateProgram(globalProgramName); } @@ -1621,15 +1620,15 @@ GL_APICALL void GL_APIENTRY glEGLImageTargetTexture2DOES(GLenum target, GLeglIma // Create the texture object in the underlying EGL implementation, // flag to the OpenGL layer to skip the image creation and map the // current binded texture object to the existing global object. - if (thrd->shareGroup.Ptr()) { + if (ctx->shareGroup().Ptr()) { ObjectLocalName tex = TextureLocalName(target,ctx->getBindedTexture(target)); - unsigned int oldGlobal = thrd->shareGroup->getGlobalName(TEXTURE, tex); + unsigned int oldGlobal = ctx->shareGroup()->getGlobalName(TEXTURE, tex); // Delete old texture object if (oldGlobal) { ctx->dispatcher().glDeleteTextures(1, &oldGlobal); } // replace mapping and bind the new global object - thrd->shareGroup->replaceGlobalName(TEXTURE, tex,img->globalTexName); + ctx->shareGroup()->replaceGlobalName(TEXTURE, tex,img->globalTexName); ctx->dispatcher().glBindTexture(GL_TEXTURE_2D, img->globalTexName); TextureData *texData = getTextureTargetData(target); SET_ERROR_IF(texData==NULL,GL_INVALID_OPERATION); diff --git a/tools/emulator/opengl/host/libs/Translator/include/GLcommon/GLEScontext.h b/tools/emulator/opengl/host/libs/Translator/include/GLcommon/GLEScontext.h index 035f521c4..9e99284d9 100644 --- a/tools/emulator/opengl/host/libs/Translator/include/GLcommon/GLEScontext.h +++ b/tools/emulator/opengl/host/libs/Translator/include/GLcommon/GLEScontext.h @@ -103,6 +103,7 @@ public: GLenum getGLerror(); void setGLerror(GLenum err); void setShareGroup(ShareGroupPtr grp){m_shareGroup = grp;}; + ShareGroupPtr shareGroup() const { return m_shareGroup; } virtual void setActiveTexture(GLenum tex); unsigned int getBindedTexture(GLenum target); unsigned int getBindedTexture(GLenum unit,GLenum target); diff --git a/tools/emulator/opengl/host/libs/Translator/include/GLcommon/GLESmacros.h b/tools/emulator/opengl/host/libs/Translator/include/GLcommon/GLESmacros.h index 1485f7506..95ffadb8d 100644 --- a/tools/emulator/opengl/host/libs/Translator/include/GLcommon/GLESmacros.h +++ b/tools/emulator/opengl/host/libs/Translator/include/GLcommon/GLESmacros.h @@ -1,49 +1,33 @@ #ifndef GLES_MACROS_H #define GLES_MACROS_H -#define GET_THREAD() \ - ThreadInfo* thrd = NULL; \ - if(s_eglIface) { \ - thrd = s_eglIface->getThreadInfo(); \ - } else { \ - fprintf(stderr,"Context wasn't initialized yet \n"); \ - } +#define GET_CTX() \ + if(!s_eglIface) return; \ + GLEScontext *ctx = s_eglIface->getGLESContext(); \ - -#define GET_CTX() \ - GET_THREAD(); \ - if(!thrd) return; \ - GLEScontext *ctx = static_cast(thrd->glesContext); \ +#define GET_CTX_CM() \ + if(!s_eglIface) return; \ + GLEScmContext *ctx = static_cast(s_eglIface->getGLESContext()); \ if(!ctx) return; -#define GET_CTX_CM() \ - GET_THREAD(); \ - if(!thrd) return; \ - GLEScmContext *ctx = static_cast(thrd->glesContext); \ +#define GET_CTX_V2() \ + if(!s_eglIface) return; \ + GLESv2Context *ctx = static_cast(s_eglIface->getGLESContext()); \ if(!ctx) return; -#define GET_CTX_V2() \ - GET_THREAD(); \ - if(!thrd) return; \ - GLESv2Context *ctx = static_cast(thrd->glesContext); \ - if(!ctx) return; - -#define GET_CTX_RET(failure_ret) \ - GET_THREAD(); \ - if(!thrd) return failure_ret; \ - GLEScontext *ctx = static_cast(thrd->glesContext); \ +#define GET_CTX_RET(failure_ret) \ + if(!s_eglIface) return failure_ret; \ + GLEScontext *ctx = s_eglIface->getGLESContext(); \ if(!ctx) return failure_ret; -#define GET_CTX_CM_RET(failure_ret) \ - GET_THREAD(); \ - if(!thrd) return failure_ret; \ - GLEScmContext *ctx = static_cast(thrd->glesContext); \ +#define GET_CTX_CM_RET(failure_ret) \ + if(!s_eglIface) return failure_ret; \ + GLEScmContext *ctx = static_cast(s_eglIface->getGLESContext()); \ if(!ctx) return failure_ret; -#define GET_CTX_V2_RET(failure_ret) \ - GET_THREAD(); \ - if(!thrd) return failure_ret; \ - GLESv2Context *ctx = static_cast(thrd->glesContext); \ +#define GET_CTX_V2_RET(failure_ret) \ + if(!s_eglIface) return failure_ret; \ + GLESv2Context *ctx = static_cast(s_eglIface->getGLESContext()); \ if(!ctx) return failure_ret; diff --git a/tools/emulator/opengl/host/libs/Translator/include/GLcommon/TranslatorIfaces.h b/tools/emulator/opengl/host/libs/Translator/include/GLcommon/TranslatorIfaces.h index 19f69e590..ec44f6dd7 100644 --- a/tools/emulator/opengl/host/libs/Translator/include/GLcommon/TranslatorIfaces.h +++ b/tools/emulator/opengl/host/libs/Translator/include/GLcommon/TranslatorIfaces.h @@ -15,9 +15,9 @@ */ #ifndef TRANSLATOR_IFACES_H #define TRANSLATOR_IFACES_H -#include #include #include +#include "objectNameManager.h" extern "C" { @@ -89,7 +89,7 @@ typedef struct { typedef struct { - ThreadInfo* (*getThreadInfo)(); + GLEScontext* (*getGLESContext)(); EglImage* (*eglAttachEGLImage)(unsigned int imageId); void (*eglDetachEGLImage)(unsigned int imageId); }EGLiface;