OpenMoHAA 0.82.0
Loading...
Searching...
No Matches
qgl.h
1/*
2===========================================================================
3Copyright (C) 1999-2005 Id Software, Inc.
4
5This file is part of Quake III Arena source code.
6
7Quake III Arena source code is free software; you can redistribute it
8and/or modify it under the terms of the GNU General Public License as
9published by the Free Software Foundation; either version 2 of the License,
10or (at your option) any later version.
11
12Quake III Arena source code is distributed in the hope that it will be
13useful, but WITHOUT ANY WARRANTY; without even the implied warranty of
14MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15GNU General Public License for more details.
16
17You should have received a copy of the GNU General Public License
18along with Quake III Arena source code; if not, write to the Free Software
19Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
20===========================================================================
21*/
22/*
23** QGL.H
24*/
25
26#ifndef __QGL_H__
27#define __QGL_H__
28
29#ifdef USE_LOCAL_HEADERS
30# include "SDL_opengl.h"
31#else
32# include <SDL_opengl.h>
33#endif
34
35extern void (APIENTRYP qglActiveTextureARB) (GLenum texture);
36extern void (APIENTRYP qglClientActiveTextureARB) (GLenum texture);
37extern void (APIENTRYP qglMultiTexCoord2fARB) (GLenum target, GLfloat s, GLfloat t);
38
39extern void (APIENTRYP qglLockArraysEXT) (GLint first, GLsizei count);
40extern void (APIENTRYP qglUnlockArraysEXT) (void);
41
42
43//===========================================================================
44
45// GL function loader, based on https://gist.github.com/rygorous/16796a0c876cf8a5f542caddb55bce8a
46// get missing functions from code/SDL2/include/SDL_opengl.h
47
48// OpenGL 1.0/1.1, OpenGL ES 1.0, and OpenGL 3.2 core profile
49#define QGL_1_1_PROCS \
50 GLE(void, BindTexture, GLenum target, GLuint texture) \
51 GLE(void, BlendFunc, GLenum sfactor, GLenum dfactor) \
52 GLE(void, CallList, GLuint list) \
53 GLE(void, ClearColor, GLclampf red, GLclampf green, GLclampf blue, GLclampf alpha) \
54 GLE(void, Clear, GLbitfield mask) \
55 GLE(void, ClearStencil, GLint s) \
56 GLE(void, ColorMask, GLboolean red, GLboolean green, GLboolean blue, GLboolean alpha) \
57 GLE(void, CopyTexSubImage2D, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint x, GLint y, GLsizei width, GLsizei height) \
58 GLE(void, CullFace, GLenum mode) \
59 GLE(void, DeleteTextures, GLsizei n, const GLuint *textures) \
60 GLE(void, DepthFunc, GLenum func) \
61 GLE(void, DepthMask, GLboolean flag) \
62 GLE(void, Disable, GLenum cap) \
63 GLE(void, DrawArrays, GLenum mode, GLint first, GLsizei count) \
64 GLE(void, DrawElements, GLenum mode, GLsizei count, GLenum type, const GLvoid *indices) \
65 GLE(void, DrawPixels, GLsizei width, GLsizei height, GLenum format, GLenum type, const GLvoid *pixels) \
66 GLE(void, Enable, GLenum cap) \
67 GLE(void, Finish, void) \
68 GLE(void, Flush, void) \
69 GLE(void, Fogf, GLenum pname, GLfloat param) \
70 GLE(void, Fogfv, GLenum pname, const GLfloat *params) \
71 GLE(void, Fogi, GLenum pname, GLint param) \
72 GLE(void, GenTextures, GLsizei n, GLuint *textures ) \
73 GLE(void, GetBooleanv, GLenum pname, GLboolean *params) \
74 GLE(GLenum, GetError, void) \
75 GLE(void, GetIntegerv, GLenum pname, GLint *params) \
76 GLE(const GLubyte *, GetString, GLenum name) \
77 GLE(void, LineStipple, GLint factor, GLushort pattern) \
78 GLE(void, LineWidth, GLfloat width) \
79 GLE(void, PixelZoom, GLfloat xfactor, GLfloat yfactor) \
80 GLE(void, PolygonOffset, GLfloat factor, GLfloat units) \
81 GLE(void, ReadPixels, GLint x, GLint y, GLsizei width, GLsizei height, GLenum format, GLenum type, GLvoid *pixels) \
82 GLE(void, Scissor, GLint x, GLint y, GLsizei width, GLsizei height) \
83 GLE(void, StencilFunc, GLenum func, GLint ref, GLuint mask) \
84 GLE(void, StencilMask, GLuint mask) \
85 GLE(void, StencilOp, GLenum fail, GLenum zfail, GLenum zpass) \
86 GLE(void, TexImage2D, GLenum target, GLint level, GLint internalFormat, GLsizei width, GLsizei height, GLint border, GLenum format, GLenum type, const GLvoid *pixels) \
87 GLE(void, TexParameterf, GLenum target, GLenum pname, GLfloat param) \
88 GLE(void, TexParameteri, GLenum target, GLenum pname, GLint param) \
89 GLE(void, TexSubImage2D, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLenum type, const GLvoid *pixels) \
90 GLE(void, Translatef, GLfloat x, GLfloat y, GLfloat z) \
91 GLE(void, Viewport, GLint x, GLint y, GLsizei width, GLsizei height) \
92
93// OpenGL 1.0/1.1 and OpenGL ES 1.x but not OpenGL 3.2 core profile
94#define QGL_1_1_FIXED_FUNCTION_PROCS \
95 GLE(void, AlphaFunc, GLenum func, GLclampf ref) \
96 GLE(void, Color4f, GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha) \
97 GLE(void, ColorPointer, GLint size, GLenum type, GLsizei stride, const GLvoid *ptr) \
98 GLE(void, DisableClientState, GLenum cap) \
99 GLE(void, EnableClientState, GLenum cap) \
100 GLE(void, LoadIdentity, void) \
101 GLE(void, LoadMatrixf, const GLfloat *m) \
102 GLE(void, MatrixMode, GLenum mode) \
103 GLE(void, PopMatrix, void) \
104 GLE(void, PushMatrix, void) \
105 GLE(void, ShadeModel, GLenum mode) \
106 GLE(void, TexCoordPointer, GLint size, GLenum type, GLsizei stride, const GLvoid *ptr) \
107 GLE(void, TexEnvf, GLenum target, GLenum pname, GLfloat param) \
108 GLE(void, VertexPointer, GLint size, GLenum type, GLsizei stride, const GLvoid *ptr) \
109
110// OpenGL 1.0/1.1 and 3.2 core profile but not OpenGL ES 1.x
111#define QGL_DESKTOP_1_1_PROCS \
112 GLE(void, ClearDepth, GLclampd depth) \
113 GLE(void, DepthRange, GLclampd near_val, GLclampd far_val) \
114 GLE(void, DrawBuffer, GLenum mode) \
115 GLE(void, PolygonMode, GLenum face, GLenum mode) \
116
117// OpenGL 1.0/1.1 but not OpenGL 3.2 core profile or OpenGL ES 1.x
118#define QGL_DESKTOP_1_1_FIXED_FUNCTION_PROCS \
119 GLE(void, ArrayElement, GLint i) \
120 GLE(void, Begin, GLenum mode) \
121 GLE(void, ClipPlane, GLenum plane, const GLdouble *equation) \
122 GLE(void, Color3f, GLfloat red, GLfloat green, GLfloat blue) \
123 GLE(void, Color4ubv, const GLubyte *v) \
124 GLE(void, End, void) \
125 GLE(void, Frustum, GLdouble left, GLdouble right, GLdouble bottom, GLdouble top, GLdouble near_val, GLdouble far_val) \
126 GLE(void, Ortho, GLdouble left, GLdouble right, GLdouble bottom, GLdouble top, GLdouble near_val, GLdouble far_val) \
127 GLE(void, TexCoord2f, GLfloat s, GLfloat t) \
128 GLE(void, TexCoord2fv, const GLfloat *v) \
129 GLE(void, Vertex2f, GLfloat x, GLfloat y) \
130 GLE(void, Vertex3f, GLfloat x, GLfloat y, GLfloat z) \
131 GLE(void, Vertex3fv, const GLfloat *v) \
132
133// OpenGL ES 1.1 and OpenGL ES 2.0 but not desktop OpenGL 1.x
134#define QGL_ES_1_1_PROCS \
135 GLE(void, ClearDepthf, GLclampf depth) \
136 GLE(void, DepthRangef, GLclampf near_val, GLclampf far_val) \
137
138// OpenGL ES 1.1 but not OpenGL ES 2.0 or desktop OpenGL 1.x
139#define QGL_ES_1_1_FIXED_FUNCTION_PROCS \
140 GLE(void, ClipPlanef, GLenum plane, const GLfloat *equation) \
141 GLE(void, Frustumf, GLfloat left, GLfloat right, GLfloat bottom, GLfloat top, GLfloat near_val, GLfloat far_val) \
142 GLE(void, Orthof, GLfloat left, GLfloat right, GLfloat bottom, GLfloat top, GLfloat near_val, GLfloat far_val) \
143
144// OpenGL 1.3, was GL_ARB_texture_compression
145#define QGL_1_3_PROCS \
146 GLE(void, ActiveTexture, GLenum texture) \
147 GLE(void, CompressedTexImage2D, GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLint border, GLsizei imageSize, const void *data) \
148 GLE(void, CompressedTexSubImage2D, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLsizei imageSize, const void *data) \
149
150// GL_ARB_occlusion_query, built-in to OpenGL 1.5 but not OpenGL ES 2.0
151#define QGL_ARB_occlusion_query_PROCS \
152 GLE(void, GenQueries, GLsizei n, GLuint *ids) \
153 GLE(void, DeleteQueries, GLsizei n, const GLuint *ids) \
154 GLE(void, BeginQuery, GLenum target, GLuint id) \
155 GLE(void, EndQuery, GLenum target) \
156 GLE(void, GetQueryObjectiv, GLuint id, GLenum pname, GLint *params) \
157 GLE(void, GetQueryObjectuiv, GLuint id, GLenum pname, GLuint *params) \
158
159// OpenGL 1.5, was GL_ARB_vertex_buffer_object
160#define QGL_1_5_PROCS \
161 GLE(void, BindBuffer, GLenum target, GLuint buffer) \
162 GLE(void, DeleteBuffers, GLsizei n, const GLuint *buffers) \
163 GLE(void, GenBuffers, GLsizei n, GLuint *buffers) \
164 GLE(void, BufferData, GLenum target, GLsizeiptr size, const void *data, GLenum usage) \
165 GLE(void, BufferSubData, GLenum target, GLintptr offset, GLsizeiptr size, const void *data) \
166
167// OpenGL 2.0, was GL_ARB_shading_language_100, GL_ARB_vertex_program, GL_ARB_shader_objects, and GL_ARB_vertex_shader
168#define QGL_2_0_PROCS \
169 GLE(void, AttachShader, GLuint program, GLuint shader) \
170 GLE(void, BindAttribLocation, GLuint program, GLuint index, const GLchar *name) \
171 GLE(void, CompileShader, GLuint shader) \
172 GLE(GLuint, CreateProgram, void) \
173 GLE(GLuint, CreateShader, GLenum type) \
174 GLE(void, DeleteProgram, GLuint program) \
175 GLE(void, DeleteShader, GLuint shader) \
176 GLE(void, DetachShader, GLuint program, GLuint shader) \
177 GLE(void, DisableVertexAttribArray, GLuint index) \
178 GLE(void, EnableVertexAttribArray, GLuint index) \
179 GLE(void, GetActiveUniform, GLuint program, GLuint index, GLsizei bufSize, GLsizei *length, GLint *size, GLenum *type, GLchar *name) \
180 GLE(void, GetProgramiv, GLuint program, GLenum pname, GLint *params) \
181 GLE(void, GetProgramInfoLog, GLuint program, GLsizei bufSize, GLsizei *length, GLchar *infoLog) \
182 GLE(void, GetShaderiv, GLuint shader, GLenum pname, GLint *params) \
183 GLE(void, GetShaderInfoLog, GLuint shader, GLsizei bufSize, GLsizei *length, GLchar *infoLog) \
184 GLE(void, GetShaderSource, GLuint shader, GLsizei bufSize, GLsizei *length, GLchar *source) \
185 GLE(GLint, GetUniformLocation, GLuint program, const GLchar *name) \
186 GLE(void, LinkProgram, GLuint program) \
187 GLE(void, ShaderSource, GLuint shader, GLsizei count, const GLchar* *string, const GLint *length) \
188 GLE(void, UseProgram, GLuint program) \
189 GLE(void, Uniform1f, GLint location, GLfloat v0) \
190 GLE(void, Uniform2f, GLint location, GLfloat v0, GLfloat v1) \
191 GLE(void, Uniform3f, GLint location, GLfloat v0, GLfloat v1, GLfloat v2) \
192 GLE(void, Uniform4f, GLint location, GLfloat v0, GLfloat v1, GLfloat v2, GLfloat v3) \
193 GLE(void, Uniform1i, GLint location, GLint v0) \
194 GLE(void, Uniform1fv, GLint location, GLsizei count, const GLfloat *value) \
195 GLE(void, UniformMatrix4fv, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value) \
196 GLE(void, ValidateProgram, GLuint program) \
197 GLE(void, VertexAttribPointer, GLuint index, GLint size, GLenum type, GLboolean normalized, GLsizei stride, const void *pointer) \
198
199// GL_NVX_gpu_memory_info
200#ifndef GL_NVX_gpu_memory_info
201#define GL_NVX_gpu_memory_info
202#define GL_GPU_MEMORY_INFO_DEDICATED_VIDMEM_NVX 0x9047
203#define GL_GPU_MEMORY_INFO_TOTAL_AVAILABLE_MEMORY_NVX 0x9048
204#define GL_GPU_MEMORY_INFO_CURRENT_AVAILABLE_VIDMEM_NVX 0x9049
205#define GL_GPU_MEMORY_INFO_EVICTION_COUNT_NVX 0x904A
206#define GL_GPU_MEMORY_INFO_EVICTED_MEMORY_NVX 0x904B
207#endif
208
209// GL_ATI_meminfo
210#ifndef GL_ATI_meminfo
211#define GL_ATI_meminfo
212#define GL_VBO_FREE_MEMORY_ATI 0x87FB
213#define GL_TEXTURE_FREE_MEMORY_ATI 0x87FC
214#define GL_RENDERBUFFER_FREE_MEMORY_ATI 0x87FD
215#endif
216
217// GL_ARB_texture_float
218#ifndef GL_ARB_texture_float
219#define GL_ARB_texture_float
220#define GL_TEXTURE_RED_TYPE_ARB 0x8C10
221#define GL_TEXTURE_GREEN_TYPE_ARB 0x8C11
222#define GL_TEXTURE_BLUE_TYPE_ARB 0x8C12
223#define GL_TEXTURE_ALPHA_TYPE_ARB 0x8C13
224#define GL_TEXTURE_LUMINANCE_TYPE_ARB 0x8C14
225#define GL_TEXTURE_INTENSITY_TYPE_ARB 0x8C15
226#define GL_TEXTURE_DEPTH_TYPE_ARB 0x8C16
227#define GL_UNSIGNED_NORMALIZED_ARB 0x8C17
228#define GL_RGBA32F_ARB 0x8814
229#define GL_RGB32F_ARB 0x8815
230#define GL_ALPHA32F_ARB 0x8816
231#define GL_INTENSITY32F_ARB 0x8817
232#define GL_LUMINANCE32F_ARB 0x8818
233#define GL_LUMINANCE_ALPHA32F_ARB 0x8819
234#define GL_RGBA16F_ARB 0x881A
235#define GL_RGB16F_ARB 0x881B
236#define GL_ALPHA16F_ARB 0x881C
237#define GL_INTENSITY16F_ARB 0x881D
238#define GL_LUMINANCE16F_ARB 0x881E
239#define GL_LUMINANCE_ALPHA16F_ARB 0x881F
240#endif
241
242#ifndef GL_ARB_half_float_pixel
243#define GL_ARB_half_float_pixel
244#define GL_HALF_FLOAT_ARB 0x140B
245#endif
246
247// OpenGL 3.0 specific
248#define QGL_3_0_PROCS \
249 GLE(const GLubyte *, GetStringi, GLenum name, GLuint index) \
250
251// GL_ARB_framebuffer_object, built-in to OpenGL 3.0
252#define QGL_ARB_framebuffer_object_PROCS \
253 GLE(void, BindRenderbuffer, GLenum target, GLuint renderbuffer) \
254 GLE(void, DeleteRenderbuffers, GLsizei n, const GLuint *renderbuffers) \
255 GLE(void, GenRenderbuffers, GLsizei n, GLuint *renderbuffers) \
256 GLE(void, RenderbufferStorage, GLenum target, GLenum internalformat, GLsizei width, GLsizei height) \
257 GLE(void, BindFramebuffer, GLenum target, GLuint framebuffer) \
258 GLE(void, DeleteFramebuffers, GLsizei n, const GLuint *framebuffers) \
259 GLE(void, GenFramebuffers, GLsizei n, GLuint *framebuffers) \
260 GLE(GLenum, CheckFramebufferStatus, GLenum target) \
261 GLE(void, FramebufferTexture2D, GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level) \
262 GLE(void, FramebufferRenderbuffer, GLenum target, GLenum attachment, GLenum renderbuffertarget, GLuint renderbuffer) \
263 GLE(void, GenerateMipmap, GLenum target) \
264 GLE(void, BlitFramebuffer, GLint srcX0, GLint srcY0, GLint srcX1, GLint srcY1, GLint dstX0, GLint dstY0, GLint dstX1, GLint dstY1, GLbitfield mask, GLenum filter) \
265 GLE(void, RenderbufferStorageMultisample, GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height) \
266
267// GL_ARB_vertex_array_object, built-in to OpenGL 3.0
268#define QGL_ARB_vertex_array_object_PROCS \
269 GLE(void, BindVertexArray, GLuint array) \
270 GLE(void, DeleteVertexArrays, GLsizei n, const GLuint *arrays) \
271 GLE(void, GenVertexArrays, GLsizei n, GLuint *arrays) \
272
273#ifndef GL_ARB_texture_compression_rgtc
274#define GL_ARB_texture_compression_rgtc
275#define GL_COMPRESSED_RED_RGTC1 0x8DBB
276#define GL_COMPRESSED_SIGNED_RED_RGTC1 0x8DBC
277#define GL_COMPRESSED_RG_RGTC2 0x8DBD
278#define GL_COMPRESSED_SIGNED_RG_RGTC2 0x8DBE
279#endif
280
281#ifndef GL_ARB_texture_compression_bptc
282#define GL_ARB_texture_compression_bptc
283#define GL_COMPRESSED_RGBA_BPTC_UNORM_ARB 0x8E8C
284#define GL_COMPRESSED_SRGB_ALPHA_BPTC_UNORM_ARB 0x8E8D
285#define GL_COMPRESSED_RGB_BPTC_SIGNED_FLOAT_ARB 0x8E8E
286#define GL_COMPRESSED_RGB_BPTC_UNSIGNED_FLOAT_ARB 0x8E8F
287#endif
288
289#ifndef GL_ARB_depth_clamp
290#define GL_ARB_depth_clamp
291#define GL_DEPTH_CLAMP 0x864F
292#endif
293
294#ifndef GL_ARB_seamless_cube_map
295#define GL_ARB_seamless_cube_map
296#define GL_TEXTURE_CUBE_MAP_SEAMLESS 0x884F
297#endif
298
299// GL_EXT_direct_state_access
300#define QGL_EXT_direct_state_access_PROCS \
301 GLE(GLvoid, BindMultiTextureEXT, GLenum texunit, GLenum target, GLuint texture) \
302 GLE(GLvoid, TextureParameterfEXT, GLuint texture, GLenum target, GLenum pname, GLfloat param) \
303 GLE(GLvoid, TextureParameteriEXT, GLuint texture, GLenum target, GLenum pname, GLint param) \
304 GLE(GLvoid, TextureImage2DEXT, GLuint texture, GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLint border, GLenum format, GLenum type, const GLvoid *pixels) \
305 GLE(GLvoid, TextureSubImage2DEXT, GLuint texture, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLenum type, const GLvoid *pixels) \
306 GLE(GLvoid, CopyTextureSubImage2DEXT, GLuint texture, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint x, GLint y, GLsizei width, GLsizei height) \
307 GLE(GLvoid, CompressedTextureImage2DEXT, GLuint texture, GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLint border, GLsizei imageSize, const GLvoid *data) \
308 GLE(GLvoid, CompressedTextureSubImage2DEXT, GLuint texture, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLsizei imageSize, const GLvoid *data) \
309 GLE(GLvoid, GenerateTextureMipmapEXT, GLuint texture, GLenum target) \
310 GLE(GLvoid, ProgramUniform1iEXT, GLuint program, GLint location, GLint v0) \
311 GLE(GLvoid, ProgramUniform1fEXT, GLuint program, GLint location, GLfloat v0) \
312 GLE(GLvoid, ProgramUniform2fEXT, GLuint program, GLint location, GLfloat v0, GLfloat v1) \
313 GLE(GLvoid, ProgramUniform3fEXT, GLuint program, GLint location, GLfloat v0, GLfloat v1, GLfloat v2) \
314 GLE(GLvoid, ProgramUniform4fEXT, GLuint program, GLint location, GLfloat v0, GLfloat v1, GLfloat v2, GLfloat v3) \
315 GLE(GLvoid, ProgramUniform1fvEXT, GLuint program, GLint location, GLsizei count, const GLfloat *value) \
316 GLE(GLvoid, ProgramUniformMatrix4fvEXT, GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value) \
317 GLE(GLvoid, NamedRenderbufferStorageEXT, GLuint renderbuffer, GLenum internalformat, GLsizei width, GLsizei height) \
318 GLE(GLvoid, NamedRenderbufferStorageMultisampleEXT, GLuint renderbuffer, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height) \
319 GLE(GLenum, CheckNamedFramebufferStatusEXT, GLuint framebuffer, GLenum target) \
320 GLE(GLvoid, NamedFramebufferTexture2DEXT, GLuint framebuffer, GLenum attachment, GLenum textarget, GLuint texture, GLint level) \
321 GLE(GLvoid, NamedFramebufferRenderbufferEXT, GLuint framebuffer, GLenum attachment, GLenum renderbuffertarget, GLuint renderbuffer) \
322
323#define GLE(ret, name, ...) typedef ret APIENTRY name##proc(__VA_ARGS__);
324QGL_1_1_PROCS;
325QGL_1_1_FIXED_FUNCTION_PROCS;
326QGL_DESKTOP_1_1_PROCS;
327QGL_DESKTOP_1_1_FIXED_FUNCTION_PROCS;
328QGL_ES_1_1_PROCS;
329QGL_ES_1_1_FIXED_FUNCTION_PROCS;
330QGL_1_3_PROCS;
331QGL_1_5_PROCS;
332QGL_2_0_PROCS;
333QGL_3_0_PROCS;
334QGL_ARB_occlusion_query_PROCS;
335QGL_ARB_framebuffer_object_PROCS;
336QGL_ARB_vertex_array_object_PROCS;
337QGL_EXT_direct_state_access_PROCS;
338#undef GLE
339
340extern int qglMajorVersion, qglMinorVersion;
341extern int qglesMajorVersion, qglesMinorVersion;
342#define QGL_VERSION_ATLEAST( major, minor ) ( qglMajorVersion > major || ( qglMajorVersion == major && qglMinorVersion >= minor ) )
343#define QGLES_VERSION_ATLEAST( major, minor ) ( qglesMajorVersion > major || ( qglesMajorVersion == major && qglesMinorVersion >= minor ) )
344
345#endif