1 // 2 // Copyright (c) 2002-2013 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 #include <GLES3/gl3.h> 14 #include <GLES2/gl2.h> 15 16 #include <unordered_map> 17 18 #include "common/angleutils.h" 19 #include "libGLESv2/angletypes.h" 20 #include "libGLESv2/HandleAllocator.h" 21 22 namespace rx 23 { 24 class Renderer; 25 } 26 27 namespace gl 28 { 29 class Buffer; 30 class Shader; 31 class Program; 32 class Texture; 33 class FramebufferAttachment; 34 class Sampler; 35 class FenceSync; 36 37 class ResourceManager 38 { 39 public: 40 explicit ResourceManager(rx::Renderer *renderer); 41 ~ResourceManager(); 42 43 void addRef(); 44 void release(); 45 46 GLuint createBuffer(); 47 GLuint createShader(GLenum type); 48 GLuint createProgram(); 49 GLuint createTexture(); 50 GLuint createRenderbuffer(); 51 GLuint createSampler(); 52 GLuint createFenceSync(); 53 54 void deleteBuffer(GLuint buffer); 55 void deleteShader(GLuint shader); 56 void deleteProgram(GLuint program); 57 void deleteTexture(GLuint texture); 58 void deleteRenderbuffer(GLuint renderbuffer); 59 void deleteSampler(GLuint sampler); 60 void deleteFenceSync(GLuint fenceSync); 61 62 Buffer *getBuffer(GLuint handle); 63 Shader *getShader(GLuint handle); 64 Program *getProgram(GLuint handle); 65 Texture *getTexture(GLuint handle); 66 FramebufferAttachment *getRenderbuffer(GLuint handle); 67 Sampler *getSampler(GLuint handle); 68 FenceSync *getFenceSync(GLuint handle); 69 70 void setRenderbuffer(GLuint handle, FramebufferAttachment *renderbuffer); 71 72 void checkBufferAllocation(unsigned int buffer); 73 void checkTextureAllocation(GLuint texture, TextureType type); 74 void checkRenderbufferAllocation(GLuint renderbuffer); 75 void checkSamplerAllocation(GLuint sampler); 76 77 bool isSampler(GLuint sampler); 78 79 private: 80 DISALLOW_COPY_AND_ASSIGN(ResourceManager); 81 82 std::size_t mRefCount; 83 rx::Renderer *mRenderer; 84 85 typedef std::unordered_map<GLuint, Buffer*> BufferMap; 86 BufferMap mBufferMap; 87 HandleAllocator mBufferHandleAllocator; 88 89 typedef std::unordered_map<GLuint, Shader*> ShaderMap; 90 ShaderMap mShaderMap; 91 92 typedef std::unordered_map<GLuint, Program*> ProgramMap; 93 ProgramMap mProgramMap; 94 HandleAllocator mProgramShaderHandleAllocator; 95 96 typedef std::unordered_map<GLuint, Texture*> TextureMap; 97 TextureMap mTextureMap; 98 HandleAllocator mTextureHandleAllocator; 99 100 typedef std::unordered_map<GLuint, FramebufferAttachment*> RenderbufferMap; 101 RenderbufferMap mRenderbufferMap; 102 HandleAllocator mRenderbufferHandleAllocator; 103 104 typedef std::unordered_map<GLuint, Sampler*> SamplerMap; 105 SamplerMap mSamplerMap; 106 HandleAllocator mSamplerHandleAllocator; 107 108 typedef std::unordered_map<GLuint, FenceSync*> FenceMap; 109 FenceMap mFenceSyncMap; 110 HandleAllocator mFenceSyncHandleAllocator; 111 }; 112 113 } 114 115 #endif // LIBGLESV2_RESOURCEMANAGER_H_ 116