opengl translator: make GLcommon static library

This change turns GLcommon to be static instead of shared
library.
Removed the s_globalNameSpace static object from objectNameManager
and moved it to live inside the EglDisplay object which is shared
for all display space objects (GLESv1, GLESv2 and EGL).

Change-Id: I92fa71fb7cbac423c22b7188e8d9642a5fddf0d9
This commit is contained in:
Guy Zadikario
2011-06-02 10:33:48 +03:00
committed by David 'Digit' Turner
parent cc3b388746
commit cd1489a89c
10 changed files with 96 additions and 85 deletions

View File

@@ -51,13 +51,11 @@ LOCAL_MODULE_TAGS := debug
LOCAL_MODULE := libEGL_translator LOCAL_MODULE := libEGL_translator
LOCAL_STATIC_LIBRARIES := \ LOCAL_STATIC_LIBRARIES := \
libGLcommon \
libcutils \ libcutils \
libutils \ libutils \
liblog \ liblog \
libOpenglOsUtils libOpenglOsUtils
LOCAL_SHARED_LIBRARIES := \
libGLcommon
include $(BUILD_HOST_SHARED_LIBRARY) include $(BUILD_HOST_SHARED_LIBRARY)

View File

@@ -18,7 +18,16 @@
#include <GLcommon/GLutils.h> #include <GLcommon/GLutils.h>
#include <utils/threads.h> #include <utils/threads.h>
EglDisplay::EglDisplay(EGLNativeDisplayType dpy,bool isDefault):m_dpy(dpy),m_initialized(false),m_configInitialized(false),m_isDefault(isDefault),m_nextEglImageId(0){}; EglDisplay::EglDisplay(EGLNativeDisplayType dpy,bool isDefault) :
m_dpy(dpy),
m_initialized(false),
m_configInitialized(false),
m_isDefault(isDefault),
m_nextEglImageId(0)
{
m_manager[GLES_1_1] = new ObjectNameManager(&m_globalNameSpace);
m_manager[GLES_2_0] = new ObjectNameManager(&m_globalNameSpace);
};
EglDisplay::~EglDisplay() { EglDisplay::~EglDisplay() {
android::Mutex::Autolock mutex(m_lock); android::Mutex::Autolock mutex(m_lock);
@@ -31,6 +40,9 @@ EglDisplay::~EglDisplay() {
EglConfig* pConfig = *it; EglConfig* pConfig = *it;
if(pConfig) delete pConfig; if(pConfig) delete pConfig;
} }
delete m_manager[GLES_1_1];
delete m_manager[GLES_2_0];
} }
EGLNativeDisplayType EglDisplay::nativeType(){return m_dpy;} EGLNativeDisplayType EglDisplay::nativeType(){return m_dpy;}

View File

@@ -55,7 +55,7 @@ public:
ContextPtr getContext(EGLContext ctx); ContextPtr getContext(EGLContext ctx);
bool removeContext(EGLContext ctx); bool removeContext(EGLContext ctx);
bool removeContext(ContextPtr ctx); bool removeContext(ContextPtr ctx);
ObjectNameManager* getManager(GLESVersion ver){ return &m_manager[ver];} ObjectNameManager* getManager(GLESVersion ver){ return m_manager[ver];}
~EglDisplay(); ~EglDisplay();
void initialize(int renderableType); void initialize(int renderableType);
@@ -76,7 +76,8 @@ private:
ConfigsList m_configs; ConfigsList m_configs;
ContextsHndlMap m_contexts; ContextsHndlMap m_contexts;
SurfacesHndlMap m_surfaces; SurfacesHndlMap m_surfaces;
ObjectNameManager m_manager[MAX_GLES_VERSION]; GlobalNameSpace m_globalNameSpace;
ObjectNameManager *m_manager[MAX_GLES_VERSION];
android::Mutex m_lock; android::Mutex m_lock;
ImagesHndlMap m_eglImages; ImagesHndlMap m_eglImages;
unsigned int m_nextEglImageId; unsigned int m_nextEglImageId;

View File

@@ -17,13 +17,11 @@ LOCAL_C_INCLUDES += \
$(translator_path)/../../../shared $(translator_path)/../../../shared
LOCAL_STATIC_LIBRARIES := \ LOCAL_STATIC_LIBRARIES := \
libGLcommon \
libOpenglOsUtils \ libOpenglOsUtils \
libutils \ libutils \
libcutils libcutils
LOCAL_SHARED_LIBRARIES := \
libGLcommon
LOCAL_CFLAGS := -g -O0 LOCAL_CFLAGS := -g -O0
LOCAL_MODULE_TAGS := debug LOCAL_MODULE_TAGS := debug
LOCAL_MODULE := libGLES_CM_translator LOCAL_MODULE := libGLES_CM_translator

