1 // Copyright (C) 2015 Patryk Nadrowski
\r
2 // Copyright (C) 2009-2010 Amundis
\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_OGLES2_EXTENSION_HANDLER_H_INCLUDED__
\r
7 #define __C_OGLES2_EXTENSION_HANDLER_H_INCLUDED__
\r
10 #ifdef _IRR_COMPILE_WITH_OGLES2_
\r
12 #include "EDriverFeatures.h"
\r
13 #include "irrTypes.h"
\r
16 #include "COGLES2Common.h"
\r
18 #include "COGLESCoreExtensionHandler.h"
\r
25 class COGLES2ExtensionHandler : public COGLESCoreExtensionHandler
\r
28 COGLES2ExtensionHandler() : COGLESCoreExtensionHandler() {}
\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_MIP_MAP_AUTO_UPDATE:
\r
42 case EVDF_VERTEX_SHADER_1_1:
\r
43 case EVDF_PIXEL_SHADER_1_1:
\r
44 case EVDF_PIXEL_SHADER_1_2:
\r
45 case EVDF_PIXEL_SHADER_2_0:
\r
46 case EVDF_VERTEX_SHADER_2_0:
\r
48 case EVDF_TEXTURE_NSQUARE:
\r
49 case EVDF_TEXTURE_NPOT:
\r
50 case EVDF_FRAMEBUFFER_OBJECT:
\r
51 case EVDF_VERTEX_BUFFER_OBJECT:
\r
52 case EVDF_COLOR_MASK:
\r
53 case EVDF_ALPHA_TO_COVERAGE:
\r
54 case EVDF_POLYGON_OFFSET:
\r
55 case EVDF_BLEND_OPERATIONS:
\r
56 case EVDF_BLEND_SEPARATE:
\r
57 case EVDF_TEXTURE_MATRIX:
\r
58 case EVDF_TEXTURE_CUBEMAP:
\r
60 case EVDF_ARB_VERTEX_PROGRAM_1:
\r
61 case EVDF_ARB_FRAGMENT_PROGRAM_1:
\r
62 case EVDF_GEOMETRY_SHADER:
\r
63 case EVDF_MULTIPLE_RENDER_TARGETS:
\r
64 case EVDF_MRT_BLEND:
\r
65 case EVDF_MRT_COLOR_MASK:
\r
66 case EVDF_MRT_BLEND_FUNC:
\r
67 case EVDF_OCCLUSION_QUERY:
\r
69 case EVDF_TEXTURE_COMPRESSED_DXT:
\r
70 return false; // NV Tegra need improvements here
\r
71 case EVDF_TEXTURE_COMPRESSED_PVRTC:
\r
72 return FeatureAvailable[IRR_GL_IMG_texture_compression_pvrtc];
\r
73 case EVDF_TEXTURE_COMPRESSED_PVRTC2:
\r
74 return FeatureAvailable[IRR_GL_IMG_texture_compression_pvrtc2];
\r
75 case EVDF_TEXTURE_COMPRESSED_ETC1:
\r
76 return FeatureAvailable[IRR_GL_OES_compressed_ETC1_RGB8_texture];
\r
77 case EVDF_TEXTURE_COMPRESSED_ETC2:
\r
79 case EVDF_STENCIL_BUFFER:
\r
80 return StencilBuffer;
\r
86 inline void irrGlActiveTexture(GLenum texture)
\r
88 glActiveTexture(texture);
\r
91 inline void irrGlCompressedTexImage2D(GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLint border,
\r
92 GLsizei imageSize, const void* data)
\r
94 glCompressedTexImage2D(target, level, internalformat, width, height, border, imageSize, data);
\r
97 inline void irrGlCompressedTexSubImage2D(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height,
\r
98 GLenum format, GLsizei imageSize, const void* data)
\r
100 glCompressedTexSubImage2D(target, level, xoffset, yoffset, width, height, format, imageSize, data);
\r
103 inline void irrGlUseProgram(GLuint prog)
\r
105 glUseProgram(prog);
\r
108 inline void irrGlBindFramebuffer(GLenum target, GLuint framebuffer)
\r
110 glBindFramebuffer(target, framebuffer);
\r
113 inline void irrGlDeleteFramebuffers(GLsizei n, const GLuint *framebuffers)
\r
115 glDeleteFramebuffers(n, framebuffers);
\r
118 inline void irrGlGenFramebuffers(GLsizei n, GLuint *framebuffers)
\r
120 glGenFramebuffers(n, framebuffers);
\r
123 inline GLenum irrGlCheckFramebufferStatus(GLenum target)
\r
125 return glCheckFramebufferStatus(target);
\r
128 inline void irrGlFramebufferTexture2D(GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level)
\r
130 glFramebufferTexture2D(target, attachment, textarget, texture, level);
\r
133 inline void irrGlGenerateMipmap(GLenum target)
\r
135 glGenerateMipmap(target);
\r
138 inline void irrGlActiveStencilFace(GLenum face)
\r
142 inline void irrGlDrawBuffer(GLenum mode)
\r
146 inline void irrGlDrawBuffers(GLsizei n, const GLenum *bufs)
\r
150 inline void irrGlBlendFuncSeparate(GLenum sfactorRGB, GLenum dfactorRGB, GLenum sfactorAlpha, GLenum dfactorAlpha)
\r
152 glBlendFuncSeparate(sfactorRGB, dfactorRGB, sfactorAlpha, dfactorAlpha);
\r
155 inline void irrGlBlendEquation(GLenum mode)
\r
157 glBlendEquation(mode);
\r
160 inline void irrGlEnableIndexed(GLenum target, GLuint index)
\r
164 inline void irrGlDisableIndexed(GLenum target, GLuint index)
\r
168 inline void irrGlColorMaskIndexed(GLuint buf, GLboolean r, GLboolean g, GLboolean b, GLboolean a)
\r
172 inline void irrGlBlendFuncIndexed(GLuint buf, GLenum src, GLenum dst)
\r
176 inline void irrGlBlendFuncSeparateIndexed(GLuint buf, GLenum srcRGB, GLenum dstRGB, GLenum srcAlpha, GLenum dstAlpha)
\r
180 inline void irrGlBlendEquationIndexed(GLuint buf, GLenum mode)
\r
184 inline void irrGlBlendEquationSeparateIndexed(GLuint buf, GLenum modeRGB, GLenum modeAlpha)
\r