d7fa827644
Summary: KWin still resolves some OpenGL function pointers. For that it needs to use either eglGetProcAddress or glxGetProcAddress. With other words the method to resolve needs to know whether it is egl or glx and needs both a dependency to egl and glx. Especially the dependency to glx is ugly as that pulls in XLib into our library. The way so far was to pass an enum value to the initGL method to know whether it's EGL or GLX. With this change the enum value is removed and replaced by a function pointer to resolve the methods. This simplifies the resolve code and allows to completely remove the glx variant we still had in the library. Thus kwinglutils library is now glx and XLib free. Test Plan: nested KWin with OpenGL/EGL still works Reviewers: #kwin, #plasma_on_wayland Subscribers: plasma-devel, kwin Tags: #plasma_on_wayland, #kwin Differential Revision: https://phabricator.kde.org/D3336
68 lines
2.3 KiB
C++
68 lines
2.3 KiB
C++
/********************************************************************
|
|
KWin - the KDE window manager
|
|
This file is part of the KDE project.
|
|
|
|
Copyright (C) 2007 Rivo Laks <rivolaks@hot.ee>
|
|
|
|
This program is free software; you can redistribute it and/or modify
|
|
it under the terms of the GNU General Public License as published by
|
|
the Free Software Foundation; either version 2 of the License, or
|
|
(at your option) any later version.
|
|
|
|
This program is distributed in the hope that it will be useful,
|
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
GNU General Public License for more details.
|
|
|
|
You should have received a copy of the GNU General Public License
|
|
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
*********************************************************************/
|
|
|
|
#ifndef KWIN_GLUTILS_FUNCS_H
|
|
#define KWIN_GLUTILS_FUNCS_H
|
|
|
|
#include <kwinglutils_export.h>
|
|
#include <kwinconfig.h>
|
|
#include <kwinglobals.h>
|
|
|
|
#include <epoxy/egl.h>
|
|
|
|
#include <fixx11h.h>
|
|
|
|
#include <epoxy/gl.h>
|
|
#include <functional>
|
|
|
|
// qopengl.h declares GLdouble as a typedef of float when Qt is built
|
|
// with GLES support. This conflicts with the epoxy/gl_generated.h
|
|
// declaration, so we have to prevent the Qt header from being #included.
|
|
#define QOPENGL_H
|
|
|
|
#ifndef QOPENGLF_APIENTRY
|
|
#define QOPENGLF_APIENTRY GLAPIENTRY
|
|
#endif
|
|
|
|
#ifndef QOPENGLF_APIENTRYP
|
|
#define QOPENGLF_APIENTRYP GLAPIENTRYP
|
|
#endif
|
|
|
|
namespace KWin
|
|
{
|
|
|
|
void KWINGLUTILS_EXPORT eglResolveFunctions();
|
|
|
|
typedef void (*resolveFuncPtr)();
|
|
void KWINGLUTILS_EXPORT glResolveFunctions(std::function<resolveFuncPtr(const char*)> resolveFunction);
|
|
|
|
// GL_ARB_robustness / GL_EXT_robustness
|
|
using glGetGraphicsResetStatus_func = GLenum (*)();
|
|
using glReadnPixels_func = void (*)(GLint x, GLint y, GLsizei width, GLsizei height,
|
|
GLenum format, GLenum type, GLsizei bufSize, GLvoid *data);
|
|
using glGetnUniformfv_func = void (*)(GLuint program, GLint location, GLsizei bufSize, GLfloat *params);
|
|
|
|
extern KWINGLUTILS_EXPORT glGetGraphicsResetStatus_func glGetGraphicsResetStatus;
|
|
extern KWINGLUTILS_EXPORT glReadnPixels_func glReadnPixels;
|
|
extern KWINGLUTILS_EXPORT glGetnUniformfv_func glGetnUniformfv;
|
|
|
|
} // namespace
|
|
|
|
#endif // KWIN_GLUTILS_FUNCS_H
|