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
9 #include "IrrCompileConfig.h"
\r
11 #ifdef _IRR_COMPILE_WITH_OGLES1_
\r
13 #include "EDriverFeatures.h"
\r
14 #include "irrTypes.h"
\r
17 #include "COGLESCommon.h"
\r
19 #include "COGLESCoreExtensionHandler.h"
\r
26 class COGLES1ExtensionHandler : public COGLESCoreExtensionHandler
\r
29 COGLES1ExtensionHandler();
\r
31 void initExtensions();
\r
33 bool queryFeature(video::E_VIDEO_DRIVER_FEATURE feature) const
\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
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
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
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
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
74 inline void irrGlActiveTexture(GLenum texture)
\r
76 glActiveTexture(texture);
\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
82 glCompressedTexImage2D(target, level, internalformat, width, height, border, imageSize, data);
\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
88 glCompressedTexSubImage2D(target, level, xoffset, yoffset, width, height, format, imageSize, data);
\r
91 inline void irrGlUseProgram(GLuint prog)
\r
95 inline void irrGlBindFramebuffer(GLenum target, GLuint framebuffer)
\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
105 inline void irrGlDeleteFramebuffers(GLsizei n, const GLuint *framebuffers)
\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
115 inline void irrGlGenFramebuffers(GLsizei n, GLuint *framebuffers)
\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
125 inline GLenum irrGlCheckFramebufferStatus(GLenum target)
\r
127 #ifdef _IRR_OGLES1_USE_EXTPOINTER_
\r
128 if (pGlCheckFramebufferStatusOES)
\r
129 return pGlCheckFramebufferStatusOES(target);
\r
132 #elif defined(GL_OES_framebuffer_object)
\r
133 return glCheckFramebufferStatusOES(target);
\r
139 inline void irrGlFramebufferTexture2D(GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level)
\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
149 inline void irrGlGenerateMipmap(GLenum target)
\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
159 inline void irrGlActiveStencilFace(GLenum face)
\r
163 inline void irrGlDrawBuffer(GLenum mode)
\r
167 inline void irrGlDrawBuffers(GLsizei n, const GLenum *bufs)
\r
171 inline void irrGlBlendFuncSeparate(GLenum srcRGB, GLenum dstRGB, GLenum srcAlpha, GLenum dstAlpha)
\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
181 inline void irrGlBlendEquation(GLenum mode)
\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
191 inline void irrGlEnableIndexed(GLenum target, GLuint index)
\r
195 inline void irrGlDisableIndexed(GLenum target, GLuint index)
\r
199 inline void irrGlColorMaskIndexed(GLuint buf, GLboolean r, GLboolean g, GLboolean b, GLboolean a)
\r
203 inline void irrGlBlendFuncIndexed(GLuint buf, GLenum src, GLenum dst)
\r
207 inline void irrGlBlendFuncSeparateIndexed(GLuint buf, GLenum srcRGB, GLenum dstRGB, GLenum srcAlpha, GLenum dstAlpha)
\r
211 inline void irrGlBlendEquationIndexed(GLuint buf, GLenum mode)
\r
215 inline void irrGlBlendEquationSeparateIndexed(GLuint buf, GLenum modeRGB, GLenum modeAlpha)
\r
221 u8 MaxUserClipPlanes;
\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