Upstream version 9.38.198.0
[platform/framework/web/crosswalk.git] / src / third_party / angle / src / libGLESv2 / ResourceManager.h
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 "angle_gl.h"
14
15 #include <unordered_map>
16
17 #include "common/angleutils.h"
18 #include "libGLESv2/angletypes.h"
19 #include "libGLESv2/HandleAllocator.h"
20
21 namespace rx
22 {
23 class Renderer;
24 }
25
26 namespace gl
27 {
28 class Buffer;
29 class Shader;
30 class Program;
31 class Texture;
32 class Renderbuffer;
33 class Sampler;
34 class FenceSync;
35
36 class 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, TextureType 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_