OSDN Git Service

Implement a Radiance prototype.
[android-x86/external-swiftshader.git] / src / Radiance / libRAD / ResourceManager.h
1 // SwiftShader Software Renderer\r
2 //\r
3 // Copyright(c) 2005-2012 TransGaming Inc.\r
4 //\r
5 // All rights reserved. No part of this software may be copied, distributed, transmitted,\r
6 // transcribed, stored in a retrieval system, translated into any human or computer\r
7 // language by any means, or disclosed to third parties without the explicit written\r
8 // agreement of TransGaming Inc. Without such an agreement, no rights or licenses, express\r
9 // or implied, including but not limited to any patent rights, are granted to you.\r
10 //\r
11 \r
12 // ResourceManager.h : Defines the ResourceManager class, which tracks objects\r
13 // shared by multiple GL contexts.\r
14 \r
15 #ifndef LIBGLESV2_RESOURCEMANAGER_H_\r
16 #define LIBGLESV2_RESOURCEMANAGER_H_\r
17 \r
18 #include "HandleAllocator.h"\r
19 \r
20 #define GL_APICALL\r
21 #include <GLES2/gl2.h>\r
22 \r
23 #include <map>\r
24 \r
25 namespace es2\r
26 {\r
27 class Buffer;\r
28 class Shader;\r
29 class Program;\r
30 class Texture;\r
31 class Renderbuffer;\r
32 \r
33 enum TextureType\r
34 {\r
35     TEXTURE_2D,\r
36     TEXTURE_CUBE,\r
37     TEXTURE_EXTERNAL,\r
38 \r
39     TEXTURE_TYPE_COUNT,\r
40     TEXTURE_UNKNOWN\r
41 };\r
42 \r
43 class ResourceManager\r
44 {\r
45   public:\r
46     ResourceManager();\r
47     ~ResourceManager();\r
48 \r
49     void addRef();\r
50     void release();\r
51 \r
52     GLuint createBuffer();\r
53     GLuint createShader(GLenum type);\r
54     GLuint createProgram();\r
55     GLuint createTexture();\r
56     GLuint createRenderbuffer();\r
57 \r
58     void deleteBuffer(GLuint buffer);\r
59     void deleteShader(GLuint shader);\r
60     void deleteProgram(GLuint program);\r
61     void deleteTexture(GLuint texture);\r
62     void deleteRenderbuffer(GLuint renderbuffer);\r
63 \r
64     Buffer *getBuffer(GLuint handle);\r
65     Shader *getShader(GLuint handle);\r
66     Program *getProgram(GLuint handle);\r
67     Texture *getTexture(GLuint handle);\r
68     Renderbuffer *getRenderbuffer(GLuint handle);\r
69     \r
70     void setRenderbuffer(GLuint handle, Renderbuffer *renderbuffer);\r
71 \r
72     void checkBufferAllocation(unsigned int buffer);\r
73     void checkTextureAllocation(GLuint texture, TextureType type);\r
74 \r
75   private:\r
76     std::size_t mRefCount;\r
77 \r
78     typedef std::map<GLint, Buffer*> BufferMap;\r
79     BufferMap mBufferMap;\r
80     HandleAllocator mBufferHandleAllocator;\r
81 \r
82     typedef std::map<GLint, Shader*> ShaderMap;\r
83     ShaderMap mShaderMap;\r
84 \r
85     typedef std::map<GLint, Program*> ProgramMap;\r
86     ProgramMap mProgramMap;\r
87     HandleAllocator mProgramShaderHandleAllocator;\r
88 \r
89     typedef std::map<GLint, Texture*> TextureMap;\r
90     TextureMap mTextureMap;\r
91     HandleAllocator mTextureHandleAllocator;\r
92 \r
93     typedef std::map<GLint, Renderbuffer*> RenderbufferMap;\r
94     RenderbufferMap mRenderbufferMap;\r
95     HandleAllocator mRenderbufferHandleAllocator;\r
96 };\r
97 \r
98 }\r
99 \r
100 #endif // LIBGLESV2_RESOURCEMANAGER_H_\r