[emugl] Got rid of SmartPtr - it's shared_ptr now
Change-Id: I8fce1abc9ed8f0ba6d1d334c9a287e98dd0865d1
diff --git a/distrib/android-emugl/host/libs/Translator/EGL/ClientAPIExts.cpp b/distrib/android-emugl/host/libs/Translator/EGL/ClientAPIExts.cpp
index 42d5764..3deacb9 100644
--- a/distrib/android-emugl/host/libs/Translator/EGL/ClientAPIExts.cpp
+++ b/distrib/android-emugl/host/libs/Translator/EGL/ClientAPIExts.cpp
@@ -94,7 +94,7 @@
static void _egl_ ## fname params \
{ \
ThreadInfo* thread = getThreadInfo(); \
- if (!thread->eglContext.Ptr()) { \
+ if (!thread->eglContext.get()) { \
return; \
} \
int idx = (int)thread->eglContext->version() - 1; \
@@ -108,7 +108,7 @@
static rtype _egl_ ## fname params \
{ \
ThreadInfo* thread = getThreadInfo(); \
- if (!thread->eglContext.Ptr()) { \
+ if (!thread->eglContext.get()) { \
return (rtype)0; \
} \
int idx = (int)thread->eglContext->version() - 1; \
diff --git a/distrib/android-emugl/host/libs/Translator/EGL/EglContext.cpp b/distrib/android-emugl/host/libs/Translator/EGL/EglContext.cpp
index bc33f1f..7b67b24 100644
--- a/distrib/android-emugl/host/libs/Translator/EGL/EglContext.cpp
+++ b/distrib/android-emugl/host/libs/Translator/EGL/EglContext.cpp
@@ -23,21 +23,25 @@
extern EglGlobalInfo* g_eglInfo; // defined in EglImp.cpp
bool EglContext::usingSurface(SurfacePtr surface) {
- return surface.Ptr() == m_read.Ptr() || surface.Ptr() == m_draw.Ptr();
+ return surface.get() == m_read.get() || surface.get() == m_draw.get();
}
-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_version(ver),
-m_mngr(mngr)
-{
- m_shareGroup = shared_context.Ptr()?
+EglContext::EglContext(EglDisplay *dpy,
+ EglOS::Context* 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_version(ver),
+ m_mngr(mngr) {
+ m_shareGroup = shared_context.get()?
mngr->attachShareGroup(context,shared_context->nativeType()):
mngr->createShareGroup(context);
m_hndl = ++s_nextContextHndl;
@@ -45,11 +49,10 @@
EglContext::~EglContext()
{
-
//
// remove the context in the underlying OS layer
- //
- EglOS::destroyContext(m_dpy->nativeType(),m_native);
+ //
+ m_dpy->nativeType()->destroyContext(m_native);
//
// call the client-api to remove the GLES context
diff --git a/distrib/android-emugl/host/libs/Translator/EGL/EglDisplay.cpp b/distrib/android-emugl/host/libs/Translator/EGL/EglDisplay.cpp
index 24b9a0d..f502b61 100644
--- a/distrib/android-emugl/host/libs/Translator/EGL/EglDisplay.cpp
+++ b/distrib/android-emugl/host/libs/Translator/EGL/EglDisplay.cpp
@@ -204,7 +204,7 @@
ContextsHndlMap::iterator it;
for(it = m_contexts.begin(); it != m_contexts.end();it++) {
- if((*it).second.Ptr() == ctx.Ptr()){
+ if((*it).second.get() == ctx.get()){
break;
}
}
@@ -258,7 +258,7 @@
EGLSurface EglDisplay::addSurface(SurfacePtr s ) {
emugl::Mutex::AutoLock mutex(m_lock);
- unsigned int hndl = s.Ptr()->getHndl();
+ unsigned int hndl = s.get()->getHndl();
EGLSurface ret =reinterpret_cast<EGLSurface> (hndl);
if(m_surfaces.find(hndl) != m_surfaces.end()) {
@@ -272,7 +272,7 @@
EGLContext EglDisplay::addContext(ContextPtr ctx ) {
emugl::Mutex::AutoLock mutex(m_lock);
- unsigned int hndl = ctx.Ptr()->getHndl();
+ unsigned int hndl = ctx.get()->getHndl();
EGLContext ret = reinterpret_cast<EGLContext> (hndl);
if(m_contexts.find(hndl) != m_contexts.end()) {
diff --git a/distrib/android-emugl/host/libs/Translator/EGL/EglImp.cpp b/distrib/android-emugl/host/libs/Translator/EGL/EglImp.cpp
index 5831097..86348dd 100644
--- a/distrib/android-emugl/host/libs/Translator/EGL/EglImp.cpp
+++ b/distrib/android-emugl/host/libs/Translator/EGL/EglImp.cpp
@@ -18,17 +18,13 @@
#define EGLAPI __declspec(dllexport)
#endif
-#include <EGL/egl.h>
-#include <sys/types.h>
-#include <sys/stat.h>
-#include <stdio.h>
#include "ThreadInfo.h"
#include <GLcommon/TranslatorIfaces.h>
#include "emugl/common/shared_library.h"
+#include <OpenglCodecCommon/ErrorLog.h>
#include "EglWindowSurface.h"
#include "EglPbufferSurface.h"
-#include "EglPixmapSurface.h"
#include "EglGlobalInfo.h"
#include "EglThreadInfo.h"
#include "EglValidate.h"
@@ -38,6 +34,12 @@
#include "EglOsApi.h"
#include "ClientAPIExts.h"
+#include <EGL/egl.h>
+
+#include <stdio.h>
+#include <sys/types.h>
+#include <sys/stat.h>
+
#define MAJOR 1
#define MINOR 4
@@ -46,6 +48,7 @@
EglImage *attachEGLImage(unsigned int imageId);
void detachEGLImage(unsigned int imageId);
GLEScontext* getGLESContext();
+GlLibrary* getGlLibrary();
#define tls_thread EglThreadInfo::get()
@@ -60,28 +63,43 @@
}
}
-static EGLiface s_eglIface = {
- getGLESContext : getGLESContext,
- eglAttachEGLImage:attachEGLImage,
- eglDetachEGLImage:detachEGLImage
+static const EGLiface s_eglIface = {
+ .getGLESContext = getGLESContext,
+ .eglAttachEGLImage = attachEGLImage,
+ .eglDetachEGLImage = detachEGLImage,
+ .eglGetGlLibrary = getGlLibrary,
};
+static void initGLESx(GLESVersion version) {
+ const GLESiface* iface = g_eglInfo->getIface(version);
+ if (!iface) {
+ DBG("EGL failed to initialize GLESv%d; incompatible interface\n", version);
+ return;
+ }
+ iface->initGLESx();
+}
+
/***************************************** supported extentions ***********************************************************************/
//extentions
#define EGL_EXTENTIONS 2
//decleration
+extern "C" {
EGLAPI EGLImageKHR EGLAPIENTRY eglCreateImageKHR(EGLDisplay display, EGLContext context, EGLenum target, EGLClientBuffer buffer, const EGLint *attrib_list);
EGLAPI EGLBoolean EGLAPIENTRY eglDestroyImageKHR(EGLDisplay display, EGLImageKHR image);
+} // extern "C"
// extentions descriptors
-static ExtentionDescriptor s_eglExtentions[] = {
- {"eglCreateImageKHR" ,(__eglMustCastToProperFunctionPointerType)eglCreateImageKHR},
- {"eglDestroyImageKHR",(__eglMustCastToProperFunctionPointerType)eglDestroyImageKHR}
- };
-static int s_eglExtentionsSize = sizeof(s_eglExtentions) /
- sizeof(ExtentionDescriptor);
+static const ExtentionDescriptor s_eglExtentions[] = {
+ {"eglCreateImageKHR" ,
+ (__eglMustCastToProperFunctionPointerType)eglCreateImageKHR },
+ {"eglDestroyImageKHR",
+ (__eglMustCastToProperFunctionPointerType)eglDestroyImageKHR },
+};
+
+static const int s_eglExtentionsSize =
+ sizeof(s_eglExtentions) / sizeof(ExtentionDescriptor);
/****************************************************************************************************************************************/
//macros for accessing global egl info & tls objects
@@ -112,13 +130,13 @@
#define VALIDATE_SURFACE_RETURN(EGLSurface,ret,varName) \
SurfacePtr varName = dpy->getSurface(EGLSurface); \
- if(!varName.Ptr()) { \
+ if(!varName.get()) { \
RETURN_ERROR(ret,EGL_BAD_SURFACE); \
}
#define VALIDATE_CONTEXT_RETURN(EGLContext,ret) \
ContextPtr ctx = dpy->getContext(EGLContext); \
- if(!ctx.Ptr()) { \
+ if(!ctx.get()) { \
RETURN_ERROR(ret,EGL_BAD_CONTEXT); \
}
@@ -142,6 +160,10 @@
return thread->glesContext;
}
+GlLibrary* getGlLibrary() {
+ return EglGlobalInfo::getInstance()->getOsEngine()->getGlLibrary();
+}
+
EGLAPI EGLint EGLAPIENTRY eglGetError(void) {
CURRENT_THREAD();
EGLint err = tls_thread->getError();
@@ -151,24 +173,22 @@
EGLAPI EGLDisplay EGLAPIENTRY eglGetDisplay(EGLNativeDisplayType display_id) {
EglDisplay* dpy = NULL;
- EGLNativeInternalDisplayType internalDisplay = NULL;
+ EglOS::Display* internalDisplay = NULL;
initGlobalInfo();
if ((dpy = g_eglInfo->getDisplay(display_id))) {
return dpy;
- } else {
-
- if( display_id == EGL_DEFAULT_DISPLAY) {
- internalDisplay = g_eglInfo->getDefaultNativeDisplay();
- } else {
- internalDisplay = g_eglInfo->generateInternalDisplay(display_id);
- }
-
- dpy = g_eglInfo->addDisplay(display_id,internalDisplay);
- if(dpy) return dpy;
+ }
+ if (display_id != EGL_DEFAULT_DISPLAY) {
return EGL_NO_DISPLAY;
}
+ internalDisplay = g_eglInfo->getDefaultNativeDisplay();
+ dpy = g_eglInfo->addDisplay(display_id,internalDisplay);
+ if(!dpy) {
+ return EGL_NO_DISPLAY;
+ }
+ return dpy;
}
@@ -220,6 +240,7 @@
__FUNCTION__, error);
return EGL_FALSE;
}
+ initGLESx(GLES_1_1);
}
if(!g_eglInfo->getIface(GLES_2_0)) {
func = loadIfaces(LIB_GLES_V2_NAME, error, sizeof(error));
@@ -230,6 +251,7 @@
fprintf(stderr, "%s: Could not find ifaces for GLES 2.0 [%s]\n",
__FUNCTION__, error);
}
+ initGLESx(GLES_2_0);
}
dpy->initialize(renderableType);
return EGL_TRUE;
@@ -462,11 +484,10 @@
}
}
}
- EGLNativePixelFormatType tmpfrmt = PIXEL_FORMAT_INITIALIZER;
EglConfig dummy(red_size,green_size,blue_size,alpha_size,caveat,config_id,depth_size,
frame_buffer_level,0,0,0,native_renderable,renderable_type,0,native_visual_type,
samples_per_pixel,stencil_size,surface_type,transparent_type,
- trans_red_val,trans_green_val,trans_blue_val,tmpfrmt);
+ trans_red_val,trans_green_val,trans_blue_val,NULL);
*num_config = dpy->chooseConfigs(dummy,configs,config_size);
@@ -493,7 +514,7 @@
if(!(cfg->surfaceType() & EGL_WINDOW_BIT)) {
RETURN_ERROR(EGL_NO_SURFACE,EGL_BAD_MATCH);
}
- if(!EglOS::validNativeWin(dpy->nativeType(),win)) {
+ if(!dpy->nativeType()->isValidNativeWin(win)) {
RETURN_ERROR(EGL_NO_SURFACE,EGL_BAD_NATIVE_WINDOW);
}
if(!EglValidate::noAttribs(attrib_list)) {
@@ -504,31 +525,33 @@
}
unsigned int width,height;
- if(!EglOS::checkWindowPixelFormatMatch(dpy->nativeType(),win,cfg,&width,&height)) {
+ if(!dpy->nativeType()->checkWindowPixelFormatMatch(
+ win, cfg->nativeFormat(), &width, &height)) {
RETURN_ERROR(EGL_NO_SURFACE,EGL_BAD_ALLOC);
}
SurfacePtr wSurface(new EglWindowSurface(dpy, win,cfg,width,height));
- if(!wSurface.Ptr()) {
+ if(!wSurface.get()) {
RETURN_ERROR(EGL_NO_SURFACE,EGL_BAD_ALLOC);
}
return dpy->addSurface(wSurface);
}
-EGLAPI EGLSurface EGLAPIENTRY eglCreatePbufferSurface(EGLDisplay display, EGLConfig config,
- const EGLint *attrib_list) {
+EGLAPI EGLSurface EGLAPIENTRY eglCreatePbufferSurface(
+ EGLDisplay display,
+ EGLConfig config,
+ const EGLint *attrib_list) {
VALIDATE_DISPLAY_RETURN(display,EGL_NO_SURFACE);
VALIDATE_CONFIG_RETURN(config,EGL_NO_SURFACE);
if(!(cfg->surfaceType() & EGL_PBUFFER_BIT)) {
RETURN_ERROR(EGL_NO_SURFACE,EGL_BAD_MATCH);
}
-
SurfacePtr pbSurface(new EglPbufferSurface(dpy,cfg));
- if(!pbSurface.Ptr()) {
+ if(!pbSurface.get()) {
RETURN_ERROR(EGL_NO_SURFACE,EGL_BAD_ALLOC);
}
- if(!EglValidate::noAttribs(attrib_list)) { //there are attribs
+ if(!EglValidate::noAttribs(attrib_list)) { // There are attribs.
int i = 0 ;
while(attrib_list[i] != EGL_NONE) {
if(!pbSurface->setAttrib(attrib_list[i],attrib_list[i+1])) {
@@ -538,17 +561,33 @@
}
}
- EGLint width,height,largest,texTarget,texFormat;
- EglPbufferSurface* tmpPbSurfacePtr = static_cast<EglPbufferSurface*>(pbSurface.Ptr());
- tmpPbSurfacePtr->getDim(&width,&height,&largest);
- tmpPbSurfacePtr->getTexInfo(&texTarget,&texFormat);
+ EGLint width, height, largest, texTarget, texFormat;
+ EglPbufferSurface* tmpPbSurfacePtr =
+ static_cast<EglPbufferSurface*>(pbSurface.get());
- if(!EglValidate::pbufferAttribs(width,height,texFormat == EGL_NO_TEXTURE,texTarget == EGL_NO_TEXTURE)) {
+ tmpPbSurfacePtr->getDim(&width, &height, &largest);
+ tmpPbSurfacePtr->getTexInfo(&texTarget, &texFormat);
+
+ if(!EglValidate::pbufferAttribs(width,
+ height,
+ texFormat == EGL_NO_TEXTURE,
+ texTarget == EGL_NO_TEXTURE)) {
//TODO: RETURN_ERROR(EGL_NO_SURFACE,EGL_BAD_VALUE); dont have bad_value
RETURN_ERROR(EGL_NO_SURFACE,EGL_BAD_ATTRIBUTE);
}
- EGLNativeSurfaceType pb = EglOS::createPbufferSurface(dpy->nativeType(),cfg,tmpPbSurfacePtr);
+ EglOS::PbufferInfo pbinfo;
+
+ pbinfo.width = width;
+ pbinfo.height = height;
+ pbinfo.largest = largest;
+ pbinfo.target = texTarget;
+ pbinfo.format = texFormat;
+
+ tmpPbSurfacePtr->getAttrib(EGL_MIPMAP_TEXTURE, &pbinfo.hasMipmap);
+
+ EglOS::Surface* pb = dpy->nativeType()->createPbufferSurface(
+ cfg->nativeFormat(), &pbinfo);
if(!pb) {
//TODO: RETURN_ERROR(EGL_NO_SURFACE,EGL_BAD_VALUE); dont have bad value
RETURN_ERROR(EGL_NO_SURFACE,EGL_BAD_ATTRIBUTE);
@@ -558,37 +597,10 @@
return dpy->addSurface(pbSurface);
}
-EGLAPI EGLSurface EGLAPIENTRY eglCreatePixmapSurface(EGLDisplay display, EGLConfig config,
- EGLNativePixmapType pixmap,
- const EGLint *attrib_list) {
- VALIDATE_DISPLAY_RETURN(display,EGL_NO_SURFACE);
- VALIDATE_CONFIG_RETURN(config,EGL_NO_SURFACE);
- if(!(cfg->surfaceType() & EGL_PIXMAP_BIT)) {
- RETURN_ERROR(EGL_NO_SURFACE,EGL_BAD_MATCH);
- }
- if(!EglValidate::noAttribs(attrib_list)) {
- RETURN_ERROR(EGL_NO_SURFACE,EGL_BAD_ATTRIBUTE);
- }
- if(EglPixmapSurface::alreadyAssociatedWithConfig(pixmap)) {
- RETURN_ERROR(EGL_NO_SURFACE,EGL_BAD_ALLOC);
- }
-
- unsigned int width,height;
- if(!EglOS::checkPixmapPixelFormatMatch(dpy->nativeType(),pixmap,cfg,&width,&height)) {
- RETURN_ERROR(EGL_NO_SURFACE,EGL_BAD_ALLOC);
- }
- SurfacePtr pixSurface(new EglPixmapSurface(dpy, pixmap,cfg));
- if(!pixSurface.Ptr()) {
- RETURN_ERROR(EGL_NO_SURFACE,EGL_BAD_ALLOC);
- }
-
- return dpy->addSurface(pixSurface);
-}
-
EGLAPI EGLBoolean EGLAPIENTRY eglDestroySurface(EGLDisplay display, EGLSurface surface) {
VALIDATE_DISPLAY(display);
SurfacePtr srfc = dpy->getSurface(surface);
- if(!srfc.Ptr()) {
+ if(!srfc.get()) {
RETURN_ERROR(EGL_FALSE,EGL_BAD_SURFACE);
}
@@ -641,7 +653,7 @@
i+=2;
}
}
- GLESiface* iface = g_eglInfo->getIface(version);
+ const GLESiface* iface = g_eglInfo->getIface(version);
GLEScontext* glesCtx = NULL;
if(iface) {
glesCtx = iface->createGLESContext();
@@ -652,13 +664,14 @@
ContextPtr sharedCtxPtr;
if(share_context != EGL_NO_CONTEXT) {
sharedCtxPtr = dpy->getContext(share_context);
- if(!sharedCtxPtr.Ptr()) {
+ if(!sharedCtxPtr.get()) {
RETURN_ERROR(EGL_NO_CONTEXT,EGL_BAD_CONTEXT);
}
}
- EGLNativeContextType globalSharedContext = dpy->getGlobalSharedContext();
- EGLNativeContextType nativeContext = EglOS::createContext(dpy->nativeType(),cfg,globalSharedContext);
+ EglOS::Context* globalSharedContext = dpy->getGlobalSharedContext();
+ EglOS::Context* nativeContext = dpy->nativeType()->createContext(
+ cfg->nativeFormat(), globalSharedContext);
if(nativeContext) {
ContextPtr ctx(new EglContext(dpy, nativeContext,sharedCtxPtr,cfg,glesCtx,version,dpy->getManager(version)));
@@ -678,23 +691,24 @@
return EGL_TRUE;
}
-EGLAPI EGLBoolean EGLAPIENTRY eglMakeCurrent(EGLDisplay display, EGLSurface draw,
- EGLSurface read, EGLContext context) {
+EGLAPI EGLBoolean EGLAPIENTRY eglMakeCurrent(EGLDisplay display,
+ EGLSurface draw,
+ EGLSurface read,
+ EGLContext context) {
VALIDATE_DISPLAY(display);
-
- bool releaseContext = EglValidate::releaseContext(context,read,draw);
- if(!releaseContext && EglValidate::badContextMatch(context,read,draw)) {
- RETURN_ERROR(EGL_FALSE,EGL_BAD_MATCH);
+ bool releaseContext = EglValidate::releaseContext(context, read, draw);
+ if(!releaseContext && EglValidate::badContextMatch(context, read, draw)) {
+ RETURN_ERROR(EGL_FALSE, EGL_BAD_MATCH);
}
- ThreadInfo* thread = getThreadInfo();
- ContextPtr prevCtx = thread->eglContext;
+ ThreadInfo* thread = getThreadInfo();
+ ContextPtr prevCtx = thread->eglContext;
if(releaseContext) { //releasing current context
- if(prevCtx.Ptr()) {
+ if(prevCtx.get()) {
g_eglInfo->getIface(prevCtx->version())->flush();
- if(!EglOS::makeCurrent(dpy->nativeType(),NULL,NULL,NULL)) {
+ if(!dpy->nativeType()->makeCurrent(NULL,NULL,NULL)) {
RETURN_ERROR(EGL_FALSE,EGL_BAD_ACCESS);
}
thread->updateInfo(ContextPtr(NULL),dpy,NULL,ShareGroupPtr(NULL),dpy->getManager(prevCtx->version()));
@@ -704,14 +718,14 @@
VALIDATE_SURFACE(draw,newDrawSrfc);
VALIDATE_SURFACE(read,newReadSrfc);
- EglSurface* newDrawPtr = newDrawSrfc.Ptr();
- EglSurface* newReadPtr = newReadSrfc.Ptr();
+ EglSurface* newDrawPtr = newDrawSrfc.get();
+ EglSurface* newReadPtr = newReadSrfc.get();
ContextPtr newCtx = ctx;
- if (newCtx.Ptr() && prevCtx.Ptr()) {
- if (newCtx.Ptr() == prevCtx.Ptr()) {
- if (newDrawPtr == prevCtx->draw().Ptr() &&
- newReadPtr == prevCtx->read().Ptr()) {
+ if (newCtx.get() && prevCtx.get()) {
+ if (newCtx.get() == prevCtx.get()) {
+ if (newDrawPtr == prevCtx->draw().get() &&
+ newReadPtr == prevCtx->read().get()) {
// nothing to do
return EGL_TRUE;
}
@@ -722,34 +736,32 @@
}
}
- //surfaces compitability check
- if(!((*ctx->getConfig()).compitableWith((*newDrawPtr->getConfig()))) ||
- !((*ctx->getConfig()).compitableWith((*newReadPtr->getConfig())))) {
+ //surfaces compatibility check
+ if(!((*ctx->getConfig()).compatibleWith((*newDrawPtr->getConfig()))) ||
+ !((*ctx->getConfig()).compatibleWith((*newReadPtr->getConfig())))) {
RETURN_ERROR(EGL_FALSE,EGL_BAD_MATCH);
}
- EGLNativeInternalDisplayType nativeDisplay = dpy->nativeType();
- EGLNativeSurfaceType nativeRead = newReadPtr->native();
- EGLNativeSurfaceType nativeDraw = newDrawPtr->native();
+ EglOS::Display* nativeDisplay = dpy->nativeType();
+ EglOS::Surface* nativeRead = newReadPtr->native();
+ EglOS::Surface* nativeDraw = newDrawPtr->native();
//checking native window validity
- if(newReadPtr->type() == EglSurface::WINDOW && !EglOS::validNativeWin(nativeDisplay,nativeRead)) {
+ if(newReadPtr->type() == EglSurface::WINDOW &&
+ !nativeDisplay->isValidNativeWin(nativeRead)) {
RETURN_ERROR(EGL_FALSE,EGL_BAD_NATIVE_WINDOW);
}
- if(newDrawPtr->type() == EglSurface::WINDOW && !EglOS::validNativeWin(nativeDisplay,nativeDraw)) {
+ if(newDrawPtr->type() == EglSurface::WINDOW &&
+ !nativeDisplay->isValidNativeWin(nativeDraw)) {
RETURN_ERROR(EGL_FALSE,EGL_BAD_NATIVE_WINDOW);
}
- //checking native pixmap validity
- if(newReadPtr->type() == EglSurface::PIXMAP && !EglOS::validNativePixmap(nativeDisplay,nativeRead)) {
- RETURN_ERROR(EGL_FALSE,EGL_BAD_NATIVE_PIXMAP);
- }
- if(newDrawPtr->type() == EglSurface::PIXMAP && !EglOS::validNativePixmap(nativeDisplay,nativeDraw)) {
- RETURN_ERROR(EGL_FALSE,EGL_BAD_NATIVE_PIXMAP);
- }
- if(prevCtx.Ptr()) {
+ if(prevCtx.get()) {
g_eglInfo->getIface(prevCtx->version())->flush();
}
- if(!EglOS::makeCurrent(dpy->nativeType(),newReadPtr,newDrawPtr,newCtx->nativeType())) {
+ if (!dpy->nativeType()->makeCurrent(
+ newReadPtr->native(),
+ newDrawPtr->native(),
+ newCtx->nativeType())) {
RETURN_ERROR(EGL_FALSE,EGL_BAD_ACCESS);
}
//TODO: handle the following errors
@@ -767,7 +779,7 @@
}
// release previous context surface binding
- if(prevCtx.Ptr() && releaseContext) {
+ if(prevCtx.get() && releaseContext) {
prevCtx->setSurfaces(SurfacePtr(NULL),SurfacePtr(NULL));
}
@@ -797,39 +809,24 @@
RETURN_ERROR(EGL_TRUE,EGL_SUCCESS);
}
- if(!currentCtx.Ptr() || !currentCtx->usingSurface(Srfc) || !EglOS::validNativeWin(dpy->nativeType(),Srfc.Ptr()->native())) {
+ if(!currentCtx.get() || !currentCtx->usingSurface(Srfc) ||
+ !dpy->nativeType()->isValidNativeWin(Srfc.get()->native())) {
RETURN_ERROR(EGL_FALSE,EGL_BAD_SURFACE);
}
- EglOS::swapBuffers(dpy->nativeType(),Srfc->native());
+ dpy->nativeType()->swapBuffers(Srfc->native());
return EGL_TRUE;
}
-EGLAPI EGLBoolean EGLAPIENTRY eglSwapInterval(EGLDisplay display, EGLint interval) {
- VALIDATE_DISPLAY(display);
- ThreadInfo* thread = getThreadInfo();
- 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);
- }
- EglOS::swapInterval(dpy->nativeType(),currCtx->draw()->native(),interval);
- } else {
- RETURN_ERROR(EGL_FALSE,EGL_BAD_SURFACE);
- }
- return EGL_TRUE;
-}
-
-
EGLAPI EGLContext EGLAPIENTRY eglGetCurrentContext(void) {
ThreadInfo* thread = getThreadInfo();
EglDisplay* dpy = static_cast<EglDisplay*>(thread->eglDisplay);
ContextPtr ctx = thread->eglContext;
- if(dpy && ctx.Ptr()){
+ if(dpy && ctx.get()){
// 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)SafePointerFromUInt(ctx->getHndl());
- if(dpy->getContext(c).Ptr())
+ if(dpy->getContext(c).get())
{
return c;
}
@@ -838,15 +835,17 @@
}
EGLAPI EGLSurface EGLAPIENTRY eglGetCurrentSurface(EGLint readdraw) {
- if(!EglValidate::surfaceTarget(readdraw)) return EGL_NO_SURFACE;
+ if (!EglValidate::surfaceTarget(readdraw)) {
+ return EGL_NO_SURFACE;
+ }
ThreadInfo* thread = getThreadInfo();
EglDisplay* dpy = static_cast<EglDisplay*>(thread->eglDisplay);
ContextPtr ctx = thread->eglContext;
- if(dpy && ctx.Ptr()) {
+ if(dpy && ctx.get()) {
SurfacePtr surface = readdraw == EGL_READ ? ctx->read() : ctx->draw();
- if(surface.Ptr())
+ if(surface.get())
{
// This double check is required because a surface might still be
// current after it is destroyed - in which case its handle should
@@ -854,7 +853,7 @@
// though the surface is current.
EGLSurface s = (EGLSurface)SafePointerFromUInt(surface->getHndl());
surface = dpy->getSurface(s);
- if(surface.Ptr())
+ if(surface.get())
{
return s;
}
@@ -864,53 +863,8 @@
}
EGLAPI EGLDisplay EGLAPIENTRY eglGetCurrentDisplay(void) {
- ThreadInfo* thread = getThreadInfo();
- return (thread->eglContext.Ptr()) ? thread->eglDisplay : EGL_NO_DISPLAY;
-}
-
-EGLAPI EGLBoolean EGLAPIENTRY eglWaitGL(void) {
- EGLenum api = eglQueryAPI();
- eglBindAPI(EGL_OPENGL_ES_API);
- EGLBoolean ret = eglWaitClient();
- eglBindAPI(api);
- return ret;
-}
-
-EGLAPI EGLBoolean EGLAPIENTRY eglWaitNative(EGLint engine) {
- if(!EglValidate::engine(engine)) {
- RETURN_ERROR(EGL_FALSE,EGL_BAD_PARAMETER);
- }
- ThreadInfo* thread = getThreadInfo();
- ContextPtr currCtx = thread->eglContext;
- EglDisplay* dpy = static_cast<EglDisplay*>(thread->eglDisplay);
- if(currCtx.Ptr()) {
- SurfacePtr read = currCtx->read();
- SurfacePtr draw = currCtx->draw();
-
- EGLNativeInternalDisplayType nativeDisplay = dpy->nativeType();
- if(read.Ptr()) {
- if(read->type() == EglSurface::WINDOW &&
- !EglOS::validNativeWin(nativeDisplay,read->native())) {
- RETURN_ERROR(EGL_FALSE,EGL_BAD_SURFACE);
- }
- if(read->type() == EglSurface::PIXMAP &&
- !EglOS::validNativePixmap(nativeDisplay,read->native())) {
- RETURN_ERROR(EGL_FALSE,EGL_BAD_SURFACE);
- }
- }
- if(draw.Ptr()) {
- if(draw->type() == EglSurface::WINDOW &&
- !EglOS::validNativeWin(nativeDisplay,draw->native())) {
- RETURN_ERROR(EGL_FALSE,EGL_BAD_SURFACE);
- }
- if(draw->type() == EglSurface::PIXMAP &&
- !EglOS::validNativePixmap(nativeDisplay,draw->native())) {
- RETURN_ERROR(EGL_FALSE,EGL_BAD_SURFACE);
- }
- }
- }
- EglOS::waitNative();
- return EGL_TRUE;
+ ThreadInfo* thread = getThreadInfo();
+ return (thread->eglContext.get()) ? thread->eglDisplay : EGL_NO_DISPLAY;
}
EGLAPI EGLBoolean EGLAPIENTRY eglBindAPI(EGLenum api) {
@@ -927,18 +881,6 @@
return tls_thread->getApi();
}
-EGLAPI EGLBoolean EGLAPIENTRY eglWaitClient(void) {
- ThreadInfo* thread = getThreadInfo();
- ContextPtr currCtx = thread->eglContext;
- if(currCtx.Ptr()) {
- if(!currCtx->read().Ptr() || !currCtx->draw().Ptr()) {
- RETURN_ERROR(EGL_FALSE,EGL_BAD_CURRENT_SURFACE);
- }
- g_eglInfo->getIface(currCtx->version())->finish();
- }
- return EGL_TRUE;
-}
-
EGLAPI EGLBoolean EGLAPIENTRY eglReleaseThread(void) {
ThreadInfo* thread = getThreadInfo();
EglDisplay* dpy = static_cast<EglDisplay*>(thread->eglDisplay);
@@ -967,58 +909,17 @@
return retVal;
}
-//not supported for now
-/************************* NOT SUPPORTED FOR NOW ***********************/
-EGLAPI EGLSurface EGLAPIENTRY eglCreatePbufferFromClientBuffer(
- EGLDisplay display, EGLenum buftype, EGLClientBuffer buffer,
- EGLConfig config, const EGLint *attrib_list) {
- VALIDATE_DISPLAY(display);
- VALIDATE_CONFIG(config);
- //we do not support for now openVG, and the only client API resources which may be bound in this fashion are OpenVG
- RETURN_ERROR(EGL_NO_SURFACE,EGL_BAD_PARAMETER);
-}
-
-EGLAPI EGLBoolean EGLAPIENTRY eglCopyBuffers(EGLDisplay display, EGLSurface surface,
- EGLNativePixmapType target) {
- VALIDATE_DISPLAY(display);
- VALIDATE_SURFACE(surface,srfc);
- if(!EglOS::validNativePixmap(dpy->nativeType(),NULL)) {
- RETURN_ERROR(EGL_FALSE,EGL_BAD_NATIVE_PIXMAP);
- }
-
- //we do not need to support this for android , since we are not gonna use pixmaps
- RETURN_ERROR(EGL_FALSE,EGL_BAD_NATIVE_PIXMAP);
-}
-
-/***********************************************************************/
-
-
-
-//do last ( only if needed)
-/*********************************************************************************************************/
-EGLAPI EGLBoolean EGLAPIENTRY eglBindTexImage(EGLDisplay dpy, EGLSurface surface, EGLint buffer) {
-//TODO:
-return 0;
-}
-
-EGLAPI EGLBoolean EGLAPIENTRY eglReleaseTexImage(EGLDisplay dpy, EGLSurface surface, EGLint buffer) {
-//TODO:
-return 0;
-}
-/*********************************************************************************************************/
-
-
/************************** KHR IMAGE *************************************************************/
EglImage *attachEGLImage(unsigned int imageId)
{
ThreadInfo* thread = getThreadInfo();
EglDisplay* dpy = static_cast<EglDisplay*>(thread->eglDisplay);
ContextPtr ctx = thread->eglContext;
- if (ctx.Ptr()) {
+ if (ctx.get()) {
ImagePtr img = dpy->getImage(reinterpret_cast<EGLImageKHR>(imageId));
- if(img.Ptr()) {
+ if(img.get()) {
ctx->attachImage(imageId,img);
- return img.Ptr();
+ return img.get();
}
}
return NULL;
@@ -1028,7 +929,7 @@
{
ThreadInfo* thread = getThreadInfo();
ContextPtr ctx = thread->eglContext;
- if (ctx.Ptr()) {
+ if (ctx.get()) {
ctx->detachImage(imageId);
}
}
@@ -1046,17 +947,17 @@
ThreadInfo* thread = getThreadInfo();
ShareGroupPtr sg = thread->shareGroup;
- if (sg.Ptr() != NULL) {
+ if (sg.get() != NULL) {
unsigned int globalTexName = sg->getGlobalName(TEXTURE, SafeUIntFromPointer(buffer));
if (!globalTexName) return EGL_NO_IMAGE_KHR;
ImagePtr img( new EglImage() );
- if (img.Ptr() != NULL) {
+ if (img.get() != NULL) {
ObjectDataPtr objData = sg->getObjectData(TEXTURE, SafeUIntFromPointer(buffer));
- if (!objData.Ptr()) return EGL_NO_IMAGE_KHR;
+ if (!objData.get()) return EGL_NO_IMAGE_KHR;
- TextureData *texData = (TextureData *)objData.Ptr();
+ TextureData *texData = (TextureData *)objData.get();
if(!texData->width || !texData->height) return EGL_NO_IMAGE_KHR;
img->width = texData->width;
img->height = texData->height;
diff --git a/distrib/android-emugl/host/libs/Translator/GLES_CM/GLEScmImp.cpp b/distrib/android-emugl/host/libs/Translator/GLES_CM/GLEScmImp.cpp
index 88941b9..91b41b6 100644
--- a/distrib/android-emugl/host/libs/Translator/GLES_CM/GLEScmImp.cpp
+++ b/distrib/android-emugl/host/libs/Translator/GLES_CM/GLEScmImp.cpp
@@ -184,11 +184,11 @@
TextureData *texData = NULL;
ObjectDataPtr objData = ctx->shareGroup()->getObjectData(TEXTURE,tex);
- if(!objData.Ptr()){
+ if(!objData.get()){
texData = new TextureData();
ctx->shareGroup()->setObjectData(TEXTURE, tex, ObjectDataPtr(texData));
} else {
- texData = (TextureData*)objData.Ptr();
+ texData = (TextureData*)objData.get();
}
return texData;
}
@@ -202,9 +202,9 @@
GL_API GLboolean GL_APIENTRY glIsBuffer(GLuint buffer) {
GET_CTX_RET(GL_FALSE)
- if(buffer && ctx->shareGroup().Ptr()) {
+ if(buffer && ctx->shareGroup().get()) {
ObjectDataPtr objData = ctx->shareGroup()->getObjectData(VERTEXBUFFER,buffer);
- return objData.Ptr() ? ((GLESbuffer*)objData.Ptr())->wasBinded():GL_FALSE;
+ return objData.get() ? ((GLESbuffer*)objData.get())->wasBinded():GL_FALSE;
}
return GL_FALSE;
}
@@ -287,13 +287,13 @@
SET_ERROR_IF(!GLEScmValidate::bufferTarget(target),GL_INVALID_ENUM);
//if buffer wasn't generated before,generate one
- if(buffer && ctx->shareGroup().Ptr() && !ctx->shareGroup()->isObject(VERTEXBUFFER,buffer)){
+ if(buffer && ctx->shareGroup().get() && !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*)ctx->shareGroup()->getObjectData(VERTEXBUFFER,buffer).Ptr();
+ GLESbuffer* vbo = (GLESbuffer*)ctx->shareGroup()->getObjectData(VERTEXBUFFER,buffer).get();
vbo->setBinded();
}
}
@@ -307,7 +307,7 @@
ObjectLocalName localTexName = TextureLocalName(target,texture);
GLuint globalTextureName = localTexName;
- if(ctx->shareGroup().Ptr()){
+ if(ctx->shareGroup().get()){
globalTextureName = ctx->shareGroup()->getGlobalName(TEXTURE,localTexName);
//if texture wasn't generated before,generate one
if(!globalTextureName){
@@ -475,7 +475,7 @@
GL_API void GL_APIENTRY glDeleteBuffers( GLsizei n, const GLuint *buffers) {
GET_CTX()
SET_ERROR_IF(n<0,GL_INVALID_VALUE);
- if(ctx->shareGroup().Ptr()) {
+ if(ctx->shareGroup().get()) {
for(int i=0; i < n; i++){
ctx->shareGroup()->deleteName(VERTEXBUFFER,buffers[i]);
ctx->unbindBuffer(buffers[i]);
@@ -486,7 +486,7 @@
GL_API void GL_APIENTRY glDeleteTextures( GLsizei n, const GLuint *textures) {
GET_CTX()
SET_ERROR_IF(n<0,GL_INVALID_VALUE);
- if(ctx->shareGroup().Ptr()) {
+ if(ctx->shareGroup().get()) {
for(int i=0; i < n; i++){
if(textures[i] != 0)
{
@@ -672,7 +672,7 @@
GL_API void GL_APIENTRY glGenBuffers( GLsizei n, GLuint *buffers) {
GET_CTX()
SET_ERROR_IF(n<0,GL_INVALID_VALUE);
- if(ctx->shareGroup().Ptr()) {
+ if(ctx->shareGroup().get()) {
for(int i=0; i<n ;i++) {
buffers[i] = ctx->shareGroup()->genName(VERTEXBUFFER, 0, true);
//generating vbo object related to this buffer name
@@ -683,7 +683,7 @@
GL_API void GL_APIENTRY glGenTextures( GLsizei n, GLuint *textures) {
GET_CTX();
- if(ctx->shareGroup().Ptr()) {
+ if(ctx->shareGroup().get()) {
for(int i=0; i<n ;i++) {
textures[i] = ctx->shareGroup()->genName(TEXTURE, 0, true);
}
@@ -872,13 +872,13 @@
ctx->dispatcher().glGetIntegerv(GL_TEXTURE_GEN_S,¶ms[0]);
break;
case GL_FRAMEBUFFER_BINDING_OES:
- if (ctx->shareGroup().Ptr()) {
+ if (ctx->shareGroup().get()) {
ctx->dispatcher().glGetIntegerv(pname,&i);
*params = ctx->shareGroup()->getLocalName(FRAMEBUFFER,i);
}
break;
case GL_RENDERBUFFER_BINDING_OES:
- if (ctx->shareGroup().Ptr()) {
+ if (ctx->shareGroup().get()) {
ctx->dispatcher().glGetIntegerv(pname,&i);
*params = ctx->shareGroup()->getLocalName(RENDERBUFFER,i);
}
@@ -1457,7 +1457,7 @@
bool needAutoMipmap = false;
- if (ctx->shareGroup().Ptr()){
+ if (ctx->shareGroup().get()){
TextureData *texData = getTextureTargetData(target);
SET_ERROR_IF(texData==NULL,GL_INVALID_OPERATION);
if(texData) {
@@ -1611,7 +1611,7 @@
ctx->dispatcher().glTexSubImage2D(target,level,xoffset,yoffset,width,height,format,type,pixels);
- if (ctx->shareGroup().Ptr()){
+ if (ctx->shareGroup().get()){
TextureData *texData = getTextureTargetData(target);
SET_ERROR_IF(texData==NULL,GL_INVALID_OPERATION);
if(texData && texData->requiresAutoMipmap)
@@ -1653,7 +1653,7 @@
// 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 (ctx->shareGroup().Ptr()) {
+ if (ctx->shareGroup().get()) {
ObjectLocalName tex = TextureLocalName(target,ctx->getBindedTexture(target));
unsigned int oldGlobal = ctx->shareGroup()->getGlobalName(TEXTURE, tex);
// Delete old texture object but only if it is not a target of a EGLImage
@@ -1686,14 +1686,14 @@
unsigned int imagehndl = SafeUIntFromPointer(image);
EglImage *img = s_eglIface->eglAttachEGLImage(imagehndl);
SET_ERROR_IF(!img,GL_INVALID_VALUE);
- SET_ERROR_IF(!ctx->shareGroup().Ptr(),GL_INVALID_OPERATION);
+ SET_ERROR_IF(!ctx->shareGroup().get(),GL_INVALID_OPERATION);
// Get current bounded renderbuffer
// raise INVALID_OPERATIOn if no renderbuffer is bounded
GLuint rb = ctx->getRenderbufferBinding();
SET_ERROR_IF(rb == 0,GL_INVALID_OPERATION);
ObjectDataPtr objData = ctx->shareGroup()->getObjectData(RENDERBUFFER,rb);
- RenderbufferData *rbData = (RenderbufferData *)objData.Ptr();
+ RenderbufferData *rbData = (RenderbufferData *)objData.get();
SET_ERROR_IF(!rbData,GL_INVALID_OPERATION);
//
@@ -1753,7 +1753,7 @@
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 && ctx->shareGroup().Ptr()){
+ if(renderbuffer && ctx->shareGroup().get()){
return ctx->shareGroup()->isObject(RENDERBUFFER,renderbuffer) ? GL_TRUE :GL_FALSE;
}
return ctx->dispatcher().glIsRenderbufferEXT(renderbuffer);
@@ -1765,7 +1765,7 @@
SET_ERROR_IF(!GLEScmValidate::renderbufferTarget(target),GL_INVALID_ENUM);
//if buffer wasn't generated before,generate one
- if(renderbuffer && ctx->shareGroup().Ptr() && !ctx->shareGroup()->isObject(RENDERBUFFER,renderbuffer)){
+ if(renderbuffer && ctx->shareGroup().get() && !ctx->shareGroup()->isObject(RENDERBUFFER,renderbuffer)){
ctx->shareGroup()->genName(RENDERBUFFER,renderbuffer);
ctx->shareGroup()->setObjectData(RENDERBUFFER,
renderbuffer,
@@ -1792,7 +1792,7 @@
GET_CTX()
SET_ERROR_IF(!ctx->getCaps()->GL_EXT_FRAMEBUFFER_OBJECT,GL_INVALID_OPERATION);
SET_ERROR_IF(n<0,GL_INVALID_VALUE);
- if(ctx->shareGroup().Ptr()) {
+ if(ctx->shareGroup().get()) {
for(int i=0; i<n ;i++) {
renderbuffers[i] = ctx->shareGroup()->genName(RENDERBUFFER, 0, true);
ctx->shareGroup()->setObjectData(RENDERBUFFER,
@@ -1814,7 +1814,7 @@
GLuint rb = ctx->getRenderbufferBinding();
SET_ERROR_IF(rb == 0,GL_INVALID_OPERATION);
ObjectDataPtr objData = ctx->shareGroup()->getObjectData(RENDERBUFFER,rb);
- RenderbufferData *rbData = (RenderbufferData *)objData.Ptr();
+ RenderbufferData *rbData = (RenderbufferData *)objData.get();
SET_ERROR_IF(!rbData,GL_INVALID_OPERATION);
//
@@ -1844,7 +1844,7 @@
GLuint rb = ctx->getRenderbufferBinding();
if (rb) {
ObjectDataPtr objData = ctx->shareGroup()->getObjectData(RENDERBUFFER,rb);
- RenderbufferData *rbData = (RenderbufferData *)objData.Ptr();
+ RenderbufferData *rbData = (RenderbufferData *)objData.get();
if (rbData && rbData->sourceEGLImage != 0) {
GLenum texPname;
switch(pname) {
@@ -1897,7 +1897,7 @@
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 && ctx->shareGroup().Ptr()) {
+ if (framebuffer && ctx->shareGroup().get()) {
return ctx->shareGroup()->isObject(FRAMEBUFFER,framebuffer) ? GL_TRUE : GL_FALSE;
}
return ctx->dispatcher().glIsFramebufferEXT(framebuffer);
@@ -1907,7 +1907,7 @@
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 && ctx->shareGroup().Ptr() && !ctx->shareGroup()->isObject(FRAMEBUFFER,framebuffer)) {
+ if (framebuffer && ctx->shareGroup().get() && !ctx->shareGroup()->isObject(FRAMEBUFFER,framebuffer)) {
ctx->shareGroup()->genName(FRAMEBUFFER,framebuffer);
ctx->shareGroup()->setObjectData(FRAMEBUFFER, framebuffer,
ObjectDataPtr(new FramebufferData(framebuffer)));
@@ -1932,7 +1932,7 @@
GET_CTX()
SET_ERROR_IF(!ctx->getCaps()->GL_EXT_FRAMEBUFFER_OBJECT,GL_INVALID_OPERATION);
SET_ERROR_IF(n<0,GL_INVALID_VALUE);
- if (ctx->shareGroup().Ptr()) {
+ if (ctx->shareGroup().get()) {
for (int i=0;i<n;i++) {
framebuffers[i] = ctx->shareGroup()->genName(FRAMEBUFFER, 0, true);
ctx->shareGroup()->setObjectData(FRAMEBUFFER, framebuffers[i],
@@ -1953,7 +1953,7 @@
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);
- SET_ERROR_IF(!ctx->shareGroup().Ptr(), GL_INVALID_OPERATION);
+ SET_ERROR_IF(!ctx->shareGroup().get(), GL_INVALID_OPERATION);
GLuint globalTexName = 0;
if(texture) {
@@ -1969,8 +1969,8 @@
// Update the the current framebuffer object attachment state
GLuint fbName = ctx->getFramebufferBinding();
ObjectDataPtr fbObj = ctx->shareGroup()->getObjectData(FRAMEBUFFER,fbName);
- if (fbObj.Ptr() != NULL) {
- FramebufferData *fbData = (FramebufferData *)fbObj.Ptr();
+ if (fbObj.get() != NULL) {
+ FramebufferData *fbData = (FramebufferData *)fbObj.get();
fbData->setAttachment(attachment, textarget,
texture, ObjectDataPtr(NULL));
}
@@ -1983,7 +1983,7 @@
!GLEScmValidate::framebufferAttachment(attachment) ||
!GLEScmValidate::renderbufferTarget(renderbuffertarget), GL_INVALID_ENUM);
- SET_ERROR_IF(!ctx->shareGroup().Ptr(), GL_INVALID_OPERATION);
+ SET_ERROR_IF(!ctx->shareGroup().get(), GL_INVALID_OPERATION);
GLuint globalBufferName = 0;
ObjectDataPtr obj;
@@ -2006,13 +2006,13 @@
// Update the the current framebuffer object attachment state
GLuint fbName = ctx->getFramebufferBinding();
ObjectDataPtr fbObj = ctx->shareGroup()->getObjectData(FRAMEBUFFER,fbName);
- if (fbObj.Ptr() != NULL) {
- FramebufferData *fbData = (FramebufferData *)fbObj.Ptr();
+ if (fbObj.get() != NULL) {
+ FramebufferData *fbData = (FramebufferData *)fbObj.get();
fbData->setAttachment(attachment, renderbuffertarget, renderbuffer, obj);
}
- if (renderbuffer && obj.Ptr() != NULL) {
- RenderbufferData *rbData = (RenderbufferData *)obj.Ptr();
+ if (renderbuffer && obj.get() != NULL) {
+ RenderbufferData *rbData = (RenderbufferData *)obj.get();
if (rbData->sourceEGLImage != 0) {
//
// This renderbuffer object is an eglImage target
@@ -2041,8 +2041,8 @@
GLuint fbName = ctx->getFramebufferBinding();
if (fbName) {
ObjectDataPtr fbObj = ctx->shareGroup()->getObjectData(FRAMEBUFFER,fbName);
- if (fbObj.Ptr() != NULL) {
- FramebufferData *fbData = (FramebufferData *)fbObj.Ptr();
+ if (fbObj.get() != NULL) {
+ FramebufferData *fbData = (FramebufferData *)fbObj.get();
GLenum target;
GLuint name = fbData->getAttachment(attachment, &target, NULL);
if (pname == GL_FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE_OES) {
@@ -2275,8 +2275,8 @@
ObjectLocalName tex = TextureLocalName(GL_TEXTURE_2D,texname);
ctx->dispatcher().glClientActiveTexture(GL_TEXTURE0+i);
ObjectDataPtr objData = ctx->shareGroup()->getObjectData(TEXTURE,tex);
- if (objData.Ptr()) {
- texData = (TextureData*)objData.Ptr();
+ if (objData.get()) {
+ texData = (TextureData*)objData.get();
//calculate texels
texels[i][0] = (float)(texData->crop_rect[0])/(float)(texData->width);
texels[i][1] = (float)(texData->crop_rect[1])/(float)(texData->height);
diff --git a/distrib/android-emugl/host/libs/Translator/GLES_V2/GLESv2Imp.cpp b/distrib/android-emugl/host/libs/Translator/GLES_V2/GLESv2Imp.cpp
index beefde0..0202b92 100644
--- a/distrib/android-emugl/host/libs/Translator/GLES_V2/GLESv2Imp.cpp
+++ b/distrib/android-emugl/host/libs/Translator/GLES_V2/GLESv2Imp.cpp
@@ -128,19 +128,19 @@
} // extern "C"
static void s_attachShader(GLEScontext* ctx, GLuint program, GLuint shader) {
- if (ctx && program && shader && ctx->shareGroup().Ptr()) {
+ if (ctx && program && shader && ctx->shareGroup().get()) {
ObjectDataPtr shaderData = ctx->shareGroup()->getObjectData(SHADER,shader);
- if (!shaderData.Ptr()) return;
- ShaderParser* shaderParser = (ShaderParser*)shaderData.Ptr();
+ if (!shaderData.get()) return;
+ ShaderParser* shaderParser = (ShaderParser*)shaderData.get();
shaderParser->setAttachedProgram(program);
}
}
static void s_detachShader(GLEScontext* ctx, GLuint shader) {
- if (ctx && shader && ctx->shareGroup().Ptr()) {
+ if (ctx && shader && ctx->shareGroup().get()) {
ObjectDataPtr shaderData = ctx->shareGroup()->getObjectData(SHADER,shader);
- if (!shaderData.Ptr()) return;
- ShaderParser* shaderParser = (ShaderParser*)shaderData.Ptr();
+ if (!shaderData.get()) return;
+ ShaderParser* shaderParser = (ShaderParser*)shaderData.get();
shaderParser->setAttachedProgram(0);
if (shaderParser->getDeleteStatus()) {
ctx->shareGroup()->deleteName(SHADER, shader);
@@ -157,11 +157,11 @@
GET_CTX_RET(NULL);
TextureData *texData = NULL;
ObjectDataPtr objData = ctx->shareGroup()->getObjectData(TEXTURE,tex);
- if(!objData.Ptr()){
+ if(!objData.get()){
texData = new TextureData();
ctx->shareGroup()->setObjectData(TEXTURE, tex, ObjectDataPtr(texData));
} else {
- texData = (TextureData*)objData.Ptr();
+ texData = (TextureData*)objData.get();
}
return texData;
}
@@ -181,7 +181,7 @@
GL_APICALL void GL_APIENTRY glAttachShader(GLuint program, GLuint shader){
GET_CTX();
- if(ctx->shareGroup().Ptr()) {
+ if(ctx->shareGroup().get()) {
const GLuint globalProgramName = ctx->shareGroup()->getGlobalName(SHADER,program);
SET_ERROR_IF(globalProgramName==0, GL_INVALID_VALUE);
const GLuint globalShaderName = ctx->shareGroup()->getGlobalName(SHADER,shader);
@@ -189,12 +189,12 @@
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);
+ SET_ERROR_IF(!shaderData.get() || !programData.get() ,GL_INVALID_OPERATION);
+ SET_ERROR_IF(!(shaderData.get()->getDataType() ==SHADER_DATA) ||
+ !(programData.get()->getDataType()==PROGRAM_DATA) ,GL_INVALID_OPERATION);
- GLenum shaderType = ((ShaderParser*)shaderData.Ptr())->getType();
- ProgramData* pData = (ProgramData*)programData.Ptr();
+ GLenum shaderType = ((ShaderParser*)shaderData.get())->getType();
+ ProgramData* pData = (ProgramData*)programData.get();
SET_ERROR_IF((pData->getAttachedShader(shaderType)!=0), GL_INVALID_OPERATION);
pData->attachShader(shader,shaderType);
s_attachShader(ctx, program, shader);
@@ -206,11 +206,11 @@
GET_CTX();
SET_ERROR_IF(!GLESv2Validate::attribName(name),GL_INVALID_OPERATION);
SET_ERROR_IF(!GLESv2Validate::attribIndex(index),GL_INVALID_VALUE);
- if(ctx->shareGroup().Ptr()) {
+ if(ctx->shareGroup().get()) {
const GLuint globalProgramName = ctx->shareGroup()->getGlobalName(SHADER,program);
SET_ERROR_IF(globalProgramName==0, GL_INVALID_VALUE);
ObjectDataPtr objData = ctx->shareGroup()->getObjectData(SHADER,program);
- SET_ERROR_IF(objData.Ptr()->getDataType()!=PROGRAM_DATA,GL_INVALID_OPERATION);
+ SET_ERROR_IF(objData.get()->getDataType()!=PROGRAM_DATA,GL_INVALID_OPERATION);
ctx->dispatcher().glBindAttribLocation(globalProgramName,index,name);
}
@@ -220,13 +220,13 @@
GET_CTX();
SET_ERROR_IF(!GLESv2Validate::bufferTarget(target),GL_INVALID_ENUM);
//if buffer wasn't generated before,generate one
- if(buffer && ctx->shareGroup().Ptr() && !ctx->shareGroup()->isObject(VERTEXBUFFER,buffer)){
+ if(buffer && ctx->shareGroup().get() && !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*)ctx->shareGroup()->getObjectData(VERTEXBUFFER,buffer).Ptr();
+ GLESbuffer* vbo = (GLESbuffer*)ctx->shareGroup()->getObjectData(VERTEXBUFFER,buffer).get();
vbo->setBinded();
}
}
@@ -236,7 +236,7 @@
SET_ERROR_IF(!GLESv2Validate::framebufferTarget(target),GL_INVALID_ENUM);
GLuint globalFrameBufferName = framebuffer;
- if(framebuffer && ctx->shareGroup().Ptr()){
+ if(framebuffer && ctx->shareGroup().get()){
globalFrameBufferName = ctx->shareGroup()->getGlobalName(FRAMEBUFFER,framebuffer);
//if framebuffer wasn't generated before,generate one
if(!globalFrameBufferName){
@@ -257,7 +257,7 @@
SET_ERROR_IF(!GLESv2Validate::renderbufferTarget(target),GL_INVALID_ENUM);
GLuint globalRenderBufferName = renderbuffer;
- if(renderbuffer && ctx->shareGroup().Ptr()){
+ if(renderbuffer && ctx->shareGroup().get()){
globalRenderBufferName = ctx->shareGroup()->getGlobalName(RENDERBUFFER,renderbuffer);
//if renderbuffer wasn't generated before,generate one
if(!globalRenderBufferName){
@@ -282,7 +282,7 @@
ObjectLocalName localTexName = TextureLocalName(target,texture);
GLuint globalTextureName = localTexName;
- if(ctx->shareGroup().Ptr()){
+ if(ctx->shareGroup().get()){
globalTextureName = ctx->shareGroup()->getGlobalName(TEXTURE,localTexName);
//if texture wasn't generated before,generate one
if(!globalTextureName){
@@ -383,20 +383,24 @@
GL_APICALL void GL_APIENTRY glCompileShader(GLuint shader){
GET_CTX();
- if(ctx->shareGroup().Ptr()) {
+ if(ctx->shareGroup().get()) {
const GLuint globalShaderName = ctx->shareGroup()->getGlobalName(SHADER,shader);
SET_ERROR_IF(globalShaderName==0, GL_INVALID_VALUE);
ObjectDataPtr objData = ctx->shareGroup()->getObjectData(SHADER,shader);
- SET_ERROR_IF(objData.Ptr()->getDataType()!= SHADER_DATA,GL_INVALID_OPERATION);
- ShaderParser* sp = (ShaderParser*)objData.Ptr();
- ctx->dispatcher().glCompileShader(globalShaderName);
+ SET_ERROR_IF(objData.get()->getDataType()!= SHADER_DATA,GL_INVALID_OPERATION);
+ ShaderParser* sp = (ShaderParser*)objData.get();
+ if (sp->validShader()) {
+ ctx->dispatcher().glCompileShader(globalShaderName);
- GLsizei infoLogLength=0;
- GLchar* infoLog;
- ctx->dispatcher().glGetShaderiv(globalShaderName,GL_INFO_LOG_LENGTH,&infoLogLength);
- infoLog = new GLchar[infoLogLength+1];
- ctx->dispatcher().glGetShaderInfoLog(globalShaderName,infoLogLength,NULL,infoLog);
- sp->setInfoLog(infoLog);
+ GLsizei infoLogLength=0;
+ GLchar* infoLog;
+ ctx->dispatcher().glGetShaderiv(globalShaderName,GL_INFO_LOG_LENGTH,&infoLogLength);
+ infoLog = new GLchar[infoLogLength+1];
+ ctx->dispatcher().glGetShaderInfoLog(globalShaderName,infoLogLength,NULL,infoLog);
+ sp->setInfoLog(infoLog);
+ } else {
+ sp->setInvalidInfoLog();
+ }
}
}
@@ -405,6 +409,7 @@
GET_CTX();
SET_ERROR_IF(!GLESv2Validate::textureTargetEx(target),GL_INVALID_ENUM);
SET_ERROR_IF(level < 0 || imageSize < 0, GL_INVALID_VALUE);
+ SET_ERROR_IF(!data,GL_INVALID_OPERATION);
doCompressedTexImage2D(ctx, target, level, internalformat,
width, height, border,
@@ -414,6 +419,7 @@
GL_APICALL void GL_APIENTRY glCompressedTexSubImage2D(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLsizei imageSize, const GLvoid* data){
GET_CTX();
SET_ERROR_IF(!GLESv2Validate::textureTargetEx(target),GL_INVALID_ENUM);
+ SET_ERROR_IF(!data,GL_INVALID_OPERATION);
ctx->dispatcher().glCompressedTexSubImage2D(target,level,xoffset,yoffset,width,height,format,imageSize,data);
}
@@ -434,7 +440,7 @@
GL_APICALL GLuint GL_APIENTRY glCreateProgram(void){
GET_CTX_RET(0);
const GLuint globalProgramName = ctx->dispatcher().glCreateProgram();
- if(ctx->shareGroup().Ptr() && globalProgramName) {
+ if(ctx->shareGroup().get() && globalProgramName) {
ProgramData* programInfo = new ProgramData();
const GLuint localProgramName = ctx->shareGroup()->genName(SHADER, 0, true);
ctx->shareGroup()->replaceGlobalName(SHADER,localProgramName,globalProgramName);
@@ -451,7 +457,7 @@
GET_CTX_V2_RET(0);
RET_AND_SET_ERROR_IF(!GLESv2Validate::shaderType(type),GL_INVALID_ENUM,0);
const GLuint globalShaderName = ctx->dispatcher().glCreateShader(type);
- if(ctx->shareGroup().Ptr() && globalShaderName) {
+ if(ctx->shareGroup().get() && globalShaderName) {
const GLuint localShaderName = ctx->shareGroup()->genName(SHADER, 0, true);
ShaderParser* sp = new ShaderParser(type);
ctx->shareGroup()->replaceGlobalName(SHADER,localShaderName,globalShaderName);
@@ -472,7 +478,7 @@
GL_APICALL void GL_APIENTRY glDeleteBuffers(GLsizei n, const GLuint* buffers){
GET_CTX();
SET_ERROR_IF(n<0,GL_INVALID_VALUE);
- if(ctx->shareGroup().Ptr()) {
+ if(ctx->shareGroup().get()) {
for(int i=0; i < n; i++){
ctx->shareGroup()->deleteName(VERTEXBUFFER,buffers[i]);
}
@@ -482,7 +488,7 @@
GL_APICALL void GL_APIENTRY glDeleteFramebuffers(GLsizei n, const GLuint* framebuffers){
GET_CTX();
SET_ERROR_IF(n<0,GL_INVALID_VALUE);
- if(ctx->shareGroup().Ptr()) {
+ if(ctx->shareGroup().get()) {
for(int i=0; i < n; i++){
const GLuint globalFrameBufferName = ctx->shareGroup()->getGlobalName(FRAMEBUFFER,framebuffers[i]);
ctx->shareGroup()->deleteName(FRAMEBUFFER,framebuffers[i]);
@@ -496,8 +502,8 @@
GLuint fbName = ctx->getFramebufferBinding();
if (!fbName) return;
ObjectDataPtr fbObj = ctx->shareGroup()->getObjectData(FRAMEBUFFER,fbName);
- if (fbObj.Ptr() == NULL) return;
- FramebufferData *fbData = (FramebufferData *)fbObj.Ptr();
+ if (fbObj.get() == NULL) return;
+ FramebufferData *fbData = (FramebufferData *)fbObj.get();
GLenum target;
const GLenum kAttachments[] = {GL_COLOR_ATTACHMENT0, GL_DEPTH_ATTACHMENT, GL_STENCIL_ATTACHMENT};
const size_t sizen = sizeof(kAttachments)/sizeof(GLenum);
@@ -515,7 +521,7 @@
GL_APICALL void GL_APIENTRY glDeleteRenderbuffers(GLsizei n, const GLuint* renderbuffers){
GET_CTX();
SET_ERROR_IF(n<0,GL_INVALID_VALUE);
- if(ctx->shareGroup().Ptr()) {
+ if(ctx->shareGroup().get()) {
for(int i=0; i < n; i++){
const GLuint globalRenderBufferName = ctx->shareGroup()->getGlobalName(RENDERBUFFER,renderbuffers[i]);
ctx->shareGroup()->deleteName(RENDERBUFFER,renderbuffers[i]);
@@ -528,7 +534,7 @@
GL_APICALL void GL_APIENTRY glDeleteTextures(GLsizei n, const GLuint* textures){
GET_CTX();
SET_ERROR_IF(n<0,GL_INVALID_VALUE);
- if(ctx->shareGroup().Ptr()) {
+ if(ctx->shareGroup().get()) {
for(int i=0; i < n; i++){
if (textures[i]!=0) {
TextureData* tData = getTextureData(textures[i]);
@@ -552,12 +558,12 @@
GL_APICALL void GL_APIENTRY glDeleteProgram(GLuint program){
GET_CTX();
- if(program && ctx->shareGroup().Ptr()) {
+ if(program && ctx->shareGroup().get()) {
const GLuint globalProgramName = ctx->shareGroup()->getGlobalName(SHADER,program);
SET_ERROR_IF(!globalProgramName, GL_INVALID_VALUE);
ObjectDataPtr programData = ctx->shareGroup()->getObjectData(SHADER,program);
- ProgramData* pData = (ProgramData*)programData.Ptr();
+ ProgramData* pData = (ProgramData*)programData.get();
if (pData && pData->isInUse()) {
pData->setDeleteStatus(true);
return;
@@ -572,13 +578,13 @@
GL_APICALL void GL_APIENTRY glDeleteShader(GLuint shader){
GET_CTX();
- if(shader && ctx->shareGroup().Ptr()) {
+ if(shader && ctx->shareGroup().get()) {
const GLuint globalShaderName = ctx->shareGroup()->getGlobalName(SHADER,shader);
SET_ERROR_IF(!globalShaderName, GL_INVALID_VALUE);
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();
+ SET_ERROR_IF(!objData.get() ,GL_INVALID_OPERATION);
+ SET_ERROR_IF(objData.get()->getDataType()!=SHADER_DATA,GL_INVALID_OPERATION);
+ ShaderParser* sp = (ShaderParser*)objData.get();
if (sp->getAttachedProgram()) {
sp->setDeleteStatus(true);
} else {
@@ -604,17 +610,17 @@
GL_APICALL void GL_APIENTRY glDetachShader(GLuint program, GLuint shader){
GET_CTX();
- if(ctx->shareGroup().Ptr()) {
+ if(ctx->shareGroup().get()) {
const GLuint globalProgramName = ctx->shareGroup()->getGlobalName(SHADER,program);
SET_ERROR_IF(globalProgramName==0, GL_INVALID_VALUE);
const GLuint globalShaderName = ctx->shareGroup()->getGlobalName(SHADER,shader);
SET_ERROR_IF(globalShaderName==0, GL_INVALID_VALUE);
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);
+ SET_ERROR_IF(!objData.get(),GL_INVALID_OPERATION);
+ SET_ERROR_IF(!(objData.get()->getDataType()==PROGRAM_DATA) ,GL_INVALID_OPERATION);
- ProgramData* programData = (ProgramData*)objData.Ptr();
+ ProgramData* programData = (ProgramData*)objData.get();
SET_ERROR_IF(!programData->isAttached(shader),GL_INVALID_OPERATION);
programData->detachShader(shader);
@@ -681,7 +687,7 @@
GLESConversionArrays tmpArrs;
ctx->setupArraysPointers(tmpArrs,0,count,type,indices,false);
- int maxIndex = ctx->findMaxIndex(count, type, indices);
+ unsigned int maxIndex = ctx->findMaxIndex(count, type, indices);
ctx->validateAtt0PreDraw(maxIndex);
//See glDrawArrays
@@ -727,7 +733,7 @@
SET_ERROR_IF(!(GLESv2Validate::framebufferTarget(target) &&
GLESv2Validate::renderbufferTarget(renderbuffertarget) &&
GLESv2Validate::framebufferAttachment(attachment)),GL_INVALID_ENUM);
- SET_ERROR_IF(!ctx->shareGroup().Ptr(), GL_INVALID_OPERATION);
+ SET_ERROR_IF(!ctx->shareGroup().get(), GL_INVALID_OPERATION);
GLuint globalRenderbufferName = 0;
ObjectDataPtr obj;
@@ -750,13 +756,13 @@
// Update the the current framebuffer object attachment state
GLuint fbName = ctx->getFramebufferBinding();
ObjectDataPtr fbObj = ctx->shareGroup()->getObjectData(FRAMEBUFFER,fbName);
- if (fbObj.Ptr() != NULL) {
- FramebufferData *fbData = (FramebufferData *)fbObj.Ptr();
+ if (fbObj.get() != NULL) {
+ FramebufferData *fbData = (FramebufferData *)fbObj.get();
fbData->setAttachment(attachment, renderbuffertarget, renderbuffer, obj);
}
- if (renderbuffer && obj.Ptr() != NULL) {
- RenderbufferData *rbData = (RenderbufferData *)obj.Ptr();
+ if (renderbuffer && obj.get() != NULL) {
+ RenderbufferData *rbData = (RenderbufferData *)obj.get();
if (rbData->sourceEGLImage != 0) {
//
// This renderbuffer object is an eglImage target
@@ -779,7 +785,7 @@
GLESv2Validate::textureTargetEx(textarget) &&
GLESv2Validate::framebufferAttachment(attachment)),GL_INVALID_ENUM);
SET_ERROR_IF(level != 0, GL_INVALID_VALUE);
- SET_ERROR_IF(!ctx->shareGroup().Ptr(), GL_INVALID_OPERATION);
+ SET_ERROR_IF(!ctx->shareGroup().get(), GL_INVALID_OPERATION);
GLuint globalTextureName = 0;
@@ -796,8 +802,8 @@
// Update the the current framebuffer object attachment state
GLuint fbName = ctx->getFramebufferBinding();
ObjectDataPtr fbObj = ctx->shareGroup()->getObjectData(FRAMEBUFFER,fbName);
- if (fbObj.Ptr() != NULL) {
- FramebufferData *fbData = (FramebufferData *)fbObj.Ptr();
+ if (fbObj.get() != NULL) {
+ FramebufferData *fbData = (FramebufferData *)fbObj.get();
fbData->setAttachment(attachment, textarget,
texture, ObjectDataPtr(NULL));
}
@@ -812,7 +818,7 @@
GL_APICALL void GL_APIENTRY glGenBuffers(GLsizei n, GLuint* buffers){
GET_CTX();
SET_ERROR_IF(n<0,GL_INVALID_VALUE);
- if(ctx->shareGroup().Ptr()) {
+ if(ctx->shareGroup().get()) {
for(int i=0; i<n ;i++) {
buffers[i] = ctx->shareGroup()->genName(VERTEXBUFFER, 0, true);
//generating vbo object related to this buffer name
@@ -830,7 +836,7 @@
GL_APICALL void GL_APIENTRY glGenFramebuffers(GLsizei n, GLuint* framebuffers){
GET_CTX();
SET_ERROR_IF(n<0,GL_INVALID_VALUE);
- if(ctx->shareGroup().Ptr()) {
+ if(ctx->shareGroup().get()) {
for(int i=0; i<n ;i++) {
framebuffers[i] = ctx->shareGroup()->genName(FRAMEBUFFER, 0 ,true);
ctx->shareGroup()->setObjectData(FRAMEBUFFER, framebuffers[i],
@@ -842,7 +848,7 @@
GL_APICALL void GL_APIENTRY glGenRenderbuffers(GLsizei n, GLuint* renderbuffers){
GET_CTX();
SET_ERROR_IF(n<0,GL_INVALID_VALUE);
- if(ctx->shareGroup().Ptr()) {
+ if(ctx->shareGroup().get()) {
for(int i=0; i<n ;i++) {
renderbuffers[i] = ctx->shareGroup()->genName(RENDERBUFFER, 0, true);
ctx->shareGroup()->setObjectData(RENDERBUFFER,
@@ -855,7 +861,7 @@
GL_APICALL void GL_APIENTRY glGenTextures(GLsizei n, GLuint* textures){
GET_CTX();
SET_ERROR_IF(n<0,GL_INVALID_VALUE);
- if(ctx->shareGroup().Ptr()) {
+ if(ctx->shareGroup().get()) {
for(int i=0; i<n ;i++) {
textures[i] = ctx->shareGroup()->genName(TEXTURE, 0, true);
}
@@ -864,34 +870,34 @@
GL_APICALL void GL_APIENTRY glGetActiveAttrib(GLuint program, GLuint index, GLsizei bufsize, GLsizei* length, GLint* size, GLenum* type, GLchar* name){
GET_CTX();
- if(ctx->shareGroup().Ptr()) {
+ if(ctx->shareGroup().get()) {
const GLuint globalProgramName = ctx->shareGroup()->getGlobalName(SHADER,program);
SET_ERROR_IF(globalProgramName==0, GL_INVALID_VALUE);
ObjectDataPtr objData = ctx->shareGroup()->getObjectData(SHADER,program);
- SET_ERROR_IF(objData.Ptr()->getDataType()!=PROGRAM_DATA,GL_INVALID_OPERATION);
+ SET_ERROR_IF(objData.get()->getDataType()!=PROGRAM_DATA,GL_INVALID_OPERATION);
ctx->dispatcher().glGetActiveAttrib(globalProgramName,index,bufsize,length,size,type,name);
}
}
GL_APICALL void GL_APIENTRY glGetActiveUniform(GLuint program, GLuint index, GLsizei bufsize, GLsizei* length, GLint* size, GLenum* type, GLchar* name){
GET_CTX();
- if(ctx->shareGroup().Ptr()) {
+ if(ctx->shareGroup().get()) {
const GLuint globalProgramName = ctx->shareGroup()->getGlobalName(SHADER,program);
SET_ERROR_IF(globalProgramName==0, GL_INVALID_VALUE);
ObjectDataPtr objData = ctx->shareGroup()->getObjectData(SHADER,program);
- SET_ERROR_IF(objData.Ptr()->getDataType()!=PROGRAM_DATA,GL_INVALID_OPERATION);
+ SET_ERROR_IF(objData.get()->getDataType()!=PROGRAM_DATA,GL_INVALID_OPERATION);
ctx->dispatcher().glGetActiveUniform(globalProgramName,index,bufsize,length,size,type,name);
}
}
GL_APICALL void GL_APIENTRY glGetAttachedShaders(GLuint program, GLsizei maxcount, GLsizei* count, GLuint* shaders){
GET_CTX();
- if(ctx->shareGroup().Ptr()) {
+ if(ctx->shareGroup().get()) {
const GLuint globalProgramName = ctx->shareGroup()->getGlobalName(SHADER,program);
SET_ERROR_IF(globalProgramName==0, GL_INVALID_VALUE);
ctx->dispatcher().glGetAttachedShaders(globalProgramName,maxcount,count,shaders);
ObjectDataPtr objData = ctx->shareGroup()->getObjectData(SHADER,program);
- SET_ERROR_IF(objData.Ptr()->getDataType()!=PROGRAM_DATA,GL_INVALID_OPERATION);
+ SET_ERROR_IF(objData.get()->getDataType()!=PROGRAM_DATA,GL_INVALID_OPERATION);
GLint numShaders=0;
ctx->dispatcher().glGetProgramiv(globalProgramName,GL_ATTACHED_SHADERS,&numShaders);
for(int i=0 ; i < maxcount && i<numShaders ;i++){
@@ -902,12 +908,12 @@
GL_APICALL int GL_APIENTRY glGetAttribLocation(GLuint program, const GLchar* name){
GET_CTX_RET(-1);
- if(ctx->shareGroup().Ptr()) {
+ if(ctx->shareGroup().get()) {
const GLuint globalProgramName = ctx->shareGroup()->getGlobalName(SHADER,program);
RET_AND_SET_ERROR_IF(globalProgramName==0, GL_INVALID_VALUE,-1);
ObjectDataPtr objData = ctx->shareGroup()->getObjectData(SHADER,program);
- RET_AND_SET_ERROR_IF(objData.Ptr()->getDataType()!=PROGRAM_DATA,GL_INVALID_OPERATION,-1);
- ProgramData* pData = (ProgramData *)objData.Ptr();
+ RET_AND_SET_ERROR_IF(objData.get()->getDataType()!=PROGRAM_DATA,GL_INVALID_OPERATION,-1);
+ ProgramData* pData = (ProgramData *)objData.get();
RET_AND_SET_ERROR_IF(pData->getLinkStatus() != GL_TRUE,GL_INVALID_OPERATION,-1);
return ctx->dispatcher().glGetAttribLocation(globalProgramName,name);
}
@@ -1056,19 +1062,19 @@
switch (pname) {
case GL_CURRENT_PROGRAM:
- if (ctx->shareGroup().Ptr()) {
+ if (ctx->shareGroup().get()) {
ctx->dispatcher().glGetIntegerv(pname,&i);
*params = ctx->shareGroup()->getLocalName(SHADER,i);
}
break;
case GL_FRAMEBUFFER_BINDING:
- if (ctx->shareGroup().Ptr()) {
+ if (ctx->shareGroup().get()) {
ctx->dispatcher().glGetIntegerv(pname,&i);
*params = ctx->shareGroup()->getLocalName(FRAMEBUFFER,i);
}
break;
case GL_RENDERBUFFER_BINDING:
- if (ctx->shareGroup().Ptr()) {
+ if (ctx->shareGroup().get()) {
ctx->dispatcher().glGetIntegerv(pname,&i);
*params = ctx->shareGroup()->getLocalName(RENDERBUFFER,i);
}
@@ -1151,8 +1157,8 @@
SET_ERROR_IF (!fbName, GL_INVALID_OPERATION);
if (fbName) {
ObjectDataPtr fbObj = ctx->shareGroup()->getObjectData(FRAMEBUFFER,fbName);
- if (fbObj.Ptr() != NULL) {
- FramebufferData *fbData = (FramebufferData *)fbObj.Ptr();
+ if (fbObj.get() != NULL) {
+ FramebufferData *fbData = (FramebufferData *)fbObj.get();
GLenum target;
GLuint name = fbData->getAttachment(attachment, &target, NULL);
if (!name) {
@@ -1192,7 +1198,7 @@
GLuint rb = ctx->getRenderbufferBinding();
if (rb) {
ObjectDataPtr objData = ctx->shareGroup()->getObjectData(RENDERBUFFER,rb);
- RenderbufferData *rbData = (RenderbufferData *)objData.Ptr();
+ RenderbufferData *rbData = (RenderbufferData *)objData.get();
if (rbData && rbData->sourceEGLImage != 0) {
GLenum texPname;
switch(pname) {
@@ -1246,25 +1252,25 @@
GL_APICALL void GL_APIENTRY glGetProgramiv(GLuint program, GLenum pname, GLint* params){
GET_CTX();
SET_ERROR_IF(!GLESv2Validate::programParam(pname),GL_INVALID_ENUM);
- if(ctx->shareGroup().Ptr()) {
+ if(ctx->shareGroup().get()) {
const GLuint globalProgramName = ctx->shareGroup()->getGlobalName(SHADER,program);
SET_ERROR_IF(globalProgramName==0, GL_INVALID_VALUE);
switch(pname) {
case GL_DELETE_STATUS:
{
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();
+ SET_ERROR_IF(!objData.get() ,GL_INVALID_OPERATION);
+ SET_ERROR_IF(objData.get()->getDataType()!=PROGRAM_DATA,GL_INVALID_OPERATION);
+ ProgramData* programData = (ProgramData*)objData.get();
params[0] = programData->getDeleteStatus() ? GL_TRUE : GL_FALSE;
}
break;
case GL_LINK_STATUS:
{
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();
+ SET_ERROR_IF(!objData.get() ,GL_INVALID_OPERATION);
+ SET_ERROR_IF(objData.get()->getDataType()!=PROGRAM_DATA,GL_INVALID_OPERATION);
+ ProgramData* programData = (ProgramData*)objData.get();
params[0] = programData->getLinkStatus();
}
break;
@@ -1272,9 +1278,9 @@
case GL_VALIDATE_STATUS:
{
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();
+ SET_ERROR_IF(!objData.get() ,GL_INVALID_OPERATION);
+ SET_ERROR_IF(objData.get()->getDataType()!=PROGRAM_DATA,GL_INVALID_OPERATION);
+ ProgramData* programData = (ProgramData*)objData.get();
if (programData->getLinkStatus()==GL_TRUE)
ctx->dispatcher().glGetProgramiv(globalProgramName,pname,params);
else
@@ -1284,9 +1290,9 @@
case GL_INFO_LOG_LENGTH:
{
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();
+ SET_ERROR_IF(!objData.get() ,GL_INVALID_OPERATION);
+ SET_ERROR_IF(objData.get()->getDataType()!=PROGRAM_DATA,GL_INVALID_OPERATION);
+ ProgramData* programData = (ProgramData*)objData.get();
GLint logLength = strlen(programData->getInfoLog());
params[0] = (logLength>0) ? logLength+1 : 0;
}
@@ -1299,13 +1305,13 @@
GL_APICALL void GL_APIENTRY glGetProgramInfoLog(GLuint program, GLsizei bufsize, GLsizei* length, GLchar* infolog){
GET_CTX();
- if(ctx->shareGroup().Ptr()) {
+ if(ctx->shareGroup().get()) {
const GLuint globalProgramName = ctx->shareGroup()->getGlobalName(SHADER,program);
SET_ERROR_IF(globalProgramName==0, GL_INVALID_VALUE);
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();
+ SET_ERROR_IF(!objData.get() ,GL_INVALID_OPERATION);
+ SET_ERROR_IF(objData.get()->getDataType()!=PROGRAM_DATA,GL_INVALID_OPERATION);
+ ProgramData* programData = (ProgramData*)objData.get();
if (bufsize==0) {
if (length) {
@@ -1331,14 +1337,14 @@
GL_APICALL void GL_APIENTRY glGetShaderiv(GLuint shader, GLenum pname, GLint* params){
GET_CTX();
- if(ctx->shareGroup().Ptr()) {
+ if(ctx->shareGroup().get()) {
const GLuint globalShaderName = ctx->shareGroup()->getGlobalName(SHADER,shader);
if (pname == GL_DELETE_STATUS) {
SET_ERROR_IF(globalShaderName == 0, GL_INVALID_VALUE);
ObjectDataPtr objData = ctx->shareGroup()->getObjectData(SHADER,shader);
- SET_ERROR_IF(!objData.Ptr() ,GL_INVALID_VALUE);
- SET_ERROR_IF(objData.Ptr()->getDataType()!=SHADER_DATA,GL_INVALID_VALUE);
- ShaderParser* sp = (ShaderParser*)objData.Ptr();
+ SET_ERROR_IF(!objData.get() ,GL_INVALID_VALUE);
+ SET_ERROR_IF(objData.get()->getDataType()!=SHADER_DATA,GL_INVALID_VALUE);
+ ShaderParser* sp = (ShaderParser*)objData.get();
params[0] = (sp->getDeleteStatus()) ? GL_TRUE : GL_FALSE;
return;
}
@@ -1347,9 +1353,9 @@
case GL_INFO_LOG_LENGTH:
{
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();
+ SET_ERROR_IF(!objData.get() ,GL_INVALID_OPERATION);
+ SET_ERROR_IF(objData.get()->getDataType()!=SHADER_DATA,GL_INVALID_OPERATION);
+ ShaderParser* sp = (ShaderParser*)objData.get();
GLint logLength = strlen(sp->getInfoLog());
params[0] = (logLength>0) ? logLength+1 : 0;
}
@@ -1363,13 +1369,13 @@
GL_APICALL void GL_APIENTRY glGetShaderInfoLog(GLuint shader, GLsizei bufsize, GLsizei* length, GLchar* infolog){
GET_CTX();
- if(ctx->shareGroup().Ptr()) {
+ if(ctx->shareGroup().get()) {
const GLuint globalShaderName = ctx->shareGroup()->getGlobalName(SHADER,shader);
SET_ERROR_IF(globalShaderName==0, GL_INVALID_VALUE);
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();
+ SET_ERROR_IF(!objData.get() ,GL_INVALID_OPERATION);
+ SET_ERROR_IF(objData.get()->getDataType()!=SHADER_DATA,GL_INVALID_OPERATION);
+ ShaderParser* sp = (ShaderParser*)objData.get();
if (bufsize==0) {
if (length) {
@@ -1420,21 +1426,18 @@
GL_APICALL void GL_APIENTRY glGetShaderSource(GLuint shader, GLsizei bufsize, GLsizei* length, GLchar* source){
GET_CTX();
- if(ctx->shareGroup().Ptr()) {
+ if(ctx->shareGroup().get()) {
const GLuint globalShaderName = ctx->shareGroup()->getGlobalName(SHADER,shader);
SET_ERROR_IF(globalShaderName == 0,GL_INVALID_VALUE);
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();
- int srcLength = 0;
- if (src) {
- srcLength = strlen(src);
- }
+ SET_ERROR_IF(!objData.get(),GL_INVALID_OPERATION);
+ SET_ERROR_IF(objData.get()->getDataType()!=SHADER_DATA,GL_INVALID_OPERATION);
+ const std::string& src = ((ShaderParser*)objData.get())->getOriginalSrc();
+ int srcLength = static_cast<int>(src.size());
int returnLength = bufsize<srcLength ? bufsize-1 : srcLength;
if (returnLength) {
- strncpy(source,src, returnLength);
+ strncpy(source, src.c_str(), returnLength);
source[returnLength] = '\0';
}
@@ -1478,12 +1481,12 @@
GL_APICALL void GL_APIENTRY glGetUniformfv(GLuint program, GLint location, GLfloat* params){
GET_CTX();
SET_ERROR_IF(location < 0,GL_INVALID_OPERATION);
- if(ctx->shareGroup().Ptr()) {
+ if(ctx->shareGroup().get()) {
const GLuint globalProgramName = ctx->shareGroup()->getGlobalName(SHADER,program);
SET_ERROR_IF(globalProgramName==0, GL_INVALID_VALUE);
ObjectDataPtr objData = ctx->shareGroup()->getObjectData(SHADER,program);
- SET_ERROR_IF(objData.Ptr()->getDataType()!=PROGRAM_DATA,GL_INVALID_OPERATION);
- ProgramData* pData = (ProgramData *)objData.Ptr();
+ SET_ERROR_IF(objData.get()->getDataType()!=PROGRAM_DATA,GL_INVALID_OPERATION);
+ ProgramData* pData = (ProgramData *)objData.get();
SET_ERROR_IF(pData->getLinkStatus() != GL_TRUE,GL_INVALID_OPERATION);
ctx->dispatcher().glGetUniformfv(globalProgramName,location,params);
}
@@ -1492,12 +1495,12 @@
GL_APICALL void GL_APIENTRY glGetUniformiv(GLuint program, GLint location, GLint* params){
GET_CTX();
SET_ERROR_IF(location < 0,GL_INVALID_OPERATION);
- if(ctx->shareGroup().Ptr()) {
+ if(ctx->shareGroup().get()) {
const GLuint globalProgramName = ctx->shareGroup()->getGlobalName(SHADER,program);
SET_ERROR_IF(globalProgramName==0, GL_INVALID_VALUE);
ObjectDataPtr objData = ctx->shareGroup()->getObjectData(SHADER,program);
- SET_ERROR_IF(objData.Ptr()->getDataType()!=PROGRAM_DATA,GL_INVALID_OPERATION);
- ProgramData* pData = (ProgramData *)objData.Ptr();
+ SET_ERROR_IF(objData.get()->getDataType()!=PROGRAM_DATA,GL_INVALID_OPERATION);
+ ProgramData* pData = (ProgramData *)objData.get();
SET_ERROR_IF(pData->getLinkStatus() != GL_TRUE,GL_INVALID_OPERATION);
ctx->dispatcher().glGetUniformiv(globalProgramName,location,params);
}
@@ -1505,12 +1508,12 @@
GL_APICALL int GL_APIENTRY glGetUniformLocation(GLuint program, const GLchar* name){
GET_CTX_RET(-1);
- if(ctx->shareGroup().Ptr()) {
+ if(ctx->shareGroup().get()) {
const GLuint globalProgramName = ctx->shareGroup()->getGlobalName(SHADER,program);
RET_AND_SET_ERROR_IF(globalProgramName==0, GL_INVALID_VALUE,-1);
ObjectDataPtr objData = ctx->shareGroup()->getObjectData(SHADER,program);
- RET_AND_SET_ERROR_IF(objData.Ptr()->getDataType()!=PROGRAM_DATA,GL_INVALID_OPERATION,-1);
- ProgramData* pData = (ProgramData *)objData.Ptr();
+ RET_AND_SET_ERROR_IF(objData.get()->getDataType()!=PROGRAM_DATA,GL_INVALID_OPERATION,-1);
+ ProgramData* pData = (ProgramData *)objData.get();
RET_AND_SET_ERROR_IF(pData->getLinkStatus() != GL_TRUE,GL_INVALID_OPERATION,-1);
return ctx->dispatcher().glGetUniformLocation(globalProgramName,name);
}
@@ -1634,16 +1637,16 @@
GL_APICALL GLboolean GL_APIENTRY glIsBuffer(GLuint buffer){
GET_CTX_RET(GL_FALSE)
- if(buffer && ctx->shareGroup().Ptr()) {
+ if(buffer && ctx->shareGroup().get()) {
ObjectDataPtr objData = ctx->shareGroup()->getObjectData(VERTEXBUFFER,buffer);
- return objData.Ptr() ? ((GLESbuffer*)objData.Ptr())->wasBinded():GL_FALSE;
+ return objData.get() ? ((GLESbuffer*)objData.get())->wasBinded():GL_FALSE;
}
return GL_FALSE;
}
GL_APICALL GLboolean GL_APIENTRY glIsFramebuffer(GLuint framebuffer){
GET_CTX_RET(GL_FALSE)
- if(framebuffer && ctx->shareGroup().Ptr()){
+ if(framebuffer && ctx->shareGroup().get()){
return (ctx->shareGroup()->isObject(FRAMEBUFFER,framebuffer) &&
ctx->getFramebufferBinding() == framebuffer) ? GL_TRUE :GL_FALSE;
}
@@ -1652,7 +1655,7 @@
GL_APICALL GLboolean GL_APIENTRY glIsRenderbuffer(GLuint renderbuffer){
GET_CTX_RET(GL_FALSE)
- if(renderbuffer && ctx->shareGroup().Ptr()){
+ if(renderbuffer && ctx->shareGroup().get()){
return (ctx->shareGroup()->isObject(RENDERBUFFER,renderbuffer) &&
ctx->getRenderbufferBinding() == renderbuffer) ? GL_TRUE :GL_FALSE;
}
@@ -1669,7 +1672,7 @@
GL_APICALL GLboolean GL_APIENTRY glIsProgram(GLuint program){
GET_CTX_RET(GL_FALSE)
- if(program && ctx->shareGroup().Ptr() &&
+ if(program && ctx->shareGroup().get() &&
ctx->shareGroup()->isObject(SHADER,program)) {
const GLuint globalProgramName = ctx->shareGroup()->getGlobalName(SHADER,program);
return ctx->dispatcher().glIsProgram(globalProgramName);
@@ -1679,7 +1682,7 @@
GL_APICALL GLboolean GL_APIENTRY glIsShader(GLuint shader){
GET_CTX_RET(GL_FALSE)
- if(shader && ctx->shareGroup().Ptr() &&
+ if(shader && ctx->shareGroup().get() &&
ctx->shareGroup()->isObject(SHADER,shader)) {
const GLuint globalShaderName = ctx->shareGroup()->getGlobalName(SHADER,shader);
return ctx->dispatcher().glIsShader(globalShaderName);
@@ -1695,14 +1698,14 @@
GL_APICALL void GL_APIENTRY glLinkProgram(GLuint program){
GET_CTX();
GLint linkStatus = GL_FALSE;
- if(ctx->shareGroup().Ptr()) {
+ if(ctx->shareGroup().get()) {
const GLuint globalProgramName = ctx->shareGroup()->getGlobalName(SHADER,program);
SET_ERROR_IF(globalProgramName==0, GL_INVALID_VALUE);
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();
+ SET_ERROR_IF(!objData.get(), GL_INVALID_OPERATION);
+ SET_ERROR_IF(objData.get()->getDataType()!=PROGRAM_DATA, GL_INVALID_OPERATION);
+ ProgramData* programData = (ProgramData*)objData.get();
GLint fragmentShader = programData->getAttachedFragmentShader();
GLint vertexShader = programData->getAttachedVertexShader();
if (vertexShader != 0 && fragmentShader!=0) {
@@ -1796,7 +1799,7 @@
GLuint rb = ctx->getRenderbufferBinding();
SET_ERROR_IF(rb == 0,GL_INVALID_OPERATION);
ObjectDataPtr objData = ctx->shareGroup()->getObjectData(RENDERBUFFER,rb);
- RenderbufferData *rbData = (RenderbufferData *)objData.Ptr();
+ RenderbufferData *rbData = (RenderbufferData *)objData.get();
SET_ERROR_IF(!rbData,GL_INVALID_OPERATION);
//
@@ -1829,7 +1832,7 @@
SET_ERROR_IF( (ctx->dispatcher().glShaderBinary == NULL), GL_INVALID_OPERATION);
- if(ctx->shareGroup().Ptr()){
+ if(ctx->shareGroup().get()){
for(int i=0; i < n ; i++){
const GLuint globalShaderName = ctx->shareGroup()->getGlobalName(SHADER,shaders[i]);
SET_ERROR_IF(globalShaderName == 0,GL_INVALID_VALUE);
@@ -1841,15 +1844,16 @@
GL_APICALL void GL_APIENTRY glShaderSource(GLuint shader, GLsizei count, const GLchar* const* string, const GLint* length){
GET_CTX_V2();
SET_ERROR_IF(count < 0,GL_INVALID_VALUE);
- if(ctx->shareGroup().Ptr()){
+ if(ctx->shareGroup().get()){
const GLuint globalShaderName = ctx->shareGroup()->getGlobalName(SHADER,shader);
SET_ERROR_IF(globalShaderName == 0,GL_INVALID_VALUE);
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();
+ SET_ERROR_IF(!objData.get(),GL_INVALID_OPERATION);
+ SET_ERROR_IF(objData.get()->getDataType()!=SHADER_DATA,GL_INVALID_OPERATION);
+ ShaderParser* sp = (ShaderParser*)objData.get();
sp->setSrc(ctx->glslVersion(),count,string,length);
ctx->dispatcher().glShaderSource(globalShaderName,1,sp->parsedLines(),NULL);
+ sp->clear();
}
}
@@ -1908,7 +1912,7 @@
SET_ERROR_IF(!(GLESv2Validate::pixelOp(format,type) && internalformat == ((GLint)format)),GL_INVALID_OPERATION);
SET_ERROR_IF(border != 0,GL_INVALID_VALUE);
- if (ctx->shareGroup().Ptr()){
+ if (ctx->shareGroup().get()){
TextureData *texData = getTextureTargetData(target);
if(texData) {
texData->width = width;
@@ -1976,6 +1980,7 @@
SET_ERROR_IF(!(GLESv2Validate::pixelFrmt(ctx,format)&&
GLESv2Validate::pixelType(ctx,type)),GL_INVALID_ENUM);
SET_ERROR_IF(!GLESv2Validate::pixelOp(format,type),GL_INVALID_OPERATION);
+ SET_ERROR_IF(!pixels,GL_INVALID_OPERATION);
if (type==GL_HALF_FLOAT_OES)
type = GL_HALF_FLOAT_NV;
@@ -2079,23 +2084,23 @@
if (!localCurrentProgram) return;
ObjectDataPtr objData = ctx->shareGroup()->getObjectData(SHADER,localCurrentProgram);
- SET_ERROR_IF(objData.Ptr()->getDataType()!=PROGRAM_DATA,GL_INVALID_OPERATION);
- ProgramData* programData = (ProgramData*)objData.Ptr();
+ SET_ERROR_IF(objData.get()->getDataType()!=PROGRAM_DATA,GL_INVALID_OPERATION);
+ ProgramData* programData = (ProgramData*)objData.get();
programData->setInUse(false);
if (programData->getDeleteStatus()) { glDeleteProgram(localCurrentProgram); }
}
GL_APICALL void GL_APIENTRY glUseProgram(GLuint program){
GET_CTX();
- if(ctx->shareGroup().Ptr()) {
+ if(ctx->shareGroup().get()) {
const GLuint globalProgramName = ctx->shareGroup()->getGlobalName(SHADER,program);
SET_ERROR_IF(program!=0 && globalProgramName==0,GL_INVALID_VALUE);
ObjectDataPtr objData = ctx->shareGroup()->getObjectData(SHADER,program);
- SET_ERROR_IF(objData.Ptr() && (objData.Ptr()->getDataType()!=PROGRAM_DATA),GL_INVALID_OPERATION);
+ SET_ERROR_IF(objData.get() && (objData.get()->getDataType()!=PROGRAM_DATA),GL_INVALID_OPERATION);
s_unUseCurrentProgram();
- ProgramData* programData = (ProgramData*)objData.Ptr();
+ ProgramData* programData = (ProgramData*)objData.get();
if (programData) programData->setInUse(true);
ctx->dispatcher().glUseProgram(globalProgramName);
@@ -2104,12 +2109,12 @@
GL_APICALL void GL_APIENTRY glValidateProgram(GLuint program){
GET_CTX();
- if(ctx->shareGroup().Ptr()) {
+ if(ctx->shareGroup().get()) {
const GLuint globalProgramName = ctx->shareGroup()->getGlobalName(SHADER,program);
SET_ERROR_IF(globalProgramName==0, GL_INVALID_VALUE);
ObjectDataPtr objData = ctx->shareGroup()->getObjectData(SHADER,program);
- SET_ERROR_IF(objData.Ptr()->getDataType()!=PROGRAM_DATA,GL_INVALID_OPERATION);
- ProgramData* programData = (ProgramData*)objData.Ptr();
+ SET_ERROR_IF(objData.get()->getDataType()!=PROGRAM_DATA,GL_INVALID_OPERATION);
+ ProgramData* programData = (ProgramData*)objData.get();
ctx->dispatcher().glValidateProgram(globalProgramName);
GLsizei infoLogLength=0;
@@ -2199,7 +2204,7 @@
// 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 (ctx->shareGroup().Ptr()) {
+ if (ctx->shareGroup().get()) {
ObjectLocalName tex = TextureLocalName(target,ctx->getBindedTexture(target));
unsigned int oldGlobal = ctx->shareGroup()->getGlobalName(TEXTURE, tex);
// Delete old texture object but only if it is not a target of a EGLImage
@@ -2232,14 +2237,14 @@
unsigned int imagehndl = SafeUIntFromPointer(image);
EglImage *img = s_eglIface->eglAttachEGLImage(imagehndl);
SET_ERROR_IF(!img,GL_INVALID_VALUE);
- SET_ERROR_IF(!ctx->shareGroup().Ptr(),GL_INVALID_OPERATION);
+ SET_ERROR_IF(!ctx->shareGroup().get(),GL_INVALID_OPERATION);
// Get current bounded renderbuffer
// raise INVALID_OPERATIOn if no renderbuffer is bounded
GLuint rb = ctx->getRenderbufferBinding();
SET_ERROR_IF(rb == 0,GL_INVALID_OPERATION);
ObjectDataPtr objData = ctx->shareGroup()->getObjectData(RENDERBUFFER,rb);
- RenderbufferData *rbData = (RenderbufferData *)objData.Ptr();
+ RenderbufferData *rbData = (RenderbufferData *)objData.get();
SET_ERROR_IF(!rbData,GL_INVALID_OPERATION);
//
diff --git a/distrib/android-emugl/host/libs/Translator/GLcommon/FramebufferData.cpp b/distrib/android-emugl/host/libs/Translator/GLcommon/FramebufferData.cpp
index 2e35c8d..1fd55e0 100644
--- a/distrib/android-emugl/host/libs/Translator/GLcommon/FramebufferData.cpp
+++ b/distrib/android-emugl/host/libs/Translator/GLcommon/FramebufferData.cpp
@@ -58,7 +58,7 @@
}
if (m_attachPoints[idx].target != target ||
m_attachPoints[idx].name != name ||
- m_attachPoints[idx].obj.Ptr() != obj.Ptr() ||
+ m_attachPoints[idx].obj.get() != obj.get() ||
m_attachPoints[idx].owned != takeOwnership) {
detachObject(idx);
@@ -68,8 +68,8 @@
m_attachPoints[idx].obj = obj;
m_attachPoints[idx].owned = takeOwnership;
- if (target == GL_RENDERBUFFER_OES && obj.Ptr() != NULL) {
- RenderbufferData *rbData = (RenderbufferData *)obj.Ptr();
+ if (target == GL_RENDERBUFFER_OES && obj.get() != NULL) {
+ RenderbufferData *rbData = (RenderbufferData *)obj.get();
rbData->attachedFB = m_fbName;
rbData->attachedPoint = attachment;
}
@@ -102,8 +102,8 @@
}
void FramebufferData::detachObject(int idx) {
- if (m_attachPoints[idx].target == GL_RENDERBUFFER_OES && m_attachPoints[idx].obj.Ptr() != NULL) {
- RenderbufferData *rbData = (RenderbufferData *)m_attachPoints[idx].obj.Ptr();
+ if (m_attachPoints[idx].target == GL_RENDERBUFFER_OES && m_attachPoints[idx].obj.get() != NULL) {
+ RenderbufferData *rbData = (RenderbufferData *)m_attachPoints[idx].obj.get();
rbData->attachedFB = 0;
rbData->attachedPoint = 0;
}
diff --git a/distrib/android-emugl/host/libs/Translator/GLcommon/GLEScontext.cpp b/distrib/android-emugl/host/libs/Translator/GLcommon/GLEScontext.cpp
index 9146805..8a50e87 100644
--- a/distrib/android-emugl/host/libs/Translator/GLcommon/GLEScontext.cpp
+++ b/distrib/android-emugl/host/libs/Translator/GLcommon/GLEScontext.cpp
@@ -246,7 +246,7 @@
GLuint bufferName = m_arrayBuffer;
if(bufferName) {
unsigned int offset = SafeUIntFromPointer(data);
- GLESbuffer* vbo = static_cast<GLESbuffer*>(m_shareGroup->getObjectData(VERTEXBUFFER,bufferName).Ptr());
+ GLESbuffer* vbo = static_cast<GLESbuffer*>(m_shareGroup->getObjectData(VERTEXBUFFER,bufferName).get());
m_map[arrType]->setBuffer(size,type,stride,vbo,bufferName,offset,normalize);
return static_cast<const unsigned char*>(vbo->getData()) + offset;
}
@@ -494,26 +494,26 @@
GLuint bufferName = getBuffer(target);
if(!bufferName) return NULL;
- GLESbuffer* vbo = static_cast<GLESbuffer*>(m_shareGroup->getObjectData(VERTEXBUFFER,bufferName).Ptr());
+ GLESbuffer* vbo = static_cast<GLESbuffer*>(m_shareGroup->getObjectData(VERTEXBUFFER,bufferName).get());
return vbo->getData();
}
void GLEScontext::getBufferSize(GLenum target,GLint* param) {
GLuint bufferName = getBuffer(target);
- GLESbuffer* vbo = static_cast<GLESbuffer*>(m_shareGroup->getObjectData(VERTEXBUFFER,bufferName).Ptr());
+ GLESbuffer* vbo = static_cast<GLESbuffer*>(m_shareGroup->getObjectData(VERTEXBUFFER,bufferName).get());
*param = vbo->getSize();
}
void GLEScontext::getBufferUsage(GLenum target,GLint* param) {
GLuint bufferName = getBuffer(target);
- GLESbuffer* vbo = static_cast<GLESbuffer*>(m_shareGroup->getObjectData(VERTEXBUFFER,bufferName).Ptr());
+ GLESbuffer* vbo = static_cast<GLESbuffer*>(m_shareGroup->getObjectData(VERTEXBUFFER,bufferName).get());
*param = vbo->getUsage();
}
bool GLEScontext::setBufferData(GLenum target,GLsizeiptr size,const GLvoid* data,GLenum usage) {
GLuint bufferName = getBuffer(target);
if(!bufferName) return false;
- GLESbuffer* vbo = static_cast<GLESbuffer*>(m_shareGroup->getObjectData(VERTEXBUFFER,bufferName).Ptr());
+ GLESbuffer* vbo = static_cast<GLESbuffer*>(m_shareGroup->getObjectData(VERTEXBUFFER,bufferName).get());
return vbo->setBuffer(size,usage,data);
}
@@ -521,7 +521,7 @@
GLuint bufferName = getBuffer(target);
if(!bufferName) return false;
- GLESbuffer* vbo = static_cast<GLESbuffer*>(m_shareGroup->getObjectData(VERTEXBUFFER,bufferName).Ptr());
+ GLESbuffer* vbo = static_cast<GLESbuffer*>(m_shareGroup->getObjectData(VERTEXBUFFER,bufferName).get());
return vbo->setSubBuffer(offset,size,data);
}
@@ -834,10 +834,10 @@
return;
ObjectDataPtr fbObj = m_shareGroup->getObjectData(FRAMEBUFFER,m_framebuffer);
- if (fbObj.Ptr() == NULL)
+ if (fbObj.get() == NULL)
return;
- FramebufferData *fbData = (FramebufferData *)fbObj.Ptr();
+ FramebufferData *fbData = (FramebufferData *)fbObj.get();
fbData->validate(this);
}
diff --git a/distrib/android-emugl/host/libs/Translator/include/GLcommon/objectNameManager.h b/distrib/android-emugl/host/libs/Translator/include/GLcommon/objectNameManager.h
index 4d4d038..d3ce2c7 100644
--- a/distrib/android-emugl/host/libs/Translator/include/GLcommon/objectNameManager.h
+++ b/distrib/android-emugl/host/libs/Translator/include/GLcommon/objectNameManager.h
@@ -143,9 +143,8 @@
class ShareGroup
{
friend class ObjectNameManager;
- friend class emugl::SmartPtr<ShareGroup>; // to allow destructing when ShareGroupPtr refcount reaches zero
-
public:
+ ~ShareGroup();
//
// genName - generates new object name and returns its name value.
@@ -201,7 +200,6 @@
private:
explicit ShareGroup(GlobalNameSpace *globalNameSpace);
- ~ShareGroup();
private:
emugl::Mutex m_lock;
diff --git a/distrib/android-emugl/host/libs/libOpenglRender/ColorBuffer.cpp b/distrib/android-emugl/host/libs/libOpenglRender/ColorBuffer.cpp
index 74218f6..3feda65 100644
--- a/distrib/android-emugl/host/libs/libOpenglRender/ColorBuffer.cpp
+++ b/distrib/android-emugl/host/libs/libOpenglRender/ColorBuffer.cpp
@@ -265,7 +265,7 @@
bool ColorBuffer::blitFromCurrentReadBuffer()
{
RenderThreadInfo *tInfo = RenderThreadInfo::get();
- if (!tInfo->currContext.Ptr()) {
+ if (!tInfo->currContext.get()) {
// no Current context
return false;
}
@@ -325,7 +325,7 @@
return false;
}
RenderThreadInfo *tInfo = RenderThreadInfo::get();
- if (!tInfo->currContext.Ptr()) {
+ if (!tInfo->currContext.get()) {
return false;
}
if (tInfo->currContext->isGL2()) {
@@ -342,7 +342,7 @@
return false;
}
RenderThreadInfo *tInfo = RenderThreadInfo::get();
- if (!tInfo->currContext.Ptr()) {
+ if (!tInfo->currContext.get()) {
return false;
}
if (tInfo->currContext->isGL2()) {
diff --git a/distrib/android-emugl/host/libs/libOpenglRender/FrameBuffer.cpp b/distrib/android-emugl/host/libs/libOpenglRender/FrameBuffer.cpp
index faa220a..b39c7f3 100644
--- a/distrib/android-emugl/host/libs/libOpenglRender/FrameBuffer.cpp
+++ b/distrib/android-emugl/host/libs/libOpenglRender/FrameBuffer.cpp
@@ -632,7 +632,7 @@
p_internalFormat,
getCaps().has_eglimage_texture_2d,
m_colorBufferHelper));
- if (cb.Ptr() != NULL) {
+ if (cb.get() != NULL) {
ret = genHandle();
m_colorbuffers[ret].cb = cb;
m_colorbuffers[ret].refcount = 1;
@@ -660,11 +660,11 @@
share = (*s).second;
}
EGLContext sharedContext =
- share.Ptr() ? share->getEGLContext() : EGL_NO_CONTEXT;
+ share.get() ? share->getEGLContext() : EGL_NO_CONTEXT;
RenderContextPtr rctx(RenderContext::create(
m_eglDisplay, config->getEglConfig(), sharedContext, p_isGL2));
- if (rctx.Ptr() != NULL) {
+ if (rctx.get() != NULL) {
ret = genHandle();
m_contexts[ret] = rctx;
RenderThreadInfo *tinfo = RenderThreadInfo::get();
@@ -686,7 +686,7 @@
WindowSurfacePtr win(WindowSurface::create(
getDisplay(), config->getEglConfig(), p_width, p_height));
- if (win.Ptr() != NULL) {
+ if (win.get() != NULL) {
ret = genHandle();
m_windows[ret] = std::pair<WindowSurfacePtr, HandleType>(win,0);
RenderThreadInfo *tinfo = RenderThreadInfo::get();
@@ -791,7 +791,7 @@
return false;
}
- WindowSurface* surface = (*w).second.first.Ptr();
+ WindowSurface* surface = (*w).second.first.get();
surface->flushColorBuffer();
return true;
@@ -932,7 +932,7 @@
//
RenderThreadInfo *tinfo = RenderThreadInfo::get();
WindowSurfacePtr bindDraw, bindRead;
- if (draw.Ptr() == NULL && read.Ptr() == NULL) {
+ if (draw.get() == NULL && read.get() == NULL) {
// Unbind the current read and draw surfaces from the context
bindDraw = tinfo->currDrawSurf;
bindRead = tinfo->currReadSurf;
@@ -941,8 +941,8 @@
bindRead = read;
}
- if (bindDraw.Ptr() != NULL && bindRead.Ptr() != NULL) {
- if (bindDraw.Ptr() != bindRead.Ptr()) {
+ if (bindDraw.get() != NULL && bindRead.get() != NULL) {
+ if (bindDraw.get() != bindRead.get()) {
bindDraw->bind(ctx, WindowSurface::BIND_DRAW);
bindRead->bind(ctx, WindowSurface::BIND_READ);
}
diff --git a/distrib/android-emugl/host/libs/libOpenglRender/RenderControl.cpp b/distrib/android-emugl/host/libs/libOpenglRender/RenderControl.cpp
index 8bb0456..a75d9df 100644
--- a/distrib/android-emugl/host/libs/libOpenglRender/RenderControl.cpp
+++ b/distrib/android-emugl/host/libs/libOpenglRender/RenderControl.cpp
@@ -68,7 +68,7 @@
RenderThreadInfo *tInfo = RenderThreadInfo::get();
const char *str = NULL;
int len = 0;
- if (tInfo && tInfo->currContext.Ptr()) {
+ if (tInfo && tInfo->currContext.get()) {
if (tInfo->currContext->isGL2()) {
str = (const char *)s_gles2.glGetString(name);
}
diff --git a/distrib/android-emugl/host/libs/libOpenglRender/WindowSurface.cpp b/distrib/android-emugl/host/libs/libOpenglRender/WindowSurface.cpp
index 32b72f1..bad6982 100644
--- a/distrib/android-emugl/host/libs/libOpenglRender/WindowSurface.cpp
+++ b/distrib/android-emugl/host/libs/libOpenglRender/WindowSurface.cpp
@@ -87,7 +87,7 @@
}
bool WindowSurface::flushColorBuffer() {
- if (!mAttachedColorBuffer.Ptr()) {
+ if (!mAttachedColorBuffer.get()) {
return true;
}
if (!mWidth || !mHeight) {
@@ -101,7 +101,7 @@
return false;
}
- if (!mDrawContext.Ptr()) {
+ if (!mDrawContext.get()) {
fprintf(stderr, "Draw context is NULL\n");
return false;
}
diff --git a/distrib/android-emugl/shared/emugl/common/Android.mk b/distrib/android-emugl/shared/emugl/common/Android.mk
index 590efe1..c454036 100644
--- a/distrib/android-emugl/shared/emugl/common/Android.mk
+++ b/distrib/android-emugl/shared/emugl/common/Android.mk
@@ -8,30 +8,17 @@
commonSources := \
crash_reporter.cpp \
id_to_object_map.cpp \
- lazy_instance.cpp \
logging.cpp \
- message_channel.cpp \
- pod_vector.cpp \
shared_library.cpp \
- smart_ptr.cpp \
stringparsing.cpp \
sockets.cpp \
- thread_store.cpp \
host_commonSources := $(commonSources)
host_commonLdLibs := $(CXX_STD_LIB)
ifneq (windows,$(BUILD_TARGET_OS))
- host_commonSources += \
- thread_pthread.cpp \
-
host_commonLdLibs += -ldl -lpthread
-else
- host_commonSources += \
- condition_variable_win32.cpp \
- thread_win32.cpp \
-
endif
$(call emugl-begin-static-library,libemugl_common)
@@ -43,16 +30,8 @@
### emugl_common_unittests ##############################################
host_commonSources := \
- condition_variable_unittest.cpp \
id_to_object_map_unittest.cpp \
- lazy_instance_unittest.cpp \
- pod_vector_unittest.cpp \
- message_channel_unittest.cpp \
- mutex_unittest.cpp \
shared_library_unittest.cpp \
- smart_ptr_unittest.cpp \
- thread_store_unittest.cpp \
- thread_unittest.cpp \
unique_integer_map_unittest.cpp \
stringparsing_unittest.cpp
diff --git a/distrib/android-emugl/shared/emugl/common/lazy_instance_unittest.cpp b/distrib/android-emugl/shared/emugl/common/lazy_instance_unittest.cpp
index 824845f..f9bf71c 100644
--- a/distrib/android-emugl/shared/emugl/common/lazy_instance_unittest.cpp
+++ b/distrib/android-emugl/shared/emugl/common/lazy_instance_unittest.cpp
@@ -62,18 +62,18 @@
LazyInstance<Foo> foo_instance = LAZY_INSTANCE_INIT;
EXPECT_FALSE(foo_instance.hasInstance());
EXPECT_FALSE(foo_instance.hasInstance());
- foo_instance.ptr();
+ foo_instance.get();
EXPECT_TRUE(foo_instance.hasInstance());
}
TEST(LazyInstance, Simple) {
LazyInstance<Foo> foo_instance = LAZY_INSTANCE_INIT;
- Foo* foo1 = foo_instance.ptr();
+ Foo* foo1 = foo_instance.get();
EXPECT_TRUE(foo1);
EXPECT_EQ(42, foo_instance->get());
foo1->set(10);
EXPECT_EQ(10, foo_instance->get());
- EXPECT_EQ(foo1, foo_instance.ptr());
+ EXPECT_EQ(foo1, foo_instance.get());
}
// For the following test, launch 1000 threads that each try to get
@@ -133,7 +133,7 @@
EXPECT_EQ(1, counter_instance->getValue());
// Now compare all the store values, they should be the same.
- StaticCounter* expectedValue = counter_instance.ptr();
+ StaticCounter* expectedValue = counter_instance.get();
for (size_t n = 0; n < kNumThreads; ++n) {
EXPECT_EQ(expectedValue, state.mValues[n]) << "For thread " << n;
}
diff --git a/distrib/android-emugl/shared/emugl/common/logging.h b/distrib/android-emugl/shared/emugl/common/logging.h
index 8a6b413..27e9a53 100644
--- a/distrib/android-emugl/shared/emugl/common/logging.h
+++ b/distrib/android-emugl/shared/emugl/common/logging.h
@@ -14,6 +14,8 @@
* limitations under the License.
*/
+#pragma once
+
typedef void (*logger_t)(const char* fmt, ...);
extern logger_t emugl_logger;
extern logger_t emugl_cxt_logger;
diff --git a/distrib/android-emugl/shared/emugl/common/smart_ptr.h b/distrib/android-emugl/shared/emugl/common/smart_ptr.h
index 73efdd6..5de90a7 100644
--- a/distrib/android-emugl/shared/emugl/common/smart_ptr.h
+++ b/distrib/android-emugl/shared/emugl/common/smart_ptr.h
@@ -11,140 +11,13 @@
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
-#ifndef EMUGL_SMART_PTR_H
-#define EMUGL_SMART_PTR_H
+#pragma once
-#include <stddef.h>
+#include <memory>
namespace emugl {
-// Hidden atomic ref-counting implementation.
-class RefCount;
-
-// Base class for all templated SmartPtr<> instances. Reduces
-// template expansion and code. Consider this to be an implementation
-// detail of SmartPtr<>, so don't rely on anything here.
-class SmartPtrBase {
-public:
- // Defrault constructor.
- SmartPtrBase() : mPtr(NULL), mRefCount(NULL) {}
-
- // Normal constructor. This takes ownership of |ptr|, though only
- // template instances are capable of destroying the object.
- explicit SmartPtrBase(void* ptr);
-
- // Copy-constructor, this increments the reference count.
- SmartPtrBase(const SmartPtrBase& other);
-
- // Assignment operator, also increments the reference count.
- SmartPtrBase& operator=(const SmartPtrBase& other);
-
- // Nothing happens in this destructor, the real work must be performed
- // in subclasses.
- ~SmartPtrBase() {}
-
-
- // Used to enable 'if (smart_ptr) { ... }' properly.
- operator void*() const {
- return mPtr;
- }
-
- // Return internal reference count value, only use for unit testing.
- int getRefCount() const;
-
-protected:
- // Used internally to increment the reference count.
- void addRef();
-
- // Copy the |other| into this instance, returns the old pointer value
- // if it needs to be destroyed by the caller, or NULL otherwise.
- void* copyFrom(const SmartPtrBase& other);
-
- // Used internally to decrement the reference count, if it reaches 0,
- // returns the pointer to be destroyed, NULL otherwise.
- void* release();
-
- void* mPtr;
- RefCount* mRefCount;
-};
-
-
-// The real template class to be used for smart pointers.
-// Typical uses:
-//
-// SmartPtr<Foo> ptr(new Foo()); // takes ownership.
-// SmartPtr<Foo> ptr2; // empty pointer.
-// ptr2 = ptr; // copies pointer + increment reference count.
-// Foo* obj = ptr.Ptr(); // access pointed object.
-// ptr->DoStuff(); // operate directly on pointed object.
-// (*ptr)->DoStuff(); // same here.
-//
-// On scope exit, the internal reference count is decremented and the
-// object is deleted automatically when it reaches 0, indicating that
-// there are no more owners.
-//
-// IMPORTANT: You need to be sure that only one 'chain' of smart pointers
-// own a given object. I.e. the following is incorrect:
-//
-// Foo* foo = new Foo(); // create new instance.
-// SmartPtr<Foo> ptr(foo); // |ptr| takes ownership of |foo|.
-// SmartPtr<Foo> ptr2(foo); // |ptr2| takes also ownership of |foo|.
-//
-// The problem is that |ptr| and |ptr2| don't know anything about each
-// other, and will not share the same reference count. Once a smart pointer
-// owns an object, only use other smart pointers that are copy-constructed
-// or assigned with the initial one to keep everything consistent.
template <class T>
-class SmartPtr : public emugl::SmartPtrBase {
-public:
- // Default constructor. The instance holds a NULL pointer.
- SmartPtr() : SmartPtrBase() {}
-
- // Regular constructor, takes ownership of |ptr|.
- explicit SmartPtr(T* ptr) : SmartPtrBase(ptr) {}
-
- // Copy-constructor, |this| and |other| will share the same internal
- // reference count, which is incremented by 1.
- SmartPtr(const SmartPtr& other)
- : SmartPtrBase(reinterpret_cast<const SmartPtrBase&>(other)) {}
-
- // Assignment operator, same semantics as copy-constructor.
- SmartPtr& operator=(const SmartPtr& other) {
- void* old_ptr = copyFrom(static_cast<const SmartPtrBase&>(other));
- if (old_ptr)
- delete reinterpret_cast<T*>(old_ptr);
- return *this;
- }
-
- // Destructor, decrements reference count and destroys the object
- // if it reaches 0 (indicating this was the last owning smart pointer).
- ~SmartPtr() {
- void* ptr = release();
- if (ptr)
- delete reinterpret_cast<T*>(ptr);
- }
-
- // Return owned object instance, or NULL.
- T* Ptr() const {
- return reinterpret_cast<T*>(mPtr);
- }
-
- // Return owned object instance, or NULL
- const T* constPtr() const {
- return reinterpret_cast<const T*>(mPtr);
- }
-
- // Operate directly on owned object.
- T* operator->() const {
- return Ptr();
- }
-
- // Return reference to owned object.
- T& operator*() const {
- return *Ptr();
- }
-};
+using SmartPtr = std::shared_ptr<T>;
} // namespace emugl
-
-#endif // EMUGL_SMART_PTR_H
diff --git a/distrib/android-emugl/shared/emugl/common/smart_ptr_unittest.cpp b/distrib/android-emugl/shared/emugl/common/smart_ptr_unittest.cpp
index db9e5f2..715e471 100644
--- a/distrib/android-emugl/shared/emugl/common/smart_ptr_unittest.cpp
+++ b/distrib/android-emugl/shared/emugl/common/smart_ptr_unittest.cpp
@@ -62,7 +62,7 @@
TEST_F(SmartPtrTest, Empty) {
SmartPtr<MyClass> ptr;
- EXPECT_FALSE(ptr.Ptr());
+ EXPECT_FALSE(ptr.get());
EXPECT_EQ(0, mNewCount);
EXPECT_EQ(0, mDeleteCount);
@@ -76,7 +76,7 @@
{
SmartPtr<MyClass> ptr(obj);
- EXPECT_EQ(obj, ptr.Ptr());
+ EXPECT_EQ(obj, ptr.get());
EXPECT_EQ(1, mNewCount);
EXPECT_EQ(0, mDeleteCount);
@@ -95,8 +95,8 @@
SmartPtr<MyClass> ptr1(obj);
{
SmartPtr<MyClass> ptr2(ptr1);
- EXPECT_EQ(2, ptr1.getRefCount());
- EXPECT_EQ(2, ptr2.getRefCount());
+ EXPECT_EQ(2, ptr1.use_count());
+ EXPECT_EQ(2, ptr2.use_count());
EXPECT_EQ(1, mNewCount);
EXPECT_EQ(0, mDeleteCount);
EXPECT_EQ(0, mDoCount);
@@ -122,9 +122,9 @@
EXPECT_EQ(2, mNewCount);
EXPECT_EQ(1, mDeleteCount);
- EXPECT_EQ(ptr1.Ptr(), ptr2.Ptr());
- EXPECT_EQ(2, ptr1.getRefCount());
- EXPECT_EQ(2, ptr2.getRefCount());
+ EXPECT_EQ(ptr1.get(), ptr2.get());
+ EXPECT_EQ(2, ptr1.use_count());
+ EXPECT_EQ(2, ptr2.use_count());
}
diff --git a/distrib/android-emugl/shared/emugl/common/thread_store.cpp b/distrib/android-emugl/shared/emugl/common/thread_store.cpp
index ea64c6f..ecb4d0c 100644
--- a/distrib/android-emugl/shared/emugl/common/thread_store.cpp
+++ b/distrib/android-emugl/shared/emugl/common/thread_store.cpp
@@ -198,7 +198,7 @@
ThreadStore::~ThreadStore() {
D("Entering this=%p\n", this);
- GlobalState* state = gGlobalState.ptr();
+ GlobalState* state = gGlobalState.get();
state->unregisterKey(mKey);
D("Exiting this=%p\n", this);
}