1// 2// Copyright (c) 2002-2010 The ANGLE Project Authors. All rights reserved. 3// Use of this source code is governed by a BSD-style license that can be 4// found in the LICENSE file. 5// 6 7// ResourceManager.h : Defines the ResourceManager class, which tracks objects 8// shared by multiple GL contexts. 9 10#ifndef LIBGLESV2_RESOURCEMANAGER_H_ 11#define LIBGLESV2_RESOURCEMANAGER_H_ 12 13#define GL_APICALL 14#include <GLES2/gl2.h> 15 16#include <map> 17 18#include "common/angleutils.h" 19 20namespace gl 21{ 22class Buffer; 23class Shader; 24class Program; 25class Texture; 26class Renderbuffer; 27 28enum SamplerType 29{ 30 SAMPLER_2D, 31 SAMPLER_CUBE, 32 33 SAMPLER_TYPE_COUNT 34}; 35 36class ResourceManager 37{ 38 public: 39 ResourceManager(); 40 ~ResourceManager(); 41 42 void addRef(); 43 void release(); 44 45 GLuint createBuffer(); 46 GLuint createShader(GLenum type); 47 GLuint createProgram(); 48 GLuint createTexture(); 49 GLuint createRenderbuffer(); 50 51 void deleteBuffer(GLuint buffer); 52 void deleteShader(GLuint shader); 53 void deleteProgram(GLuint program); 54 void deleteTexture(GLuint texture); 55 void deleteRenderbuffer(GLuint renderbuffer); 56 57 Buffer *getBuffer(GLuint handle); 58 Shader *getShader(GLuint handle); 59 Program *getProgram(GLuint handle); 60 Texture *getTexture(GLuint handle); 61 Renderbuffer *getRenderbuffer(GLuint handle); 62 63 void setRenderbuffer(GLuint handle, Renderbuffer *renderbuffer); 64 65 void checkBufferAllocation(unsigned int buffer); 66 void checkTextureAllocation(GLuint texture, SamplerType type); 67 void checkRenderbufferAllocation(GLuint renderbuffer); 68 69 private: 70 DISALLOW_COPY_AND_ASSIGN(ResourceManager); 71 72 std::size_t mRefCount; 73 74 typedef std::map<GLuint, Buffer*> BufferMap; 75 BufferMap mBufferMap; 76 77 typedef std::map<GLuint, Shader*> ShaderMap; 78 ShaderMap mShaderMap; 79 80 typedef std::map<GLuint, Program*> ProgramMap; 81 ProgramMap mProgramMap; 82 83 typedef std::map<GLuint, Texture*> TextureMap; 84 TextureMap mTextureMap; 85 86 typedef std::map<GLuint, Renderbuffer*> RenderbufferMap; 87 RenderbufferMap mRenderbufferMap; 88}; 89 90} 91 92#endif // LIBGLESV2_RESOURCEMANAGER_H_ 93