1 | /******************************************************************** |
2 | KWin - the KDE window manager |
3 | This file is part of the KDE project. |
4 | |
5 | Copyright (C) 2007 Rivo Laks <rivolaks@hot.ee> |
6 | |
7 | This program is free software; you can redistribute it and/or modify |
8 | it under the terms of the GNU General Public License as published by |
9 | the Free Software Foundation; either version 2 of the License, or |
10 | (at your option) any later version. |
11 | |
12 | This program is distributed in the hope that it will be useful, |
13 | but WITHOUT ANY WARRANTY; without even the implied warranty of |
14 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
15 | GNU General Public License for more details. |
16 | |
17 | You should have received a copy of the GNU General Public License |
18 | along with this program. If not, see <http://www.gnu.org/licenses/>. |
19 | *********************************************************************/ |
20 | |
21 | #ifndef KWIN_GLUTILS_FUNCS_H |
22 | #define KWIN_GLUTILS_FUNCS_H |
23 | |
24 | #include <kdemacros.h> |
25 | #include <kwinconfig.h> |
26 | #include <kwinglobals.h> |
27 | |
28 | #define KWIN_EXPORT KDE_EXPORT |
29 | |
30 | // common functionality |
31 | namespace KWin { |
32 | |
33 | void KWIN_EXPORT glResolveFunctions(OpenGLPlatformInterface platformInterface); |
34 | |
35 | } |
36 | |
37 | #define GL_QUADS_KWIN 0x0007 |
38 | |
39 | #ifndef KWIN_HAVE_OPENGLES |
40 | |
41 | #include <GL/gl.h> |
42 | #include <GL/glx.h> |
43 | |
44 | #ifndef GL_FRAMEBUFFER_INCOMPLETE_MULTISAMPLE_EXT |
45 | #define GL_FRAMEBUFFER_INCOMPLETE_MULTISAMPLE_EXT 0x8D56 |
46 | #endif |
47 | |
48 | #ifndef GL_FRAMEBUFFER |
49 | #define GL_FRAMEBUFFER GL_FRAMEBUFFER_EXT |
50 | #endif |
51 | |
52 | #ifndef GL_FRAMEBUFFER_INCOMPLETE_ATTACHMENT |
53 | #define GL_FRAMEBUFFER_INCOMPLETE_ATTACHMENT GL_FRAMEBUFFER_INCOMPLETE_ATTACHMENT_EXT |
54 | #endif |
55 | |
56 | #ifndef GL_FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT |
57 | #define GL_FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT GL_FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT_EXT |
58 | #endif |
59 | |
60 | #ifndef GL_FRAMEBUFFER_UNSUPPORTED |
61 | #define GL_FRAMEBUFFER_UNSUPPORTED GL_FRAMEBUFFER_UNSUPPORTED_EXT |
62 | #endif |
63 | |
64 | #ifndef GL_COLOR_ATTACHMENT0 |
65 | #define GL_COLOR_ATTACHMENT0 GL_COLOR_ATTACHMENT0_EXT |
66 | #endif |
67 | |
68 | #ifndef GL_FRAMEBUFFER_COMPLETE |
69 | #define GL_FRAMEBUFFER_COMPLETE GL_FRAMEBUFFER_COMPLETE_EXT |
70 | #endif |
71 | |
72 | #ifndef GL_DRAW_FRAMEBUFFER |
73 | #define GL_DRAW_FRAMEBUFFER 0x8CA9 |
74 | #endif |
75 | |
76 | #ifndef GL_READ_FRAMEBUFFER |
77 | #define GL_READ_FRAMEBUFFER 0x8CA8 |
78 | #endif |
79 | |
80 | #ifndef GLX_BACK_BUFFER_AGE_EXT |
81 | #define GLX_BACK_BUFFER_AGE_EXT 0x20F4 |
82 | #endif |
83 | |
84 | #include <fixx11h.h> |
85 | |
86 | namespace KWin |
87 | { |
88 | |
89 | void KWIN_EXPORT glxResolveFunctions(); |
90 | |
91 | |
92 | // Defines |
93 | /* |
94 | ** GLX_EXT_texture_from_pixmap |
95 | */ |
96 | #define GLX_BIND_TO_TEXTURE_RGB_EXT 0x20D0 |
97 | #define GLX_BIND_TO_TEXTURE_RGBA_EXT 0x20D1 |
98 | #define GLX_BIND_TO_MIPMAP_TEXTURE_EXT 0x20D2 |
99 | #define GLX_BIND_TO_TEXTURE_TARGETS_EXT 0x20D3 |
100 | #define GLX_Y_INVERTED_EXT 0x20D4 |
101 | |
102 | #define GLX_TEXTURE_FORMAT_EXT 0x20D5 |
103 | #define GLX_TEXTURE_TARGET_EXT 0x20D6 |
104 | #define GLX_MIPMAP_TEXTURE_EXT 0x20D7 |
105 | |
106 | #define GLX_TEXTURE_FORMAT_NONE_EXT 0x20D8 |
107 | #define GLX_TEXTURE_FORMAT_RGB_EXT 0x20D9 |
108 | #define GLX_TEXTURE_FORMAT_RGBA_EXT 0x20DA |
109 | |
110 | #define GLX_TEXTURE_1D_BIT_EXT 0x00000001 |
111 | #define GLX_TEXTURE_2D_BIT_EXT 0x00000002 |
112 | #define GLX_TEXTURE_RECTANGLE_BIT_EXT 0x00000004 |
113 | |
114 | #define GLX_TEXTURE_1D_EXT 0x20DB |
115 | #define GLX_TEXTURE_2D_EXT 0x20DC |
116 | #define GLX_TEXTURE_RECTANGLE_EXT 0x20DD |
117 | |
118 | #define GLX_FRONT_LEFT_EXT 0x20DE |
119 | |
120 | // Shader stuff |
121 | #define GL_COMPILE_STATUS 0x8B81 |
122 | #define GL_LINK_STATUS 0x8B82 |
123 | #define GL_INFO_LOG_LENGTH 0x8B84 |
124 | #define GL_FRAGMENT_SHADER 0x8B30 |
125 | #define GL_VERTEX_SHADER 0x8B31 |
126 | |
127 | // FBO |
128 | #define GL_FRAMEBUFFER_EXT 0x8D40 |
129 | #define GL_RENDERBUFFER_EXT 0x8D41 |
130 | #define GL_STENCIL_INDEX1_EXT 0x8D46 |
131 | #define GL_STENCIL_INDEX4_EXT 0x8D47 |
132 | #define GL_STENCIL_INDEX8_EXT 0x8D48 |
133 | #define GL_STENCIL_INDEX16_EXT 0x8D49 |
134 | #define GL_RENDERBUFFER_WIDTH_EXT 0x8D42 |
135 | #define GL_RENDERBUFFER_HEIGHT_EXT 0x8D43 |
136 | #define GL_RENDERBUFFER_INTERNAL_FORMAT_EXT 0x8D44 |
137 | #define GL_RENDERBUFFER_RED_SIZE_EXT 0x8D50 |
138 | #define GL_RENDERBUFFER_GREEN_SIZE_EXT 0x8D51 |
139 | #define GL_RENDERBUFFER_BLUE_SIZE_EXT 0x8D52 |
140 | #define GL_RENDERBUFFER_ALPHA_SIZE_EXT 0x8D53 |
141 | #define GL_RENDERBUFFER_DEPTH_SIZE_EXT 0x8D54 |
142 | #define GL_RENDERBUFFER_STENCIL_SIZE_EXT 0x8D55 |
143 | #define GL_FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE_EXT 0x8CD0 |
144 | #define GL_FRAMEBUFFER_ATTACHMENT_OBJECT_NAME_EXT 0x8CD1 |
145 | #define GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_LEVEL_EXT 0x8CD2 |
146 | #define GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_CUBE_MAP_FACE_EXT 0x8CD3 |
147 | #define GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_3D_ZOFFSET_EXT 0x8CD4 |
148 | #define GL_COLOR_ATTACHMENT0_EXT 0x8CE0 |
149 | #define GL_COLOR_ATTACHMENT1_EXT 0x8CE1 |
150 | #define GL_COLOR_ATTACHMENT2_EXT 0x8CE2 |
151 | #define GL_COLOR_ATTACHMENT3_EXT 0x8CE3 |
152 | #define GL_COLOR_ATTACHMENT4_EXT 0x8CE4 |
153 | #define GL_COLOR_ATTACHMENT5_EXT 0x8CE5 |
154 | #define GL_COLOR_ATTACHMENT6_EXT 0x8CE6 |
155 | #define GL_COLOR_ATTACHMENT7_EXT 0x8CE7 |
156 | #define GL_COLOR_ATTACHMENT8_EXT 0x8CE8 |
157 | #define GL_COLOR_ATTACHMENT9_EXT 0x8CE9 |
158 | #define GL_COLOR_ATTACHMENT10_EXT 0x8CEA |
159 | #define GL_COLOR_ATTACHMENT11_EXT 0x8CEB |
160 | #define GL_COLOR_ATTACHMENT12_EXT 0x8CEC |
161 | #define GL_COLOR_ATTACHMENT13_EXT 0x8CED |
162 | #define GL_COLOR_ATTACHMENT14_EXT 0x8CEE |
163 | #define GL_COLOR_ATTACHMENT15_EXT 0x8CEF |
164 | #define GL_DEPTH_ATTACHMENT_EXT 0x8D00 |
165 | #define GL_STENCIL_ATTACHMENT_EXT 0x8D20 |
166 | #define GL_FRAMEBUFFER_COMPLETE_EXT 0x8CD5 |
167 | #define GL_FRAMEBUFFER_INCOMPLETE_ATTACHMENT_EXT 0x8CD6 |
168 | #define GL_FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT_EXT 0x8CD7 |
169 | #define GL_FRAMEBUFFER_INCOMPLETE_DIMENSIONS_EXT 0x8CD9 |
170 | #define GL_FRAMEBUFFER_INCOMPLETE_FORMATS_EXT 0x8CDA |
171 | #define GL_FRAMEBUFFER_INCOMPLETE_DRAW_BUFFER_EXT 0x8CDB |
172 | #define GL_FRAMEBUFFER_INCOMPLETE_READ_BUFFER_EXT 0x8CDC |
173 | #define GL_FRAMEBUFFER_UNSUPPORTED_EXT 0x8CDD |
174 | #define GL_FRAMEBUFFER_BINDING_EXT 0x8CA6 |
175 | #define GL_RENDERBUFFER_BINDING_EXT 0x8CA7 |
176 | #define GL_MAX_COLOR_ATTACHMENTS_EXT 0x8CDF |
177 | #define GL_MAX_RENDERBUFFER_SIZE_EXT 0x84E8 |
178 | #define GL_INVALID_FRAMEBUFFER_OPERATION_EXT 0x0506 |
179 | |
180 | |
181 | #define GL_TEXTURE_RECTANGLE_ARB 0x84F5 |
182 | |
183 | |
184 | // GLX typedefs |
185 | typedef struct __GLXcontextRec *GLXContext; |
186 | /* GLX 1.3 and later */ |
187 | typedef struct __GLXFBConfigRec *GLXFBConfig; |
188 | |
189 | // GL typedefs |
190 | typedef char GLchar; |
191 | |
192 | // Function pointers |
193 | // finding of OpenGL extensions functions |
194 | typedef void (*glXFuncPtr)(); |
195 | typedef glXFuncPtr(*glXGetProcAddress_func)(const GLubyte*); |
196 | extern KWIN_EXPORT glXGetProcAddress_func glXGetProcAddress; |
197 | // glXQueryDrawable (added in GLX 1.3) |
198 | typedef void (*glXQueryDrawable_func)(Display* dpy, GLXDrawable drawable, |
199 | int attribute, unsigned int *value); |
200 | extern KWIN_EXPORT glXQueryDrawable_func glXQueryDrawable; |
201 | // texture_from_pixmap extension functions |
202 | typedef void (*glXBindTexImageEXT_func)(Display* dpy, GLXDrawable drawable, |
203 | int buffer, const int* attrib_list); |
204 | typedef void (*glXReleaseTexImageEXT_func)(Display* dpy, GLXDrawable drawable, int buffer); |
205 | extern KWIN_EXPORT glXReleaseTexImageEXT_func glXReleaseTexImageEXT; |
206 | extern KWIN_EXPORT glXBindTexImageEXT_func glXBindTexImageEXT; |
207 | // glXCopySubBufferMESA |
208 | typedef void (*glXCopySubBuffer_func)(Display* , GLXDrawable, int, int, int, int); |
209 | extern KWIN_EXPORT glXCopySubBuffer_func glXCopySubBuffer; |
210 | // video_sync extension functions |
211 | typedef int (*glXGetVideoSync_func)(unsigned int *count); |
212 | typedef int (*glXWaitVideoSync_func)(int divisor, int remainder, unsigned int *count); |
213 | typedef int (*glXSwapIntervalMESA_func)(unsigned int interval); |
214 | typedef void (*glXSwapIntervalEXT_func)(Display *dpy, GLXDrawable drawable, int interval); |
215 | typedef int (*glXSwapIntervalSGI_func)(int interval); |
216 | extern KWIN_EXPORT glXGetVideoSync_func glXGetVideoSync; |
217 | extern KWIN_EXPORT glXWaitVideoSync_func glXWaitVideoSync; |
218 | extern KWIN_EXPORT glXSwapIntervalMESA_func glXSwapIntervalMESA; |
219 | extern KWIN_EXPORT glXSwapIntervalEXT_func glXSwapIntervalEXT; |
220 | extern KWIN_EXPORT glXSwapIntervalSGI_func glXSwapIntervalSGI; |
221 | |
222 | // GLX_ARB_create_context |
223 | typedef GLXContext (*glXCreateContextAttribsARB_func)(Display *dpy, GLXFBConfig config, |
224 | GLXContext share_context, Bool direct, |
225 | const int *attrib_list); |
226 | |
227 | extern KWIN_EXPORT glXCreateContextAttribsARB_func glXCreateContextAttribsARB; |
228 | |
229 | // glActiveTexture |
230 | typedef void (*glActiveTexture_func)(GLenum); |
231 | extern KWIN_EXPORT glActiveTexture_func glActiveTexture; |
232 | // framebuffer_object extension functions |
233 | typedef GLboolean(*glIsRenderbuffer_func)(GLuint renderbuffer); |
234 | typedef void (*glBindRenderbuffer_func)(GLenum target, GLuint renderbuffer); |
235 | typedef void (*glDeleteRenderbuffers_func)(GLsizei n, const GLuint *renderbuffers); |
236 | typedef void (*glGenRenderbuffers_func)(GLsizei n, GLuint *renderbuffers); |
237 | typedef void (*glRenderbufferStorage_func)(GLenum target, GLenum internalformat, GLsizei width, GLsizei height); |
238 | typedef void (*glGetRenderbufferParameteriv_func)(GLenum target, GLenum pname, GLint *params); |
239 | typedef GLboolean(*glIsFramebuffer_func)(GLuint framebuffer); |
240 | typedef void (*glBindFramebuffer_func)(GLenum target, GLuint framebuffer); |
241 | typedef void (*glDeleteFramebuffers_func)(GLsizei n, const GLuint *framebuffers); |
242 | typedef void (*glGenFramebuffers_func)(GLsizei n, GLuint *framebuffers); |
243 | typedef GLenum(*glCheckFramebufferStatus_func)(GLenum target); |
244 | typedef void (*glFramebufferTexture1D_func)(GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level); |
245 | typedef void (*glFramebufferTexture2D_func)(GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level); |
246 | typedef void (*glFramebufferTexture3D_func)(GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level, GLint zoffset); |
247 | typedef void (*glFramebufferRenderbuffer_func)(GLenum target, GLenum attachment, GLenum renderbuffertarget, GLuint renderbuffer); |
248 | typedef void (*glGetFramebufferAttachmentParameteriv_func)(GLenum target, GLenum attachment, GLenum pname, GLint *params); |
249 | typedef void (*glGenerateMipmap_func)(GLenum target); |
250 | typedef void (*glBlitFramebuffer_func)(GLint srcX0, GLint srcY0, GLint srcX1, GLint srcY1, GLint dstX0, GLint dstY0, GLint dstX1, GLint dstY1, GLbitfield mask, GLenum filter); |
251 | extern KWIN_EXPORT glIsRenderbuffer_func glIsRenderbuffer; |
252 | extern KWIN_EXPORT glBindRenderbuffer_func glBindRenderbuffer; |
253 | extern KWIN_EXPORT glDeleteRenderbuffers_func glDeleteRenderbuffers; |
254 | extern KWIN_EXPORT glGenRenderbuffers_func glGenRenderbuffers; |
255 | extern KWIN_EXPORT glRenderbufferStorage_func glRenderbufferStorage; |
256 | extern KWIN_EXPORT glGetRenderbufferParameteriv_func glGetRenderbufferParameteriv; |
257 | extern KWIN_EXPORT glIsFramebuffer_func glIsFramebuffer; |
258 | extern KWIN_EXPORT glBindFramebuffer_func glBindFramebuffer; |
259 | extern KWIN_EXPORT glDeleteFramebuffers_func glDeleteFramebuffers; |
260 | extern KWIN_EXPORT glGenFramebuffers_func glGenFramebuffers; |
261 | extern KWIN_EXPORT glCheckFramebufferStatus_func glCheckFramebufferStatus; |
262 | extern KWIN_EXPORT glFramebufferTexture1D_func glFramebufferTexture1D; |
263 | extern KWIN_EXPORT glFramebufferTexture2D_func glFramebufferTexture2D; |
264 | extern KWIN_EXPORT glFramebufferTexture3D_func glFramebufferTexture3D; |
265 | extern KWIN_EXPORT glFramebufferRenderbuffer_func glFramebufferRenderbuffer; |
266 | extern KWIN_EXPORT glGetFramebufferAttachmentParameteriv_func glGetFramebufferAttachmentParameteriv; |
267 | extern KWIN_EXPORT glGenerateMipmap_func glGenerateMipmap; |
268 | extern KWIN_EXPORT glBlitFramebuffer_func glBlitFramebuffer; |
269 | // Shader stuff |
270 | typedef GLuint(*glCreateShader_func)(GLenum); |
271 | typedef GLvoid(*glShaderSource_func)(GLuint, GLsizei, const GLchar**, const GLint*); |
272 | typedef GLvoid(*glCompileShader_func)(GLuint); |
273 | typedef GLvoid(*glDeleteShader_func)(GLuint); |
274 | typedef GLuint(*glCreateProgram_func)(); |
275 | typedef GLvoid(*glAttachShader_func)(GLuint, GLuint); |
276 | typedef GLvoid(*glLinkProgram_func)(GLuint); |
277 | typedef GLvoid(*glUseProgram_func)(GLuint); |
278 | typedef GLvoid(*glDeleteProgram_func)(GLuint); |
279 | typedef GLvoid(*glGetShaderInfoLog_func)(GLuint, GLsizei, GLsizei*, GLchar*); |
280 | typedef GLvoid(*glGetProgramInfoLog_func)(GLuint, GLsizei, GLsizei*, GLchar*); |
281 | typedef GLvoid(*glGetProgramiv_func)(GLuint, GLenum, GLint*); |
282 | typedef GLvoid(*glGetShaderiv_func)(GLuint, GLenum, GLint*); |
283 | typedef GLvoid(*glUniform1f_func)(GLint, GLfloat); |
284 | typedef GLvoid(*glUniform2f_func)(GLint, GLfloat, GLfloat); |
285 | typedef GLvoid(*glUniform3f_func)(GLint, GLfloat, GLfloat, GLfloat); |
286 | typedef GLvoid(*glUniform4f_func)(GLint, GLfloat, GLfloat, GLfloat, GLfloat); |
287 | typedef GLvoid(*glUniformf_func)(GLint, GLfloat); |
288 | typedef GLvoid(*glUniform1i_func)(GLint, GLint); |
289 | typedef GLvoid(*glUniform1fv_func)(GLint, GLsizei, const GLfloat*); |
290 | typedef GLvoid(*glUniform2fv_func)(GLint, GLsizei, const GLfloat*); |
291 | typedef GLvoid(*glUniform3fv_func)(GLint, GLsizei, const GLfloat*); |
292 | typedef GLvoid(*glUniform4fv_func)(GLint, GLsizei, const GLfloat*); |
293 | typedef GLvoid(*glUniformMatrix4fv_func)(GLint, GLsizei, GLboolean, const GLfloat*); |
294 | typedef GLvoid(*glGetUniformfv_func)(GLuint, GLint, GLfloat*); |
295 | typedef GLvoid(*glValidateProgram_func)(GLuint); |
296 | typedef GLint(*glGetUniformLocation_func)(GLuint, const GLchar*); |
297 | typedef GLvoid(*glVertexAttrib1f_func)(GLuint, GLfloat); |
298 | typedef GLint(*glGetAttribLocation_func)(GLuint, const GLchar*); |
299 | typedef GLvoid(*glBindAttribLocation_func)(GLuint, GLuint, const GLchar*); |
300 | typedef void (*glGenProgramsARB_func)(GLsizei, GLuint*); |
301 | typedef void (*glBindProgramARB_func)(GLenum, GLuint); |
302 | typedef void (*glProgramStringARB_func)(GLenum, GLenum, GLsizei, const GLvoid*); |
303 | typedef void (*glProgramLocalParameter4fARB_func)(GLenum, GLuint, GLfloat, GLfloat, GLfloat, GLfloat); |
304 | typedef void (*glDeleteProgramsARB_func)(GLsizei, const GLuint*); |
305 | typedef void (*glGetProgramivARB_func)(GLenum, GLenum, GLint*); |
306 | extern KWIN_EXPORT glCreateShader_func glCreateShader; |
307 | extern KWIN_EXPORT glShaderSource_func glShaderSource; |
308 | extern KWIN_EXPORT glCompileShader_func glCompileShader; |
309 | extern KWIN_EXPORT glDeleteShader_func glDeleteShader; |
310 | extern KWIN_EXPORT glCreateProgram_func glCreateProgram; |
311 | extern KWIN_EXPORT glAttachShader_func glAttachShader; |
312 | extern KWIN_EXPORT glLinkProgram_func glLinkProgram; |
313 | extern KWIN_EXPORT glUseProgram_func glUseProgram; |
314 | extern KWIN_EXPORT glDeleteProgram_func glDeleteProgram; |
315 | extern KWIN_EXPORT glGetShaderInfoLog_func glGetShaderInfoLog; |
316 | extern KWIN_EXPORT glGetProgramInfoLog_func glGetProgramInfoLog; |
317 | extern KWIN_EXPORT glGetProgramiv_func glGetProgramiv; |
318 | extern KWIN_EXPORT glGetShaderiv_func glGetShaderiv; |
319 | extern KWIN_EXPORT glUniform1f_func glUniform1f; |
320 | extern KWIN_EXPORT glUniform2f_func glUniform2f; |
321 | extern KWIN_EXPORT glUniform3f_func glUniform3f; |
322 | extern KWIN_EXPORT glUniform4f_func glUniform4f; |
323 | extern KWIN_EXPORT glUniform1i_func glUniform1i; |
324 | extern KWIN_EXPORT glUniform1fv_func glUniform1fv; |
325 | extern KWIN_EXPORT glUniform2fv_func glUniform2fv; |
326 | extern KWIN_EXPORT glUniform3fv_func glUniform3fv; |
327 | extern KWIN_EXPORT glUniform4fv_func glUniform4fv; |
328 | extern KWIN_EXPORT glGetUniformfv_func glGetUniformfv; |
329 | extern KWIN_EXPORT glUniformMatrix4fv_func glUniformMatrix4fv; |
330 | extern KWIN_EXPORT glValidateProgram_func glValidateProgram; |
331 | extern KWIN_EXPORT glGetUniformLocation_func glGetUniformLocation; |
332 | extern KWIN_EXPORT glVertexAttrib1f_func glVertexAttrib1f; |
333 | extern KWIN_EXPORT glGetAttribLocation_func glGetAttribLocation; |
334 | extern KWIN_EXPORT glBindAttribLocation_func glBindAttribLocation; |
335 | extern KWIN_EXPORT glGenProgramsARB_func glGenProgramsARB; |
336 | extern KWIN_EXPORT glBindProgramARB_func glBindProgramARB; |
337 | extern KWIN_EXPORT glProgramStringARB_func glProgramStringARB; |
338 | extern KWIN_EXPORT glProgramLocalParameter4fARB_func glProgramLocalParameter4fARB; |
339 | extern KWIN_EXPORT glDeleteProgramsARB_func glDeleteProgramsARB; |
340 | extern KWIN_EXPORT glGetProgramivARB_func glGetProgramivARB; |
341 | // vertex buffer objects |
342 | typedef void (*glGenBuffers_func)(GLsizei, GLuint*); |
343 | extern KWIN_EXPORT glGenBuffers_func glGenBuffers; |
344 | typedef void (*glDeleteBuffers_func)(GLsizei n, const GLuint*); |
345 | extern KWIN_EXPORT glDeleteBuffers_func glDeleteBuffers; |
346 | typedef void (*glBindBuffer_func)(GLenum, GLuint); |
347 | extern KWIN_EXPORT glBindBuffer_func glBindBuffer; |
348 | typedef void (*glBufferData_func)(GLenum, GLsizeiptr, const GLvoid*, GLenum); |
349 | extern KWIN_EXPORT glBufferData_func glBufferData; |
350 | typedef void (*glBufferSubData_func)(GLenum target, GLintptr offset, GLsizeiptr size, const GLvoid *data); |
351 | extern KWIN_EXPORT glBufferSubData_func glBufferSubData; |
352 | typedef void (*glGetBufferSubData_func)(GLenum target, GLintptr offset, GLsizeiptr size, GLvoid *data); |
353 | extern KWIN_EXPORT glGetBufferSubData_func glGetBufferSubData; |
354 | typedef void (*glEnableVertexAttribArray_func)(GLuint); |
355 | extern KWIN_EXPORT glEnableVertexAttribArray_func glEnableVertexAttribArray; |
356 | typedef void (*glDisableVertexAttribArray_func)(GLuint); |
357 | extern KWIN_EXPORT glDisableVertexAttribArray_func glDisableVertexAttribArray; |
358 | typedef void (*glVertexAttribPointer_func)(GLuint, GLint, GLenum, GLboolean, GLsizei, const GLvoid*); |
359 | extern KWIN_EXPORT glVertexAttribPointer_func glVertexAttribPointer; |
360 | typedef GLvoid *(*glMapBuffer_func)(GLenum target, GLenum access); |
361 | extern KWIN_EXPORT glMapBuffer_func glMapBuffer; |
362 | typedef GLboolean (*glUnmapBuffer_func)(GLenum target); |
363 | extern KWIN_EXPORT glUnmapBuffer_func glUnmapBuffer; |
364 | |
365 | // GL_ARB_vertex_array_object |
366 | typedef void (*glBindVertexArray_func)(GLuint array); |
367 | typedef void (*glDeleteVertexArrays_func)(GLsizei n, const GLuint *arrays); |
368 | typedef void (*glGenVertexArrays_func)(GLsizei n, GLuint *arrays); |
369 | typedef GLboolean (*glIsVertexArray_func)(GLuint array); |
370 | |
371 | extern KWIN_EXPORT glBindVertexArray_func glBindVertexArray; |
372 | extern KWIN_EXPORT glDeleteVertexArrays_func glDeleteVertexArrays; |
373 | extern KWIN_EXPORT glGenVertexArrays_func glGenVertexArrays; |
374 | extern KWIN_EXPORT glIsVertexArray_func glIsVertexArray; |
375 | |
376 | // GL_EXT_gpu_shader4 / GL 3.0 |
377 | typedef void (*glVertexAttribI1i_func)(GLuint index, GLint x_func); |
378 | typedef void (*glVertexAttribI2i_func)(GLuint index, GLint x, GLint y_func); |
379 | typedef void (*glVertexAttribI3i_func)(GLuint index, GLint x, GLint y, GLint z_func); |
380 | typedef void (*glVertexAttribI4i_func)(GLuint index, GLint x, GLint y, GLint z, GLint w_func); |
381 | typedef void (*glVertexAttribI1ui_func)(GLuint index, GLuint x_func); |
382 | typedef void (*glVertexAttribI2ui_func)(GLuint index, GLuint x, GLuint y_func); |
383 | typedef void (*glVertexAttribI3ui_func)(GLuint index, GLuint x, GLuint y, GLuint z_func); |
384 | typedef void (*glVertexAttribI4ui_func)(GLuint index, GLuint x, GLuint y, GLuint z, GLuint w_func); |
385 | typedef void (*glVertexAttribI1iv_func)(GLuint index, const GLint *v_func); |
386 | typedef void (*glVertexAttribI2iv_func)(GLuint index, const GLint *v_func); |
387 | typedef void (*glVertexAttribI3iv_func)(GLuint index, const GLint *v_func); |
388 | typedef void (*glVertexAttribI4iv_func)(GLuint index, const GLint *v_func); |
389 | typedef void (*glVertexAttribI1uiv_func)(GLuint index, const GLuint *v_func); |
390 | typedef void (*glVertexAttribI2uiv_func)(GLuint index, const GLuint *v_func); |
391 | typedef void (*glVertexAttribI3uiv_func)(GLuint index, const GLuint *v_func); |
392 | typedef void (*glVertexAttribI4uiv_func)(GLuint index, const GLuint *v_func); |
393 | typedef void (*glVertexAttribI4bv_func)(GLuint index, const GLbyte *v_func); |
394 | typedef void (*glVertexAttribI4sv_func)(GLuint index, const GLshort *v_func); |
395 | typedef void (*glVertexAttribI4ubv_func)(GLuint index, const GLubyte *v_func); |
396 | typedef void (*glVertexAttribI4usv_func)(GLuint index, const GLushort *v_func); |
397 | typedef void (*glVertexAttribIPointer_func)(GLuint index, GLint size, GLenum type, GLsizei stride, const GLvoid *pointer_func); |
398 | typedef void (*glGetVertexAttribIiv_func)(GLuint index, GLenum pname, GLint *params_func); |
399 | typedef void (*glGetVertexAttribIuiv_func)(GLuint index, GLenum pname, GLuint *params_func); |
400 | typedef void (*glGetUniformuiv_func)(GLuint program, GLint location, GLuint *params); |
401 | typedef void (*glBindFragDataLocation_func)(GLuint program, GLuint color, const GLchar *name); |
402 | typedef GLint (*glGetFragDataLocation_func)(GLuint program, const GLchar *name); |
403 | typedef void (*glUniform1ui_func)(GLint location, GLuint v0); |
404 | typedef void (*glUniform2ui_func)(GLint location, GLuint v0, GLuint v1); |
405 | typedef void (*glUniform3ui_func)(GLint location, GLuint v0, GLuint v1, GLuint v2); |
406 | typedef void (*glUniform4ui_func)(GLint location, GLuint v0, GLuint v1, GLuint v2, GLuint v3); |
407 | typedef void (*glUniform1uiv_func)(GLint location, GLsizei count, const GLuint *value); |
408 | typedef void (*glUniform2uiv_func)(GLint location, GLsizei count, const GLuint *value); |
409 | typedef void (*glUniform3uiv_func)(GLint location, GLsizei count, const GLuint *value); |
410 | |
411 | extern KWIN_EXPORT glVertexAttribI1i_func glVertexAttribI1i; |
412 | extern KWIN_EXPORT glVertexAttribI2i_func glVertexAttribI2i; |
413 | extern KWIN_EXPORT glVertexAttribI3i_func glVertexAttribI3i; |
414 | extern KWIN_EXPORT glVertexAttribI4i_func glVertexAttribI4i; |
415 | extern KWIN_EXPORT glVertexAttribI1ui_func glVertexAttribI1ui; |
416 | extern KWIN_EXPORT glVertexAttribI2ui_func glVertexAttribI2ui; |
417 | extern KWIN_EXPORT glVertexAttribI3ui_func glVertexAttribI3ui; |
418 | extern KWIN_EXPORT glVertexAttribI4ui_func glVertexAttribI4ui; |
419 | extern KWIN_EXPORT glVertexAttribI1iv_func glVertexAttribI1iv; |
420 | extern KWIN_EXPORT glVertexAttribI2iv_func glVertexAttribI2iv; |
421 | extern KWIN_EXPORT glVertexAttribI3iv_func glVertexAttribI3iv; |
422 | extern KWIN_EXPORT glVertexAttribI4iv_func glVertexAttribI4iv; |
423 | extern KWIN_EXPORT glVertexAttribI1uiv_func glVertexAttribI1uiv; |
424 | extern KWIN_EXPORT glVertexAttribI2uiv_func glVertexAttribI2uiv; |
425 | extern KWIN_EXPORT glVertexAttribI3uiv_func glVertexAttribI3uiv; |
426 | extern KWIN_EXPORT glVertexAttribI4uiv_func glVertexAttribI4uiv; |
427 | extern KWIN_EXPORT glVertexAttribI4bv_func glVertexAttribI4bv; |
428 | extern KWIN_EXPORT glVertexAttribI4sv_func glVertexAttribI4sv; |
429 | extern KWIN_EXPORT glVertexAttribI4ubv_func glVertexAttribI4ubv; |
430 | extern KWIN_EXPORT glVertexAttribI4usv_func glVertexAttribI4usv; |
431 | extern KWIN_EXPORT glVertexAttribIPointer_func glVertexAttribIPointer; |
432 | extern KWIN_EXPORT glGetVertexAttribIiv_func glGetVertexAttribIiv; |
433 | extern KWIN_EXPORT glGetVertexAttribIuiv_func glGetVertexAttribIuiv; |
434 | extern KWIN_EXPORT glGetUniformuiv_func glGetUniformuiv; |
435 | extern KWIN_EXPORT glBindFragDataLocation_func glBindFragDataLocation; |
436 | extern KWIN_EXPORT glGetFragDataLocation_func glGetFragDataLocation; |
437 | extern KWIN_EXPORT glUniform1ui_func glUniform1ui; |
438 | extern KWIN_EXPORT glUniform2ui_func glUniform2ui; |
439 | extern KWIN_EXPORT glUniform3ui_func glUniform3ui; |
440 | extern KWIN_EXPORT glUniform4ui_func glUniform4ui; |
441 | extern KWIN_EXPORT glUniform1uiv_func glUniform1uiv; |
442 | extern KWIN_EXPORT glUniform2uiv_func glUniform2uiv; |
443 | extern KWIN_EXPORT glUniform3uiv_func glUniform3uiv; |
444 | |
445 | // GL_ARB_map_buffer_range |
446 | typedef GLvoid* (*glMapBufferRange_func)(GLenum target, GLintptr offset, GLsizeiptr length, GLbitfield access); |
447 | typedef void (*glFlushMappedBufferRange_func)(GLenum target, GLintptr offset, GLsizeiptr length); |
448 | |
449 | extern KWIN_EXPORT glMapBufferRange_func glMapBufferRange; |
450 | extern KWIN_EXPORT glFlushMappedBufferRange_func glFlushMappedBufferRange; |
451 | |
452 | // GL_ARB_robustness |
453 | typedef GLenum (*glGetGraphicsResetStatus_func)(); |
454 | typedef void (*glReadnPixels_func)(GLint x, GLint y, GLsizei width, GLsizei height, GLenum format, GLenum type, GLsizei bufSize, GLvoid *data); |
455 | typedef void (*glGetnUniformfv_func)(GLuint program, GLint location, GLsizei bufSize, GLfloat *params); |
456 | |
457 | extern KWIN_EXPORT glGetGraphicsResetStatus_func glGetGraphicsResetStatus; |
458 | extern KWIN_EXPORT glReadnPixels_func glReadnPixels; |
459 | extern KWIN_EXPORT glGetnUniformfv_func glGetnUniformfv; |
460 | |
461 | // GL_ARB_draw_elements_base_vertex |
462 | typedef void (*glDrawElementsBaseVertex_func)(GLenum mode, GLsizei count, GLenum type, const GLvoid *indices, GLint basevertex); |
463 | typedef void (*glDrawElementsInstancedBaseVertex_func)(GLenum mode, GLsizei count, GLenum type, const GLvoid *indices, GLsizei instancecount, GLint basevertex); |
464 | |
465 | extern KWIN_EXPORT glDrawElementsBaseVertex_func glDrawElementsBaseVertex; |
466 | extern KWIN_EXPORT glDrawElementsInstancedBaseVertex_func glDrawElementsInstancedBaseVertex; |
467 | |
468 | // GL_ARB_copy_buffer |
469 | typedef void (*glCopyBufferSubData_func)(GLenum readTarget, GLenum writeTarget, GLintptr readOffset, |
470 | GLintptr writeOffset, GLsizeiptr size); |
471 | |
472 | extern KWIN_EXPORT glCopyBufferSubData_func glCopyBufferSubData; |
473 | |
474 | } // namespace |
475 | |
476 | #endif // not KWIN_HAVE_OPENGLES |
477 | |
478 | #ifdef KWIN_HAVE_EGL |
479 | #define EGL_EGLEXT_PROTOTYPES |
480 | #define GL_GLEXT_PROTOTYPES |
481 | |
482 | #ifdef KWIN_HAVE_OPENGLES |
483 | #include <GLES2/gl2.h> |
484 | #include <GLES2/gl2ext.h> |
485 | |
486 | // see http://www.khronos.org/registry/gles/extensions/EXT/EXT_robustness.txt |
487 | #ifndef GL_GUILTY_CONTEXT_RESET_EXT |
488 | #define GL_GUILTY_CONTEXT_RESET_EXT 0x8253 |
489 | #endif |
490 | |
491 | #ifndef GL_INNOCENT_CONTEXT_RESET_EXT |
492 | #define GL_INNOCENT_CONTEXT_RESET_EXT 0x8254 |
493 | #endif |
494 | |
495 | #ifndef GL_UNKNOWN_CONTEXT_RESET_EXT |
496 | #define GL_UNKNOWN_CONTEXT_RESET_EXT 0x8255 |
497 | #endif |
498 | |
499 | #endif |
500 | |
501 | #include <EGL/egl.h> |
502 | #include <EGL/eglext.h> |
503 | #include <fixx11h.h> |
504 | |
505 | #ifndef EGL_POST_SUB_BUFFER_SUPPORTED_NV |
506 | #define EGL_POST_SUB_BUFFER_SUPPORTED_NV 0x30BE |
507 | #endif |
508 | |
509 | #ifndef EGL_BUFFER_AGE_EXT |
510 | #define EGL_BUFFER_AGE_EXT 0x313D |
511 | #endif |
512 | |
513 | #ifndef GL_UNPACK_ROW_LENGTH |
514 | #define GL_UNPACK_ROW_LENGTH 0x0CF2 |
515 | #endif |
516 | |
517 | #ifndef GL_UNPACK_SKIP_ROWS |
518 | #define GL_UNPACK_SKIP_ROWS 0x0CF3 |
519 | #endif |
520 | |
521 | #ifndef GL_UNPACK_SKIP_PIXELS |
522 | #define GL_UNPACK_SKIP_PIXELS 0x0CF4 |
523 | #endif |
524 | |
525 | #ifndef EGL_KHR_create_context |
526 | #define EGL_CONTEXT_MAJOR_VERSION_KHR EGL_CONTEXT_CLIENT_VERSION |
527 | #define EGL_CONTEXT_MINOR_VERSION_KHR 0x30FB |
528 | #define EGL_CONTEXT_FLAGS_KHR 0x30FC |
529 | #define EGL_CONTEXT_OPENGL_PROFILE_MASK_KHR 0x30FD |
530 | #define EGL_CONTEXT_OPENGL_RESET_NOTIFICATION_STRATEGY_KHR 0x31BD |
531 | #define EGL_NO_RESET_NOTIFICATION_KHR 0x31BE |
532 | #define EGL_LOSE_CONTEXT_ON_RESET_KHR 0x31BF |
533 | #define EGL_CONTEXT_OPENGL_DEBUG_BIT_KHR 0x00000001 |
534 | #define EGL_CONTEXT_OPENGL_FORWARD_COMPATIBLE_BIT_KHR 0x00000002 |
535 | #define EGL_CONTEXT_OPENGL_ROBUST_ACCESS_BIT_KHR 0x00000004 |
536 | #define EGL_CONTEXT_OPENGL_CORE_PROFILE_BIT_KHR 0x00000001 |
537 | #define EGL_CONTEXT_OPENGL_COMPATIBILITY_PROFILE_BIT_KHR 0x00000002 |
538 | #define EGL_OPENGL_ES3_BIT_KHR 0x00000040 |
539 | #endif |
540 | |
541 | #ifndef __gl3_h_ |
542 | #define GL_MAP_READ_BIT 0x0001 |
543 | #define GL_MAP_WRITE_BIT 0x0002 |
544 | #define GL_MAP_INVALIDATE_RANGE_BIT 0x0004 |
545 | #define GL_MAP_INVALIDATE_BUFFER_BIT 0x0008 |
546 | #define GL_MAP_FLUSH_EXPLICIT_BIT 0x0010 |
547 | #define GL_MAP_UNSYNCHRONIZED_BIT 0x0020 |
548 | #define GL_TEXTURE_3D 0x806F |
549 | #define GL_TEXTURE_WRAP_R 0x8072 |
550 | #endif |
551 | |
552 | namespace KWin |
553 | { |
554 | |
555 | void KWIN_EXPORT eglResolveFunctions(); |
556 | void KWIN_EXPORT glResolveFunctions(OpenGLPlatformInterface platformInterface); |
557 | |
558 | // EGL |
559 | typedef EGLImageKHR(*eglCreateImageKHR_func)(EGLDisplay, EGLContext, EGLenum, EGLClientBuffer, const EGLint*); |
560 | typedef EGLBoolean(*eglDestroyImageKHR_func)(EGLDisplay, EGLImageKHR); |
561 | typedef EGLBoolean (*eglPostSubBufferNV_func)(EGLDisplay dpy, EGLSurface surface, EGLint x, EGLint y, EGLint width, EGLint height); |
562 | extern KWIN_EXPORT eglCreateImageKHR_func eglCreateImageKHR; |
563 | extern KWIN_EXPORT eglDestroyImageKHR_func eglDestroyImageKHR; |
564 | extern KWIN_EXPORT eglPostSubBufferNV_func eglPostSubBufferNV; |
565 | |
566 | // GLES |
567 | typedef GLvoid(*glEGLImageTargetTexture2DOES_func)(GLenum, GLeglImageOES); |
568 | extern KWIN_EXPORT glEGLImageTargetTexture2DOES_func glEGLImageTargetTexture2DOES; |
569 | |
570 | |
571 | #ifdef KWIN_HAVE_OPENGLES |
572 | |
573 | // GL_OES_mapbuffer |
574 | typedef GLvoid *(*glMapBuffer_func)(GLenum target, GLenum access); |
575 | typedef GLboolean (*glUnmapBuffer_func)(GLenum target); |
576 | typedef void (*glGetBufferPointerv_func)(GLenum target, GLenum pname, GLvoid **params); |
577 | |
578 | extern KWIN_EXPORT glMapBuffer_func glMapBuffer; |
579 | extern KWIN_EXPORT glUnmapBuffer_func glUnmapBuffer; |
580 | extern KWIN_EXPORT glGetBufferPointerv_func glGetBufferPointerv; |
581 | |
582 | // GL_OES_texture_3D |
583 | typedef GLvoid(*glTexImage3DOES_func)(GLenum, GLint, GLenum, GLsizei, GLsizei, GLsizei, GLint, GLenum, GLenum, const GLvoid*); |
584 | extern KWIN_EXPORT glTexImage3DOES_func glTexImage3D; |
585 | |
586 | // GL_EXT_map_buffer_range |
587 | typedef GLvoid *(*glMapBufferRange_func)(GLenum target, GLintptr offset, GLsizeiptr length, GLbitfield access); |
588 | typedef void (*glFlushMappedBufferRange_func)(GLenum target, GLintptr offset, GLsizeiptr length); |
589 | |
590 | extern KWIN_EXPORT glMapBufferRange_func glMapBufferRange; |
591 | extern KWIN_EXPORT glFlushMappedBufferRange_func glFlushMappedBufferRange; |
592 | |
593 | // GL_EXT_robustness |
594 | typedef GLenum (*glGetGraphicsResetStatus_func)(); |
595 | typedef void (*glReadnPixels_func)(GLint x, GLint y, GLsizei width, GLsizei height, GLenum format, GLenum type, GLsizei bufSize, GLvoid *data); |
596 | typedef void (*glGetnUniformfv_func)(GLuint program, GLint location, GLsizei bufSize, GLfloat *params); |
597 | |
598 | extern KWIN_EXPORT glGetGraphicsResetStatus_func glGetGraphicsResetStatus; |
599 | extern KWIN_EXPORT glReadnPixels_func glReadnPixels; |
600 | extern KWIN_EXPORT glGetnUniformfv_func glGetnUniformfv; |
601 | |
602 | #endif // KWIN_HAVE_OPENGLES |
603 | |
604 | } // namespace |
605 | |
606 | #endif // KWIN_HAVE_EGL |
607 | |
608 | #endif // KWIN_GLUTILS_FUNCS_H |
609 | |