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
6 #ifndef __C_OGLES_EXTENSION_HANDLER_H_INCLUDED__
\r
7 #define __C_OGLES_EXTENSION_HANDLER_H_INCLUDED__
\r
10 #ifdef _IRR_COMPILE_WITH_OGLES1_
\r
12 #include "EDriverFeatures.h"
\r
13 #include "irrTypes.h"
\r
16 #include "COGLESCommon.h"
\r
18 #include "COGLESCoreExtensionHandler.h"
\r
25 class COGLES1ExtensionHandler : public COGLESCoreExtensionHandler
\r
28 COGLES1ExtensionHandler();
\r
30 void initExtensions();
\r
32 bool queryFeature(video::E_VIDEO_DRIVER_FEATURE feature) const
\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
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
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
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
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
73 inline void irrGlActiveTexture(GLenum texture)
\r
75 glActiveTexture(texture);
\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
81 glCompressedTexImage2D(target, level, internalformat, width, height, border, imageSize, data);
\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
87 glCompressedTexSubImage2D(target, level, xoffset, yoffset, width, height, format, imageSize, data);
\r
90 inline void irrGlUseProgram(GLuint prog)
\r
94 inline void irrGlBindFramebuffer(GLenum target, GLuint framebuffer)
\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
104 inline void irrGlDeleteFramebuffers(GLsizei n, const GLuint *framebuffers)
\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
114 inline void irrGlGenFramebuffers(GLsizei n, GLuint *framebuffers)
\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
124 inline GLenum irrGlCheckFramebufferStatus(GLenum target)
\r
126 #ifdef _IRR_OGLES1_USE_EXTPOINTER_
\r
127 if (pGlCheckFramebufferStatusOES)
\r
128 return pGlCheckFramebufferStatusOES(target);
\r
131 #elif defined(GL_OES_framebuffer_object)
\r
132 return glCheckFramebufferStatusOES(target);
\r
138 inline void irrGlFramebufferTexture2D(GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level)
\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
148 inline void irrGlGenerateMipmap(GLenum target)
\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
158 inline void irrGlActiveStencilFace(GLenum face)
\r
162 inline void irrGlDrawBuffer(GLenum mode)
\r
166 inline void irrGlDrawBuffers(GLsizei n, const GLenum *bufs)
\r
170 inline void irrGlBlendFuncSeparate(GLenum srcRGB, GLenum dstRGB, GLenum srcAlpha, GLenum dstAlpha)
\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
180 inline void irrGlBlendEquation(GLenum mode)
\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
190 inline void irrGlEnableIndexed(GLenum target, GLuint index)
\r
194 inline void irrGlDisableIndexed(GLenum target, GLuint index)
\r
198 inline void irrGlColorMaskIndexed(GLuint buf, GLboolean r, GLboolean g, GLboolean b, GLboolean a)
\r
202 inline void irrGlBlendFuncIndexed(GLuint buf, GLenum src, GLenum dst)
\r
206 inline void irrGlBlendFuncSeparateIndexed(GLuint buf, GLenum srcRGB, GLenum dstRGB, GLenum srcAlpha, GLenum dstAlpha)
\r
210 inline void irrGlBlendEquationIndexed(GLuint buf, GLenum mode)
\r
214 inline void irrGlBlendEquationSeparateIndexed(GLuint buf, GLenum modeRGB, GLenum modeAlpha)
\r
220 u8 MaxUserClipPlanes;
\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