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.
7 // ResourceManager.h : Defines the ResourceManager class, which tracks objects
8 // shared by multiple GL contexts.
10 #ifndef LIBGLESV2_RESOURCEMANAGER_H_
11 #define LIBGLESV2_RESOURCEMANAGER_H_
15 #include <unordered_map>
17 #include "common/angleutils.h"
18 #include "libGLESv2/angletypes.h"
19 #include "libGLESv2/HandleAllocator.h"
39 explicit ResourceManager(rx::Renderer *renderer);
45 GLuint createBuffer();
46 GLuint createShader(GLenum type);
47 GLuint createProgram();
48 GLuint createTexture();
49 GLuint createRenderbuffer();
50 GLuint createSampler();
51 GLuint createFenceSync();
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);
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);
69 void setRenderbuffer(GLuint handle, Renderbuffer *renderbuffer);
71 void checkBufferAllocation(unsigned int buffer);
72 void checkTextureAllocation(GLuint texture, TextureType type);
73 void checkRenderbufferAllocation(GLuint renderbuffer);
74 void checkSamplerAllocation(GLuint sampler);
76 bool isSampler(GLuint sampler);
79 DISALLOW_COPY_AND_ASSIGN(ResourceManager);
81 std::size_t mRefCount;
82 rx::Renderer *mRenderer;
84 typedef std::unordered_map<GLuint, Buffer*> BufferMap;
86 HandleAllocator mBufferHandleAllocator;
88 typedef std::unordered_map<GLuint, Shader*> ShaderMap;
91 typedef std::unordered_map<GLuint, Program*> ProgramMap;
92 ProgramMap mProgramMap;
93 HandleAllocator mProgramShaderHandleAllocator;
95 typedef std::unordered_map<GLuint, Texture*> TextureMap;
96 TextureMap mTextureMap;
97 HandleAllocator mTextureHandleAllocator;
99 typedef std::unordered_map<GLuint, Renderbuffer*> RenderbufferMap;
100 RenderbufferMap mRenderbufferMap;
101 HandleAllocator mRenderbufferHandleAllocator;
103 typedef std::unordered_map<GLuint, Sampler*> SamplerMap;
104 SamplerMap mSamplerMap;
105 HandleAllocator mSamplerHandleAllocator;
107 typedef std::unordered_map<GLuint, FenceSync*> FenceMap;
108 FenceMap mFenceSyncMap;
109 HandleAllocator mFenceSyncHandleAllocator;
114 #endif // LIBGLESV2_RESOURCEMANAGER_H_