View File

@@ -14,9 +14,19 @@ LOCAL_SRC_FILES := \
LOCAL_C_INCLUDES += \ LOCAL_C_INCLUDES += \
$(translator_path)/include \ $(translator_path)/include \
LOCAL_STATIC_LIBRARIES := \
libGLcommon \
libOpenglOsUtils \
libutils \
libcutils
LOCAL_SHARED_LIBRARIES := \ ifeq ($(HOST_OS),linux)
libGLcommon LOCAL_LDLIBS := -lGL -ldl
endif
ifeq ($(HOST_OS),windows)
LOCAL_LDLIBS := -lopengl32 -lgdi32
endif
LOCAL_CFLAGS := -g -O0 LOCAL_CFLAGS := -g -O0
LOCAL_MODULE_TAGS := debug LOCAL_MODULE_TAGS := debug

View File

@@ -39,4 +39,4 @@ ifeq ($(HOST_OS),windows)
LOCAL_LDLIBS := -lopengl32 -lgdi32 LOCAL_LDLIBS := -lopengl32 -lgdi32
endif endif
include $(BUILD_HOST_SHARED_LIBRARY) include $(BUILD_HOST_STATIC_LIBRARY)

View File

@@ -16,58 +16,11 @@
#include <map> #include <map>
#include <GLcommon/objectNameManager.h> #include <GLcommon/objectNameManager.h>
class GlobalNameSpace
{
public:
GlobalNameSpace()
{
mutex_init(&m_lock);
for (int i=0; i<NUM_OBJECT_TYPES; i++) { NameSpace::NameSpace(NamedObjectType p_type, GlobalNameSpace *globalNameSpace) :
m_nameSpace[i] = new NameSpace((NamedObjectType)i);
}
}
~GlobalNameSpace()
{
mutex_lock(&m_lock);
for (int i=0; i<NUM_OBJECT_TYPES; i++) {
delete m_nameSpace[i];
}
mutex_unlock(&m_lock);
mutex_destroy(&m_lock);
}
unsigned int genName(NamedObjectType p_type)
{
if ( p_type >= NUM_OBJECT_TYPES ) return 0;
mutex_lock(&m_lock);
unsigned int name = m_nameSpace[p_type]->genName(0, false);
mutex_unlock(&m_lock);
return name;
}
void deleteName(NamedObjectType p_type, unsigned int p_name)
{
if ( p_type >= NUM_OBJECT_TYPES ) return;
mutex_lock(&m_lock);
m_nameSpace[p_type]->deleteName(p_name);
mutex_unlock(&m_lock);
}
private:
mutex_t m_lock;
NameSpace *m_nameSpace[NUM_OBJECT_TYPES];
};
static GlobalNameSpace *s_globalNameSpace = NULL;
NameSpace::NameSpace(NamedObjectType p_type) :
m_nextName(0), m_nextName(0),
m_type(p_type) m_type(p_type),
m_globalNameSpace(globalNameSpace)
{ {
} }
@@ -76,7 +29,7 @@ NameSpace::~NameSpace()
for (NamesMap::iterator n = m_localToGlobalMap.begin(); for (NamesMap::iterator n = m_localToGlobalMap.begin();
n != m_localToGlobalMap.end(); n != m_localToGlobalMap.end();
n++) { n++) {
s_globalNameSpace->deleteName(m_type, (*n).second); m_globalNameSpace->deleteName(m_type, (*n).second);
} }
} }
@@ -92,7 +45,7 @@ NameSpace::genName(unsigned int p_localName, bool genGlobal)
} }
if (genGlobal) { if (genGlobal) {
unsigned int globalName = s_globalNameSpace->genName(m_type); unsigned int globalName = m_globalNameSpace->genName(m_type);
m_localToGlobalMap[localName] = globalName; m_localToGlobalMap[localName] = globalName;
} }
@@ -131,7 +84,7 @@ NameSpace::deleteName(unsigned int p_localName)
{ {
NamesMap::iterator n( m_localToGlobalMap.find(p_localName) ); NamesMap::iterator n( m_localToGlobalMap.find(p_localName) );
if (n != m_localToGlobalMap.end()) { if (n != m_localToGlobalMap.end()) {
s_globalNameSpace->deleteName(m_type, (*n).second); m_globalNameSpace->deleteName(m_type, (*n).second);
m_localToGlobalMap.erase(p_localName); m_localToGlobalMap.erase(p_localName);
} }
} }
@@ -147,7 +100,7 @@ NameSpace::replaceGlobalName(unsigned int p_localName, unsigned int p_globalName
{ {
NamesMap::iterator n( m_localToGlobalMap.find(p_localName) ); NamesMap::iterator n( m_localToGlobalMap.find(p_localName) );
if (n != m_localToGlobalMap.end()) { if (n != m_localToGlobalMap.end()) {
s_globalNameSpace->deleteName(m_type, (*n).second); m_globalNameSpace->deleteName(m_type, (*n).second);
(*n).second = p_globalName; (*n).second = p_globalName;
} }
} }
@@ -155,12 +108,12 @@ NameSpace::replaceGlobalName(unsigned int p_localName, unsigned int p_globalName
typedef std::pair<NamedObjectType, unsigned int> ObjectIDPair; typedef std::pair<NamedObjectType, unsigned int> ObjectIDPair;
typedef std::map<ObjectIDPair, ObjectDataPtr> ObjectDataMap; typedef std::map<ObjectIDPair, ObjectDataPtr> ObjectDataMap;
ShareGroup::ShareGroup() ShareGroup::ShareGroup(GlobalNameSpace *globalNameSpace)
{ {
mutex_init(&m_lock); mutex_init(&m_lock);
for (int i=0; i<NUM_OBJECT_TYPES; i++) { for (int i=0; i<NUM_OBJECT_TYPES; i++) {
m_nameSpace[i] = new NameSpace((NamedObjectType)i); m_nameSpace[i] = new NameSpace((NamedObjectType)i, globalNameSpace);
} }
m_objectsData = NULL; m_objectsData = NULL;
@@ -291,7 +244,8 @@ ShareGroup::getObjectData(NamedObjectType p_type, unsigned int p_localName)
return ret; return ret;
} }
ObjectNameManager::ObjectNameManager() ObjectNameManager::ObjectNameManager(GlobalNameSpace *globalNameSpace) :
m_globalNameSpace(globalNameSpace)
{ {
mutex_init(&m_lock); mutex_init(&m_lock);
} }
@@ -306,8 +260,6 @@ ObjectNameManager::createShareGroup(void *p_groupName)
{ {
mutex_lock(&m_lock); mutex_lock(&m_lock);
if (!s_globalNameSpace) s_globalNameSpace = new GlobalNameSpace();
ShareGroupPtr shareGroupReturn; ShareGroupPtr shareGroupReturn;
ShareGroupsMap::iterator s( m_groups.find(p_groupName) ); ShareGroupsMap::iterator s( m_groups.find(p_groupName) );
@@ -318,7 +270,7 @@ ObjectNameManager::createShareGroup(void *p_groupName)
// //
// Group does not exist, create new group // Group does not exist, create new group
// //
shareGroupReturn = ShareGroupPtr( new ShareGroup() ); shareGroupReturn = ShareGroupPtr( new ShareGroup(m_globalNameSpace) );
m_groups.insert( std::pair<void *, ShareGroupPtr>(p_groupName, shareGroupReturn) ); m_groups.insert( std::pair<void *, ShareGroupPtr>(p_groupName, shareGroupReturn) );
} }
@@ -332,8 +284,6 @@ ObjectNameManager::getShareGroup(void *p_groupName)
{ {
mutex_lock(&m_lock); mutex_lock(&m_lock);
if (!s_globalNameSpace) s_globalNameSpace = new GlobalNameSpace();
ShareGroupPtr shareGroupReturn(NULL); ShareGroupPtr shareGroupReturn(NULL);
ShareGroupsMap::iterator s( m_groups.find(p_groupName) ); ShareGroupsMap::iterator s( m_groups.find(p_groupName) );
@@ -350,8 +300,6 @@ ObjectNameManager::attachShareGroup(void *p_groupName, void *p_existingGroupName
{ {
mutex_lock(&m_lock); mutex_lock(&m_lock);
if (!s_globalNameSpace) s_globalNameSpace = new GlobalNameSpace();
ShareGroupPtr shareGroupReturn; ShareGroupPtr shareGroupReturn;
ShareGroupsMap::iterator s( m_groups.find(p_existingGroupName) ); ShareGroupsMap::iterator s( m_groups.find(p_existingGroupName) );
@@ -383,10 +331,6 @@ ObjectNameManager::deleteShareGroup(void *p_groupName)
m_groups.erase(s); m_groups.erase(s);
} }
if (m_groups.size() == 0 && s_globalNameSpace) {
delete s_globalNameSpace;
s_globalNameSpace = NULL;
}
mutex_unlock(&m_lock); mutex_unlock(&m_lock);
} }

View File

@@ -48,13 +48,14 @@ typedef SmartPtr<ObjectData> ObjectDataPtr;
// NOTE: this class does not used by the EGL/GLES layer directly, // NOTE: this class does not used by the EGL/GLES layer directly,
// the EGL/GLES layer creates objects using the ShareGroup class // the EGL/GLES layer creates objects using the ShareGroup class
// interface (see below). // interface (see below).
class GlobalNameSpace;
class NameSpace class NameSpace
{ {
friend class ShareGroup; friend class ShareGroup;
friend class GlobalNameSpace; friend class GlobalNameSpace;
private: private:
explicit NameSpace(NamedObjectType p_type); NameSpace(NamedObjectType p_type, GlobalNameSpace *globalNameSpace);
~NameSpace(); ~NameSpace();
// //
@@ -98,6 +99,54 @@ private:
unsigned int m_nextName; unsigned int m_nextName;
NamesMap m_localToGlobalMap; NamesMap m_localToGlobalMap;
const NamedObjectType m_type; const NamedObjectType m_type;
GlobalNameSpace *m_globalNameSpace;
};
class GlobalNameSpace
{
public:
GlobalNameSpace()
{
mutex_init(&m_lock);
for (int i=0; i<NUM_OBJECT_TYPES; i++) {
m_nameSpace[i] = new NameSpace((NamedObjectType)i, NULL);
}
}
~GlobalNameSpace()
{
mutex_lock(&m_lock);
for (int i=0; i<NUM_OBJECT_TYPES; i++) {
delete m_nameSpace[i];
}
mutex_unlock(&m_lock);
mutex_destroy(&m_lock);
}
unsigned int genName(NamedObjectType p_type)
{
if ( p_type >= NUM_OBJECT_TYPES ) return 0;
mutex_lock(&m_lock);
unsigned int name = m_nameSpace[p_type]->genName(0, false);
mutex_unlock(&m_lock);
return name;
}
void deleteName(NamedObjectType p_type, unsigned int p_name)
{
if ( p_type >= NUM_OBJECT_TYPES ) return;
mutex_lock(&m_lock);
m_nameSpace[p_type]->deleteName(p_name);
mutex_unlock(&m_lock);
}
private:
mutex_t m_lock;
NameSpace *m_nameSpace[NUM_OBJECT_TYPES];
}; };
// //
@@ -163,7 +212,7 @@ public:
ObjectDataPtr getObjectData(NamedObjectType p_type, unsigned int p_localName); ObjectDataPtr getObjectData(NamedObjectType p_type, unsigned int p_localName);
private: private:
ShareGroup(); explicit ShareGroup(GlobalNameSpace *globalNameSpace);
~ShareGroup(); ~ShareGroup();
private: private:
@@ -187,7 +236,7 @@ typedef std::multimap<void *, ShareGroupPtr> ShareGroupsMap;
class ObjectNameManager class ObjectNameManager
{ {
public: public:
ObjectNameManager(); explicit ObjectNameManager(GlobalNameSpace *globalNameSpace);
~ObjectNameManager(); ~ObjectNameManager();
// //
@@ -226,6 +275,7 @@ public:
private: private:
ShareGroupsMap m_groups; ShareGroupsMap m_groups;
mutex_t m_lock; mutex_t m_lock;
GlobalNameSpace *m_globalNameSpace;
}; };
#endif #endif

View File

@@ -13,7 +13,6 @@ LOCAL_SRC_FILES:= \
LOCAL_SHARED_LIBRARIES := \ LOCAL_SHARED_LIBRARIES := \
libGLcommon \
libEGL_translator \ libEGL_translator \
libGLES_CM_translator libGLES_CM_translator

View File

@@ -13,7 +13,6 @@ LOCAL_SRC_FILES:= \
LOCAL_SHARED_LIBRARIES := \ LOCAL_SHARED_LIBRARIES := \
libGLcommon \
libEGL_translator \ libEGL_translator \
libGLES_V2_translator libGLES_V2_translator