1 /****************************************************************************
2 **
3 ** Copyright (C) 2015 The Qt Company Ltd.
4 ** Contact: http://www.qt.io/licensing/
5 **
6 ** This file is part of the demonstration applications of the Qt Toolkit.
7 **
8 ** $QT_BEGIN_LICENSE:LGPL$
9 ** Commercial License Usage
10 ** Licensees holding valid commercial Qt licenses may use this file in
11 ** accordance with the commercial license agreement provided with the
12 ** Software or, alternatively, in accordance with the terms contained in
13 ** a written agreement between you and The Qt Company. For licensing terms
14 ** and conditions see http://www.qt.io/terms-conditions. For further
15 ** information use the contact form at http://www.qt.io/contact-us.
16 **
17 ** GNU Lesser General Public License Usage
18 ** Alternatively, this file may be used under the terms of the GNU Lesser
19 ** General Public License version 2.1 or version 3 as published by the Free
20 ** Software Foundation and appearing in the file LICENSE.LGPLv21 and
21 ** LICENSE.LGPLv3 included in the packaging of this file. Please review the
22 ** following information to ensure the GNU Lesser General Public License
23 ** requirements will be met: https://www.gnu.org/licenses/lgpl.html and
24 ** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
25 **
26 ** As a special exception, The Qt Company gives you certain additional
27 ** rights. These rights are described in The Qt Company LGPL Exception
28 ** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
29 **
30 ** GNU General Public License Usage
31 ** Alternatively, this file may be used under the terms of the GNU
32 ** General Public License version 3.0 as published by the Free Software
33 ** Foundation and appearing in the file LICENSE.GPL included in the
34 ** packaging of this file.  Please review the following information to
35 ** ensure the GNU General Public License version 3.0 requirements will be
36 ** met: http://www.gnu.org/copyleft/gpl.html.
37 **
38 ** $QT_END_LICENSE$
39 **
40 ****************************************************************************/
41 
42 #ifndef GLEXTENSIONS_H
43 #define GLEXTENSIONS_H
44 
45 #include <QtOpenGL>
46 
47 /*
48 Functions resolved:
49 
50 glGenFramebuffersEXT
51 glGenRenderbuffersEXT
52 glBindRenderbufferEXT
53 glRenderbufferStorageEXT
54 glDeleteFramebuffersEXT
55 glDeleteRenderbuffersEXT
56 glBindFramebufferEXT
57 glFramebufferTexture2DEXT
58 glFramebufferRenderbufferEXT
59 glCheckFramebufferStatusEXT
60 
61 glActiveTexture
62 glTexImage3D
63 
64 glGenBuffers
65 glBindBuffer
66 glBufferData
67 glDeleteBuffers
68 glMapBuffer
69 glUnmapBuffer
70 */
71 
72 #ifndef Q_WS_MAC
73 # ifndef APIENTRYP
74 #   ifdef APIENTRY
75 #     define APIENTRYP APIENTRY *
76 #   else
77 #     define APIENTRY
78 #     define APIENTRYP *
79 #   endif
80 # endif
81 #else
82 # define APIENTRY
83 # define APIENTRYP *
84 #endif
85 
86 #ifndef GL_VERSION_1_2
87 #define GL_TEXTURE_3D 0x806F
88 #define GL_TEXTURE_WRAP_R 0x8072
89 #define GL_CLAMP_TO_EDGE 0x812F
90 #define GL_BGRA 0x80E1
91 #endif
92 
93 #ifndef GL_VERSION_1_3
94 #define GL_TEXTURE0 0x84C0
95 #define GL_TEXTURE1 0x84C1
96 #define GL_TEXTURE2 0x84C2
97 #define GL_TEXTURE_CUBE_MAP 0x8513
98 #define GL_TEXTURE_CUBE_MAP_POSITIVE_X 0x8515
99 //#define GL_TEXTURE_CUBE_MAP_NEGATIVE_X 0x8516
100 //#define GL_TEXTURE_CUBE_MAP_POSITIVE_Y 0x8517
101 //#define GL_TEXTURE_CUBE_MAP_NEGATIVE_Y 0x8518
102 //#define GL_TEXTURE_CUBE_MAP_POSITIVE_Z 0x8519
103 //#define GL_TEXTURE_CUBE_MAP_NEGATIVE_Z 0x851A
104 #endif
105 
106 #ifndef GL_ARB_vertex_buffer_object
107 typedef ptrdiff_t GLsizeiptrARB;
108 #endif
109 
110 #ifndef GL_VERSION_1_5
111 #define GL_ARRAY_BUFFER 0x8892
112 #define GL_ELEMENT_ARRAY_BUFFER 0x8893
113 #define GL_READ_WRITE 0x88BA
114 #define GL_STATIC_DRAW 0x88E4
115 #endif
116 
117 #ifndef GL_EXT_framebuffer_object
118 #define GL_RENDERBUFFER_EXT 0x8D41
119 #define GL_FRAMEBUFFER_EXT 0x8D40
120 #define GL_FRAMEBUFFER_COMPLETE_EXT 0x8CD5
121 #define GL_COLOR_ATTACHMENT0_EXT 0x8CE0
122 #define GL_DEPTH_ATTACHMENT_EXT 0x8D00
123 #endif
124 
125 typedef void (APIENTRY *_glGenFramebuffersEXT) (GLsizei, GLuint *);
126 typedef void (APIENTRY *_glGenRenderbuffersEXT) (GLsizei, GLuint *);
127 typedef void (APIENTRY *_glBindRenderbufferEXT) (GLenum, GLuint);
128 typedef void (APIENTRY *_glRenderbufferStorageEXT) (GLenum, GLenum, GLsizei, GLsizei);
129 typedef void (APIENTRY *_glDeleteFramebuffersEXT) (GLsizei, const GLuint*);
130 typedef void (APIENTRY *_glDeleteRenderbuffersEXT) (GLsizei, const GLuint*);
131 typedef void (APIENTRY *_glBindFramebufferEXT) (GLenum, GLuint);
132 typedef void (APIENTRY *_glFramebufferTexture2DEXT) (GLenum, GLenum, GLenum, GLuint, GLint);
133 typedef void (APIENTRY *_glFramebufferRenderbufferEXT) (GLenum, GLenum, GLenum, GLuint);
134 typedef GLenum (APIENTRY *_glCheckFramebufferStatusEXT) (GLenum);
135 
136 typedef void (APIENTRY *_glActiveTexture) (GLenum);
137 typedef void (APIENTRY *_glTexImage3D) (GLenum, GLint, GLenum, GLsizei, GLsizei, GLsizei, GLint, GLenum, GLenum, const GLvoid *);
138 
139 typedef void (APIENTRY *_glGenBuffers) (GLsizei, GLuint *);
140 typedef void (APIENTRY *_glBindBuffer) (GLenum, GLuint);
141 typedef void (APIENTRY *_glBufferData) (GLenum, GLsizeiptrARB, const GLvoid *, GLenum);
142 typedef void (APIENTRY *_glDeleteBuffers) (GLsizei, const GLuint *);
143 typedef void *(APIENTRY *_glMapBuffer) (GLenum, GLenum);
144 typedef GLboolean (APIENTRY *_glUnmapBuffer) (GLenum);
145 
146 struct GLExtensionFunctions
147 {
148 	bool resolve(const QGLContext *context);
149 
150     bool fboSupported();
151     bool openGL15Supported(); // the rest: multi-texture, 3D-texture, vertex buffer objects
152 
153 	_glGenFramebuffersEXT GenFramebuffersEXT;
154 	_glGenRenderbuffersEXT GenRenderbuffersEXT;
155 	_glBindRenderbufferEXT BindRenderbufferEXT;
156 	_glRenderbufferStorageEXT RenderbufferStorageEXT;
157 	_glDeleteFramebuffersEXT DeleteFramebuffersEXT;
158 	_glDeleteRenderbuffersEXT DeleteRenderbuffersEXT;
159 	_glBindFramebufferEXT BindFramebufferEXT;
160 	_glFramebufferTexture2DEXT FramebufferTexture2DEXT;
161 	_glFramebufferRenderbufferEXT FramebufferRenderbufferEXT;
162 	_glCheckFramebufferStatusEXT CheckFramebufferStatusEXT;
163 
164 	_glActiveTexture ActiveTexture;
165 	_glTexImage3D TexImage3D;
166 
167 	_glGenBuffers GenBuffers;
168 	_glBindBuffer BindBuffer;
169 	_glBufferData BufferData;
170 	_glDeleteBuffers DeleteBuffers;
171 	_glMapBuffer MapBuffer;
172 	_glUnmapBuffer UnmapBuffer;
173 };
174 
getGLExtensionFunctions()175 inline GLExtensionFunctions &getGLExtensionFunctions()
176 {
177 	static GLExtensionFunctions funcs;
178 	return funcs;
179 }
180 
181 #define glGenFramebuffersEXT getGLExtensionFunctions().GenFramebuffersEXT
182 #define glGenRenderbuffersEXT getGLExtensionFunctions().GenRenderbuffersEXT
183 #define glBindRenderbufferEXT getGLExtensionFunctions().BindRenderbufferEXT
184 #define glRenderbufferStorageEXT getGLExtensionFunctions().RenderbufferStorageEXT
185 #define glDeleteFramebuffersEXT getGLExtensionFunctions().DeleteFramebuffersEXT
186 #define glDeleteRenderbuffersEXT getGLExtensionFunctions().DeleteRenderbuffersEXT
187 #define glBindFramebufferEXT getGLExtensionFunctions().BindFramebufferEXT
188 #define glFramebufferTexture2DEXT getGLExtensionFunctions().FramebufferTexture2DEXT
189 #define glFramebufferRenderbufferEXT getGLExtensionFunctions().FramebufferRenderbufferEXT
190 #define glCheckFramebufferStatusEXT getGLExtensionFunctions().CheckFramebufferStatusEXT
191 
192 #define glActiveTexture getGLExtensionFunctions().ActiveTexture
193 #define glTexImage3D getGLExtensionFunctions().TexImage3D
194 
195 #define glGenBuffers getGLExtensionFunctions().GenBuffers
196 #define glBindBuffer getGLExtensionFunctions().BindBuffer
197 #define glBufferData getGLExtensionFunctions().BufferData
198 #define glDeleteBuffers getGLExtensionFunctions().DeleteBuffers
199 #define glMapBuffer getGLExtensionFunctions().MapBuffer
200 #define glUnmapBuffer getGLExtensionFunctions().UnmapBuffer
201 
202 #endif
203