Commit 5669f0d1 by Nicolas Capens

Use the namespace for storing objects.

Bug 19219444 Change-Id: I277d80be47d2057f31559c5058e2f6ea422dacfd Reviewed-on: https://swiftshader-review.googlesource.com/4987Reviewed-by: 's avatarAlexis Hétu <sugoi@google.com> Tested-by: 's avatarNicolas Capens <capn@google.com> Reviewed-by: 's avatarNicolas Capens <capn@google.com>
parent fddfe9c9
...@@ -16,41 +16,59 @@ ...@@ -16,41 +16,59 @@
#define gl_NameSpace_hpp #define gl_NameSpace_hpp
#include "Object.hpp" #include "Object.hpp"
#include "debug.h"
#include <unordered_set> #include <unordered_map>
#include <algorithm>
typedef unsigned int GLuint;
namespace gl namespace gl
{ {
template<class ObjectType, GLuint baseName = 1> template<class ObjectType, GLuint baseName = 1>
class NameSpace : std::unordered_set<GLuint> class NameSpace
{ {
public: public:
NameSpace() : freeName(baseName) NameSpace() : freeName(baseName)
{ {
} }
~NameSpace()
{
ASSERT(empty());
}
bool empty()
{
return map.empty();
}
GLuint firstName()
{
return map.begin()->first;
}
GLuint allocate() GLuint allocate()
{ {
GLuint name = freeName; GLuint name = freeName;
while(find(name) != end()) while(isReserved(name))
{ {
name++; name++;
} }
insert(name); map.insert({name, nullptr});
freeName = name + 1; freeName = name + 1;
return name; return name;
} }
void insert(GLuint name) bool isReserved(GLuint name)
{ {
std::unordered_set<GLuint>::insert(name); return map.find(name) != map.end();
}
void insert(GLuint name, ObjectType *object)
{
map[name] = object;
if(name == freeName) if(name == freeName)
{ {
...@@ -58,13 +76,47 @@ public: ...@@ -58,13 +76,47 @@ public:
} }
} }
void release(GLuint name) ObjectType *remove(GLuint name)
{
auto element = map.find(name);
if(element != map.end())
{
ObjectType *object = element->second;
map.erase(element);
if(name < freeName)
{
freeName = name;
}
return object;
}
return nullptr;
}
ObjectType *find(GLuint name)
{ {
erase(name); if(name < baseName)
freeName = std::min(name, freeName); {
return nullptr;
}
auto element = map.find(name);
if(element == map.end())
{
return nullptr;
}
return element->second;
} }
private: private:
typedef std::unordered_map<GLuint, ObjectType*> Map;
Map map;
GLuint freeName; // Lowest known potentially free name GLuint freeName; // Lowest known potentially free name
}; };
......
...@@ -978,8 +978,8 @@ void Context::deleteFramebuffer(GLuint framebuffer) ...@@ -978,8 +978,8 @@ void Context::deleteFramebuffer(GLuint framebuffer)
{ {
detachFramebuffer(framebuffer); detachFramebuffer(framebuffer);
mFramebufferNameSpace.release(framebufferObject->first); delete framebufferObject->second;
delete framebufferObject->second; mFramebufferNameSpace.remove(framebufferObject->first);
mFramebufferMap.erase(framebufferObject); mFramebufferMap.erase(framebufferObject);
} }
} }
......
...@@ -27,19 +27,19 @@ ResourceManager::ResourceManager() ...@@ -27,19 +27,19 @@ ResourceManager::ResourceManager()
ResourceManager::~ResourceManager() ResourceManager::~ResourceManager()
{ {
while(!mBufferMap.empty()) while(!mBufferNameSpace.empty())
{ {
deleteBuffer(mBufferMap.begin()->first); deleteBuffer(mBufferNameSpace.firstName());
} }
while(!mRenderbufferMap.empty()) while(!mRenderbufferNameSpace.empty())
{ {
deleteRenderbuffer(mRenderbufferMap.begin()->first); deleteRenderbuffer(mRenderbufferNameSpace.firstName());
} }
while(!mTextureMap.empty()) while(!mTextureNameSpace.empty())
{ {
deleteTexture(mTextureMap.begin()->first); deleteTexture(mTextureNameSpace.firstName());
} }
} }
...@@ -59,116 +59,64 @@ void ResourceManager::release() ...@@ -59,116 +59,64 @@ void ResourceManager::release()
// Returns an unused buffer name // Returns an unused buffer name
GLuint ResourceManager::createBuffer() GLuint ResourceManager::createBuffer()
{ {
GLuint handle = mBufferNameSpace.allocate(); return mBufferNameSpace.allocate();
mBufferMap[handle] = nullptr;
return handle;
} }
// Returns an unused texture name // Returns an unused texture name
GLuint ResourceManager::createTexture() GLuint ResourceManager::createTexture()
{ {
GLuint handle = mTextureNameSpace.allocate(); return mTextureNameSpace.allocate();
mTextureMap[handle] = nullptr;
return handle;
} }
// Returns an unused renderbuffer name // Returns an unused renderbuffer name
GLuint ResourceManager::createRenderbuffer() GLuint ResourceManager::createRenderbuffer()
{ {
GLuint handle = mRenderbufferNameSpace.allocate(); return mRenderbufferNameSpace.allocate();
mRenderbufferMap[handle] = nullptr;
return handle;
} }
void ResourceManager::deleteBuffer(GLuint buffer) void ResourceManager::deleteBuffer(GLuint buffer)
{ {
BufferMap::iterator bufferObject = mBufferMap.find(buffer); Buffer *bufferObject = mBufferNameSpace.remove(buffer);
if(bufferObject != mBufferMap.end()) if(bufferObject)
{ {
mBufferNameSpace.release(bufferObject->first); bufferObject->release();
if(bufferObject->second) bufferObject->second->release();
mBufferMap.erase(bufferObject);
} }
} }
void ResourceManager::deleteTexture(GLuint texture) void ResourceManager::deleteTexture(GLuint texture)
{ {
TextureMap::iterator textureObject = mTextureMap.find(texture); Texture *textureObject = mTextureNameSpace.find(texture);
if(textureObject != mTextureMap.end()) if(textureObject)
{ {
mTextureNameSpace.release(textureObject->first); textureObject->release();
if(textureObject->second) textureObject->second->release();
mTextureMap.erase(textureObject);
} }
} }
void ResourceManager::deleteRenderbuffer(GLuint renderbuffer) void ResourceManager::deleteRenderbuffer(GLuint renderbuffer)
{ {
RenderbufferMap::iterator renderbufferObject = mRenderbufferMap.find(renderbuffer); Renderbuffer *renderbufferObject = mRenderbufferNameSpace.find(renderbuffer);
if(renderbufferObject != mRenderbufferMap.end()) if(renderbufferObject)
{ {
mRenderbufferNameSpace.release(renderbufferObject->first); renderbufferObject->release();
if(renderbufferObject->second) renderbufferObject->second->release();
mRenderbufferMap.erase(renderbufferObject);
} }
} }
Buffer *ResourceManager::getBuffer(unsigned int handle) Buffer *ResourceManager::getBuffer(unsigned int handle)
{ {
BufferMap::iterator buffer = mBufferMap.find(handle); return mBufferNameSpace.find(handle);
if(buffer == mBufferMap.end())
{
return nullptr;
}
else
{
return buffer->second;
}
} }
Texture *ResourceManager::getTexture(unsigned int handle) Texture *ResourceManager::getTexture(unsigned int handle)
{ {
if(handle == 0) return nullptr; return mTextureNameSpace.find(handle);
TextureMap::iterator texture = mTextureMap.find(handle);
if(texture == mTextureMap.end())
{
return nullptr;
}
else
{
return texture->second;
}
} }
Renderbuffer *ResourceManager::getRenderbuffer(unsigned int handle) Renderbuffer *ResourceManager::getRenderbuffer(unsigned int handle)
{ {
RenderbufferMap::iterator renderbuffer = mRenderbufferMap.find(handle); return mRenderbufferNameSpace.find(handle);
if(renderbuffer == mRenderbufferMap.end())
{
return nullptr;
}
else
{
return renderbuffer->second;
}
}
void ResourceManager::setRenderbuffer(GLuint handle, Renderbuffer *buffer)
{
mRenderbufferMap[handle] = buffer;
} }
void ResourceManager::checkBufferAllocation(unsigned int buffer) void ResourceManager::checkBufferAllocation(unsigned int buffer)
...@@ -178,8 +126,7 @@ void ResourceManager::checkBufferAllocation(unsigned int buffer) ...@@ -178,8 +126,7 @@ void ResourceManager::checkBufferAllocation(unsigned int buffer)
Buffer *bufferObject = new Buffer(buffer); Buffer *bufferObject = new Buffer(buffer);
bufferObject->addRef(); bufferObject->addRef();
mBufferNameSpace.insert(buffer); mBufferNameSpace.insert(buffer, bufferObject);
mBufferMap[buffer] = bufferObject;
} }
} }
...@@ -205,8 +152,7 @@ void ResourceManager::checkTextureAllocation(GLuint texture, TextureType type) ...@@ -205,8 +152,7 @@ void ResourceManager::checkTextureAllocation(GLuint texture, TextureType type)
textureObject->addRef(); textureObject->addRef();
mTextureNameSpace.insert(texture); mTextureNameSpace.insert(texture, textureObject);
mTextureMap[texture] = textureObject;
} }
} }
...@@ -217,8 +163,7 @@ void ResourceManager::checkRenderbufferAllocation(GLuint handle) ...@@ -217,8 +163,7 @@ void ResourceManager::checkRenderbufferAllocation(GLuint handle)
Renderbuffer *renderbufferObject = new Renderbuffer(handle, new Colorbuffer(0, 0, GL_RGBA4_OES, 0)); Renderbuffer *renderbufferObject = new Renderbuffer(handle, new Colorbuffer(0, 0, GL_RGBA4_OES, 0));
renderbufferObject->addRef(); renderbufferObject->addRef();
mRenderbufferNameSpace.insert(handle); mRenderbufferNameSpace.insert(handle, renderbufferObject);
mRenderbufferMap[handle] = renderbufferObject;
} }
} }
......
...@@ -58,8 +58,6 @@ public: ...@@ -58,8 +58,6 @@ public:
Texture *getTexture(GLuint handle); Texture *getTexture(GLuint handle);
Renderbuffer *getRenderbuffer(GLuint handle); Renderbuffer *getRenderbuffer(GLuint handle);
void setRenderbuffer(GLuint handle, Renderbuffer *renderbuffer);
void checkBufferAllocation(unsigned int buffer); void checkBufferAllocation(unsigned int buffer);
void checkTextureAllocation(GLuint texture, TextureType type); void checkTextureAllocation(GLuint texture, TextureType type);
void checkRenderbufferAllocation(GLuint handle); void checkRenderbufferAllocation(GLuint handle);
...@@ -67,16 +65,8 @@ public: ...@@ -67,16 +65,8 @@ public:
private: private:
std::size_t mRefCount; std::size_t mRefCount;
typedef std::map<GLint, Buffer*> BufferMap;
BufferMap mBufferMap;
gl::NameSpace<Buffer> mBufferNameSpace; gl::NameSpace<Buffer> mBufferNameSpace;
gl::NameSpace<Texture> mTextureNameSpace;
typedef std::map<GLint, Texture*> TextureMap;
TextureMap mTextureMap;
gl::NameSpace<Texture> mTextureNameSpace;
typedef std::map<GLint, Renderbuffer*> RenderbufferMap;
RenderbufferMap mRenderbufferMap;
gl::NameSpace<Renderbuffer> mRenderbufferNameSpace; gl::NameSpace<Renderbuffer> mRenderbufferNameSpace;
}; };
......
...@@ -1028,8 +1028,8 @@ void Context::deleteFramebuffer(GLuint framebuffer) ...@@ -1028,8 +1028,8 @@ void Context::deleteFramebuffer(GLuint framebuffer)
{ {
detachFramebuffer(framebuffer); detachFramebuffer(framebuffer);
mFramebufferNameSpace.release(framebufferObject->first); delete framebufferObject->second;
delete framebufferObject->second; mFramebufferNameSpace.remove(framebufferObject->first);
mFramebufferMap.erase(framebufferObject); mFramebufferMap.erase(framebufferObject);
} }
} }
...@@ -1040,8 +1040,8 @@ void Context::deleteFence(GLuint fence) ...@@ -1040,8 +1040,8 @@ void Context::deleteFence(GLuint fence)
if(fenceObject != mFenceMap.end()) if(fenceObject != mFenceMap.end())
{ {
mFenceNameSpace.release(fenceObject->first); delete fenceObject->second;
delete fenceObject->second; mFenceNameSpace.remove(fenceObject->first);
mFenceMap.erase(fenceObject); mFenceMap.erase(fenceObject);
} }
} }
...@@ -1052,13 +1052,12 @@ void Context::deleteQuery(GLuint query) ...@@ -1052,13 +1052,12 @@ void Context::deleteQuery(GLuint query)
if(queryObject != mQueryMap.end()) if(queryObject != mQueryMap.end())
{ {
mQueryNameSpace.release(queryObject->first);
if(queryObject->second) if(queryObject->second)
{ {
queryObject->second->release(); queryObject->second->release();
} }
mQueryNameSpace.remove(queryObject->first);
mQueryMap.erase(queryObject); mQueryMap.erase(queryObject);
} }
} }
...@@ -1081,8 +1080,8 @@ void Context::deleteVertexArray(GLuint vertexArray) ...@@ -1081,8 +1080,8 @@ void Context::deleteVertexArray(GLuint vertexArray)
bindVertexArray(0); bindVertexArray(0);
} }
mVertexArrayNameSpace.release(vertexArrayObject->first);
delete vertexArrayObject->second; delete vertexArrayObject->second;
mVertexArrayNameSpace.remove(vertexArrayObject->first);
mVertexArrayMap.erase(vertexArrayObject); mVertexArrayMap.erase(vertexArrayObject);
} }
} }
...@@ -1102,8 +1101,8 @@ void Context::deleteTransformFeedback(GLuint transformFeedback) ...@@ -1102,8 +1101,8 @@ void Context::deleteTransformFeedback(GLuint transformFeedback)
if(transformFeedbackObject != mTransformFeedbackMap.end()) if(transformFeedbackObject != mTransformFeedbackMap.end())
{ {
mTransformFeedbackNameSpace.release(transformFeedbackObject->first);
delete transformFeedbackObject->second; delete transformFeedbackObject->second;
mTransformFeedbackNameSpace.remove(transformFeedbackObject->first);
mTransformFeedbackMap.erase(transformFeedbackObject); mTransformFeedbackMap.erase(transformFeedbackObject);
} }
} }
......
...@@ -31,9 +31,9 @@ ResourceManager::ResourceManager() ...@@ -31,9 +31,9 @@ ResourceManager::ResourceManager()
ResourceManager::~ResourceManager() ResourceManager::~ResourceManager()
{ {
while(!mBufferMap.empty()) while(!mBufferNameSpace.empty())
{ {
deleteBuffer(mBufferMap.begin()->first); deleteBuffer(mBufferNameSpace.firstName());
} }
while(!mProgramMap.empty()) while(!mProgramMap.empty())
...@@ -46,24 +46,24 @@ ResourceManager::~ResourceManager() ...@@ -46,24 +46,24 @@ ResourceManager::~ResourceManager()
deleteShader(mShaderMap.begin()->first); deleteShader(mShaderMap.begin()->first);
} }
while(!mRenderbufferMap.empty()) while(!mRenderbufferNameSpace.empty())
{ {
deleteRenderbuffer(mRenderbufferMap.begin()->first); deleteRenderbuffer(mRenderbufferNameSpace.firstName());
} }
while(!mTextureMap.empty()) while(!mTextureNameSpace.empty())
{ {
deleteTexture(mTextureMap.begin()->first); deleteTexture(mTextureNameSpace.firstName());
} }
while(!mSamplerMap.empty()) while(!mSamplerNameSpace.empty())
{ {
deleteSampler(mSamplerMap.begin()->first); deleteSampler(mSamplerNameSpace.firstName());
} }
while(!mFenceSyncMap.empty()) while(!mFenceSyncNameSpace.empty())
{ {
deleteFenceSync(mFenceSyncMap.begin()->first); deleteFenceSync(mFenceSyncNameSpace.firstName());
} }
} }
...@@ -83,11 +83,7 @@ void ResourceManager::release() ...@@ -83,11 +83,7 @@ void ResourceManager::release()
// Returns an unused buffer name // Returns an unused buffer name
GLuint ResourceManager::createBuffer() GLuint ResourceManager::createBuffer()
{ {
GLuint handle = mBufferNameSpace.allocate(); return mBufferNameSpace.allocate();
mBufferMap[handle] = nullptr;
return handle;
} }
// Returns an unused shader/program name // Returns an unused shader/program name
...@@ -121,54 +117,41 @@ GLuint ResourceManager::createProgram() ...@@ -121,54 +117,41 @@ GLuint ResourceManager::createProgram()
// Returns an unused texture name // Returns an unused texture name
GLuint ResourceManager::createTexture() GLuint ResourceManager::createTexture()
{ {
GLuint handle = mTextureNameSpace.allocate(); return mTextureNameSpace.allocate();
mTextureMap[handle] = nullptr;
return handle;
} }
// Returns an unused renderbuffer name // Returns an unused renderbuffer name
GLuint ResourceManager::createRenderbuffer() GLuint ResourceManager::createRenderbuffer()
{ {
GLuint handle = mRenderbufferNameSpace.allocate(); return mRenderbufferNameSpace.allocate();
mRenderbufferMap[handle] = nullptr;
return handle;
} }
// Returns an unused sampler name // Returns an unused sampler name
GLuint ResourceManager::createSampler() GLuint ResourceManager::createSampler()
{ {
GLuint handle = mSamplerNameSpace.allocate(); return mSamplerNameSpace.allocate();
mSamplerMap[handle] = nullptr;
return handle;
} }
// Returns the next unused fence name, and allocates the fence // Returns the next unused fence name, and allocates the fence
GLuint ResourceManager::createFenceSync(GLenum condition, GLbitfield flags) GLuint ResourceManager::createFenceSync(GLenum condition, GLbitfield flags)
{ {
GLuint handle = mFenceSyncNameSpace.allocate(); GLuint name = mFenceSyncNameSpace.allocate();
FenceSync* fenceSync = new FenceSync(handle, condition, flags); FenceSync *fenceSync = new FenceSync(name, condition, flags);
mFenceSyncMap[handle] = fenceSync;
fenceSync->addRef(); fenceSync->addRef();
return handle; mFenceSyncNameSpace.insert(name, fenceSync);
return name;
} }
void ResourceManager::deleteBuffer(GLuint buffer) void ResourceManager::deleteBuffer(GLuint buffer)
{ {
BufferMap::iterator bufferObject = mBufferMap.find(buffer); Buffer *bufferObject = mBufferNameSpace.remove(buffer);
if(bufferObject != mBufferMap.end()) if(bufferObject)
{ {
mBufferNameSpace.release(bufferObject->first); bufferObject->release();
if(bufferObject->second) bufferObject->second->release();
mBufferMap.erase(bufferObject);
} }
} }
...@@ -180,8 +163,8 @@ void ResourceManager::deleteShader(GLuint shader) ...@@ -180,8 +163,8 @@ void ResourceManager::deleteShader(GLuint shader)
{ {
if(shaderObject->second->getRefCount() == 0) if(shaderObject->second->getRefCount() == 0)
{ {
mProgramShaderNameSpace.release(shaderObject->first); delete shaderObject->second;
delete shaderObject->second; mProgramShaderNameSpace.remove(shaderObject->first);
mShaderMap.erase(shaderObject); mShaderMap.erase(shaderObject);
} }
else else
...@@ -199,8 +182,8 @@ void ResourceManager::deleteProgram(GLuint program) ...@@ -199,8 +182,8 @@ void ResourceManager::deleteProgram(GLuint program)
{ {
if(programObject->second->getRefCount() == 0) if(programObject->second->getRefCount() == 0)
{ {
mProgramShaderNameSpace.release(programObject->first); delete programObject->second;
delete programObject->second; mProgramShaderNameSpace.remove(programObject->first);
mProgramMap.erase(programObject); mProgramMap.erase(programObject);
} }
else else
...@@ -212,64 +195,47 @@ void ResourceManager::deleteProgram(GLuint program) ...@@ -212,64 +195,47 @@ void ResourceManager::deleteProgram(GLuint program)
void ResourceManager::deleteTexture(GLuint texture) void ResourceManager::deleteTexture(GLuint texture)
{ {
TextureMap::iterator textureObject = mTextureMap.find(texture); Texture *textureObject = mTextureNameSpace.remove(texture);
if(textureObject != mTextureMap.end()) if(textureObject)
{ {
mTextureNameSpace.release(textureObject->first); textureObject->release();
if(textureObject->second) textureObject->second->release();
mTextureMap.erase(textureObject);
} }
} }
void ResourceManager::deleteRenderbuffer(GLuint renderbuffer) void ResourceManager::deleteRenderbuffer(GLuint renderbuffer)
{ {
RenderbufferMap::iterator renderbufferObject = mRenderbufferMap.find(renderbuffer); Renderbuffer *renderbufferObject = mRenderbufferNameSpace.remove(renderbuffer);
if(renderbufferObject != mRenderbufferMap.end()) if(renderbufferObject)
{ {
mRenderbufferNameSpace.release(renderbufferObject->first); renderbufferObject->release();
if(renderbufferObject->second) renderbufferObject->second->release();
mRenderbufferMap.erase(renderbufferObject);
} }
} }
void ResourceManager::deleteSampler(GLuint sampler) void ResourceManager::deleteSampler(GLuint sampler)
{ {
auto samplerObject = mSamplerMap.find(sampler); Sampler *samplerObject = mSamplerNameSpace.remove(sampler);
if(samplerObject != mSamplerMap.end()) if(samplerObject)
{ {
mSamplerNameSpace.release(samplerObject->first); samplerObject->release();
if(samplerObject->second) samplerObject->second->release();
mSamplerMap.erase(samplerObject);
} }
} }
void ResourceManager::deleteFenceSync(GLuint fenceSync) void ResourceManager::deleteFenceSync(GLuint fenceSync)
{ {
auto fenceObjectIt = mFenceSyncMap.find(fenceSync); FenceSync *fenceObject = mFenceSyncNameSpace.remove(fenceSync);
if(fenceObjectIt != mFenceSyncMap.end()) if(fenceObject)
{ {
mFenceSyncNameSpace.release(fenceObjectIt->first); fenceObject->release();
if(fenceObjectIt->second) fenceObjectIt->second->release();
mFenceSyncMap.erase(fenceObjectIt);
} }
} }
Buffer *ResourceManager::getBuffer(unsigned int handle) Buffer *ResourceManager::getBuffer(unsigned int handle)
{ {
BufferMap::iterator buffer = mBufferMap.find(handle); return mBufferNameSpace.find(handle);
if(buffer == mBufferMap.end())
{
return nullptr;
}
else
{
return buffer->second;
}
} }
Shader *ResourceManager::getShader(unsigned int handle) Shader *ResourceManager::getShader(unsigned int handle)
...@@ -288,18 +254,7 @@ Shader *ResourceManager::getShader(unsigned int handle) ...@@ -288,18 +254,7 @@ Shader *ResourceManager::getShader(unsigned int handle)
Texture *ResourceManager::getTexture(unsigned int handle) Texture *ResourceManager::getTexture(unsigned int handle)
{ {
if(handle == 0) return nullptr; return mTextureNameSpace.find(handle);
TextureMap::iterator texture = mTextureMap.find(handle);
if(texture == mTextureMap.end())
{
return nullptr;
}
else
{
return texture->second;
}
} }
Program *ResourceManager::getProgram(unsigned int handle) Program *ResourceManager::getProgram(unsigned int handle)
...@@ -318,49 +273,17 @@ Program *ResourceManager::getProgram(unsigned int handle) ...@@ -318,49 +273,17 @@ Program *ResourceManager::getProgram(unsigned int handle)
Renderbuffer *ResourceManager::getRenderbuffer(unsigned int handle) Renderbuffer *ResourceManager::getRenderbuffer(unsigned int handle)
{ {
RenderbufferMap::iterator renderbuffer = mRenderbufferMap.find(handle); return mRenderbufferNameSpace.find(handle);
if(renderbuffer == mRenderbufferMap.end())
{
return nullptr;
}
else
{
return renderbuffer->second;
}
} }
Sampler *ResourceManager::getSampler(unsigned int handle) Sampler *ResourceManager::getSampler(unsigned int handle)
{ {
auto sampler = mSamplerMap.find(handle); return mSamplerNameSpace.find(handle);
if(sampler == mSamplerMap.end())
{
return nullptr;
}
else
{
return sampler->second;
}
} }
FenceSync *ResourceManager::getFenceSync(unsigned int handle) FenceSync *ResourceManager::getFenceSync(unsigned int handle)
{ {
auto fenceObjectIt = mFenceSyncMap.find(handle); return mFenceSyncNameSpace.find(handle);
if(fenceObjectIt == mFenceSyncMap.end())
{
return nullptr;
}
else
{
return fenceObjectIt->second;
}
}
void ResourceManager::setRenderbuffer(GLuint handle, Renderbuffer *buffer)
{
mRenderbufferMap[handle] = buffer;
} }
void ResourceManager::checkBufferAllocation(unsigned int buffer) void ResourceManager::checkBufferAllocation(unsigned int buffer)
...@@ -370,8 +293,7 @@ void ResourceManager::checkBufferAllocation(unsigned int buffer) ...@@ -370,8 +293,7 @@ void ResourceManager::checkBufferAllocation(unsigned int buffer)
Buffer *bufferObject = new Buffer(buffer); Buffer *bufferObject = new Buffer(buffer);
bufferObject->addRef(); bufferObject->addRef();
mBufferNameSpace.insert(buffer); mBufferNameSpace.insert(buffer, bufferObject);
mBufferMap[buffer] = bufferObject;
} }
} }
...@@ -409,8 +331,7 @@ void ResourceManager::checkTextureAllocation(GLuint texture, TextureType type) ...@@ -409,8 +331,7 @@ void ResourceManager::checkTextureAllocation(GLuint texture, TextureType type)
textureObject->addRef(); textureObject->addRef();
mTextureNameSpace.insert(texture); mTextureNameSpace.insert(texture, textureObject);
mTextureMap[texture] = textureObject;
} }
} }
...@@ -421,8 +342,7 @@ void ResourceManager::checkRenderbufferAllocation(GLuint handle) ...@@ -421,8 +342,7 @@ void ResourceManager::checkRenderbufferAllocation(GLuint handle)
Renderbuffer *renderbufferObject = new Renderbuffer(handle, new Colorbuffer(0, 0, GL_RGBA4_OES, 0)); Renderbuffer *renderbufferObject = new Renderbuffer(handle, new Colorbuffer(0, 0, GL_RGBA4_OES, 0));
renderbufferObject->addRef(); renderbufferObject->addRef();
mRenderbufferNameSpace.insert(handle); mRenderbufferNameSpace.insert(handle, renderbufferObject);
mRenderbufferMap[handle] = renderbufferObject;
} }
} }
...@@ -433,14 +353,13 @@ void ResourceManager::checkSamplerAllocation(GLuint sampler) ...@@ -433,14 +353,13 @@ void ResourceManager::checkSamplerAllocation(GLuint sampler)
Sampler *samplerObject = new Sampler(sampler); Sampler *samplerObject = new Sampler(sampler);
samplerObject->addRef(); samplerObject->addRef();
mSamplerNameSpace.insert(sampler); mSamplerNameSpace.insert(sampler, samplerObject);
mSamplerMap[sampler] = samplerObject;
} }
} }
bool ResourceManager::isSampler(GLuint sampler) bool ResourceManager::isSampler(GLuint sampler)
{ {
return mSamplerMap.find(sampler) != mSamplerMap.end(); return mSamplerNameSpace.find(sampler) != nullptr;
} }
} }
...@@ -45,7 +45,7 @@ enum TextureType ...@@ -45,7 +45,7 @@ enum TextureType
class ResourceManager class ResourceManager
{ {
public: public:
ResourceManager(); ResourceManager();
~ResourceManager(); ~ResourceManager();
...@@ -76,8 +76,6 @@ class ResourceManager ...@@ -76,8 +76,6 @@ class ResourceManager
Sampler *getSampler(GLuint handle); Sampler *getSampler(GLuint handle);
FenceSync *getFenceSync(GLuint handle); FenceSync *getFenceSync(GLuint handle);
void setRenderbuffer(GLuint handle, Renderbuffer *renderbuffer);
void checkBufferAllocation(unsigned int buffer); void checkBufferAllocation(unsigned int buffer);
void checkTextureAllocation(GLuint texture, TextureType type); void checkTextureAllocation(GLuint texture, TextureType type);
void checkRenderbufferAllocation(GLuint handle); void checkRenderbufferAllocation(GLuint handle);
...@@ -85,11 +83,9 @@ class ResourceManager ...@@ -85,11 +83,9 @@ class ResourceManager
bool isSampler(GLuint sampler); bool isSampler(GLuint sampler);
private: private:
std::size_t mRefCount; std::size_t mRefCount;
typedef std::map<GLint, Buffer*> BufferMap;
BufferMap mBufferMap;
gl::NameSpace<Buffer> mBufferNameSpace; gl::NameSpace<Buffer> mBufferNameSpace;
typedef std::map<GLint, Shader*> ShaderMap; typedef std::map<GLint, Shader*> ShaderMap;
...@@ -99,20 +95,9 @@ class ResourceManager ...@@ -99,20 +95,9 @@ class ResourceManager
ProgramMap mProgramMap; ProgramMap mProgramMap;
gl::NameSpace<Program> mProgramShaderNameSpace; gl::NameSpace<Program> mProgramShaderNameSpace;
typedef std::map<GLint, Texture*> TextureMap;
TextureMap mTextureMap;
gl::NameSpace<Texture> mTextureNameSpace; gl::NameSpace<Texture> mTextureNameSpace;
typedef std::map<GLint, Renderbuffer*> RenderbufferMap;
RenderbufferMap mRenderbufferMap;
gl::NameSpace<Renderbuffer> mRenderbufferNameSpace; gl::NameSpace<Renderbuffer> mRenderbufferNameSpace;
typedef std::map<GLint, Sampler*> SamplerMap;
SamplerMap mSamplerMap;
gl::NameSpace<Sampler> mSamplerNameSpace; gl::NameSpace<Sampler> mSamplerNameSpace;
typedef std::map<GLint, FenceSync*> FenceMap;
FenceMap mFenceSyncMap;
gl::NameSpace<FenceSync> mFenceSyncNameSpace; gl::NameSpace<FenceSync> mFenceSyncNameSpace;
}; };
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment