make work on win32 again using GLEW
This commit is contained in:
parent
d67442dc49
commit
d597335135
|
@ -20,11 +20,10 @@ FIND_PACKAGE(Boost COMPONENTS system REQUIRED)
|
||||||
IF(USE_OPENGL_ES2)
|
IF(USE_OPENGL_ES2)
|
||||||
FIND_PACKAGE(OpenGLES2 REQUIRED)
|
FIND_PACKAGE(OpenGLES2 REQUIRED)
|
||||||
FIND_PACKAGE(EGL REQUIRED)
|
FIND_PACKAGE(EGL REQUIRED)
|
||||||
SET(OPENGL_INCLUDE_DIR ${OPENGLES_INCLUDE_DIR} ${EGL_INCLUDE_DIR})
|
|
||||||
SET(OPENGL_LIBRARIES ${OPENGLES_LIBRARY} ${EGL_LIBRARY})
|
|
||||||
ADD_DEFINITIONS(-DOPENGL_ES2)
|
ADD_DEFINITIONS(-DOPENGL_ES2)
|
||||||
ELSE(USE_OPENGL_ES2)
|
ELSE(USE_OPENGL_ES2)
|
||||||
FIND_PACKAGE(OpenGL REQUIRED)
|
FIND_PACKAGE(OpenGL REQUIRED)
|
||||||
|
FIND_PACKAGE(GLEW REQUIRED)
|
||||||
ENDIF(USE_OPENGL_ES2)
|
ENDIF(USE_OPENGL_ES2)
|
||||||
|
|
||||||
FIND_PACKAGE(Lua REQUIRED)
|
FIND_PACKAGE(Lua REQUIRED)
|
||||||
|
@ -66,7 +65,9 @@ IF(USE_GCC47)
|
||||||
ENDIF(USE_GCC47)
|
ENDIF(USE_GCC47)
|
||||||
|
|
||||||
IF(WIN32)
|
IF(WIN32)
|
||||||
SET(framework_SOURCES ${framework_SOURCES} ${CMAKE_CURRENT_LIST_DIR}/platform/win32window.cpp)
|
SET(framework_SOURCES ${framework_SOURCES}
|
||||||
|
${CMAKE_CURRENT_LIST_DIR}/platform/win32window.cpp
|
||||||
|
${CMAKE_CURRENT_LIST_DIR}/platform/win32crashhandler.cpp)
|
||||||
SET(ADDITIONAL_LIBRARIES ws2_32 mswsock)
|
SET(ADDITIONAL_LIBRARIES ws2_32 mswsock)
|
||||||
|
|
||||||
IF(CMAKE_COMPILER_IS_GNUCXX)
|
IF(CMAKE_COMPILER_IS_GNUCXX)
|
||||||
|
@ -89,13 +90,17 @@ ELSE(WIN32)
|
||||||
ADD_DEFINITIONS(-D_GLIBCXX__PTHREADS)
|
ADD_DEFINITIONS(-D_GLIBCXX__PTHREADS)
|
||||||
ENDIF(USE_GCC47)
|
ENDIF(USE_GCC47)
|
||||||
SET(ADDITIONAL_LIBRARIES X11 dl)
|
SET(ADDITIONAL_LIBRARIES X11 dl)
|
||||||
SET(framework_SOURCES ${framework_SOURCES} ${CMAKE_CURRENT_LIST_DIR}/platform/x11window.cpp)
|
SET(framework_SOURCES ${framework_SOURCES}
|
||||||
|
${CMAKE_CURRENT_LIST_DIR}/platform/x11window.cpp
|
||||||
|
${CMAKE_CURRENT_LIST_DIR}/platform/unixcrashhandler.cpp)
|
||||||
ENDIF(WIN32)
|
ENDIF(WIN32)
|
||||||
|
|
||||||
|
|
||||||
INCLUDE_DIRECTORIES(
|
INCLUDE_DIRECTORIES(
|
||||||
${Boost_INCLUDE_DIRS}
|
${Boost_INCLUDE_DIRS}
|
||||||
${OPENGL_INCLUDE_DIR}
|
${OPENGL_INCLUDE_DIR}
|
||||||
|
${EGL_INCLUDE_DIR}
|
||||||
|
${OPENGLES_INCLUDE_DIR}
|
||||||
${LUA_INCLUDE_DIR}
|
${LUA_INCLUDE_DIR}
|
||||||
${PHYSFS_INCLUDE_DIR}
|
${PHYSFS_INCLUDE_DIR}
|
||||||
${GMP_INCLUDE_DIR}
|
${GMP_INCLUDE_DIR}
|
||||||
|
@ -105,7 +110,9 @@ INCLUDE_DIRECTORIES(
|
||||||
|
|
||||||
SET(framework_LIBRARIES
|
SET(framework_LIBRARIES
|
||||||
${Boost_LIBRARIES}
|
${Boost_LIBRARIES}
|
||||||
|
${GLEW_LIBRARY}
|
||||||
${OPENGL_LIBRARIES}
|
${OPENGL_LIBRARIES}
|
||||||
|
${OPENGLES_LIBRARY}
|
||||||
${LUA_LIBRARIES}
|
${LUA_LIBRARIES}
|
||||||
${PHYSFS_LIBRARY}
|
${PHYSFS_LIBRARY}
|
||||||
${GMP_LIBRARY}
|
${GMP_LIBRARY}
|
||||||
|
|
|
@ -34,6 +34,7 @@
|
||||||
#include <framework/graphics/particlemanager.h>
|
#include <framework/graphics/particlemanager.h>
|
||||||
#include <framework/graphics/painter.h>
|
#include <framework/graphics/painter.h>
|
||||||
#include <framework/luascript/luainterface.h>
|
#include <framework/luascript/luainterface.h>
|
||||||
|
#include <framework/platform/crashhandler.h>
|
||||||
|
|
||||||
Application *g_app = nullptr;
|
Application *g_app = nullptr;
|
||||||
|
|
||||||
|
@ -72,6 +73,10 @@ void Application::init(const std::vector<std::string>& args, int appFlags)
|
||||||
signal(SIGTERM, exitSignalHandler);
|
signal(SIGTERM, exitSignalHandler);
|
||||||
signal(SIGINT, exitSignalHandler);
|
signal(SIGINT, exitSignalHandler);
|
||||||
|
|
||||||
|
#ifdef HANDLE_EXCEPTIONS
|
||||||
|
installCrashHandler();
|
||||||
|
#endif
|
||||||
|
|
||||||
// initialize lua
|
// initialize lua
|
||||||
g_lua.init();
|
g_lua.init();
|
||||||
registerLuaFunctions();
|
registerLuaFunctions();
|
||||||
|
|
|
@ -3,7 +3,7 @@
|
||||||
# EGL_INCLUDE_DIR - the EGL include directory
|
# EGL_INCLUDE_DIR - the EGL include directory
|
||||||
# EGL_LIBRARY - the EGL library
|
# EGL_LIBRARY - the EGL library
|
||||||
|
|
||||||
FIND_PATH(EGL_INCLUDE_DIR egl.h PATH_SUFFIXES EGL)
|
FIND_PATH(EGL_INCLUDE_DIR NAMES EGL/egl.h)
|
||||||
FIND_LIBRARY(EGL_LIBRARY NAMES EGL)
|
FIND_LIBRARY(EGL_LIBRARY NAMES EGL)
|
||||||
INCLUDE(FindPackageHandleStandardArgs)
|
INCLUDE(FindPackageHandleStandardArgs)
|
||||||
FIND_PACKAGE_HANDLE_STANDARD_ARGS(EGL DEFAULT_MSG EGL_LIBRARY EGL_INCLUDE_DIR)
|
FIND_PACKAGE_HANDLE_STANDARD_ARGS(EGL DEFAULT_MSG EGL_LIBRARY EGL_INCLUDE_DIR)
|
||||||
|
|
|
@ -0,0 +1,10 @@
|
||||||
|
# Try to find the GLEW librairy
|
||||||
|
# GLEW_FOUND - system has GLEW
|
||||||
|
# GLEW_INCLUDE_DIR - the GLEW include directory
|
||||||
|
# GLEW_LIBRARY - the GLEW library
|
||||||
|
|
||||||
|
FIND_PATH(GLEW_INCLUDE_DIR NAMES GL/glew.h)
|
||||||
|
FIND_LIBRARY(GLEW_LIBRARY NAMES libGLEW.a libglew32.a GLEW glew32)
|
||||||
|
INCLUDE(FindPackageHandleStandardArgs)
|
||||||
|
FIND_PACKAGE_HANDLE_STANDARD_ARGS(GLEW DEFAULT_MSG GLEW_LIBRARY GLEW_INCLUDE_DIR)
|
||||||
|
MARK_AS_ADVANCED(GLEW_LIBRARY GLEW_INCLUDE_DIR)
|
|
@ -3,7 +3,7 @@
|
||||||
# OPENGLES_INCLUDE_DIR - the OpenGLES include directory
|
# OPENGLES_INCLUDE_DIR - the OpenGLES include directory
|
||||||
# OPENGLES_LIBRARY - the OpenGLES library
|
# OPENGLES_LIBRARY - the OpenGLES library
|
||||||
|
|
||||||
FIND_PATH(OPENGLES_INCLUDE_DIR gl2.h PATH_SUFFIXES GLES2)
|
FIND_PATH(OPENGLES_INCLUDE_DIR NAMES GLES2/gl2.h)
|
||||||
FIND_LIBRARY(OPENGLES_LIBRARY NAMES GLESv2)
|
FIND_LIBRARY(OPENGLES_LIBRARY NAMES GLESv2)
|
||||||
INCLUDE(FindPackageHandleStandardArgs)
|
INCLUDE(FindPackageHandleStandardArgs)
|
||||||
FIND_PACKAGE_HANDLE_STANDARD_ARGS(OpenGLES DEFAULT_MSG OPENGLES_LIBRARY OPENGLES_INCLUDE_DIR)
|
FIND_PACKAGE_HANDLE_STANDARD_ARGS(OpenGLES DEFAULT_MSG OPENGLES_LIBRARY OPENGLES_INCLUDE_DIR)
|
||||||
|
|
|
@ -24,12 +24,13 @@
|
||||||
#ifndef GLUTIL_H
|
#ifndef GLUTIL_H
|
||||||
#define GLUTIL_H
|
#define GLUTIL_H
|
||||||
|
|
||||||
#define GL_GLEXT_PROTOTYPES
|
|
||||||
|
|
||||||
#ifndef OPENGL_ES2
|
#ifndef OPENGL_ES2
|
||||||
#include <GL/gl.h>
|
#define GLEW_STATIC
|
||||||
#include <GL/glext.h>
|
#include <GL/glew.h>
|
||||||
|
//#include <GL/gl.h>
|
||||||
|
//#include <GL/glext.h>
|
||||||
#else
|
#else
|
||||||
|
#define GL_GLEXT_PROTOTYPES
|
||||||
#include <GLES2/gl2.h>
|
#include <GLES2/gl2.h>
|
||||||
#include <GLES2/gl2ext.h>
|
#include <GLES2/gl2ext.h>
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -30,6 +30,18 @@ Graphics g_graphics;
|
||||||
|
|
||||||
void Graphics::init()
|
void Graphics::init()
|
||||||
{
|
{
|
||||||
|
#ifndef OPENGL_ES2
|
||||||
|
// init GL extensions
|
||||||
|
GLenum err = glewInit();
|
||||||
|
if(err != GLEW_OK)
|
||||||
|
logFatal("Unable to init GLEW: ", glewGetErrorString(err));
|
||||||
|
if(!GLEW_ARB_vertex_program || !GLEW_ARB_vertex_shader ||
|
||||||
|
!GLEW_ARB_fragment_program || !GLEW_ARB_fragment_shader ||
|
||||||
|
!GLEW_ARB_framebuffer_object ||
|
||||||
|
!GLEW_ARB_multitexture)
|
||||||
|
logFatal("Your video driver is not supported");
|
||||||
|
#endif
|
||||||
|
|
||||||
glEnable(GL_BLEND);
|
glEnable(GL_BLEND);
|
||||||
glClearColor(0.0f, 0.0f, 0.0f, 0.0f);
|
glClearColor(0.0f, 0.0f, 0.0f, 0.0f);
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,28 @@
|
||||||
|
/*
|
||||||
|
* Copyright (c) 2010-2011 OTClient <https://github.com/edubart/otclient>
|
||||||
|
*
|
||||||
|
* Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
|
* of this software and associated documentation files (the "Software"), to deal
|
||||||
|
* in the Software without restriction, including without limitation the rights
|
||||||
|
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||||
|
* copies of the Software, and to permit persons to whom the Software is
|
||||||
|
* furnished to do so, subject to the following conditions:
|
||||||
|
*
|
||||||
|
* The above copyright notice and this permission notice shall be included in
|
||||||
|
* all copies or substantial portions of the Software.
|
||||||
|
*
|
||||||
|
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||||
|
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||||
|
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||||
|
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||||
|
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||||
|
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
||||||
|
* THE SOFTWARE.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef CRASHHANDLER_H
|
||||||
|
#define CRASHHANDLER_H
|
||||||
|
|
||||||
|
void installCrashHandler();
|
||||||
|
|
||||||
|
#endif
|
|
@ -20,11 +20,10 @@
|
||||||
* THE SOFTWARE.
|
* THE SOFTWARE.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
#include "crashhandler.h"
|
||||||
#ifdef HANDLE_EXCEPTIONS
|
#include <framework/global.h>
|
||||||
|
|
||||||
#include <csignal>
|
|
||||||
#include <execinfo.h>
|
#include <execinfo.h>
|
||||||
|
#include <framework/application.h>
|
||||||
|
|
||||||
#define MAX_BACKTRACE_DEPTH 128
|
#define MAX_BACKTRACE_DEPTH 128
|
||||||
#define DEMANGLE_BACKTRACE_SYMBOLS
|
#define DEMANGLE_BACKTRACE_SYMBOLS
|
||||||
|
@ -38,7 +37,7 @@ void crashHandler(int signum, siginfo_t* info, void* secret)
|
||||||
char fileName[128];
|
char fileName[128];
|
||||||
time(&tnow);
|
time(&tnow);
|
||||||
tm *ts = localtime(&tnow);
|
tm *ts = localtime(&tnow);
|
||||||
strftime(fileName, 128, (x11.appName + "-crash_-%d-%m-%Y_%H:%M:%S.txt").c_str(), ts);
|
strftime(fileName, 128, (g_app->getAppName() + "-crash_-%d-%m-%Y_%H:%M:%S.txt").c_str(), ts);
|
||||||
|
|
||||||
std::stringstream ss;
|
std::stringstream ss;
|
||||||
ss.flags(std::ios::hex | std::ios::showbase);
|
ss.flags(std::ios::hex | std::ios::showbase);
|
||||||
|
@ -103,10 +102,9 @@ void crashHandler(int signum, siginfo_t* info, void* secret)
|
||||||
signal(SIGSEGV, SIG_DFL);
|
signal(SIGSEGV, SIG_DFL);
|
||||||
signal(SIGFPE, SIG_DFL);
|
signal(SIGFPE, SIG_DFL);
|
||||||
}
|
}
|
||||||
#endif
|
|
||||||
|
|
||||||
|
void installCrashHandler()
|
||||||
#ifdef HANDLE_EXCEPTIONS
|
{
|
||||||
struct sigaction sa;
|
struct sigaction sa;
|
||||||
sa.sa_sigaction = &crashHandler;
|
sa.sa_sigaction = &crashHandler;
|
||||||
sigemptyset (&sa.sa_mask);
|
sigemptyset (&sa.sa_mask);
|
||||||
|
@ -115,4 +113,4 @@ void crashHandler(int signum, siginfo_t* info, void* secret)
|
||||||
sigaction(SIGILL, &sa, NULL); // illegal instruction
|
sigaction(SIGILL, &sa, NULL); // illegal instruction
|
||||||
sigaction(SIGSEGV, &sa, NULL); // segmentation fault
|
sigaction(SIGSEGV, &sa, NULL); // segmentation fault
|
||||||
sigaction(SIGFPE, &sa, NULL); // floating-point exception
|
sigaction(SIGFPE, &sa, NULL); // floating-point exception
|
||||||
#endif
|
}
|
|
@ -0,0 +1,85 @@
|
||||||
|
/*
|
||||||
|
* Copyright (c) 2010-2011 OTClient <https://github.com/edubart/otclient>
|
||||||
|
*
|
||||||
|
* Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
|
* of this software and associated documentation files (the "Software"), to deal
|
||||||
|
* in the Software without restriction, including without limitation the rights
|
||||||
|
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||||
|
* copies of the Software, and to permit persons to whom the Software is
|
||||||
|
* furnished to do so, subject to the following conditions:
|
||||||
|
*
|
||||||
|
* The above copyright notice and this permission notice shall be included in
|
||||||
|
* all copies or substantial portions of the Software.
|
||||||
|
*
|
||||||
|
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||||
|
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||||
|
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||||
|
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||||
|
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||||
|
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
||||||
|
* THE SOFTWARE.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include "crashhandler.h"
|
||||||
|
#include <framework/global.h>
|
||||||
|
#include <windows.h>
|
||||||
|
#include <dbghelp.h>
|
||||||
|
#include <framework/application.h>
|
||||||
|
|
||||||
|
typedef BOOL (WINAPI *MINIDUMPWRITEDUMP)(
|
||||||
|
HANDLE hProcess,
|
||||||
|
DWORD ProcessId,
|
||||||
|
HANDLE hFile,
|
||||||
|
MINIDUMP_TYPE DumpType,
|
||||||
|
PMINIDUMP_EXCEPTION_INFORMATION ExceptionParam,
|
||||||
|
PMINIDUMP_USER_STREAM_INFORMATION UserStreamParam,
|
||||||
|
PMINIDUMP_CALLBACK_INFORMATION CallbackParam);
|
||||||
|
|
||||||
|
LONG WINAPI crashHandler(EXCEPTION_POINTERS* exceptionPointers)
|
||||||
|
{
|
||||||
|
logError("Application crashed");
|
||||||
|
HMODULE hDbgHelp = LoadLibraryA("DBGHELP.DLL");
|
||||||
|
char fileName[128];
|
||||||
|
|
||||||
|
if(hDbgHelp) {
|
||||||
|
MINIDUMPWRITEDUMP minuDumpWriteDump = (MINIDUMPWRITEDUMP)GetProcAddress(hDbgHelp, "MiniDumpWriteDump");
|
||||||
|
|
||||||
|
SYSTEMTIME systemTime;
|
||||||
|
GetSystemTime(&systemTime);
|
||||||
|
snprintf(fileName, 128, "%s_%02u-%02u-%04u_%02u-%02u-%02u.mdmp", g_app->getAppName().c_str(),
|
||||||
|
systemTime.wDay, systemTime.wMonth, systemTime.wYear,
|
||||||
|
systemTime.wHour, systemTime.wMinute, systemTime.wSecond);
|
||||||
|
|
||||||
|
HANDLE hFile = CreateFileA(fileName, GENERIC_READ | GENERIC_WRITE, 0, NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL);
|
||||||
|
if(hFile) {
|
||||||
|
MINIDUMP_EXCEPTION_INFORMATION exceptionInformation;
|
||||||
|
exceptionInformation.ClientPointers = FALSE;
|
||||||
|
exceptionInformation.ExceptionPointers = exceptionPointers;
|
||||||
|
exceptionInformation.ThreadId = GetCurrentThreadId();
|
||||||
|
|
||||||
|
HANDLE hProcess = GetCurrentProcess();
|
||||||
|
DWORD ProcessId = GetProcessId(hProcess);
|
||||||
|
MINIDUMP_TYPE flags = (MINIDUMP_TYPE)(MiniDumpNormal);
|
||||||
|
|
||||||
|
BOOL dumpResult = minuDumpWriteDump(hProcess, ProcessId, hFile, flags, &exceptionInformation, NULL, NULL);
|
||||||
|
if(!dumpResult){
|
||||||
|
logError("Cannot generate minidump: ", GetLastError());
|
||||||
|
CloseHandle(hFile);
|
||||||
|
DeleteFileA(fileName);
|
||||||
|
return EXCEPTION_CONTINUE_SEARCH;
|
||||||
|
} else {
|
||||||
|
logInfo("Crash minidump genarated on file ", fileName);
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
logError("Cannot create dump file: ", GetLastError());
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
logError("Cannot create dump file: dbghlp.dll not found");
|
||||||
|
}
|
||||||
|
return EXCEPTION_CONTINUE_SEARCH;
|
||||||
|
}
|
||||||
|
|
||||||
|
void installCrashHandler()
|
||||||
|
{
|
||||||
|
SetUnhandledExceptionFilter(crashHandler);
|
||||||
|
}
|
File diff suppressed because it is too large
Load Diff
|
@ -25,9 +25,61 @@
|
||||||
|
|
||||||
#include "platformwindow.h"
|
#include "platformwindow.h"
|
||||||
|
|
||||||
|
#include <windows.h>
|
||||||
|
|
||||||
|
struct WindowProcProxy;
|
||||||
|
|
||||||
class WIN32Window : public PlatformWindow
|
class WIN32Window : public PlatformWindow
|
||||||
{
|
{
|
||||||
//TODO
|
void internalCreateWindow();
|
||||||
|
void internalRegisterWindowClass();
|
||||||
|
|
||||||
|
void internalChooseGLVisual();
|
||||||
|
void internalCreateGLContext();
|
||||||
|
|
||||||
|
void *getExtensionProcAddress(const char *ext);
|
||||||
|
bool isExtensionSupported(const char *ext);
|
||||||
|
|
||||||
|
LRESULT windowProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam);
|
||||||
|
friend class WindowProcProxy;
|
||||||
|
|
||||||
|
public:
|
||||||
|
WIN32Window();
|
||||||
|
|
||||||
|
void init();
|
||||||
|
void terminate();
|
||||||
|
|
||||||
|
void move(const Point& pos);
|
||||||
|
void resize(const Size& size);
|
||||||
|
void show();
|
||||||
|
void hide();
|
||||||
|
void maximize();
|
||||||
|
void poll();
|
||||||
|
void swapBuffers();
|
||||||
|
void showMouse();
|
||||||
|
void hideMouse();
|
||||||
|
|
||||||
|
void setTitle(const std::string& title);
|
||||||
|
void setMinimumSize(const Size& minimumSize);
|
||||||
|
void setFullscreen(bool fullscreen);
|
||||||
|
void setVerticalSync(bool enable);
|
||||||
|
void setIcon(const std::string& iconFile);
|
||||||
|
void setClipboardText(const std::string& text);
|
||||||
|
|
||||||
|
Size getDisplaySize();
|
||||||
|
std::string getClipboardText();
|
||||||
|
|
||||||
|
bool isMaximized() { return m_maximized; }
|
||||||
|
|
||||||
|
private:
|
||||||
|
HWND m_window;
|
||||||
|
HINSTANCE m_instance;
|
||||||
|
HDC m_deviceContext;
|
||||||
|
HGLRC m_glContext;
|
||||||
|
bool m_maximized;
|
||||||
|
Point m_lastWindowPos;
|
||||||
|
std::string m_clipboardText;
|
||||||
|
std::map<int, Fw::Key> m_keyMap;
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -26,9 +26,25 @@
|
||||||
|
|
||||||
X11Window::X11Window()
|
X11Window::X11Window()
|
||||||
{
|
{
|
||||||
m_cursor = None;
|
m_display = 0;
|
||||||
m_visual = 0;
|
m_visual = 0;
|
||||||
|
m_window = 0;
|
||||||
|
m_rootWindow = 0;
|
||||||
m_colormap = 0;
|
m_colormap = 0;
|
||||||
|
m_cursor = 0;
|
||||||
|
m_xim = 0;
|
||||||
|
m_xic = 0;
|
||||||
|
m_screen = 0;
|
||||||
|
m_wmDelete = 0;
|
||||||
|
|
||||||
|
#ifndef OPENGL_ES2
|
||||||
|
m_glxContext = 0;
|
||||||
|
#else
|
||||||
|
m_eglConfig = 0;
|
||||||
|
m_eglContext = 0;
|
||||||
|
m_eglDisplay = 0;
|
||||||
|
m_eglSurface = 0;
|
||||||
|
#endif
|
||||||
|
|
||||||
m_keyMap[XK_Escape] = Fw::KeyEscape;
|
m_keyMap[XK_Escape] = Fw::KeyEscape;
|
||||||
m_keyMap[XK_Tab] = Fw::KeyTab;
|
m_keyMap[XK_Tab] = Fw::KeyTab;
|
||||||
|
@ -193,23 +209,37 @@ void X11Window::init()
|
||||||
|
|
||||||
void X11Window::terminate()
|
void X11Window::terminate()
|
||||||
{
|
{
|
||||||
XDestroyWindow(m_display, m_window);
|
if(m_window) {
|
||||||
|
XDestroyWindow(m_display, m_window);
|
||||||
|
m_window = 0;
|
||||||
|
}
|
||||||
|
|
||||||
if(m_colormap)
|
if(m_colormap) {
|
||||||
XFreeColormap(m_display, m_colormap);
|
XFreeColormap(m_display, m_colormap);
|
||||||
|
m_colormap = 0;
|
||||||
|
}
|
||||||
|
|
||||||
internalDestroyGLContext();
|
internalDestroyGLContext();
|
||||||
|
|
||||||
if(m_visual)
|
if(m_visual) {
|
||||||
XFree(m_visual);
|
XFree(m_visual);
|
||||||
|
m_visual = 0;
|
||||||
|
}
|
||||||
|
|
||||||
if(m_xic)
|
if(m_xic) {
|
||||||
XDestroyIC(m_xic);
|
XDestroyIC(m_xic);
|
||||||
|
m_xic = 0;
|
||||||
|
}
|
||||||
|
|
||||||
if(m_xim)
|
if(m_xim) {
|
||||||
XCloseIM(m_xim);
|
XCloseIM(m_xim);
|
||||||
|
m_xim = 0;
|
||||||
|
}
|
||||||
|
|
||||||
XCloseDisplay(m_display);
|
if(m_display) {
|
||||||
|
XCloseDisplay(m_display);
|
||||||
|
m_display = 0;
|
||||||
|
}
|
||||||
|
|
||||||
m_visible = false;
|
m_visible = false;
|
||||||
}
|
}
|
||||||
|
@ -380,12 +410,24 @@ void X11Window::internalCreateGLContext()
|
||||||
void X11Window::internalDestroyGLContext()
|
void X11Window::internalDestroyGLContext()
|
||||||
{
|
{
|
||||||
#ifndef OPENGL_ES2
|
#ifndef OPENGL_ES2
|
||||||
glXMakeCurrent(m_display, None, NULL);
|
if(m_glxContext) {
|
||||||
glXDestroyContext(m_display, m_glxContext);
|
glXMakeCurrent(m_display, None, NULL);
|
||||||
|
glXDestroyContext(m_display, m_glxContext);
|
||||||
|
m_glxContext = 0;
|
||||||
|
}
|
||||||
#else
|
#else
|
||||||
eglDestroyContext(m_eglDisplay, m_eglContext);
|
if(m_eglDisplay) {
|
||||||
eglDestroySurface(m_eglDisplay, m_eglSurface);
|
if(m_eglContext) {
|
||||||
eglTerminate(m_eglDisplay);
|
eglDestroyContext(m_eglDisplay, m_eglContext);
|
||||||
|
m_eglContext = 0;
|
||||||
|
}
|
||||||
|
if(m_eglSurface)
|
||||||
|
eglDestroySurface(m_eglDisplay, m_eglSurface);
|
||||||
|
m_eglSurface = 0;
|
||||||
|
}
|
||||||
|
eglTerminate(m_eglDisplay);
|
||||||
|
m_eglDisplay = 0;
|
||||||
|
}
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -27,11 +27,13 @@
|
||||||
#include "item.h"
|
#include "item.h"
|
||||||
#include "missile.h"
|
#include "missile.h"
|
||||||
#include "statictext.h"
|
#include "statictext.h"
|
||||||
|
|
||||||
#include <framework/graphics/graphics.h>
|
#include <framework/graphics/graphics.h>
|
||||||
#include <framework/graphics/framebuffer.h>
|
#include <framework/graphics/framebuffer.h>
|
||||||
#include <framework/graphics/paintershaderprogram.h>
|
#include <framework/graphics/paintershaderprogram.h>
|
||||||
#include <framework/graphics/paintershadersources.h>
|
#include <framework/graphics/paintershadersources.h>
|
||||||
#include <framework/graphics/texture.h>
|
#include <framework/graphics/texture.h>
|
||||||
|
|
||||||
Map g_map;
|
Map g_map;
|
||||||
|
|
||||||
Map::Map()
|
Map::Map()
|
||||||
|
@ -39,7 +41,6 @@ Map::Map()
|
||||||
setVisibleSize(Size(MAP_VISIBLE_WIDTH, MAP_VISIBLE_HEIGHT));
|
setVisibleSize(Size(MAP_VISIBLE_WIDTH, MAP_VISIBLE_HEIGHT));
|
||||||
}
|
}
|
||||||
|
|
||||||
PainterShaderProgramPtr program;
|
|
||||||
void Map::draw(const Rect& rect)
|
void Map::draw(const Rect& rect)
|
||||||
{
|
{
|
||||||
if(!m_framebuffer) {
|
if(!m_framebuffer) {
|
||||||
|
@ -47,10 +48,10 @@ void Map::draw(const Rect& rect)
|
||||||
m_framebuffer = FrameBufferPtr(new FrameBuffer(fboSize));
|
m_framebuffer = FrameBufferPtr(new FrameBuffer(fboSize));
|
||||||
|
|
||||||
|
|
||||||
program = PainterShaderProgramPtr(new PainterShaderProgram);
|
m_shaderProgram = PainterShaderProgramPtr(new PainterShaderProgram);
|
||||||
program->addShaderFromSourceCode(Shader::Vertex, glslMainWithTexCoordsVertexShader + glslPositionOnlyVertexShader);
|
m_shaderProgram->addShaderFromSourceCode(Shader::Vertex, glslMainWithTexCoordsVertexShader + glslPositionOnlyVertexShader);
|
||||||
program->addShaderFromSourceFile(Shader::Fragment, "/game_shaders/map.frag");
|
m_shaderProgram->addShaderFromSourceFile(Shader::Fragment, "/game_shaders/map.frag");
|
||||||
assert(program->link());
|
assert(m_shaderProgram->link());
|
||||||
}
|
}
|
||||||
|
|
||||||
g_painter.setColor(Fw::white);
|
g_painter.setColor(Fw::white);
|
||||||
|
@ -95,7 +96,7 @@ void Map::draw(const Rect& rect)
|
||||||
m_framebuffer->release();
|
m_framebuffer->release();
|
||||||
|
|
||||||
|
|
||||||
g_painter.setCustomProgram(program);
|
g_painter.setCustomProgram(m_shaderProgram);
|
||||||
g_painter.setColor(Fw::white);
|
g_painter.setColor(Fw::white);
|
||||||
m_framebuffer->draw(rect);
|
m_framebuffer->draw(rect);
|
||||||
g_painter.releaseCustomProgram();
|
g_painter.releaseCustomProgram();
|
||||||
|
|
|
@ -87,6 +87,7 @@ private:
|
||||||
Point m_centralOffset, m_drawOffset;
|
Point m_centralOffset, m_drawOffset;
|
||||||
|
|
||||||
FrameBufferPtr m_framebuffer;
|
FrameBufferPtr m_framebuffer;
|
||||||
|
PainterShaderProgramPtr m_shaderProgram;
|
||||||
};
|
};
|
||||||
|
|
||||||
extern Map g_map;
|
extern Map g_map;
|
||||||
|
|
Loading…
Reference in New Issue