]> git.lizzy.rs Git - irrlicht.git/blob - source/Irrlicht/COGLES2ExtensionHandler.h
2e81b3734edbbedf048042164e576bc9ed3a74b1
[irrlicht.git] / source / Irrlicht / COGLES2ExtensionHandler.h
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
5 \r
6 #ifndef __C_OGLES2_EXTENSION_HANDLER_H_INCLUDED__\r
7 #define __C_OGLES2_EXTENSION_HANDLER_H_INCLUDED__\r
8 \r
9 #include "IrrCompileConfig.h"\r
10 \r
11 #ifdef _IRR_COMPILE_WITH_OGLES2_\r
12 \r
13 #include "EDriverFeatures.h"\r
14 #include "irrTypes.h"\r
15 #include "os.h"\r
16 \r
17 #include "COGLES2Common.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 COGLES2ExtensionHandler : public COGLESCoreExtensionHandler\r
27         {\r
28         public:\r
29                 COGLES2ExtensionHandler() : COGLESCoreExtensionHandler() {}\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_MIP_MAP_AUTO_UPDATE:\r
43                         case EVDF_VERTEX_SHADER_1_1:\r
44                         case EVDF_PIXEL_SHADER_1_1:\r
45                         case EVDF_PIXEL_SHADER_1_2:\r
46                         case EVDF_PIXEL_SHADER_2_0:\r
47                         case EVDF_VERTEX_SHADER_2_0:\r
48                         case EVDF_ARB_GLSL:\r
49                         case EVDF_TEXTURE_NSQUARE:\r
50                         case EVDF_TEXTURE_NPOT:\r
51                         case EVDF_FRAMEBUFFER_OBJECT:\r
52                         case EVDF_VERTEX_BUFFER_OBJECT:\r
53                         case EVDF_COLOR_MASK:\r
54                         case EVDF_ALPHA_TO_COVERAGE:\r
55                         case EVDF_POLYGON_OFFSET:\r
56                         case EVDF_BLEND_OPERATIONS:\r
57                         case EVDF_BLEND_SEPARATE:\r
58                         case EVDF_TEXTURE_MATRIX:\r
59                         case EVDF_TEXTURE_CUBEMAP:\r
60                                 return true;\r
61                         case EVDF_ARB_VERTEX_PROGRAM_1:\r
62                         case EVDF_ARB_FRAGMENT_PROGRAM_1:\r
63                         case EVDF_GEOMETRY_SHADER:\r
64                         case EVDF_MULTIPLE_RENDER_TARGETS:\r
65                         case EVDF_MRT_BLEND:\r
66                         case EVDF_MRT_COLOR_MASK:\r
67                         case EVDF_MRT_BLEND_FUNC:\r
68                         case EVDF_OCCLUSION_QUERY:\r
69                                 return false;\r
70                         case EVDF_TEXTURE_COMPRESSED_DXT:\r
71                                 return false; // NV Tegra need improvements here\r
72                         case EVDF_TEXTURE_COMPRESSED_PVRTC:\r
73                                 return FeatureAvailable[IRR_GL_IMG_texture_compression_pvrtc];\r
74                         case EVDF_TEXTURE_COMPRESSED_PVRTC2:\r
75                                 return FeatureAvailable[IRR_GL_IMG_texture_compression_pvrtc2];\r
76                         case EVDF_TEXTURE_COMPRESSED_ETC1:\r
77                                 return FeatureAvailable[IRR_GL_OES_compressed_ETC1_RGB8_texture];\r
78                         case EVDF_TEXTURE_COMPRESSED_ETC2:\r
79                                 return false;\r
80                         case EVDF_STENCIL_BUFFER:\r
81                                 return StencilBuffer;\r
82                         default:\r
83                                 return false;\r
84                         };\r
85                 }\r
86 \r
87                 inline void irrGlActiveTexture(GLenum texture)\r
88                 {\r
89                         glActiveTexture(texture);\r
90                 }\r
91 \r
92                 inline void irrGlCompressedTexImage2D(GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLint border,\r
93                         GLsizei imageSize, const void* data)\r
94                 {\r
95                         glCompressedTexImage2D(target, level, internalformat, width, height, border, imageSize, data);\r
96                 }\r
97 \r
98                 inline void irrGlCompressedTexSubImage2D(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height,\r
99                         GLenum format, GLsizei imageSize, const void* data)\r
100                 {\r
101                         glCompressedTexSubImage2D(target, level, xoffset, yoffset, width, height, format, imageSize, data);\r
102                 }\r
103 \r
104                 inline void irrGlUseProgram(GLuint prog)\r
105                 {\r
106                         glUseProgram(prog);\r
107                 }\r
108 \r
109                 inline void irrGlBindFramebuffer(GLenum target, GLuint framebuffer)\r
110                 {\r
111                         glBindFramebuffer(target, framebuffer);\r
112                 }\r
113 \r
114                 inline void irrGlDeleteFramebuffers(GLsizei n, const GLuint *framebuffers)\r
115                 {\r
116                         glDeleteFramebuffers(n, framebuffers);\r
117                 }\r
118 \r
119                 inline void irrGlGenFramebuffers(GLsizei n, GLuint *framebuffers)\r
120                 {\r
121                         glGenFramebuffers(n, framebuffers);\r
122                 }\r
123 \r
124                 inline GLenum irrGlCheckFramebufferStatus(GLenum target)\r
125                 {\r
126                         return glCheckFramebufferStatus(target);\r
127                 }\r
128 \r
129                 inline void irrGlFramebufferTexture2D(GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level)\r
130                 {\r
131                         glFramebufferTexture2D(target, attachment, textarget, texture, level);\r
132                 }\r
133 \r
134                 inline void irrGlGenerateMipmap(GLenum target)\r
135                 {\r
136                         glGenerateMipmap(target);\r
137                 }\r
138 \r
139                 inline void irrGlActiveStencilFace(GLenum face)\r
140                 {\r
141                 }\r
142 \r
143                 inline void irrGlDrawBuffer(GLenum mode)\r
144                 {\r
145                 }\r
146 \r
147                 inline void irrGlDrawBuffers(GLsizei n, const GLenum *bufs)\r
148                 {\r
149                 }\r
150 \r
151                 inline void irrGlBlendFuncSeparate(GLenum sfactorRGB, GLenum dfactorRGB, GLenum sfactorAlpha, GLenum dfactorAlpha)\r
152                 {\r
153                         glBlendFuncSeparate(sfactorRGB, dfactorRGB, sfactorAlpha, dfactorAlpha);\r
154                 }\r
155 \r
156                 inline void irrGlBlendEquation(GLenum mode)\r
157                 {\r
158                         glBlendEquation(mode);\r
159                 }\r
160 \r
161                 inline void irrGlEnableIndexed(GLenum target, GLuint index)\r
162                 {\r
163                 }\r
164 \r
165                 inline void irrGlDisableIndexed(GLenum target, GLuint index)\r
166                 {\r
167                 }\r
168 \r
169                 inline void irrGlColorMaskIndexed(GLuint buf, GLboolean r, GLboolean g, GLboolean b, GLboolean a)\r
170                 {\r
171                 }\r
172 \r
173                 inline void irrGlBlendFuncIndexed(GLuint buf, GLenum src, GLenum dst)\r
174                 {\r
175                 }\r
176 \r
177                 inline void irrGlBlendFuncSeparateIndexed(GLuint buf, GLenum srcRGB, GLenum dstRGB, GLenum srcAlpha, GLenum dstAlpha)\r
178                 {\r
179                 }\r
180 \r
181                 inline void irrGlBlendEquationIndexed(GLuint buf, GLenum mode)\r
182                 {\r
183                 }\r
184 \r
185                 inline void irrGlBlendEquationSeparateIndexed(GLuint buf, GLenum modeRGB, GLenum modeAlpha)\r
186                 {\r
187                 }\r
188         };\r
189 \r
190 }\r
191 }\r
192 \r
193 #endif\r
194 #endif\r