From 7f8227ad083ba3973e345efc7a23ee4b64059112 Mon Sep 17 00:00:00 2001 From: Andrei Karas Date: Mon, 23 Jun 2014 19:10:33 +0300 Subject: Add glx functions helpers. Add some glx functions. --- src/CMakeLists.txt | 6 ++++++ src/Makefile.am | 6 ++++++ src/graphicsmanager.cpp | 33 ++++++++------------------------- src/render/mgl.h | 2 ++ src/render/mglfunctions.h | 47 +++++++++++++++++++++++++++++++++++++++++++++++ src/render/mglx.cpp | 34 ++++++++++++++++++++++++++++++++++ src/render/mglx.h | 39 +++++++++++++++++++++++++++++++++++++++ src/render/mglxinit.cpp | 39 +++++++++++++++++++++++++++++++++++++++ src/render/mglxinit.h | 33 +++++++++++++++++++++++++++++++++ src/render/mglxtypes.h | 46 ++++++++++++++++++++++++++++++++++++++++++++++ 10 files changed, 260 insertions(+), 25 deletions(-) create mode 100644 src/render/mglfunctions.h create mode 100644 src/render/mglx.cpp create mode 100644 src/render/mglx.h create mode 100644 src/render/mglxinit.cpp create mode 100644 src/render/mglxinit.h create mode 100644 src/render/mglxtypes.h 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 #include #include #ifndef USE_SDL2 #include -#endif -#else +#endif // USE_SDL2 +#else // ANDROID #include +#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(name)) -#endif - -#define assignFunction(func, name) m##func \ - = reinterpret_cast(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 . + */ + +#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(name)) +#endif + +#define assignFunction(func, name) m##func \ + = reinterpret_cast(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 . + */ + +#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 . + */ + +#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 . + */ + +#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 . + */ + +#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 . + */ + +#ifndef RENDER_MGLXTYPES_H +#define RENDER_MGLXTYPES_H + +#include "main.h" +#if defined(USE_OPENGL) && defined(USE_X11) + +#include +#include +#include + +#if defined(__GXX_EXPERIMENTAL_CXX0X__) +#include +#else +#include +#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 -- cgit v1.2.3-70-g09d2