Share the name space implementation between all GL versions.

Bug 18962347

Change-Id: Ifd7ca4142d90798d0bbe2defa9337bac17e20daf
Reviewed-on: https://swiftshader-review.googlesource.com/1881
Reviewed-by: Nicolas Capens <capn@google.com>
Tested-by: Nicolas Capens <capn@google.com>
diff --git a/src/OpenGL/common/NameSpace.cpp b/src/OpenGL/common/NameSpace.cpp
new file mode 100644
index 0000000..3410233
--- /dev/null
+++ b/src/OpenGL/common/NameSpace.cpp
@@ -0,0 +1,70 @@
+// SwiftShader Software Renderer
+//
+// Copyright(c) 2005-2012 TransGaming Inc.
+//
+// All rights reserved. No part of this software may be copied, distributed, transmitted,
+// transcribed, stored in a retrieval system, translated into any human or computer
+// language by any means, or disclosed to third parties without the explicit written
+// agreement of TransGaming Inc. Without such an agreement, no rights or licenses, express
+// or implied, including but not limited to any patent rights, are granted to you.
+//
+
+// NameSpace.cpp: Implements the NameSpace class, which is used
+// to allocate GL object names.
+
+#include "common/NameSpace.hpp"
+
+#include "debug.h"
+
+namespace gl
+{
+
+NameSpace::NameSpace() : baseValue(1), nextValue(1)
+{
+}
+
+NameSpace::~NameSpace()
+{
+}
+
+void NameSpace::setBaseHandle(GLuint value)
+{
+    ASSERT(baseValue == nextValue);
+    baseValue = value;
+    nextValue = value;
+}
+
+GLuint NameSpace::allocate()
+{
+    if(freeValues.size())
+    {
+        GLuint handle = freeValues.back();
+        freeValues.pop_back();
+
+        return handle;
+    }
+
+    return nextValue++;
+}
+
+void NameSpace::release(GLuint handle)
+{
+    if(handle == nextValue - 1)
+    {
+        // Don't drop below base value
+        if(nextValue > baseValue)
+        {
+            nextValue--;
+        }
+    }
+    else
+    {
+        // Only free handles that we own - don't drop below the base value
+        if(handle >= baseValue)
+        {
+            freeValues.push_back(handle);
+        }
+    }
+}
+
+}
diff --git a/src/OpenGL/libGL/HandleAllocator.h b/src/OpenGL/common/NameSpace.hpp
similarity index 63%
rename from src/OpenGL/libGL/HandleAllocator.h
rename to src/OpenGL/common/NameSpace.hpp
index b40fe97..5177676 100644
--- a/src/OpenGL/libGL/HandleAllocator.h
+++ b/src/OpenGL/common/NameSpace.hpp
@@ -9,38 +9,37 @@
 // or implied, including but not limited to any patent rights, are granted to you.

 //

 

-// HandleAllocator.h: Defines the HandleAllocator class, which is used to

-// allocate GL handles.

+// NameSpace.h: Defines the NameSpace class, which is used to

+// allocate GL object names.

 

-#ifndef LIBGL_HANDLEALLOCATOR_H_

-#define LIBGL_HANDLEALLOCATOR_H_

-

-#define GL_APICALL

-#include <GLES2/gl2.h>

+#ifndef gl_NameSpace_hpp

+#define gl_NameSpace_hpp

 

 #include <vector>

 

+typedef unsigned int GLuint;

+

 namespace gl

 {

 

-class HandleAllocator

+class NameSpace

 {

   public:

-    HandleAllocator();

-    virtual ~HandleAllocator();

+    NameSpace();

+    virtual ~NameSpace();

 

     void setBaseHandle(GLuint value);

 

     GLuint allocate();

     void release(GLuint handle);

 

-  private:

-    GLuint mBaseValue;

-    GLuint mNextValue;

+private:

+    GLuint baseValue;

+    GLuint nextValue;

     typedef std::vector<GLuint> HandleList;

-    HandleList mFreeValues;

+    HandleList freeValues;

 };

 

 }

 

-#endif   // LIBGL_HANDLEALLOCATOR_H_

+#endif   // gl_NameSpace_hpp

diff --git a/src/OpenGL/libGL/Context.cpp b/src/OpenGL/libGL/Context.cpp
index 3d4d477..850a001 100644
--- a/src/OpenGL/libGL/Context.cpp
+++ b/src/OpenGL/libGL/Context.cpp
@@ -44,7 +44,7 @@
 	sw::Context *context = new sw::Context();

 	device = new gl::Device(context);

 

-    mFenceHandleAllocator.setBaseHandle(0);

+    mFenceNameSpace.setBaseHandle(0);

 

     setClearColor(0.0f, 0.0f, 0.0f, 0.0f);

 

