michael@0: // michael@0: // Copyright (c) 2002-2010 The ANGLE Project Authors. All rights reserved. michael@0: // Use of this source code is governed by a BSD-style license that can be michael@0: // found in the LICENSE file. michael@0: // michael@0: michael@0: // ResourceManager.h : Defines the ResourceManager class, which tracks objects michael@0: // shared by multiple GL contexts. michael@0: michael@0: #ifndef LIBGLESV2_RESOURCEMANAGER_H_ michael@0: #define LIBGLESV2_RESOURCEMANAGER_H_ michael@0: michael@0: #define GL_APICALL michael@0: #include michael@0: michael@0: #ifdef _MSC_VER michael@0: #include michael@0: #else michael@0: #include michael@0: #endif michael@0: michael@0: #include "common/angleutils.h" michael@0: #include "libGLESv2/angletypes.h" michael@0: #include "libGLESv2/HandleAllocator.h" michael@0: michael@0: namespace rx michael@0: { michael@0: class Renderer; michael@0: } michael@0: michael@0: namespace gl michael@0: { michael@0: class Buffer; michael@0: class Shader; michael@0: class Program; michael@0: class Texture; michael@0: class Renderbuffer; michael@0: michael@0: class ResourceManager michael@0: { michael@0: public: michael@0: explicit ResourceManager(rx::Renderer *renderer); michael@0: ~ResourceManager(); michael@0: michael@0: void addRef(); michael@0: void release(); michael@0: michael@0: GLuint createBuffer(); michael@0: GLuint createShader(GLenum type); michael@0: GLuint createProgram(); michael@0: GLuint createTexture(); michael@0: GLuint createRenderbuffer(); michael@0: michael@0: void deleteBuffer(GLuint buffer); michael@0: void deleteShader(GLuint shader); michael@0: void deleteProgram(GLuint program); michael@0: void deleteTexture(GLuint texture); michael@0: void deleteRenderbuffer(GLuint renderbuffer); michael@0: michael@0: Buffer *getBuffer(GLuint handle); michael@0: Shader *getShader(GLuint handle); michael@0: Program *getProgram(GLuint handle); michael@0: Texture *getTexture(GLuint handle); michael@0: Renderbuffer *getRenderbuffer(GLuint handle); michael@0: michael@0: void setRenderbuffer(GLuint handle, Renderbuffer *renderbuffer); michael@0: michael@0: void checkBufferAllocation(unsigned int buffer); michael@0: void checkTextureAllocation(GLuint texture, TextureType type); michael@0: void checkRenderbufferAllocation(GLuint renderbuffer); michael@0: michael@0: private: michael@0: DISALLOW_COPY_AND_ASSIGN(ResourceManager); michael@0: michael@0: std::size_t mRefCount; michael@0: rx::Renderer *mRenderer; michael@0: michael@0: #ifndef HASH_MAP michael@0: # ifdef _MSC_VER michael@0: # define HASH_MAP stdext::hash_map michael@0: # else michael@0: # define HASH_MAP std::unordered_map michael@0: # endif michael@0: #endif michael@0: michael@0: typedef HASH_MAP BufferMap; michael@0: BufferMap mBufferMap; michael@0: HandleAllocator mBufferHandleAllocator; michael@0: michael@0: typedef HASH_MAP ShaderMap; michael@0: ShaderMap mShaderMap; michael@0: michael@0: typedef HASH_MAP ProgramMap; michael@0: ProgramMap mProgramMap; michael@0: HandleAllocator mProgramShaderHandleAllocator; michael@0: michael@0: typedef HASH_MAP TextureMap; michael@0: TextureMap mTextureMap; michael@0: HandleAllocator mTextureHandleAllocator; michael@0: michael@0: typedef HASH_MAP RenderbufferMap; michael@0: RenderbufferMap mRenderbufferMap; michael@0: HandleAllocator mRenderbufferHandleAllocator; michael@0: }; michael@0: michael@0: } michael@0: michael@0: #endif // LIBGLESV2_RESOURCEMANAGER_H_