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