@@ -773,7 +773,7 @@
 // Returns an unused framebuffer name

 GLuint Context::createFramebuffer()

 {

-    GLuint handle = mFramebufferHandleAllocator.allocate();

+    GLuint handle = mFramebufferNameSpace.allocate();

 

     mFramebufferMap[handle] = NULL;

 

@@ -782,7 +782,7 @@
 

 GLuint Context::createFence()

 {

-    GLuint handle = mFenceHandleAllocator.allocate();

+    GLuint handle = mFenceNameSpace.allocate();

 

     mFenceMap[handle] = new Fence;

 

@@ -792,7 +792,7 @@
 // Returns an unused query name

 GLuint Context::createQuery()

 {

-    GLuint handle = mQueryHandleAllocator.allocate();

+    GLuint handle = mQueryNameSpace.allocate();

 

     mQueryMap[handle] = NULL;

 

@@ -847,7 +847,7 @@
     {

         detachFramebuffer(framebuffer);

 

-        mFramebufferHandleAllocator.release(framebufferObject->first);

+        mFramebufferNameSpace.release(framebufferObject->first);

         delete framebufferObject->second;

         mFramebufferMap.erase(framebufferObject);

     }

@@ -859,7 +859,7 @@
 

     if(fenceObject != mFenceMap.end())

     {

-        mFenceHandleAllocator.release(fenceObject->first);

+        mFenceNameSpace.release(fenceObject->first);

         delete fenceObject->second;

         mFenceMap.erase(fenceObject);

     }

@@ -871,7 +871,7 @@
     

 	if(queryObject != mQueryMap.end())

     {

-        mQueryHandleAllocator.release(queryObject->first);

+        mQueryNameSpace.release(queryObject->first);

         

 		if(queryObject->second)

         {

diff --git a/src/OpenGL/libGL/Context.h b/src/OpenGL/libGL/Context.h
index 5c7bd48..ec09a6e 100644
--- a/src/OpenGL/libGL/Context.h
+++ b/src/OpenGL/libGL/Context.h
@@ -17,7 +17,7 @@
 

 #include "libEGL/Context.hpp"

 #include "ResourceManager.h"

-#include "HandleAllocator.h"

+#include "common/NameSpace.hpp"

 #include "common/Object.hpp"

 #include "Image.hpp"

 #include "Renderer/Sampler.hpp"

@@ -469,15 +469,15 @@
 

     typedef std::map<GLint, Framebuffer*> FramebufferMap;

     FramebufferMap mFramebufferMap;

-    HandleAllocator mFramebufferHandleAllocator;

+    NameSpace mFramebufferNameSpace;

 

     typedef std::map<GLint, Fence*> FenceMap;

     FenceMap mFenceMap;

-    HandleAllocator mFenceHandleAllocator;

+    NameSpace mFenceNameSpace;

 

 	typedef std::map<GLint, Query*> QueryMap;

     QueryMap mQueryMap;

-    HandleAllocator mQueryHandleAllocator;

+    NameSpace mQueryNameSpace;

 

     VertexDataManager *mVertexDataManager;

     IndexDataManager *mIndexDataManager;

diff --git a/src/OpenGL/libGL/HandleAllocator.cpp b/src/OpenGL/libGL/HandleAllocator.cpp
deleted file mode 100644
index 7db672a..0000000
--- a/src/OpenGL/libGL/HandleAllocator.cpp
+++ /dev/null
@@ -1,68 +0,0 @@
-// SwiftShader Software Renderer
-//
-// Copyright(c) 2005-2012 TransGaming Inc.
-//
-// All rights reserved. No part of this software may be copied, distributed, transmitted,
-// transcribed, stored in a retrieval system, translated into any human or computer
-// language by any means, or disclosed to third parties without the explicit written
-// agreement of TransGaming Inc. Without such an agreement, no rights or licenses, express
-// or implied, including but not limited to any patent rights, are granted to you.
-//
-
-// HandleAllocator.cpp: Implements the HandleAllocator class, which is used
-// to allocate GL handles.
-
-#include "HandleAllocator.h"
-
-#include "main.h"
-
-namespace gl
-{
-
-HandleAllocator::HandleAllocator() : mBaseValue(1), mNextValue(1)
-{
-}
-
-HandleAllocator::~HandleAllocator()
-{
-}
-
-void HandleAllocator::setBaseHandle(GLuint value)
-{
-    ASSERT(mBaseValue == mNextValue);
-    mBaseValue = value;
-    mNextValue = value;
-}
-
-GLuint HandleAllocator::allocate()
-{
-    if(mFreeValues.size())
-    {
-        GLuint handle = mFreeValues.back();
-        mFreeValues.pop_back();
-        return handle;
-    }
-    return mNextValue++;
-}
-
-void HandleAllocator::release(GLuint handle)
-{
-    if(handle == mNextValue - 1)
-    {
-        // Don't drop below base value
-        if(mNextValue > mBaseValue)
-        {
-            mNextValue--;
-        }
-    }
-    else
-    {
-        // Only free handles that we own - don't drop below the base value
-        if(handle >= mBaseValue)
-        {
-            mFreeValues.push_back(handle);
-        }
-    }
-}
-
-}
diff --git a/src/OpenGL/libGL/ResourceManager.cpp b/src/OpenGL/libGL/ResourceManager.cpp
index a4c8998..37d1736 100644
--- a/src/OpenGL/libGL/ResourceManager.cpp
+++ b/src/OpenGL/libGL/ResourceManager.cpp
@@ -71,7 +71,7 @@
 // Returns an unused buffer name
 GLuint ResourceManager::createBuffer()
 {
-    GLuint handle = mBufferHandleAllocator.allocate();
+    GLuint handle = mBufferNameSpace.allocate();
 
     mBufferMap[handle] = NULL;
 
@@ -81,7 +81,7 @@
 // Returns an unused shader/program name
 GLuint ResourceManager::createShader(GLenum type)
 {
-    GLuint handle = mProgramShaderHandleAllocator.allocate();
+    GLuint handle = mProgramShaderNameSpace.allocate();
 
     if(type == GL_VERTEX_SHADER)
     {
@@ -99,7 +99,7 @@
 // Returns an unused program/shader name
 GLuint ResourceManager::createProgram()
 {
-    GLuint handle = mProgramShaderHandleAllocator.allocate();
+    GLuint handle = mProgramShaderNameSpace.allocate();
 
     mProgramMap[handle] = new Program(this, handle);
 
@@ -109,7 +109,7 @@
 // Returns an unused texture name
 GLuint ResourceManager::createTexture()
 {
-    GLuint handle = mTextureHandleAllocator.allocate();
+    GLuint handle = mTextureNameSpace.allocate();
 
     mTextureMap[handle] = NULL;
 
@@ -119,7 +119,7 @@
 // Returns an unused renderbuffer name
 GLuint ResourceManager::createRenderbuffer()
 {
-    GLuint handle = mRenderbufferHandleAllocator.allocate();
+    GLuint handle = mRenderbufferNameSpace.allocate();
 
     mRenderbufferMap[handle] = NULL;
 
@@ -132,7 +132,7 @@
 
     if(bufferObject != mBufferMap.end())
     {
-        mBufferHandleAllocator.release(bufferObject->first);
+        mBufferNameSpace.release(bufferObject->first);
         if(bufferObject->second) bufferObject->second->release();
         mBufferMap.erase(bufferObject);
     }
@@ -146,7 +146,7 @@
     {
         if(shaderObject->second->getRefCount() == 0)
         {
-            mProgramShaderHandleAllocator.release(shaderObject->first);
+            mProgramShaderNameSpace.release(shaderObject->first);
             delete shaderObject->second;
             mShaderMap.erase(shaderObject);
         }
@@ -165,7 +165,7 @@
     {
         if(programObject->second->getRefCount() == 0)
         {
-            mProgramShaderHandleAllocator.release(programObject->first);
+            mProgramShaderNameSpace.release(programObject->first);
             delete programObject->second;
             mProgramMap.erase(programObject);
         }
@@ -182,7 +182,7 @@
 
     if(textureObject != mTextureMap.end())
     {
-        mTextureHandleAllocator.release(textureObject->first);
+        mTextureNameSpace.release(textureObject->first);
         if(textureObject->second) textureObject->second->release();
         mTextureMap.erase(textureObject);
     }
@@ -194,7 +194,7 @@
 
     if(renderbufferObject != mRenderbufferMap.end())
     {
-        mRenderbufferHandleAllocator.release(renderbufferObject->first);
+        mRenderbufferNameSpace.release(renderbufferObject->first);
         if(renderbufferObject->second) renderbufferObject->second->release();
         mRenderbufferMap.erase(renderbufferObject);
     }
diff --git a/src/OpenGL/libGL/ResourceManager.h b/src/OpenGL/libGL/ResourceManager.h
index 06d9aae..e48db2a 100644
--- a/src/OpenGL/libGL/ResourceManager.h
+++ b/src/OpenGL/libGL/ResourceManager.h
@@ -15,7 +15,7 @@
 #ifndef LIBGL_RESOURCEMANAGER_H_

 #define LIBGL_RESOURCEMANAGER_H_

 

-#include "HandleAllocator.h"

+#include "common/NameSpace.hpp"

 

 #define GL_APICALL

 #include <GLES2/gl2.h>

@@ -77,22 +77,22 @@
 

     typedef std::map<GLint, Buffer*> BufferMap;

     BufferMap mBufferMap;

-    HandleAllocator mBufferHandleAllocator;

+    NameSpace mBufferNameSpace;

 

     typedef std::map<GLint, Shader*> ShaderMap;

     ShaderMap mShaderMap;

 

     typedef std::map<GLint, Program*> ProgramMap;

     ProgramMap mProgramMap;

-    HandleAllocator mProgramShaderHandleAllocator;

+    NameSpace mProgramShaderNameSpace;

 

     typedef std::map<GLint, Texture*> TextureMap;

     TextureMap mTextureMap;

-    HandleAllocator mTextureHandleAllocator;

+    NameSpace mTextureNameSpace;

 

     typedef std::map<GLint, Renderbuffer*> RenderbufferMap;

     RenderbufferMap mRenderbufferMap;

-    HandleAllocator mRenderbufferHandleAllocator;

+    NameSpace mRenderbufferNameSpace;

 };

 

 }

diff --git a/src/OpenGL/libGL/libGL.vcxproj b/src/OpenGL/libGL/libGL.vcxproj
index 6f785fc..77cf943 100644
--- a/src/OpenGL/libGL/libGL.vcxproj
+++ b/src/OpenGL/libGL/libGL.vcxproj
@@ -318,6 +318,7 @@
     </PostBuildEvent>

   </ItemDefinitionGroup>

   <ItemGroup>

+    <ClCompile Include="..\common\NameSpace.cpp" />

     <ClCompile Include="..\common\Object.cpp" />

     <ClCompile Include="Buffer.cpp" />

     <ClCompile Include="Context.cpp" />

@@ -325,7 +326,6 @@
     <ClCompile Include="Device.cpp" />

     <ClCompile Include="Fence.cpp" />

     <ClCompile Include="Framebuffer.cpp" />

-    <ClCompile Include="HandleAllocator.cpp" />

     <ClCompile Include="Image.cpp" />

     <ClCompile Include="IndexDataManager.cpp" />

     <ClCompile Include="libGL.cpp" />

@@ -341,6 +341,7 @@
   </ItemGroup>

   <ItemGroup>

     <ClInclude Include="..\common\debug.h" />

+    <ClInclude Include="..\common\NameSpace.hpp" />

     <ClInclude Include="..\common\Object.hpp" />

     <ClInclude Include="..\include\GLES2\gl2.h" />

     <ClInclude Include="..\include\GLES2\gl2ext.h" />

@@ -350,7 +351,6 @@
     <ClInclude Include="Device.hpp" />

     <ClInclude Include="Fence.h" />

     <ClInclude Include="Framebuffer.h" />

-    <ClInclude Include="HandleAllocator.h" />

     <ClInclude Include="Image.hpp" />

     <ClInclude Include="IndexDataManager.h" />

     <ClInclude Include="main.h" />

diff --git a/src/OpenGL/libGL/libGL.vcxproj.filters b/src/OpenGL/libGL/libGL.vcxproj.filters
index 1fcf9a4..66b2d0f 100644
--- a/src/OpenGL/libGL/libGL.vcxproj.filters
+++ b/src/OpenGL/libGL/libGL.vcxproj.filters
@@ -26,9 +26,6 @@
     <ClCompile Include="Framebuffer.cpp">

       <Filter>Source Files</Filter>

     </ClCompile>

-    <ClCompile Include="HandleAllocator.cpp">

-      <Filter>Source Files</Filter>

-    </ClCompile>

     <ClCompile Include="IndexDataManager.cpp">

       <Filter>Source Files</Filter>

     </ClCompile>

@@ -71,6 +68,9 @@
     <ClCompile Include="..\common\Object.cpp">

       <Filter>Source Files</Filter>

     </ClCompile>

+    <ClCompile Include="..\common\NameSpace.cpp">

+      <Filter>Source Files</Filter>

+    </ClCompile>

   </ItemGroup>

   <ItemGroup>

     <ClInclude Include="Buffer.h">

@@ -85,9 +85,6 @@
     <ClInclude Include="Framebuffer.h">

       <Filter>Header Files</Filter>

     </ClInclude>

-    <ClInclude Include="HandleAllocator.h">

-      <Filter>Header Files</Filter>

-    </ClInclude>

     <ClInclude Include="IndexDataManager.h">

       <Filter>Header Files</Filter>

     </ClInclude>

@@ -145,6 +142,9 @@
     <ClInclude Include="..\common\Object.hpp">

       <Filter>Header Files</Filter>

     </ClInclude>

+    <ClInclude Include="..\common\NameSpace.hpp">

+      <Filter>Header Files</Filter>

+    </ClInclude>

   </ItemGroup>

   <ItemGroup>

     <ResourceCompile Include="libGL.rc" />

diff --git a/src/OpenGL/libGLES_CM/Context.cpp b/src/OpenGL/libGLES_CM/Context.cpp
index f22dfaf..fbbe989 100644
--- a/src/OpenGL/libGLES_CM/Context.cpp
+++ b/src/OpenGL/libGLES_CM/Context.cpp
@@ -761,7 +761,7 @@
 // Returns an unused framebuffer name

 GLuint Context::createFramebuffer()

 {

-    GLuint handle = mFramebufferHandleAllocator.allocate();

+    GLuint handle = mFramebufferNameSpace.allocate();

 

     mFramebufferMap[handle] = NULL;

 

@@ -806,7 +806,7 @@
     {

         detachFramebuffer(framebuffer);

 

-        mFramebufferHandleAllocator.release(framebufferObject->first);

+        mFramebufferNameSpace.release(framebufferObject->first);

         delete framebufferObject->second;

         mFramebufferMap.erase(framebufferObject);

     }

diff --git a/src/OpenGL/libGLES_CM/Context.h b/src/OpenGL/libGLES_CM/Context.h
index 9b22f8c..101b2f9 100644
--- a/src/OpenGL/libGLES_CM/Context.h
+++ b/src/OpenGL/libGLES_CM/Context.h
@@ -17,7 +17,7 @@
 

 #include "libEGL/Context.hpp"

 #include "ResourceManager.h"

-#include "HandleAllocator.h"

+#include "common/NameSpace.hpp"

 #include "common/Object.hpp"

 #include "Image.hpp"

 #include "Renderer/Sampler.hpp"

@@ -472,7 +472,7 @@
 

     typedef std::map<GLint, Framebuffer*> FramebufferMap;

     FramebufferMap mFramebufferMap;

-    HandleAllocator mFramebufferHandleAllocator;

+    gl::NameSpace mFramebufferNameSpace;

 

     VertexDataManager *mVertexDataManager;

     IndexDataManager *mIndexDataManager;

diff --git a/src/OpenGL/libGLES_CM/HandleAllocator.cpp b/src/OpenGL/libGLES_CM/HandleAllocator.cpp
deleted file mode 100644
index 52991c1..0000000
--- a/src/OpenGL/libGLES_CM/HandleAllocator.cpp
+++ /dev/null
@@ -1,68 +0,0 @@
-// SwiftShader Software Renderer
-//
-// Copyright(c) 2005-2012 TransGaming Inc.
-//
-// All rights reserved. No part of this software may be copied, distributed, transmitted,
-// transcribed, stored in a retrieval system, translated into any human or computer
-// language by any means, or disclosed to third parties without the explicit written
-// agreement of TransGaming Inc. Without such an agreement, no rights or licenses, express
-// or implied, including but not limited to any patent rights, are granted to you.
-//
-
-// HandleAllocator.cpp: Implements the HandleAllocator class, which is used
-// to allocate GL handles.
-
-#include "HandleAllocator.h"
-
-#include "main.h"
-
-namespace es1
-{
-
-HandleAllocator::HandleAllocator() : mBaseValue(1), mNextValue(1)
-{
-}
-
-HandleAllocator::~HandleAllocator()
-{
-}
-
-void HandleAllocator::setBaseHandle(GLuint value)
-{
-    ASSERT(mBaseValue == mNextValue);
-    mBaseValue = value;
-    mNextValue = value;
-}
-
-GLuint HandleAllocator::allocate()
-{
-    if(mFreeValues.size())
-    {
-        GLuint handle = mFreeValues.back();
-        mFreeValues.pop_back();
-        return handle;
-    }
-    return mNextValue++;
-}
-
-void HandleAllocator::release(GLuint handle)
-{
-    if(handle == mNextValue - 1)
-    {
-        // Don't drop below base value
-        if(mNextValue > mBaseValue)
-        {
-            mNextValue--;
-        }
-    }
-    else
-    {
-        // Only free handles that we own - don't drop below the base value
-        if(handle >= mBaseValue)
-        {
-            mFreeValues.push_back(handle);
-        }
-    }
-}
-
-}
diff --git a/src/OpenGL/libGLES_CM/HandleAllocator.h b/src/OpenGL/libGLES_CM/HandleAllocator.h
deleted file mode 100644
index 448f82a..0000000
--- a/src/OpenGL/libGLES_CM/HandleAllocator.h
+++ /dev/null
@@ -1,46 +0,0 @@
-// SwiftShader Software Renderer

-//

-// Copyright(c) 2005-2012 TransGaming Inc.

-//

-// All rights reserved. No part of this software may be copied, distributed, transmitted,

-// transcribed, stored in a retrieval system, translated into any human or computer

-// language by any means, or disclosed to third parties without the explicit written

-// agreement of TransGaming Inc. Without such an agreement, no rights or licenses, express

-// or implied, including but not limited to any patent rights, are granted to you.

-//

-

-// HandleAllocator.h: Defines the HandleAllocator class, which is used to

-// allocate GL handles.

-

-#ifndef LIBGLES_CM_HANDLEALLOCATOR_H_

-#define LIBGLES_CM_HANDLEALLOCATOR_H_

-

-#define GL_API

-#include <GLES/gl.h>

-

-#include <vector>

-

-namespace es1

-{

-

-class HandleAllocator

-{

-  public:

-    HandleAllocator();

-    virtual ~HandleAllocator();

-

-    void setBaseHandle(GLuint value);

-

-    GLuint allocate();

-    void release(GLuint handle);

-

-  private:

-    GLuint mBaseValue;

-    GLuint mNextValue;

-    typedef std::vector<GLuint> HandleList;

-    HandleList mFreeValues;

-};

-

-}

-

-#endif   // LIBGLES_CM_HANDLEALLOCATOR_H_

diff --git a/src/OpenGL/libGLES_CM/ResourceManager.cpp b/src/OpenGL/libGLES_CM/ResourceManager.cpp
index 9a7d74d..4e9f1bd 100644
--- a/src/OpenGL/libGLES_CM/ResourceManager.cpp
+++ b/src/OpenGL/libGLES_CM/ResourceManager.cpp
@@ -59,7 +59,7 @@
 // Returns an unused buffer name
 GLuint ResourceManager::createBuffer()
 {
-    GLuint handle = mBufferHandleAllocator.allocate();
+    GLuint handle = mBufferNameSpace.allocate();
 
     mBufferMap[handle] = NULL;
 
@@ -69,7 +69,7 @@
 // Returns an unused texture name
 GLuint ResourceManager::createTexture()
 {
-    GLuint handle = mTextureHandleAllocator.allocate();
+    GLuint handle = mTextureNameSpace.allocate();
 
     mTextureMap[handle] = NULL;
 
@@ -79,7 +79,7 @@
 // Returns an unused renderbuffer name
 GLuint ResourceManager::createRenderbuffer()
 {
-    GLuint handle = mRenderbufferHandleAllocator.allocate();
+    GLuint handle = mRenderbufferNameSpace.allocate();
 
     mRenderbufferMap[handle] = NULL;
 
@@ -92,7 +92,7 @@
 
     if(bufferObject != mBufferMap.end())
     {
-        mBufferHandleAllocator.release(bufferObject->first);
+        mBufferNameSpace.release(bufferObject->first);
         if(bufferObject->second) bufferObject->second->release();
         mBufferMap.erase(bufferObject);
     }
@@ -104,7 +104,7 @@
 
     if(textureObject != mTextureMap.end())
     {
-        mTextureHandleAllocator.release(textureObject->first);
+        mTextureNameSpace.release(textureObject->first);
         if(textureObject->second) textureObject->second->release();
         mTextureMap.erase(textureObject);
     }
@@ -116,7 +116,7 @@
 
     if(renderbufferObject != mRenderbufferMap.end())
     {
-        mRenderbufferHandleAllocator.release(renderbufferObject->first);
+        mRenderbufferNameSpace.release(renderbufferObject->first);
         if(renderbufferObject->second) renderbufferObject->second->release();
         mRenderbufferMap.erase(renderbufferObject);
     }
diff --git a/src/OpenGL/libGLES_CM/ResourceManager.h b/src/OpenGL/libGLES_CM/ResourceManager.h
index 0e410b8..483ea1d 100644
--- a/src/OpenGL/libGLES_CM/ResourceManager.h
+++ b/src/OpenGL/libGLES_CM/ResourceManager.h
@@ -15,7 +15,7 @@
 #ifndef LIBGLES_CM_RESOURCEMANAGER_H_

 #define LIBGLES_CM_RESOURCEMANAGER_H_

 

-#include "HandleAllocator.h"

+#include "common/NameSpace.hpp"

 

 #define GL_API

 #include <GLES/gl.h>

@@ -69,15 +69,15 @@
 

     typedef std::map<GLint, Buffer*> BufferMap;

     BufferMap mBufferMap;

-    HandleAllocator mBufferHandleAllocator;

+    gl::NameSpace mBufferNameSpace;

 	

     typedef std::map<GLint, Texture*> TextureMap;

     TextureMap mTextureMap;

-    HandleAllocator mTextureHandleAllocator;

+    gl::NameSpace mTextureNameSpace;

 

     typedef std::map<GLint, Renderbuffer*> RenderbufferMap;

     RenderbufferMap mRenderbufferMap;

-    HandleAllocator mRenderbufferHandleAllocator;

+    gl::NameSpace mRenderbufferNameSpace;

 };

 

 }

diff --git a/src/OpenGL/libGLES_CM/libGLES_CM.vcxproj b/src/OpenGL/libGLES_CM/libGLES_CM.vcxproj
index bf5f423..3757f90 100644
--- a/src/OpenGL/libGLES_CM/libGLES_CM.vcxproj
+++ b/src/OpenGL/libGLES_CM/libGLES_CM.vcxproj
@@ -318,13 +318,13 @@
     </PostBuildEvent>

   </ItemDefinitionGroup>

   <ItemGroup>

+    <ClCompile Include="..\common\NameSpace.cpp" />

     <ClCompile Include="..\common\Object.cpp" />

     <ClCompile Include="Buffer.cpp" />

     <ClCompile Include="Context.cpp" />

     <ClCompile Include="..\common\debug.cpp" />

     <ClCompile Include="Device.cpp" />

     <ClCompile Include="Framebuffer.cpp" />

-    <ClCompile Include="HandleAllocator.cpp" />

     <ClCompile Include="Image.cpp" />

     <ClCompile Include="IndexDataManager.cpp" />

     <ClCompile Include="libGLES_CM.cpp" />

@@ -338,6 +338,7 @@
   </ItemGroup>

   <ItemGroup>

     <ClInclude Include="..\common\debug.h" />

+    <ClInclude Include="..\common\NameSpace.hpp" />

     <ClInclude Include="..\common\Object.hpp" />

     <ClInclude Include="..\include\GLES\egl.h" />

     <ClInclude Include="..\include\GLES\gl.h" />

@@ -347,7 +348,6 @@
     <ClInclude Include="Context.h" />

     <ClInclude Include="Device.hpp" />

     <ClInclude Include="Framebuffer.h" />

-    <ClInclude Include="HandleAllocator.h" />

     <ClInclude Include="Image.hpp" />

     <ClInclude Include="IndexDataManager.h" />

     <ClInclude Include="main.h" />

diff --git a/src/OpenGL/libGLES_CM/libGLES_CM.vcxproj.filters b/src/OpenGL/libGLES_CM/libGLES_CM.vcxproj.filters
index 5ccc748..47c405f 100644
--- a/src/OpenGL/libGLES_CM/libGLES_CM.vcxproj.filters
+++ b/src/OpenGL/libGLES_CM/libGLES_CM.vcxproj.filters
@@ -23,9 +23,6 @@
     <ClCompile Include="Framebuffer.cpp">

       <Filter>Source Files</Filter>

     </ClCompile>

-    <ClCompile Include="HandleAllocator.cpp">

-      <Filter>Source Files</Filter>

-    </ClCompile>

     <ClCompile Include="IndexDataManager.cpp">

       <Filter>Source Files</Filter>

     </ClCompile>

@@ -62,6 +59,9 @@
     <ClCompile Include="..\common\Object.cpp">

       <Filter>Source Files</Filter>

     </ClCompile>

+    <ClCompile Include="..\common\NameSpace.cpp">

+      <Filter>Source Files</Filter>

+    </ClCompile>

   </ItemGroup>

   <ItemGroup>

     <ClInclude Include="Buffer.h">

@@ -73,9 +73,6 @@
     <ClInclude Include="Framebuffer.h">

       <Filter>Header Files</Filter>

     </ClInclude>

-    <ClInclude Include="HandleAllocator.h">

-      <Filter>Header Files</Filter>

-    </ClInclude>

     <ClInclude Include="IndexDataManager.h">

       <Filter>Header Files</Filter>

     </ClInclude>

@@ -130,6 +127,9 @@
     <ClInclude Include="..\common\Object.hpp">

       <Filter>Header Files</Filter>

     </ClInclude>

+    <ClInclude Include="..\common\NameSpace.hpp">

+      <Filter>Header Files</Filter>

+    </ClInclude>

   </ItemGroup>

   <ItemGroup>

     <ResourceCompile Include="libGLES_CM.rc" />

diff --git a/src/OpenGL/libGLESv2/Context.cpp b/src/OpenGL/libGLESv2/Context.cpp
index 30a1d7e..a141b26 100644
--- a/src/OpenGL/libGLESv2/Context.cpp
+++ b/src/OpenGL/libGLESv2/Context.cpp
@@ -44,7 +44,7 @@
 	sw::Context *context = new sw::Context();

 	device = new es2::Device(context);

 

-    mFenceHandleAllocator.setBaseHandle(0);

+    mFenceNameSpace.setBaseHandle(0);

 

     setClearColor(0.0f, 0.0f, 0.0f, 0.0f);

 

@@ -775,7 +775,7 @@
 // Returns an unused framebuffer name

 GLuint Context::createFramebuffer()

 {

-    GLuint handle = mFramebufferHandleAllocator.allocate();

+    GLuint handle = mFramebufferNameSpace.allocate();

 

     mFramebufferMap[handle] = NULL;

 

@@ -784,7 +784,7 @@
 

 GLuint Context::createFence()

 {

-    GLuint handle = mFenceHandleAllocator.allocate();

+    GLuint handle = mFenceNameSpace.allocate();

 

     mFenceMap[handle] = new Fence;

 

@@ -794,7 +794,7 @@
 // Returns an unused query name

 GLuint Context::createQuery()

 {

-    GLuint handle = mQueryHandleAllocator.allocate();

+    GLuint handle = mQueryNameSpace.allocate();

 

     mQueryMap[handle] = NULL;

 

@@ -849,7 +849,7 @@
     {

         detachFramebuffer(framebuffer);

 

-        mFramebufferHandleAllocator.release(framebufferObject->first);

+        mFramebufferNameSpace.release(framebufferObject->first);

         delete framebufferObject->second;

         mFramebufferMap.erase(framebufferObject);

     }

@@ -861,7 +861,7 @@
 

     if(fenceObject != mFenceMap.end())

     {

-        mFenceHandleAllocator.release(fenceObject->first);

+        mFenceNameSpace.release(fenceObject->first);

         delete fenceObject->second;

         mFenceMap.erase(fenceObject);

     }

@@ -873,7 +873,7 @@
     

 	if(queryObject != mQueryMap.end())

     {

-        mQueryHandleAllocator.release(queryObject->first);

+        mQueryNameSpace.release(queryObject->first);

         

 		if(queryObject->second)

         {

diff --git a/src/OpenGL/libGLESv2/Context.h b/src/OpenGL/libGLESv2/Context.h
index 9878cf6..5d25b40 100644
--- a/src/OpenGL/libGLESv2/Context.h
+++ b/src/OpenGL/libGLESv2/Context.h
@@ -17,7 +17,7 @@
 

 #include "libEGL/Context.hpp"

 #include "ResourceManager.h"

-#include "HandleAllocator.h"

+#include "common/NameSpace.hpp"

 #include "common/Object.hpp"

 #include "Image.hpp"

 #include "Renderer/Sampler.hpp"

@@ -470,15 +470,15 @@
 

     typedef std::map<GLint, Framebuffer*> FramebufferMap;

     FramebufferMap mFramebufferMap;

-    HandleAllocator mFramebufferHandleAllocator;

+    gl::NameSpace mFramebufferNameSpace;

 

     typedef std::map<GLint, Fence*> FenceMap;

     FenceMap mFenceMap;

-    HandleAllocator mFenceHandleAllocator;

+    gl::NameSpace mFenceNameSpace;

 

 	typedef std::map<GLint, Query*> QueryMap;

     QueryMap mQueryMap;

-    HandleAllocator mQueryHandleAllocator;

+    gl::NameSpace mQueryNameSpace;

 

     VertexDataManager *mVertexDataManager;

     IndexDataManager *mIndexDataManager;

diff --git a/src/OpenGL/libGLESv2/HandleAllocator.cpp b/src/OpenGL/libGLESv2/HandleAllocator.cpp
deleted file mode 100644
index 85813f2..0000000
--- a/src/OpenGL/libGLESv2/HandleAllocator.cpp
+++ /dev/null
@@ -1,68 +0,0 @@
-// SwiftShader Software Renderer
-//
-// Copyright(c) 2005-2012 TransGaming Inc.
-//
-// All rights reserved. No part of this software may be copied, distributed, transmitted,
-// transcribed, stored in a retrieval system, translated into any human or computer
-// language by any means, or disclosed to third parties without the explicit written
-// agreement of TransGaming Inc. Without such an agreement, no rights or licenses, express
-// or implied, including but not limited to any patent rights, are granted to you.
-//
-
-// HandleAllocator.cpp: Implements the HandleAllocator class, which is used
-// to allocate GL handles.
-
-#include "HandleAllocator.h"
-
-#include "main.h"
-
-namespace es2
-{
-
-HandleAllocator::HandleAllocator() : mBaseValue(1), mNextValue(1)
-{
-}
-
-HandleAllocator::~HandleAllocator()
-{
-}
-
-void HandleAllocator::setBaseHandle(GLuint value)
-{
-    ASSERT(mBaseValue == mNextValue);
-    mBaseValue = value;
-    mNextValue = value;
-}
-
-GLuint HandleAllocator::allocate()
-{
-    if(mFreeValues.size())
-    {
-        GLuint handle = mFreeValues.back();
-        mFreeValues.pop_back();
-        return handle;
-    }
-    return mNextValue++;
-}
-
-void HandleAllocator::release(GLuint handle)
-{
-    if(handle == mNextValue - 1)
-    {
-        // Don't drop below base value
-        if(mNextValue > mBaseValue)
-        {
-            mNextValue--;
-        }
-    }
-    else
-    {
-        // Only free handles that we own - don't drop below the base value
-        if(handle >= mBaseValue)
-        {
-            mFreeValues.push_back(handle);
-        }
-    }
-}
-
-}
diff --git a/src/OpenGL/libGLESv2/HandleAllocator.h b/src/OpenGL/libGLESv2/HandleAllocator.h
deleted file mode 100644
index 8079d12..0000000
--- a/src/OpenGL/libGLESv2/HandleAllocator.h
+++ /dev/null
@@ -1,46 +0,0 @@
-// SwiftShader Software Renderer

-//

-// Copyright(c) 2005-2012 TransGaming Inc.

-//

-// All rights reserved. No part of this software may be copied, distributed, transmitted,

-// transcribed, stored in a retrieval system, translated into any human or computer

-// language by any means, or disclosed to third parties without the explicit written

-// agreement of TransGaming Inc. Without such an agreement, no rights or licenses, express

-// or implied, including but not limited to any patent rights, are granted to you.

-//

-

-// HandleAllocator.h: Defines the HandleAllocator class, which is used to

-// allocate GL handles.

-

-#ifndef LIBGLESV2_HANDLEALLOCATOR_H_

-#define LIBGLESV2_HANDLEALLOCATOR_H_

-

-#define GL_APICALL

-#include <GLES2/gl2.h>

-

-#include <vector>

-

-namespace es2

-{

-

-class HandleAllocator

-{

-  public:

-    HandleAllocator();

-    virtual ~HandleAllocator();

-

-    void setBaseHandle(GLuint value);

-

-    GLuint allocate();

-    void release(GLuint handle);

-

-  private:

-    GLuint mBaseValue;

-    GLuint mNextValue;

-    typedef std::vector<GLuint> HandleList;

-    HandleList mFreeValues;

-};

-

-}

-

-#endif   // LIBGLESV2_HANDLEALLOCATOR_H_

diff --git a/src/OpenGL/libGLESv2/ResourceManager.cpp b/src/OpenGL/libGLESv2/ResourceManager.cpp
index 2f6fd74..4f6b177 100644
--- a/src/OpenGL/libGLESv2/ResourceManager.cpp
+++ b/src/OpenGL/libGLESv2/ResourceManager.cpp
@@ -71,7 +71,7 @@
 // Returns an unused buffer name
 GLuint ResourceManager::createBuffer()
 {
-    GLuint handle = mBufferHandleAllocator.allocate();
+    GLuint handle = mBufferNameSpace.allocate();
 
     mBufferMap[handle] = NULL;
 
@@ -81,7 +81,7 @@
 // Returns an unused shader/program name
 GLuint ResourceManager::createShader(GLenum type)
 {
-    GLuint handle = mProgramShaderHandleAllocator.allocate();
+    GLuint handle = mProgramShaderNameSpace.allocate();
 
     if(type == GL_VERTEX_SHADER)
     {
@@ -99,7 +99,7 @@
 // Returns an unused program/shader name
 GLuint ResourceManager::createProgram()
 {
-    GLuint handle = mProgramShaderHandleAllocator.allocate();
+    GLuint handle = mProgramShaderNameSpace.allocate();
 
     mProgramMap[handle] = new Program(this, handle);
 
@@ -109,7 +109,7 @@
 // Returns an unused texture name
 GLuint ResourceManager::createTexture()
 {
-    GLuint handle = mTextureHandleAllocator.allocate();
+    GLuint handle = mTextureNameSpace.allocate();
 
     mTextureMap[handle] = NULL;
 
@@ -119,7 +119,7 @@
 // Returns an unused renderbuffer name
 GLuint ResourceManager::createRenderbuffer()
 {
-    GLuint handle = mRenderbufferHandleAllocator.allocate();
+    GLuint handle = mRenderbufferNameSpace.allocate();
 
     mRenderbufferMap[handle] = NULL;
 
@@ -132,7 +132,7 @@
 
     if(bufferObject != mBufferMap.end())
     {
-        mBufferHandleAllocator.release(bufferObject->first);
+        mBufferNameSpace.release(bufferObject->first);
         if(bufferObject->second) bufferObject->second->release();
         mBufferMap.erase(bufferObject);
     }
@@ -146,7 +146,7 @@
     {
         if(shaderObject->second->getRefCount() == 0)
         {
-            mProgramShaderHandleAllocator.release(shaderObject->first);
+            mProgramShaderNameSpace.release(shaderObject->first);
             delete shaderObject->second;
             mShaderMap.erase(shaderObject);
         }
@@ -165,7 +165,7 @@
     {
         if(programObject->second->getRefCount() == 0)
         {
-            mProgramShaderHandleAllocator.release(programObject->first);
+            mProgramShaderNameSpace.release(programObject->first);
             delete programObject->second;
             mProgramMap.erase(programObject);
         }
@@ -182,7 +182,7 @@
 
     if(textureObject != mTextureMap.end())
     {
-        mTextureHandleAllocator.release(textureObject->first);
+        mTextureNameSpace.release(textureObject->first);
         if(textureObject->second) textureObject->second->release();
         mTextureMap.erase(textureObject);
     }
@@ -194,7 +194,7 @@
 
     if(renderbufferObject != mRenderbufferMap.end())
     {
-        mRenderbufferHandleAllocator.release(renderbufferObject->first);
+        mRenderbufferNameSpace.release(renderbufferObject->first);
         if(renderbufferObject->second) renderbufferObject->second->release();
         mRenderbufferMap.erase(renderbufferObject);
     }
diff --git a/src/OpenGL/libGLESv2/ResourceManager.h b/src/OpenGL/libGLESv2/ResourceManager.h
index d7d626d..504563e 100644
--- a/src/OpenGL/libGLESv2/ResourceManager.h
+++ b/src/OpenGL/libGLESv2/ResourceManager.h
@@ -15,7 +15,7 @@
 #ifndef LIBGLESV2_RESOURCEMANAGER_H_

 #define LIBGLESV2_RESOURCEMANAGER_H_

 

-#include "HandleAllocator.h"

+#include "common/NameSpace.hpp"

 

 #define GL_APICALL

 #include <GLES2/gl2.h>

@@ -78,22 +78,22 @@
 

     typedef std::map<GLint, Buffer*> BufferMap;

     BufferMap mBufferMap;

-    HandleAllocator mBufferHandleAllocator;

+    gl::NameSpace mBufferNameSpace;

 

     typedef std::map<GLint, Shader*> ShaderMap;

     ShaderMap mShaderMap;

 

     typedef std::map<GLint, Program*> ProgramMap;

     ProgramMap mProgramMap;

-    HandleAllocator mProgramShaderHandleAllocator;

+    gl::NameSpace mProgramShaderNameSpace;

 

     typedef std::map<GLint, Texture*> TextureMap;

     TextureMap mTextureMap;

-    HandleAllocator mTextureHandleAllocator;

+    gl::NameSpace mTextureNameSpace;

 

     typedef std::map<GLint, Renderbuffer*> RenderbufferMap;

     RenderbufferMap mRenderbufferMap;

-    HandleAllocator mRenderbufferHandleAllocator;

+    gl::NameSpace mRenderbufferNameSpace;

 };

 

 }

diff --git a/src/OpenGL/libGLESv2/libGLESv2.vcxproj b/src/OpenGL/libGLESv2/libGLESv2.vcxproj
index aaa95be..58076d4 100644
--- a/src/OpenGL/libGLESv2/libGLESv2.vcxproj
+++ b/src/OpenGL/libGLESv2/libGLESv2.vcxproj
@@ -318,6 +318,7 @@
     </PostBuildEvent>

   </ItemDefinitionGroup>

   <ItemGroup>

+    <ClCompile Include="..\common\NameSpace.cpp" />

     <ClCompile Include="..\common\Object.cpp" />

     <ClCompile Include="Buffer.cpp" />

     <ClCompile Include="Context.cpp" />

@@ -325,7 +326,6 @@
     <ClCompile Include="Device.cpp" />

     <ClCompile Include="Fence.cpp" />

     <ClCompile Include="Framebuffer.cpp" />

-    <ClCompile Include="HandleAllocator.cpp" />

     <ClCompile Include="Image.cpp" />

     <ClCompile Include="IndexDataManager.cpp" />

     <ClCompile Include="libGLESv2.cpp" />

@@ -341,6 +341,7 @@
   </ItemGroup>

   <ItemGroup>

     <ClInclude Include="..\common\debug.h" />

+    <ClInclude Include="..\common\NameSpace.hpp" />

     <ClInclude Include="..\common\Object.hpp" />

     <ClInclude Include="..\include\GLES2\gl2.h" />

     <ClInclude Include="..\include\GLES2\gl2ext.h" />

@@ -350,7 +351,6 @@
     <ClInclude Include="Device.hpp" />

     <ClInclude Include="Fence.h" />

     <ClInclude Include="Framebuffer.h" />

-    <ClInclude Include="HandleAllocator.h" />

     <ClInclude Include="Image.hpp" />

     <ClInclude Include="IndexDataManager.h" />

     <ClInclude Include="main.h" />

diff --git a/src/OpenGL/libGLESv2/libGLESv2.vcxproj.filters b/src/OpenGL/libGLESv2/libGLESv2.vcxproj.filters
index c67845b..c2501d5 100644
--- a/src/OpenGL/libGLESv2/libGLESv2.vcxproj.filters
+++ b/src/OpenGL/libGLESv2/libGLESv2.vcxproj.filters
@@ -26,9 +26,6 @@
     <ClCompile Include="Framebuffer.cpp">

       <Filter>Source Files</Filter>

     </ClCompile>

-    <ClCompile Include="HandleAllocator.cpp">

-      <Filter>Source Files</Filter>

-    </ClCompile>

     <ClCompile Include="IndexDataManager.cpp">

       <Filter>Source Files</Filter>

     </ClCompile>

@@ -71,6 +68,9 @@
     <ClCompile Include="..\common\Object.cpp">

       <Filter>Source Files</Filter>

     </ClCompile>

+    <ClCompile Include="..\common\NameSpace.cpp">

+      <Filter>Source Files</Filter>

+    </ClCompile>

   </ItemGroup>

   <ItemGroup>

     <ClInclude Include="Buffer.h">

@@ -85,9 +85,6 @@
     <ClInclude Include="Framebuffer.h">

       <Filter>Header Files</Filter>

     </ClInclude>

-    <ClInclude Include="HandleAllocator.h">

-      <Filter>Header Files</Filter>

-    </ClInclude>

     <ClInclude Include="IndexDataManager.h">

       <Filter>Header Files</Filter>

     </ClInclude>

@@ -145,6 +142,9 @@
     <ClInclude Include="..\common\Object.hpp">

       <Filter>Header Files</Filter>

     </ClInclude>

+    <ClInclude Include="..\common\NameSpace.hpp">

+      <Filter>Header Files</Filter>

+    </ClInclude>

   </ItemGroup>

   <ItemGroup>

     <ResourceCompile Include="libGLESv2.rc" />