initial import
[vuplus_webkit] / Source / ThirdParty / ANGLE / src / libGLESv2 / ResourceManager.h
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 <hash_map>
17
18 #include "common/angleutils.h"
19 #include "libGLESv2/HandleAllocator.h"
20
21 namespace gl
22 {
23 class Buffer;
24 class Shader;
25 class Program;
26 class Texture;
27 class Renderbuffer;
28
29 enum TextureType
30 {
31     TEXTURE_2D,
32     TEXTURE_CUBE,
33
34     TEXTURE_TYPE_COUNT,
35     TEXTURE_UNKNOWN
36 };
37
38 enum SamplerType
39 {
40     SAMPLER_PIXEL,
41     SAMPLER_VERTEX
42 };
43
44 class ResourceManager
45 {
46   public:
47     ResourceManager();
48     ~ResourceManager();
49
50     void addRef();
51     void release();
52
53     GLuint createBuffer();
54     GLuint createShader(GLenum type);
55     GLuint createProgram();
56     GLuint createTexture();
57     GLuint createRenderbuffer();
58
59     void deleteBuffer(GLuint buffer);
60     void deleteShader(GLuint shader);
61     void deleteProgram(GLuint program);
62     void deleteTexture(GLuint texture);
63     void deleteRenderbuffer(GLuint renderbuffer);
64
65     Buffer *getBuffer(GLuint handle);
66     Shader *getShader(GLuint handle);
67     Program *getProgram(GLuint handle);
68     Texture *getTexture(GLuint handle);
69     Renderbuffer *getRenderbuffer(GLuint handle);
70     
71     void setRenderbuffer(GLuint handle, Renderbuffer *renderbuffer);
72
73     void checkBufferAllocation(unsigned int buffer);
74     void checkTextureAllocation(GLuint texture, TextureType type);
75     void checkRenderbufferAllocation(GLuint renderbuffer);
76
77   private:
78     DISALLOW_COPY_AND_ASSIGN(ResourceManager);
79
80     std::size_t mRefCount;
81
82     typedef stdext::hash_map<GLuint, Buffer*> BufferMap;
83     BufferMap mBufferMap;
84     HandleAllocator mBufferHandleAllocator;
85
86     typedef stdext::hash_map<GLuint, Shader*> ShaderMap;
87     ShaderMap mShaderMap;
88
89     typedef stdext::hash_map<GLuint, Program*> ProgramMap;
90     ProgramMap mProgramMap;
91     HandleAllocator mProgramShaderHandleAllocator;
92
93     typedef stdext::hash_map<GLuint, Texture*> TextureMap;
94     TextureMap mTextureMap;
95     HandleAllocator mTextureHandleAllocator;
96
97     typedef stdext::hash_map<GLuint, Renderbuffer*> RenderbufferMap;
98     RenderbufferMap mRenderbufferMap;
99     HandleAllocator mRenderbufferHandleAllocator;
100 };
101
102 }
103
104 #endif // LIBGLESV2_RESOURCEMANAGER_H_