]> git.lizzy.rs Git - irrlicht.git/blob - source/Irrlicht/OpenGL/ExtensionHandler.h
Add OpenGL3 renderer
[irrlicht.git] / source / Irrlicht / OpenGL / ExtensionHandler.h
1 // Copyright (C) 2023 Vitaliy Lobachevskiy\r
2 // Copyright (C) 2015 Patryk Nadrowski\r
3 // Copyright (C) 2009-2010 Amundis\r
4 // This file is part of the "Irrlicht Engine".\r
5 // For conditions of distribution and use, see copyright notice in Irrlicht.h\r
6 \r
7 #pragma once\r
8 \r
9 #include "EDriverFeatures.h"\r
10 #include "irrTypes.h"\r
11 #include "os.h"\r
12 \r
13 #include "Common.h"\r
14 \r
15 #include "COGLESCoreExtensionHandler.h"\r
16 \r
17 namespace irr\r
18 {\r
19 namespace video\r
20 {\r
21 \r
22         class COpenGL3ExtensionHandler : public COGLESCoreExtensionHandler\r
23         {\r
24         public:\r
25                 COpenGL3ExtensionHandler() : COGLESCoreExtensionHandler() {}\r
26 \r
27                 void initExtensions();\r
28 \r
29                 bool queryFeature(video::E_VIDEO_DRIVER_FEATURE feature) const\r
30                 {\r
31                         switch (feature)\r
32                         {\r
33                         case EVDF_RENDER_TO_TARGET:\r
34                         case EVDF_HARDWARE_TL:\r
35                         case EVDF_MULTITEXTURE:\r
36                         case EVDF_BILINEAR_FILTER:\r
37                         case EVDF_MIP_MAP:\r
38                         case EVDF_MIP_MAP_AUTO_UPDATE:\r
39                         case EVDF_VERTEX_SHADER_1_1:\r
40                         case EVDF_PIXEL_SHADER_1_1:\r
41                         case EVDF_PIXEL_SHADER_1_2:\r
42                         case EVDF_PIXEL_SHADER_2_0:\r
43                         case EVDF_VERTEX_SHADER_2_0:\r
44                         case EVDF_ARB_GLSL:\r
45                         case EVDF_TEXTURE_NSQUARE:\r
46                         case EVDF_TEXTURE_NPOT:\r
47                         case EVDF_FRAMEBUFFER_OBJECT:\r
48                         case EVDF_VERTEX_BUFFER_OBJECT:\r
49                         case EVDF_COLOR_MASK:\r
50                         case EVDF_ALPHA_TO_COVERAGE:\r
51                         case EVDF_POLYGON_OFFSET:\r
52                         case EVDF_BLEND_OPERATIONS:\r
53                         case EVDF_BLEND_SEPARATE:\r
54                         case EVDF_TEXTURE_MATRIX:\r
55                         case EVDF_TEXTURE_CUBEMAP:\r
56                                 return true;\r
57                         case EVDF_ARB_VERTEX_PROGRAM_1:\r
58                         case EVDF_ARB_FRAGMENT_PROGRAM_1:\r
59                         case EVDF_GEOMETRY_SHADER:\r
60                         case EVDF_MULTIPLE_RENDER_TARGETS:\r
61                         case EVDF_MRT_BLEND:\r
62                         case EVDF_MRT_COLOR_MASK:\r
63                         case EVDF_MRT_BLEND_FUNC:\r
64                         case EVDF_OCCLUSION_QUERY:\r
65                                 return false;\r
66                         case EVDF_TEXTURE_COMPRESSED_DXT:\r
67                                 return false; // NV Tegra need improvements here\r
68                         case EVDF_TEXTURE_COMPRESSED_PVRTC:\r
69                                 return FeatureAvailable[IRR_GL_IMG_texture_compression_pvrtc];\r
70                         case EVDF_TEXTURE_COMPRESSED_PVRTC2:\r
71                                 return FeatureAvailable[IRR_GL_IMG_texture_compression_pvrtc2];\r
72                         case EVDF_TEXTURE_COMPRESSED_ETC1:\r
73                                 return FeatureAvailable[IRR_GL_OES_compressed_ETC1_RGB8_texture];\r
74                         case EVDF_TEXTURE_COMPRESSED_ETC2:\r
75                                 return false;\r
76                         case EVDF_STENCIL_BUFFER:\r
77                                 return StencilBuffer;\r
78                         default:\r
79                                 return false;\r
80                         };\r
81                 }\r
82 \r
83                 inline void irrGlActiveTexture(GLenum texture)\r
84                 {\r
85                         glActiveTexture(texture);\r
86                 }\r
87 \r
88                 inline void irrGlCompressedTexImage2D(GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLint border,\r
89                         GLsizei imageSize, const void* data)\r
90                 {\r
91                         glCompressedTexImage2D(target, level, internalformat, width, height, border, imageSize, data);\r
92                 }\r
93 \r
94                 inline void irrGlCompressedTexSubImage2D(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height,\r
95                         GLenum format, GLsizei imageSize, const void* data)\r
96                 {\r
97                         glCompressedTexSubImage2D(target, level, xoffset, yoffset, width, height, format, imageSize, data);\r
98                 }\r
99 \r
100                 inline void irrGlUseProgram(GLuint prog)\r
101                 {\r
102                         glUseProgram(prog);\r
103                 }\r
104 \r
105                 inline void irrGlBindFramebuffer(GLenum target, GLuint framebuffer)\r
106                 {\r
107                         glBindFramebuffer(target, framebuffer);\r
108                 }\r
109 \r
110                 inline void irrGlDeleteFramebuffers(GLsizei n, const GLuint *framebuffers)\r
111                 {\r
112                         glDeleteFramebuffers(n, framebuffers);\r
113                 }\r
114 \r
115                 inline void irrGlGenFramebuffers(GLsizei n, GLuint *framebuffers)\r
116                 {\r
117                         glGenFramebuffers(n, framebuffers);\r
118                 }\r
119 \r
120                 inline GLenum irrGlCheckFramebufferStatus(GLenum target)\r
121                 {\r
122                         return glCheckFramebufferStatus(target);\r
123                 }\r
124 \r
125                 inline void irrGlFramebufferTexture2D(GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level)\r
126                 {\r
127                         glFramebufferTexture2D(target, attachment, textarget, texture, level);\r
128                 }\r
129 \r
130                 inline void irrGlGenerateMipmap(GLenum target)\r
131                 {\r
132                         glGenerateMipmap(target);\r
133                 }\r
134 \r
135                 inline void irrGlActiveStencilFace(GLenum face)\r
136                 {\r
137                 }\r
138 \r
139                 inline void irrGlDrawBuffer(GLenum mode)\r
140                 {\r
141                 }\r
142 \r
143                 inline void irrGlDrawBuffers(GLsizei n, const GLenum *bufs)\r
144                 {\r
145                 }\r
146 \r
147                 inline void irrGlBlendFuncSeparate(GLenum sfactorRGB, GLenum dfactorRGB, GLenum sfactorAlpha, GLenum dfactorAlpha)\r
148                 {\r
149                         glBlendFuncSeparate(sfactorRGB, dfactorRGB, sfactorAlpha, dfactorAlpha);\r
150                 }\r
151 \r
152                 inline void irrGlBlendEquation(GLenum mode)\r
153                 {\r
154                         glBlendEquation(mode);\r
155                 }\r
156 \r
157                 inline void irrGlEnableIndexed(GLenum target, GLuint index)\r
158                 {\r
159                 }\r
160 \r
161                 inline void irrGlDisableIndexed(GLenum target, GLuint index)\r
162                 {\r
163                 }\r
164 \r
165                 inline void irrGlColorMaskIndexed(GLuint buf, GLboolean r, GLboolean g, GLboolean b, GLboolean a)\r
166                 {\r
167                 }\r
168 \r
169                 inline void irrGlBlendFuncIndexed(GLuint buf, GLenum src, GLenum dst)\r
170                 {\r
171                 }\r
172 \r
173                 inline void irrGlBlendFuncSeparateIndexed(GLuint buf, GLenum srcRGB, GLenum dstRGB, GLenum srcAlpha, GLenum dstAlpha)\r
174                 {\r
175                 }\r
176 \r
177                 inline void irrGlBlendEquationIndexed(GLuint buf, GLenum mode)\r
178                 {\r
179                 }\r
180 \r
181                 inline void irrGlBlendEquationSeparateIndexed(GLuint buf, GLenum modeRGB, GLenum modeAlpha)\r
182                 {\r
183                 }\r
184         };\r
185 \r
186 }\r
187 }\r