summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndrei Karas <akaras@inbox.ru>2014-06-23 19:10:33 +0300
committerAndrei Karas <akaras@inbox.ru>2014-06-23 19:11:51 +0300
commit7f8227ad083ba3973e345efc7a23ee4b64059112 (patch)
tree9a6e42c08833adb465e5f989db6023eadc27e799
parentb23c9675371a77b634efab0e744a0373990614a1 (diff)
downloadmv-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.txt6
-rw-r--r--src/Makefile.am6
-rw-r--r--src/graphicsmanager.cpp33
-rw-r--r--src/render/mgl.h2
-rw-r--r--src/render/mglfunctions.h47
-rw-r--r--src/render/mglx.cpp34
-rw-r--r--src/render/mglx.h39
-rw-r--r--src/render/mglxinit.cpp39
-rw-r--r--src/render/mglxinit.h33
-rw-r--r--src/render/mglxtypes.h46
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