1/********************************************************************
2 KWin - the KDE window manager
3 This file is part of the KDE project.
4
5Copyright (C) 2007 Rivo Laks <rivolaks@hot.ee>
6
7This program is free software; you can redistribute it and/or modify
8it under the terms of the GNU General Public License as published by
9the Free Software Foundation; either version 2 of the License, or
10(at your option) any later version.
11
12This program is distributed in the hope that it will be useful,
13but 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 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
31namespace KWin {
32
33void 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
86namespace KWin
87{
88
89void 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
185typedef struct __GLXcontextRec *GLXContext;
186/* GLX 1.3 and later */
187typedef struct __GLXFBConfigRec *GLXFBConfig;
188
189// GL typedefs
190typedef char GLchar;
191
192// Function pointers
193// finding of OpenGL extensions functions
194typedef void (*glXFuncPtr)();
195typedef glXFuncPtr(*glXGetProcAddress_func)(const GLubyte*);
196extern KWIN_EXPORT glXGetProcAddress_func glXGetProcAddress;
197// glXQueryDrawable (added in GLX 1.3)
198typedef void (*glXQueryDrawable_func)(Display* dpy, GLXDrawable drawable,
199 int attribute, unsigned int *value);
200extern KWIN_EXPORT glXQueryDrawable_func glXQueryDrawable;
201// texture_from_pixmap extension functions
202typedef void (*glXBindTexImageEXT_func)(Display* dpy, GLXDrawable drawable,
203 int buffer, const int* attrib_list);
204typedef void (*glXReleaseTexImageEXT_func)(Display* dpy, GLXDrawable drawable, int buffer);
205extern KWIN_EXPORT glXReleaseTexImageEXT_func glXReleaseTexImageEXT;
206extern KWIN_EXPORT glXBindTexImageEXT_func glXBindTexImageEXT;
207// glXCopySubBufferMESA
208typedef void (*glXCopySubBuffer_func)(Display* , GLXDrawable, int, int, int, int);
209extern KWIN_EXPORT glXCopySubBuffer_func glXCopySubBuffer;
210// video_sync extension functions
211typedef int (*glXGetVideoSync_func)(unsigned int *count);
212typedef int (*glXWaitVideoSync_func)(int divisor, int remainder, unsigned int *count);
213typedef int (*glXSwapIntervalMESA_func)(unsigned int interval);
214typedef void (*glXSwapIntervalEXT_func)(Display *dpy, GLXDrawable drawable, int interval);
215typedef int (*glXSwapIntervalSGI_func)(int interval);
216extern KWIN_EXPORT glXGetVideoSync_func glXGetVideoSync;
217extern KWIN_EXPORT glXWaitVideoSync_func glXWaitVideoSync;
218extern KWIN_EXPORT glXSwapIntervalMESA_func glXSwapIntervalMESA;
219extern KWIN_EXPORT glXSwapIntervalEXT_func glXSwapIntervalEXT;
220extern KWIN_EXPORT glXSwapIntervalSGI_func glXSwapIntervalSGI;
221
222// GLX_ARB_create_context
223typedef GLXContext (*glXCreateContextAttribsARB_func)(Display *dpy, GLXFBConfig config,
224 GLXContext share_context, Bool direct,
225 const int *attrib_list);
226
227extern KWIN_EXPORT glXCreateContextAttribsARB_func glXCreateContextAttribsARB;
228
229// glActiveTexture
230typedef void (*glActiveTexture_func)(GLenum);
231extern KWIN_EXPORT glActiveTexture_func glActiveTexture;
232// framebuffer_object extension functions
233typedef GLboolean(*glIsRenderbuffer_func)(GLuint renderbuffer);
234typedef void (*glBindRenderbuffer_func)(GLenum target, GLuint renderbuffer);
235typedef void (*glDeleteRenderbuffers_func)(GLsizei n, const GLuint *renderbuffers);
236typedef void (*glGenRenderbuffers_func)(GLsizei n, GLuint *renderbuffers);
237typedef void (*glRenderbufferStorage_func)(GLenum target, GLenum internalformat, GLsizei width, GLsizei height);
238typedef void (*glGetRenderbufferParameteriv_func)(GLenum target, GLenum pname, GLint *params);
239typedef GLboolean(*glIsFramebuffer_func)(GLuint framebuffer);
240typedef void (*glBindFramebuffer_func)(GLenum target, GLuint framebuffer);
241typedef void (*glDeleteFramebuffers_func)(GLsizei n, const GLuint *framebuffers);
242typedef void (*glGenFramebuffers_func)(GLsizei n, GLuint *framebuffers);
243typedef GLenum(*glCheckFramebufferStatus_func)(GLenum target);
244typedef void (*glFramebufferTexture1D_func)(GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level);
245typedef void (*glFramebufferTexture2D_func)(GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level);
246typedef void (*glFramebufferTexture3D_func)(GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level, GLint zoffset);
247typedef void (*glFramebufferRenderbuffer_func)(GLenum target, GLenum attachment, GLenum renderbuffertarget, GLuint renderbuffer);
248typedef void (*glGetFramebufferAttachmentParameteriv_func)(GLenum target, GLenum attachment, GLenum pname, GLint *params);
249typedef void (*glGenerateMipmap_func)(GLenum target);
250typedef void (*glBlitFramebuffer_func)(GLint srcX0, GLint srcY0, GLint srcX1, GLint srcY1, GLint dstX0, GLint dstY0, GLint dstX1, GLint dstY1, GLbitfield mask, GLenum filter);
251extern KWIN_EXPORT glIsRenderbuffer_func glIsRenderbuffer;
252extern KWIN_EXPORT glBindRenderbuffer_func glBindRenderbuffer;
253extern KWIN_EXPORT glDeleteRenderbuffers_func glDeleteRenderbuffers;
254extern KWIN_EXPORT glGenRenderbuffers_func glGenRenderbuffers;
255extern KWIN_EXPORT glRenderbufferStorage_func glRenderbufferStorage;
256extern KWIN_EXPORT glGetRenderbufferParameteriv_func glGetRenderbufferParameteriv;
257extern KWIN_EXPORT glIsFramebuffer_func glIsFramebuffer;
258extern KWIN_EXPORT glBindFramebuffer_func glBindFramebuffer;
259extern KWIN_EXPORT glDeleteFramebuffers_func glDeleteFramebuffers;
260extern KWIN_EXPORT glGenFramebuffers_func glGenFramebuffers;
261extern KWIN_EXPORT glCheckFramebufferStatus_func glCheckFramebufferStatus;
262extern KWIN_EXPORT glFramebufferTexture1D_func glFramebufferTexture1D;
263extern KWIN_EXPORT glFramebufferTexture2D_func glFramebufferTexture2D;
264extern KWIN_EXPORT glFramebufferTexture3D_func glFramebufferTexture3D;
265extern KWIN_EXPORT glFramebufferRenderbuffer_func glFramebufferRenderbuffer;
266extern KWIN_EXPORT glGetFramebufferAttachmentParameteriv_func glGetFramebufferAttachmentParameteriv;
267extern KWIN_EXPORT glGenerateMipmap_func glGenerateMipmap;
268extern KWIN_EXPORT glBlitFramebuffer_func glBlitFramebuffer;
269// Shader stuff
270typedef GLuint(*glCreateShader_func)(GLenum);
271typedef GLvoid(*glShaderSource_func)(GLuint, GLsizei, const GLchar**, const GLint*);
272typedef GLvoid(*glCompileShader_func)(GLuint);
273typedef GLvoid(*glDeleteShader_func)(GLuint);
274typedef GLuint(*glCreateProgram_func)();
275typedef GLvoid(*glAttachShader_func)(GLuint, GLuint);
276typedef GLvoid(*glLinkProgram_func)(GLuint);
277typedef GLvoid(*glUseProgram_func)(GLuint);
278typedef GLvoid(*glDeleteProgram_func)(GLuint);
279typedef GLvoid(*glGetShaderInfoLog_func)(GLuint, GLsizei, GLsizei*, GLchar*);
280typedef GLvoid(*glGetProgramInfoLog_func)(GLuint, GLsizei, GLsizei*, GLchar*);
281typedef GLvoid(*glGetProgramiv_func)(GLuint, GLenum, GLint*);
282typedef GLvoid(*glGetShaderiv_func)(GLuint, GLenum, GLint*);
283typedef GLvoid(*glUniform1f_func)(GLint, GLfloat);
284typedef GLvoid(*glUniform2f_func)(GLint, GLfloat, GLfloat);
285typedef GLvoid(*glUniform3f_func)(GLint, GLfloat, GLfloat, GLfloat);
286typedef GLvoid(*glUniform4f_func)(GLint, GLfloat, GLfloat, GLfloat, GLfloat);
287typedef GLvoid(*glUniformf_func)(GLint, GLfloat);
288typedef GLvoid(*glUniform1i_func)(GLint, GLint);
289typedef GLvoid(*glUniform1fv_func)(GLint, GLsizei, const GLfloat*);
290typedef GLvoid(*glUniform2fv_func)(GLint, GLsizei, const GLfloat*);
291typedef GLvoid(*glUniform3fv_func)(GLint, GLsizei, const GLfloat*);
292typedef GLvoid(*glUniform4fv_func)(GLint, GLsizei, const GLfloat*);
293typedef GLvoid(*glUniformMatrix4fv_func)(GLint, GLsizei, GLboolean, const GLfloat*);
294typedef GLvoid(*glGetUniformfv_func)(GLuint, GLint, GLfloat*);
295typedef GLvoid(*glValidateProgram_func)(GLuint);
296typedef GLint(*glGetUniformLocation_func)(GLuint, const GLchar*);
297typedef GLvoid(*glVertexAttrib1f_func)(GLuint, GLfloat);
298typedef GLint(*glGetAttribLocation_func)(GLuint, const GLchar*);
299typedef GLvoid(*glBindAttribLocation_func)(GLuint, GLuint, const GLchar*);
300typedef void (*glGenProgramsARB_func)(GLsizei, GLuint*);
301typedef void (*glBindProgramARB_func)(GLenum, GLuint);
302typedef void (*glProgramStringARB_func)(GLenum, GLenum, GLsizei, const GLvoid*);
303typedef void (*glProgramLocalParameter4fARB_func)(GLenum, GLuint, GLfloat, GLfloat, GLfloat, GLfloat);
304typedef void (*glDeleteProgramsARB_func)(GLsizei, const GLuint*);
305typedef void (*glGetProgramivARB_func)(GLenum, GLenum, GLint*);
306extern KWIN_EXPORT glCreateShader_func glCreateShader;
307extern KWIN_EXPORT glShaderSource_func glShaderSource;
308extern KWIN_EXPORT glCompileShader_func glCompileShader;
309extern KWIN_EXPORT glDeleteShader_func glDeleteShader;
310extern KWIN_EXPORT glCreateProgram_func glCreateProgram;
311extern KWIN_EXPORT glAttachShader_func glAttachShader;
312extern KWIN_EXPORT glLinkProgram_func glLinkProgram;
313extern KWIN_EXPORT glUseProgram_func glUseProgram;
314extern KWIN_EXPORT glDeleteProgram_func glDeleteProgram;
315extern KWIN_EXPORT glGetShaderInfoLog_func glGetShaderInfoLog;
316extern KWIN_EXPORT glGetProgramInfoLog_func glGetProgramInfoLog;
317extern KWIN_EXPORT glGetProgramiv_func glGetProgramiv;
318extern KWIN_EXPORT glGetShaderiv_func glGetShaderiv;
319extern KWIN_EXPORT glUniform1f_func glUniform1f;
320extern KWIN_EXPORT glUniform2f_func glUniform2f;
321extern KWIN_EXPORT glUniform3f_func glUniform3f;
322extern KWIN_EXPORT glUniform4f_func glUniform4f;
323extern KWIN_EXPORT glUniform1i_func glUniform1i;
324extern KWIN_EXPORT glUniform1fv_func glUniform1fv;
325extern KWIN_EXPORT glUniform2fv_func glUniform2fv;
326extern KWIN_EXPORT glUniform3fv_func glUniform3fv;
327extern KWIN_EXPORT glUniform4fv_func glUniform4fv;
328extern KWIN_EXPORT glGetUniformfv_func glGetUniformfv;
329extern KWIN_EXPORT glUniformMatrix4fv_func glUniformMatrix4fv;
330extern KWIN_EXPORT glValidateProgram_func glValidateProgram;
331extern KWIN_EXPORT glGetUniformLocation_func glGetUniformLocation;
332extern KWIN_EXPORT glVertexAttrib1f_func glVertexAttrib1f;
333extern KWIN_EXPORT glGetAttribLocation_func glGetAttribLocation;
334extern KWIN_EXPORT glBindAttribLocation_func glBindAttribLocation;
335extern KWIN_EXPORT glGenProgramsARB_func glGenProgramsARB;
336extern KWIN_EXPORT glBindProgramARB_func glBindProgramARB;
337extern KWIN_EXPORT glProgramStringARB_func glProgramStringARB;
338extern KWIN_EXPORT glProgramLocalParameter4fARB_func glProgramLocalParameter4fARB;
339extern KWIN_EXPORT glDeleteProgramsARB_func glDeleteProgramsARB;
340extern KWIN_EXPORT glGetProgramivARB_func glGetProgramivARB;
341// vertex buffer objects
342typedef void (*glGenBuffers_func)(GLsizei, GLuint*);
343extern KWIN_EXPORT glGenBuffers_func glGenBuffers;
344typedef void (*glDeleteBuffers_func)(GLsizei n, const GLuint*);
345extern KWIN_EXPORT glDeleteBuffers_func glDeleteBuffers;
346typedef void (*glBindBuffer_func)(GLenum, GLuint);
347extern KWIN_EXPORT glBindBuffer_func glBindBuffer;
348typedef void (*glBufferData_func)(GLenum, GLsizeiptr, const GLvoid*, GLenum);
349extern KWIN_EXPORT glBufferData_func glBufferData;
350typedef void (*glBufferSubData_func)(GLenum target, GLintptr offset, GLsizeiptr size, const GLvoid *data);
351extern KWIN_EXPORT glBufferSubData_func glBufferSubData;
352typedef void (*glGetBufferSubData_func)(GLenum target, GLintptr offset, GLsizeiptr size, GLvoid *data);
353extern KWIN_EXPORT glGetBufferSubData_func glGetBufferSubData;
354typedef void (*glEnableVertexAttribArray_func)(GLuint);
355extern KWIN_EXPORT glEnableVertexAttribArray_func glEnableVertexAttribArray;
356typedef void (*glDisableVertexAttribArray_func)(GLuint);
357extern KWIN_EXPORT glDisableVertexAttribArray_func glDisableVertexAttribArray;
358typedef void (*glVertexAttribPointer_func)(GLuint, GLint, GLenum, GLboolean, GLsizei, const GLvoid*);
359extern KWIN_EXPORT glVertexAttribPointer_func glVertexAttribPointer;
360typedef GLvoid *(*glMapBuffer_func)(GLenum target, GLenum access);
361extern KWIN_EXPORT glMapBuffer_func glMapBuffer;
362typedef GLboolean (*glUnmapBuffer_func)(GLenum target);
363extern KWIN_EXPORT glUnmapBuffer_func glUnmapBuffer;
364
365// GL_ARB_vertex_array_object
366typedef void (*glBindVertexArray_func)(GLuint array);
367typedef void (*glDeleteVertexArrays_func)(GLsizei n, const GLuint *arrays);
368typedef void (*glGenVertexArrays_func)(GLsizei n, GLuint *arrays);
369typedef GLboolean (*glIsVertexArray_func)(GLuint array);
370
371extern KWIN_EXPORT glBindVertexArray_func glBindVertexArray;
372extern KWIN_EXPORT glDeleteVertexArrays_func glDeleteVertexArrays;
373extern KWIN_EXPORT glGenVertexArrays_func glGenVertexArrays;
374extern KWIN_EXPORT glIsVertexArray_func glIsVertexArray;
375
376// GL_EXT_gpu_shader4 / GL 3.0
377typedef void (*glVertexAttribI1i_func)(GLuint index, GLint x_func);
378typedef void (*glVertexAttribI2i_func)(GLuint index, GLint x, GLint y_func);
379typedef void (*glVertexAttribI3i_func)(GLuint index, GLint x, GLint y, GLint z_func);
380typedef void (*glVertexAttribI4i_func)(GLuint index, GLint x, GLint y, GLint z, GLint w_func);
381typedef void (*glVertexAttribI1ui_func)(GLuint index, GLuint x_func);
382typedef void (*glVertexAttribI2ui_func)(GLuint index, GLuint x, GLuint y_func);
383typedef void (*glVertexAttribI3ui_func)(GLuint index, GLuint x, GLuint y, GLuint z_func);
384typedef void (*glVertexAttribI4ui_func)(GLuint index, GLuint x, GLuint y, GLuint z, GLuint w_func);
385typedef void (*glVertexAttribI1iv_func)(GLuint index, const GLint *v_func);
386typedef void (*glVertexAttribI2iv_func)(GLuint index, const GLint *v_func);
387typedef void (*glVertexAttribI3iv_func)(GLuint index, const GLint *v_func);
388typedef void (*glVertexAttribI4iv_func)(GLuint index, const GLint *v_func);
389typedef void (*glVertexAttribI1uiv_func)(GLuint index, const GLuint *v_func);
390typedef void (*glVertexAttribI2uiv_func)(GLuint index, const GLuint *v_func);
391typedef void (*glVertexAttribI3uiv_func)(GLuint index, const GLuint *v_func);
392typedef void (*glVertexAttribI4uiv_func)(GLuint index, const GLuint *v_func);
393typedef void (*glVertexAttribI4bv_func)(GLuint index, const GLbyte *v_func);
394typedef void (*glVertexAttribI4sv_func)(GLuint index, const GLshort *v_func);
395typedef void (*glVertexAttribI4ubv_func)(GLuint index, const GLubyte *v_func);
396typedef void (*glVertexAttribI4usv_func)(GLuint index, const GLushort *v_func);
397typedef void (*glVertexAttribIPointer_func)(GLuint index, GLint size, GLenum type, GLsizei stride, const GLvoid *pointer_func);
398typedef void (*glGetVertexAttribIiv_func)(GLuint index, GLenum pname, GLint *params_func);
399typedef void (*glGetVertexAttribIuiv_func)(GLuint index, GLenum pname, GLuint *params_func);
400typedef void (*glGetUniformuiv_func)(GLuint program, GLint location, GLuint *params);
401typedef void (*glBindFragDataLocation_func)(GLuint program, GLuint color, const GLchar *name);
402typedef GLint (*glGetFragDataLocation_func)(GLuint program, const GLchar *name);
403typedef void (*glUniform1ui_func)(GLint location, GLuint v0);
404typedef void (*glUniform2ui_func)(GLint location, GLuint v0, GLuint v1);
405typedef void (*glUniform3ui_func)(GLint location, GLuint v0, GLuint v1, GLuint v2);
406typedef void (*glUniform4ui_func)(GLint location, GLuint v0, GLuint v1, GLuint v2, GLuint v3);
407typedef void (*glUniform1uiv_func)(GLint location, GLsizei count, const GLuint *value);
408typedef void (*glUniform2uiv_func)(GLint location, GLsizei count, const GLuint *value);
409typedef void (*glUniform3uiv_func)(GLint location, GLsizei count, const GLuint *value);
410
411extern KWIN_EXPORT glVertexAttribI1i_func glVertexAttribI1i;
412extern KWIN_EXPORT glVertexAttribI2i_func glVertexAttribI2i;
413extern KWIN_EXPORT glVertexAttribI3i_func glVertexAttribI3i;
414extern KWIN_EXPORT glVertexAttribI4i_func glVertexAttribI4i;
415extern KWIN_EXPORT glVertexAttribI1ui_func glVertexAttribI1ui;
416extern KWIN_EXPORT glVertexAttribI2ui_func glVertexAttribI2ui;
417extern KWIN_EXPORT glVertexAttribI3ui_func glVertexAttribI3ui;
418extern KWIN_EXPORT glVertexAttribI4ui_func glVertexAttribI4ui;
419extern KWIN_EXPORT glVertexAttribI1iv_func glVertexAttribI1iv;
420extern KWIN_EXPORT glVertexAttribI2iv_func glVertexAttribI2iv;
421extern KWIN_EXPORT glVertexAttribI3iv_func glVertexAttribI3iv;
422extern KWIN_EXPORT glVertexAttribI4iv_func glVertexAttribI4iv;
423extern KWIN_EXPORT glVertexAttribI1uiv_func glVertexAttribI1uiv;
424extern KWIN_EXPORT glVertexAttribI2uiv_func glVertexAttribI2uiv;
425extern KWIN_EXPORT glVertexAttribI3uiv_func glVertexAttribI3uiv;
426extern KWIN_EXPORT glVertexAttribI4uiv_func glVertexAttribI4uiv;
427extern KWIN_EXPORT glVertexAttribI4bv_func glVertexAttribI4bv;
428extern KWIN_EXPORT glVertexAttribI4sv_func glVertexAttribI4sv;
429extern KWIN_EXPORT glVertexAttribI4ubv_func glVertexAttribI4ubv;
430extern KWIN_EXPORT glVertexAttribI4usv_func glVertexAttribI4usv;
431extern KWIN_EXPORT glVertexAttribIPointer_func glVertexAttribIPointer;
432extern KWIN_EXPORT glGetVertexAttribIiv_func glGetVertexAttribIiv;
433extern KWIN_EXPORT glGetVertexAttribIuiv_func glGetVertexAttribIuiv;
434extern KWIN_EXPORT glGetUniformuiv_func glGetUniformuiv;
435extern KWIN_EXPORT glBindFragDataLocation_func glBindFragDataLocation;
436extern KWIN_EXPORT glGetFragDataLocation_func glGetFragDataLocation;
437extern KWIN_EXPORT glUniform1ui_func glUniform1ui;
438extern KWIN_EXPORT glUniform2ui_func glUniform2ui;
439extern KWIN_EXPORT glUniform3ui_func glUniform3ui;
440extern KWIN_EXPORT glUniform4ui_func glUniform4ui;
441extern KWIN_EXPORT glUniform1uiv_func glUniform1uiv;
442extern KWIN_EXPORT glUniform2uiv_func glUniform2uiv;
443extern KWIN_EXPORT glUniform3uiv_func glUniform3uiv;
444
445// GL_ARB_map_buffer_range
446typedef GLvoid* (*glMapBufferRange_func)(GLenum target, GLintptr offset, GLsizeiptr length, GLbitfield access);
447typedef void (*glFlushMappedBufferRange_func)(GLenum target, GLintptr offset, GLsizeiptr length);
448
449extern KWIN_EXPORT glMapBufferRange_func glMapBufferRange;
450extern KWIN_EXPORT glFlushMappedBufferRange_func glFlushMappedBufferRange;
451
452// GL_ARB_robustness
453typedef GLenum (*glGetGraphicsResetStatus_func)();
454typedef void (*glReadnPixels_func)(GLint x, GLint y, GLsizei width, GLsizei height, GLenum format, GLenum type, GLsizei bufSize, GLvoid *data);
455typedef void (*glGetnUniformfv_func)(GLuint program, GLint location, GLsizei bufSize, GLfloat *params);
456
457extern KWIN_EXPORT glGetGraphicsResetStatus_func glGetGraphicsResetStatus;
458extern KWIN_EXPORT glReadnPixels_func glReadnPixels;
459extern KWIN_EXPORT glGetnUniformfv_func glGetnUniformfv;
460
461// GL_ARB_draw_elements_base_vertex
462typedef void (*glDrawElementsBaseVertex_func)(GLenum mode, GLsizei count, GLenum type, const GLvoid *indices, GLint basevertex);
463typedef void (*glDrawElementsInstancedBaseVertex_func)(GLenum mode, GLsizei count, GLenum type, const GLvoid *indices, GLsizei instancecount, GLint basevertex);
464
465extern KWIN_EXPORT glDrawElementsBaseVertex_func glDrawElementsBaseVertex;
466extern KWIN_EXPORT glDrawElementsInstancedBaseVertex_func glDrawElementsInstancedBaseVertex;
467
468// GL_ARB_copy_buffer
469typedef void (*glCopyBufferSubData_func)(GLenum readTarget, GLenum writeTarget, GLintptr readOffset,
470 GLintptr writeOffset, GLsizeiptr size);
471
472extern 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
552namespace KWin
553{
554
555void KWIN_EXPORT eglResolveFunctions();
556void KWIN_EXPORT glResolveFunctions(OpenGLPlatformInterface platformInterface);
557
558// EGL
559typedef EGLImageKHR(*eglCreateImageKHR_func)(EGLDisplay, EGLContext, EGLenum, EGLClientBuffer, const EGLint*);
560typedef EGLBoolean(*eglDestroyImageKHR_func)(EGLDisplay, EGLImageKHR);
561typedef EGLBoolean (*eglPostSubBufferNV_func)(EGLDisplay dpy, EGLSurface surface, EGLint x, EGLint y, EGLint width, EGLint height);
562extern KWIN_EXPORT eglCreateImageKHR_func eglCreateImageKHR;
563extern KWIN_EXPORT eglDestroyImageKHR_func eglDestroyImageKHR;
564extern KWIN_EXPORT eglPostSubBufferNV_func eglPostSubBufferNV;
565
566// GLES
567typedef GLvoid(*glEGLImageTargetTexture2DOES_func)(GLenum, GLeglImageOES);
568extern KWIN_EXPORT glEGLImageTargetTexture2DOES_func glEGLImageTargetTexture2DOES;
569
570
571#ifdef KWIN_HAVE_OPENGLES
572
573// GL_OES_mapbuffer
574typedef GLvoid *(*glMapBuffer_func)(GLenum target, GLenum access);
575typedef GLboolean (*glUnmapBuffer_func)(GLenum target);
576typedef void (*glGetBufferPointerv_func)(GLenum target, GLenum pname, GLvoid **params);
577
578extern KWIN_EXPORT glMapBuffer_func glMapBuffer;
579extern KWIN_EXPORT glUnmapBuffer_func glUnmapBuffer;
580extern KWIN_EXPORT glGetBufferPointerv_func glGetBufferPointerv;
581
582// GL_OES_texture_3D
583typedef GLvoid(*glTexImage3DOES_func)(GLenum, GLint, GLenum, GLsizei, GLsizei, GLsizei, GLint, GLenum, GLenum, const GLvoid*);
584extern KWIN_EXPORT glTexImage3DOES_func glTexImage3D;
585
586// GL_EXT_map_buffer_range
587typedef GLvoid *(*glMapBufferRange_func)(GLenum target, GLintptr offset, GLsizeiptr length, GLbitfield access);
588typedef void (*glFlushMappedBufferRange_func)(GLenum target, GLintptr offset, GLsizeiptr length);
589
590extern KWIN_EXPORT glMapBufferRange_func glMapBufferRange;
591extern KWIN_EXPORT glFlushMappedBufferRange_func glFlushMappedBufferRange;
592
593// GL_EXT_robustness
594typedef GLenum (*glGetGraphicsResetStatus_func)();
595typedef void (*glReadnPixels_func)(GLint x, GLint y, GLsizei width, GLsizei height, GLenum format, GLenum type, GLsizei bufSize, GLvoid *data);
596typedef void (*glGetnUniformfv_func)(GLuint program, GLint location, GLsizei bufSize, GLfloat *params);
597
598extern KWIN_EXPORT glGetGraphicsResetStatus_func glGetGraphicsResetStatus;
599extern KWIN_EXPORT glReadnPixels_func glReadnPixels;
600extern 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