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