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/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 ++++++++++++++++++++++++++++++++++++++++++++++ 7 files changed, 240 insertions(+) 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 (limited to 'src/render') 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