]> git.lizzy.rs Git - irrlicht.git/blob - source/Irrlicht/COGLESExtensionHandler.h
efed79396111c86272fcf7ae054b7e6d645d809a
[irrlicht.git] / source / Irrlicht / COGLESExtensionHandler.h
1 // Copyright (C) 2008 Christian Stehno\r
2 // Heavily based on the OpenGL driver implemented by Nikolaus Gebhardt\r
3 // This file is part of the "Irrlicht Engine".\r
4 // For conditions of distribution and use, see copyright notice in Irrlicht.h\r
5 \r
6 #ifndef __C_OGLES_EXTENSION_HANDLER_H_INCLUDED__\r
7 #define __C_OGLES_EXTENSION_HANDLER_H_INCLUDED__\r
8 \r
9 #include "IrrCompileConfig.h"\r
10 \r
11 #ifdef _IRR_COMPILE_WITH_OGLES1_\r
12 \r
13 #include "EDriverFeatures.h"\r
14 #include "irrTypes.h"\r
15 #include "os.h"\r
16 \r
17 #include "COGLESCommon.h"\r
18 \r
19 #include "COGLESCoreExtensionHandler.h"\r
20 \r
21 namespace irr\r
22 {\r
23 namespace video\r
24 {\r
25 \r
26         class COGLES1ExtensionHandler : public COGLESCoreExtensionHandler\r
27         {\r
28         public:\r
29                 COGLES1ExtensionHandler();\r
30 \r
31                 void initExtensions();\r
32 \r
33                 bool queryFeature(video::E_VIDEO_DRIVER_FEATURE feature) const\r
34                 {\r
35                         switch (feature)\r
36                         {\r
37                         case EVDF_RENDER_TO_TARGET:\r
38                         case EVDF_HARDWARE_TL:\r
39                         case EVDF_MULTITEXTURE:\r
40                         case EVDF_BILINEAR_FILTER:\r
41                         case EVDF_MIP_MAP:\r
42                         case EVDF_TEXTURE_NSQUARE:\r
43                         case EVDF_STENCIL_BUFFER:\r
44                         case EVDF_ALPHA_TO_COVERAGE:\r
45                         case EVDF_COLOR_MASK:\r
46                         case EVDF_POLYGON_OFFSET:\r
47                         case EVDF_TEXTURE_MATRIX:\r
48                                 return true;\r
49                         case EVDF_TEXTURE_NPOT:\r
50                                 return FeatureAvailable[IRR_GL_APPLE_texture_2D_limited_npot] || FeatureAvailable[IRR_GL_OES_texture_npot];\r
51                         case EVDF_MIP_MAP_AUTO_UPDATE:\r
52                                 return Version>100;\r
53                         case EVDF_BLEND_OPERATIONS:\r
54                                 return FeatureAvailable[IRR_GL_OES_blend_subtract];\r
55                         case EVDF_BLEND_SEPARATE:\r
56                                 return FeatureAvailable[IRR_GL_OES_blend_func_separate];\r
57                         case EVDF_FRAMEBUFFER_OBJECT:\r
58                                 return FeatureAvailable[IRR_GL_OES_framebuffer_object];\r
59                         case EVDF_VERTEX_BUFFER_OBJECT:\r
60                                 return Version>100;\r
61                         case EVDF_TEXTURE_COMPRESSED_DXT:\r
62                                 return false; // NV Tegra need improvements here\r
63                         case EVDF_TEXTURE_COMPRESSED_PVRTC:\r
64                                 return FeatureAvailable[IRR_GL_IMG_texture_compression_pvrtc];\r
65                         case EVDF_TEXTURE_COMPRESSED_ETC1:\r
66                                 return FeatureAvailable[IRR_GL_OES_compressed_ETC1_RGB8_texture];\r
67                         case EVDF_TEXTURE_CUBEMAP:\r
68                                 return FeatureAvailable[IRR_GL_OES_texture_cube_map];\r
69                         default:\r
70                                 return true;\r
71                         };\r
72                 }\r
73 \r
74                 inline void irrGlActiveTexture(GLenum texture)\r
75                 {\r
76                         glActiveTexture(texture);\r
77                 }\r
78 \r
79                 inline void irrGlCompressedTexImage2D(GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLint border,\r
80                         GLsizei imageSize, const void* data)\r
81                 {\r
82                         glCompressedTexImage2D(target, level, internalformat, width, height, border, imageSize, data);\r
83                 }\r
84 \r
85                 inline void irrGlCompressedTexSubImage2D(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height,\r
86                         GLenum format, GLsizei imageSize, const void* data)\r
87                 {\r
88                         glCompressedTexSubImage2D(target, level, xoffset, yoffset, width, height, format, imageSize, data);\r
89                 }\r
90 \r
91                 inline void irrGlUseProgram(GLuint prog)\r
92                 {\r
93                 }\r
94 \r
95                 inline void irrGlBindFramebuffer(GLenum target, GLuint framebuffer)\r
96                 {\r
97 #ifdef _IRR_OGLES1_USE_EXTPOINTER_\r
98                         if (pGlBindFramebufferOES)\r
99                                 pGlBindFramebufferOES(target, framebuffer);\r
100 #elif defined(GL_OES_framebuffer_object)\r
101                         glBindFramebufferOES(target, framebuffer);\r
102 #endif\r
103                 }\r
104 \r
105                 inline void irrGlDeleteFramebuffers(GLsizei n, const GLuint *framebuffers)\r
106                 {\r
107 #ifdef _IRR_OGLES1_USE_EXTPOINTER_\r
108                         if (pGlDeleteFramebuffersOES)\r
109                                 pGlDeleteFramebuffersOES(n, framebuffers);\r
110 #elif defined(GL_OES_framebuffer_object)\r
111                         glDeleteFramebuffersOES(n, framebuffers);\r
112 #endif\r
113                 }\r
114 \r
115                 inline void irrGlGenFramebuffers(GLsizei n, GLuint *framebuffers)\r
116                 {\r
117 #ifdef _IRR_OGLES1_USE_EXTPOINTER_\r
118                         if (pGlGenFramebuffersOES)\r
119                                 pGlGenFramebuffersOES(n, framebuffers);\r
120 #elif defined(GL_OES_framebuffer_object)\r
121                         glGenFramebuffersOES(n, framebuffers);\r
122 #endif\r
123                 }\r
124 \r
125                 inline GLenum irrGlCheckFramebufferStatus(GLenum target)\r
126                 {\r
127 #ifdef _IRR_OGLES1_USE_EXTPOINTER_\r
128                         if (pGlCheckFramebufferStatusOES)\r
129                                 return pGlCheckFramebufferStatusOES(target);\r
130                         else\r
131                                 return 0;\r
132 #elif defined(GL_OES_framebuffer_object)\r
133                         return glCheckFramebufferStatusOES(target);\r
134 #else\r
135                         return 0;\r
136 #endif\r
137                 }\r
138 \r
139                 inline void irrGlFramebufferTexture2D(GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level)\r
140                 {\r
141 #ifdef _IRR_OGLES1_USE_EXTPOINTER_\r
142                         if (pGlFramebufferTexture2DOES)\r
143                                 pGlFramebufferTexture2DOES(target, attachment, textarget, texture, level);\r
144 #elif defined(GL_OES_framebuffer_object)\r
145                         glFramebufferTexture2DOES(target, attachment, textarget, texture, level);\r
146 #endif\r
147                 }\r
148 \r
149                 inline void irrGlGenerateMipmap(GLenum target)\r
150                 {\r
151 #ifdef _IRR_OGLES1_USE_EXTPOINTER_\r
152                         if (pGlGenerateMipmapOES)\r
153                                 pGlGenerateMipmapOES(target);\r
154 #elif defined(GL_OES_framebuffer_object)\r
155                         glGenerateMipmapOES(target);\r
156 #endif\r
157                 }\r
158 \r
159                 inline void irrGlActiveStencilFace(GLenum face)\r
160                 {\r
161                 }\r
162 \r
163                 inline void irrGlDrawBuffer(GLenum mode)\r
164                 {\r
165                 }\r
166 \r
167                 inline void irrGlDrawBuffers(GLsizei n, const GLenum *bufs)\r
168                 {\r
169                 }\r
170 \r
171                 inline void irrGlBlendFuncSeparate(GLenum srcRGB, GLenum dstRGB, GLenum srcAlpha, GLenum dstAlpha)\r
172                 {\r
173 #ifdef _IRR_OGLES1_USE_EXTPOINTER_\r
174                         if (pGlBlendFuncSeparateOES)\r
175                                 pGlBlendFuncSeparateOES(srcRGB, dstRGB, srcAlpha, dstAlpha);\r
176 #elif defined(GL_OES_blend_func_separate)\r
177                         glBlendFuncSeparateOES(srcRGB, dstRGB, srcAlpha, dstAlpha);\r
178 #endif\r
179                 }\r
180 \r
181                 inline void irrGlBlendEquation(GLenum mode)\r
182                 {\r
183 #ifdef _IRR_OGLES1_USE_EXTPOINTER_\r
184                         if (pGlBlendEquationOES)\r
185                                 pGlBlendEquationOES(mode);\r
186 #elif defined(GL_OES_blend_subtract)\r
187                         glBlendEquationOES(mode);\r
188 #endif\r
189                 }\r
190 \r
191                 inline void irrGlEnableIndexed(GLenum target, GLuint index)\r
192                 {\r
193                 }\r
194 \r
195                 inline void irrGlDisableIndexed(GLenum target, GLuint index)\r
196                 {\r
197                 }\r
198 \r
199                 inline void irrGlColorMaskIndexed(GLuint buf, GLboolean r, GLboolean g, GLboolean b, GLboolean a)\r
200                 {\r
201                 }\r
202 \r
203                 inline void irrGlBlendFuncIndexed(GLuint buf, GLenum src, GLenum dst)\r
204                 {\r
205                 }\r
206 \r
207                 inline void irrGlBlendFuncSeparateIndexed(GLuint buf, GLenum srcRGB, GLenum dstRGB, GLenum srcAlpha, GLenum dstAlpha)\r
208                 {\r
209                 }\r
210 \r
211                 inline void irrGlBlendEquationIndexed(GLuint buf, GLenum mode)\r
212                 {\r
213                 }\r
214 \r
215                 inline void irrGlBlendEquationSeparateIndexed(GLuint buf, GLenum modeRGB, GLenum modeAlpha)\r
216                 {\r
217                 }\r
218 \r
219         protected:\r
220 \r
221                 u8 MaxUserClipPlanes;\r
222                 u8 MaxLights;\r
223 \r
224 #if defined(_IRR_OGLES1_USE_EXTPOINTER_)\r
225                 PFNGLBLENDEQUATIONOESPROC pGlBlendEquationOES;\r
226                 PFNGLBLENDFUNCSEPARATEOESPROC pGlBlendFuncSeparateOES;\r
227                 PFNGLBINDFRAMEBUFFEROESPROC pGlBindFramebufferOES;\r
228                 PFNGLDELETEFRAMEBUFFERSOESPROC pGlDeleteFramebuffersOES;\r
229                 PFNGLGENFRAMEBUFFERSOESPROC pGlGenFramebuffersOES;\r
230                 PFNGLCHECKFRAMEBUFFERSTATUSOESPROC pGlCheckFramebufferStatusOES;\r
231                 PFNGLFRAMEBUFFERTEXTURE2DOESPROC pGlFramebufferTexture2DOES;\r
232                 PFNGLGENERATEMIPMAPOESPROC pGlGenerateMipmapOES;\r
233 #endif\r
234         };\r
235 \r
236 }\r
237 }\r
238 \r
239 #endif\r
240 #endif\r