summaryrefslogtreecommitdiff
path: root/src/render
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 /src/render
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.
Diffstat (limited to 'src/render')
-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
7 files changed, 240 insertions, 0 deletions
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