diff options
author | Andrei Karas <akaras@inbox.ru> | 2014-06-23 19:10:33 +0300 |
---|---|---|
committer | Andrei Karas <akaras@inbox.ru> | 2014-06-23 19:11:51 +0300 |
commit | 7f8227ad083ba3973e345efc7a23ee4b64059112 (patch) | |
tree | 9a6e42c08833adb465e5f989db6023eadc27e799 | |
parent | b23c9675371a77b634efab0e744a0373990614a1 (diff) | |
download | mv-7f8227ad083ba3973e345efc7a23ee4b64059112.tar.gz mv-7f8227ad083ba3973e345efc7a23ee4b64059112.tar.bz2 mv-7f8227ad083ba3973e345efc7a23ee4b64059112.tar.xz mv-7f8227ad083ba3973e345efc7a23ee4b64059112.zip |
Add glx functions helpers.
Add some glx functions.
-rw-r--r-- | src/CMakeLists.txt | 6 | ||||
-rw-r--r-- | src/Makefile.am | 6 | ||||
-rw-r--r-- | src/graphicsmanager.cpp | 33 | ||||
-rw-r--r-- | src/render/mgl.h | 2 | ||||
-rw-r--r-- | src/render/mglfunctions.h | 47 | ||||
-rw-r--r-- | src/render/mglx.cpp | 34 | ||||
-rw-r--r-- | src/render/mglx.h | 39 | ||||
-rw-r--r-- | src/render/mglxinit.cpp | 39 | ||||
-rw-r--r-- | src/render/mglxinit.h | 33 | ||||
-rw-r--r-- | src/render/mglxtypes.h | 46 |
10 files changed, 260 insertions, 25 deletions
diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 89955be29..aea741c4c 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -848,7 +848,13 @@ SET(SRCS render/mgl.cpp render/mgl.h render/mgldefines.h + render/mglfunctions.h render/mgltypes.h + render/mglx.cpp + render/mglx.h + render/mglxinit.cpp + render/mglxinit.h + render/mglxtypes.h render/mobileopenglgraphics.cpp render/mobileopenglgraphics.h render/modernopenglgraphics.cpp diff --git a/src/Makefile.am b/src/Makefile.am index 9a1b4b4b1..842a5e829 100644 --- a/src/Makefile.am +++ b/src/Makefile.am @@ -967,7 +967,13 @@ manaplus_SOURCES += gui/widgets/avatarlistbox.cpp \ render/mgl.cpp \ render/mgl.h \ render/mgldefines.h \ + render/mglfunctions.h \ render/mgltypes.h \ + render/mglx.cpp \ + render/mglx.h \ + render/mglxinit.cpp \ + render/mglxinit.h \ + render/mglxtypes.h \ render/mobileopenglgraphics.cpp \ render/mobileopenglgraphics.h \ render/modernopenglgraphics.cpp \ diff --git a/src/graphicsmanager.cpp b/src/graphicsmanager.cpp index 241a9c438..696c0fb77 100644 --- a/src/graphicsmanager.cpp +++ b/src/graphicsmanager.cpp @@ -23,20 +23,20 @@ #ifdef USE_OPENGL #ifndef WIN32 + #ifdef ANDROID #include <GLES2/gl2.h> #include <GLES/glext.h> #include <EGL/egl.h> #ifndef USE_SDL2 #include <SDL_android.h> -#endif -#else +#endif // USE_SDL2 +#else // ANDROID #include <GL/glx.h> +#endif // ANDROID +#else // WIN32 #endif -#else -#endif - -#endif +#endif // USE_OPENGL #include "configuration.h" #include "logger.h" @@ -56,6 +56,8 @@ #include "resources/openglimagehelper.h" #include "resources/sdlimagehelper.h" +#include "render/mglfunctions.h" + #ifdef USE_SDL2 #include "render/sdl2softwaregraphics.h" @@ -77,25 +79,6 @@ #ifndef GL_MAX_RENDERBUFFER_SIZE #define GL_MAX_RENDERBUFFER_SIZE 0x84E8 #endif - -#ifdef WIN32 -#define getFunction(name) wglGetProcAddress(name) -#elif defined ANDROID -#define getFunction(name) eglGetProcAddress(name) -#elif defined __APPLE__ -#define getFunction(name) nullptr -#else -#define getFunction(name) glXGetProcAddress(\ - reinterpret_cast<const GLubyte*>(name)) -#endif - -#define assignFunction(func, name) m##func \ - = reinterpret_cast<func##_t>(getFunction(name)); \ - if (m##func == nullptr) \ - logger->log(std::string("function not found: ") + name); \ - else \ - logger->log(std::string("assigned function: ") + name); - #endif GraphicsManager graphicsManager; diff --git a/src/render/mgl.h b/src/render/mgl.h index f7579ad1f..a5848e906 100644 --- a/src/render/mgl.h +++ b/src/render/mgl.h @@ -115,5 +115,7 @@ defNameE(glGetQueryObjectui64v); defNameE(wglGetExtensionsString); #endif +#undef defNameE + #endif // USE_OPENGL #endif // RENDER_MGL_H diff --git a/src/render/mglfunctions.h b/src/render/mglfunctions.h new file mode 100644 index 000000000..e68da7f11 --- /dev/null +++ b/src/render/mglfunctions.h @@ -0,0 +1,47 @@ +/* + * The ManaPlus Client + * Copyright (C) 2012-2014 The ManaPlus Developers + * + * This file is part of The ManaPlus Client. + * + * 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 + * 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 RENDER_MGLFUNCTIONS_H +#define RENDER_MGLFUNCTIONS_H + +#ifdef USE_OPENGL + +#include "logger.h" + +#ifdef WIN32 +#define getFunction(name) wglGetProcAddress(name) +#elif defined ANDROID +#define getFunction(name) eglGetProcAddress(name) +#elif defined __APPLE__ +#define getFunction(name) nullptr +#else +#define getFunction(name) glXGetProcAddress(\ + reinterpret_cast<const GLubyte*>(name)) +#endif + +#define assignFunction(func, name) m##func \ + = reinterpret_cast<func##_t>(getFunction(name)); \ + if (m##func == nullptr) \ + logger->log(std::string("function not found: ") + name); \ + else \ + logger->log(std::string("assigned function: ") + name); + +#endif // USE_OPENGL +#endif // RENDER_MGLFUNCTIONS_H diff --git a/src/render/mglx.cpp b/src/render/mglx.cpp new file mode 100644 index 000000000..4c51cba14 --- /dev/null +++ b/src/render/mglx.cpp @@ -0,0 +1,34 @@ +/* + * The ManaPlus Client + * Copyright (C) 2012-2014 The ManaPlus Developers + * + * This file is part of The ManaPlus Client. + * + * 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 + * 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/>. + */ + +#include "render/mglx.h" + +#if defined(USE_OPENGL) && defined(USE_X11) + +#include "debug.h" + +#define defName(name) name##_t m##name = nullptr + +defName(glXCreateContext); +defName(glXGetCurrentContext); +defName(glXCreateContextAttribs); +defName(glXChooseFBConfig); + +#endif diff --git a/src/render/mglx.h b/src/render/mglx.h new file mode 100644 index 000000000..ceb916b8d --- /dev/null +++ b/src/render/mglx.h @@ -0,0 +1,39 @@ +/* + * The ManaPlus Client + * Copyright (C) 2012-2014 The ManaPlus Developers + * + * This file is part of The ManaPlus Client. + * + * 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 + * 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 RENDER_MGLX_H +#define RENDER_MGLX_H + +#include "main.h" +#if defined(USE_OPENGL) && defined(USE_X11) + +#include "render/mglxtypes.h" + +#define defNameE(name) extern name##_t m##name + +defNameE(glXCreateContext); +defNameE(glXGetCurrentContext); +defNameE(glXCreateContextAttribs); +defNameE(glXChooseFBConfig); + +#undef defNameE + +#endif // defined(USE_OPENGL) && defined(USE_X11) +#endif // RENDER_MGLX_H diff --git a/src/render/mglxinit.cpp b/src/render/mglxinit.cpp new file mode 100644 index 000000000..81035a37c --- /dev/null +++ b/src/render/mglxinit.cpp @@ -0,0 +1,39 @@ +/* + * The ManaPlus Client + * Copyright (C) 2012-2014 The ManaPlus Developers + * + * This file is part of The ManaPlus Client. + * + * 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 + * 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/>. + */ + +#include "render/mglxinit.h" + +#if defined(USE_OPENGL) && defined(USE_X11) + +#include "render/mglfunctions.h" +#include "render/mglx.h" +#include "render/mglxtypes.h" + +#include "debug.h" + +void Glx::initFunctions() +{ + assignFunction(glXCreateContext, "glXCreateContext"); + assignFunction(glXGetCurrentContext, "glXGetCurrentContext"); + assignFunction(glXCreateContextAttribs, "glXCreateContextAttribsARB"); + assignFunction(glXChooseFBConfig, "glXChooseFBConfig"); +} + +#endif diff --git a/src/render/mglxinit.h b/src/render/mglxinit.h new file mode 100644 index 000000000..4322a7d0f --- /dev/null +++ b/src/render/mglxinit.h @@ -0,0 +1,33 @@ +/* + * The ManaPlus Client + * Copyright (C) 2012-2014 The ManaPlus Developers + * + * This file is part of The ManaPlus Client. + * + * 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 + * 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 RENDER_MXGLINIT_H +#define RENDER_MXGLINIT_H + +#include "main.h" +#if defined(USE_OPENGL) && defined(USE_X11) + +namespace Glx +{ + void initFunctions(); +} // namespace Glx + +#endif // defined(USE_OPENGL) && defined(USE_X11) +#endif // RENDER_MXGLINIT_H diff --git a/src/render/mglxtypes.h b/src/render/mglxtypes.h new file mode 100644 index 000000000..700d62287 --- /dev/null +++ b/src/render/mglxtypes.h @@ -0,0 +1,46 @@ +/* + * The ManaPlus Client + * Copyright (C) 2012-2014 The ManaPlus Developers + * + * This file is part of The ManaPlus Client. + * + * 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 + * 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 RENDER_MGLXTYPES_H +#define RENDER_MGLXTYPES_H + +#include "main.h" +#if defined(USE_OPENGL) && defined(USE_X11) + +#include <X11/Xlib.h> +#include <X11/Xutil.h> +#include <GL/glx.h> + +#if defined(__GXX_EXPERIMENTAL_CXX0X__) +#include <cstdint> +#else +#include <stdint.h> +#endif + +typedef void *(*glXCreateContext_t) (Display *dpy, XVisualInfo *vis, + void *shareList, bool direct); +typedef void *(*glXGetCurrentContext_t) (void); +typedef void (*glXCreateContextAttribs_t) (Display *dpy, GLXFBConfig config, + void *share_context, bool direct, const int *attrib_list); +typedef GLXFBConfig *(*glXChooseFBConfig_t) (Display *dpy, int screen, + const int *attrib_list, int *nelements); + +#endif // USE_OPENGL +#endif // RENDER_MGLXTYPES_H |