|
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 #ifdef _MSC_VER |
|
17 #include <hash_map> |
|
18 #else |
|
19 #include <unordered_map> |
|
20 #endif |
|
21 |
|
22 #include "common/angleutils.h" |
|
23 #include "libGLESv2/angletypes.h" |
|
24 #include "libGLESv2/HandleAllocator.h" |
|
25 |
|
26 namespace rx |
|
27 { |
|
28 class Renderer; |
|
29 } |
|
30 |
|
31 namespace gl |
|
32 { |
|
33 class Buffer; |
|
34 class Shader; |
|
35 class Program; |
|
36 class Texture; |
|
37 class Renderbuffer; |
|
38 |
|
39 class ResourceManager |
|
40 { |
|
41 public: |
|
42 explicit ResourceManager(rx::Renderer *renderer); |
|
43 ~ResourceManager(); |
|
44 |
|
45 void addRef(); |
|
46 void release(); |
|
47 |
|
48 GLuint createBuffer(); |
|
49 GLuint createShader(GLenum type); |
|
50 GLuint createProgram(); |
|
51 GLuint createTexture(); |
|
52 GLuint createRenderbuffer(); |
|
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 |
|
60 Buffer *getBuffer(GLuint handle); |
|
61 Shader *getShader(GLuint handle); |
|
62 Program *getProgram(GLuint handle); |
|
63 Texture *getTexture(GLuint handle); |
|
64 Renderbuffer *getRenderbuffer(GLuint handle); |
|
65 |
|
66 void setRenderbuffer(GLuint handle, Renderbuffer *renderbuffer); |
|
67 |
|
68 void checkBufferAllocation(unsigned int buffer); |
|
69 void checkTextureAllocation(GLuint texture, TextureType type); |
|
70 void checkRenderbufferAllocation(GLuint renderbuffer); |
|
71 |
|
72 private: |
|
73 DISALLOW_COPY_AND_ASSIGN(ResourceManager); |
|
74 |
|
75 std::size_t mRefCount; |
|
76 rx::Renderer *mRenderer; |
|
77 |
|
78 #ifndef HASH_MAP |
|
79 # ifdef _MSC_VER |
|
80 # define HASH_MAP stdext::hash_map |
|
81 # else |
|
82 # define HASH_MAP std::unordered_map |
|
83 # endif |
|
84 #endif |
|
85 |
|
86 typedef HASH_MAP<GLuint, Buffer*> BufferMap; |
|
87 BufferMap mBufferMap; |
|
88 HandleAllocator mBufferHandleAllocator; |
|
89 |
|
90 typedef HASH_MAP<GLuint, Shader*> ShaderMap; |
|
91 ShaderMap mShaderMap; |
|
92 |
|
93 typedef HASH_MAP<GLuint, Program*> ProgramMap; |
|
94 ProgramMap mProgramMap; |
|
95 HandleAllocator mProgramShaderHandleAllocator; |
|
96 |
|
97 typedef HASH_MAP<GLuint, Texture*> TextureMap; |
|
98 TextureMap mTextureMap; |
|
99 HandleAllocator mTextureHandleAllocator; |
|
100 |
|
101 typedef HASH_MAP<GLuint, Renderbuffer*> RenderbufferMap; |
|
102 RenderbufferMap mRenderbufferMap; |
|
103 HandleAllocator mRenderbufferHandleAllocator; |
|
104 }; |
|
105 |
|
106 } |
|
107 |
|
108 #endif // LIBGLESV2_RESOURCEMANAGER_H_ |