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 /src/render | |
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.
Diffstat (limited to 'src/render')
-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 |
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 |