summaryrefslogtreecommitdiff
path: root/pcr/reicast-multilib-git/sdl-opengl.patch
diff options
context:
space:
mode:
Diffstat (limited to 'pcr/reicast-multilib-git/sdl-opengl.patch')
-rw-r--r--pcr/reicast-multilib-git/sdl-opengl.patch251
1 files changed, 251 insertions, 0 deletions
diff --git a/pcr/reicast-multilib-git/sdl-opengl.patch b/pcr/reicast-multilib-git/sdl-opengl.patch
new file mode 100644
index 000000000..372ec9a52
--- /dev/null
+++ b/pcr/reicast-multilib-git/sdl-opengl.patch
@@ -0,0 +1,251 @@
+diff -Nur a/core/khronos/GL3/gl3w.c b/core/khronos/GL3/gl3w.c
+--- a/core/khronos/GL3/gl3w.c 2015-10-06 21:43:53.040336386 -0300
++++ b/core/khronos/GL3/gl3w.c 2015-10-06 22:04:39.682388782 -0300
+@@ -1,6 +1,25 @@
+ #include <GL3/gl3w.h>
+
+-#ifdef _WIN32
++#if defined(USE_SDL2)
++ #include <SDL2/SDL.h>
++ static void open_libgl(void)
++ {
++ SDL_GL_LoadLibrary(NULL);
++ }
++
++ static void close_libgl(void)
++ {
++ SDL_GL_UnloadLibrary();
++ }
++
++ static void *get_proc(const char *proc)
++ {
++ void *res = NULL;
++ res = (void*)SDL_GL_GetProcAddress(proc);
++ return res;
++ }
++
++#elif defined(_WIN32)
+ #define WIN32_LEAN_AND_MEAN 1
+ #include <windows.h>
+
+diff -Nur a/core/sdl/sdl.cpp b/core/sdl/sdl.cpp
+--- a/core/sdl/sdl.cpp 2015-10-06 21:43:53.048336444 -0300
++++ b/core/sdl/sdl.cpp 2015-10-06 22:04:39.683388790 -0300
+@@ -5,6 +5,18 @@
+ #include "sdl/sdl.h"
+ #ifdef GLES
+ #include <EGL/egl.h>
++#else
++ #ifndef USE_SDL2
++ #error "Our SDL1.2 implementation only supports GLES. You need SDL2 for OpenGL 3 support!"
++ #endif
++ #include "khronos/GL3/gl3w.h"
++#endif
++
++#ifdef USE_SDL2
++ static SDL_Window* window = NULL;
++ static SDL_GLContext glcontext;
++#else
++ SDL_Surface *screen = NULL;
+ #endif
+
+ #ifdef TARGET_PANDORA
+@@ -14,8 +26,6 @@
+ #endif
+ #define WINDOW_HEIGHT 480
+
+-SDL_Surface *screen = NULL;
+-
+ static SDL_Joystick *JoySDL = 0;
+
+ extern bool FrameSkipping;
+@@ -80,11 +90,15 @@
+
+ AxisCount = SDL_JoystickNumAxes(JoySDL);
+ ButtonCount = SDL_JoystickNumButtons(JoySDL);
+- Name = SDL_JoystickName(0);
+-
++ #ifdef USE_SDL2
++ Name = SDL_JoystickName(JoySDL);
++ #else
++ Name = SDL_JoystickName(0);
++ #endif
++
+ printf("SDK: Found '%s' joystick with %d axes and %d buttons\n", Name, AxisCount, ButtonCount);
+
+- if (strcmp(Name,"Microsoft X-Box 360 pad")==0)
++ if (Name != NULL && strcmp(Name,"Microsoft X-Box 360 pad")==0)
+ {
+ sdl_map_btn = sdl_map_btn_xbox360;
+ sdl_map_axis = sdl_map_axis_xbox360;
+@@ -113,12 +127,16 @@
+ }
+ #endif
+
+- SDL_ShowCursor(0);
++ #ifndef USE_SDL2
++ SDL_ShowCursor(0);
+
+- if (SDL_WM_GrabInput( SDL_GRAB_ON ) != SDL_GRAB_ON)
+- {
+- printf("SDK: Error while grabbing mouse\n");
+- }
++ if (SDL_WM_GrabInput( SDL_GRAB_ON ) != SDL_GRAB_ON)
++ {
++ printf("SDL: Error while grabbing mouse\n");
++ }
++ #else
++ SDL_SetRelativeMouseMode(SDL_TRUE);
++ #endif
+ }
+
+ void input_sdl_handle(u32 port)
+@@ -397,7 +415,14 @@
+ #ifdef TARGET_PANDORA
+ strncpy(OSD_Counters, text, 256);
+ #else
+- SDL_WM_SetCaption(text, NULL); // *TODO* Set Icon also...
++ #ifdef USE_SDL2
++ if(window)
++ {
++ SDL_SetWindowTitle(window, text); // *TODO* Set Icon also...
++ }
++ #else
++ SDL_WM_SetCaption(text, NULL);
++ #endif
+ #endif
+ }
+
+@@ -415,17 +440,79 @@
+
+ int window_width = cfgLoadInt("x11","width", WINDOW_WIDTH);
+ int window_height = cfgLoadInt("x11","height", WINDOW_HEIGHT);
++
+ #ifdef TARGET_PANDORA
+ int flags = SDL_FULLSCREEN;
+ #else
+ int flags = SDL_SWSURFACE;
+ #endif
+- screen = SDL_SetVideoMode(window_width, window_height, 0, flags);
+- if (!screen)
+- {
+- die("error creating SDL screen");
+- }
+- x11_disp = EGL_DEFAULT_DISPLAY;
+- printf("Created SDL Windows (%ix%i) successfully\n", window_width, window_height);
++
++ #if !defined(GLES) && defined(USE_SDL2)
++ flags |= SDL_WINDOW_OPENGL;
++
++ SDL_GL_SetAttribute(SDL_GL_CONTEXT_PROFILE_MASK, SDL_GL_CONTEXT_PROFILE_CORE);
++ SDL_GL_SetAttribute(SDL_GL_CONTEXT_MAJOR_VERSION, 3);
++ SDL_GL_SetAttribute(SDL_GL_CONTEXT_MINOR_VERSION, 1);
++ SDL_GL_SetAttribute(SDL_GL_RED_SIZE, 8);
++ SDL_GL_SetAttribute(SDL_GL_GREEN_SIZE, 8);
++ SDL_GL_SetAttribute(SDL_GL_BLUE_SIZE, 8);
++ SDL_GL_SetAttribute(SDL_GL_ALPHA_SIZE, 8);
++ SDL_GL_SetAttribute(SDL_GL_DEPTH_SIZE, 24);
++ SDL_GL_SetAttribute(SDL_GL_STENCIL_SIZE, 8);
++ SDL_GL_SetAttribute(SDL_GL_DOUBLEBUFFER, 1);
++
++ window = SDL_CreateWindow("Reicast Emulator", SDL_WINDOWPOS_UNDEFINED, SDL_WINDOWPOS_UNDEFINED, window_width, window_height, flags);
++ if (!window)
++ {
++ die("error creating SDL window");
++ }
++
++ glcontext = SDL_GL_CreateContext(window);
++ if (!glcontext)
++ {
++ die("Error creating SDL GL context");
++ }
++ SDL_GL_MakeCurrent(window, NULL);
++ #else
++ screen = SDL_SetVideoMode(window_width, window_height, 0, flags);
++ if (!screen)
++ {
++ die("error creating SDL screen");
++ }
++
++ x11_disp = EGL_DEFAULT_DISPLAY;
++ #endif
++
++ printf("Created SDL Window (%ix%i) and GL Context successfully\n", window_width, window_height);
+ }
+ #endif
++
++#if !defined(GLES) && defined(USE_SDL2)
++ extern int screen_width, screen_height;
++
++ bool gl_init(void* wind, void* disp)
++ {
++ SDL_GL_MakeCurrent(window, glcontext);
++ return gl3wInit() != -1 && gl3wIsSupported(3, 1);
++ }
++
++ void gl_swap()
++ {
++ SDL_GL_SwapWindow(window);
++
++ /* Check if drawable has been resized */
++ int new_width, new_height;
++ SDL_GL_GetDrawableSize(window, &new_width, &new_height);
++
++ if (new_width != screen_width || new_height != screen_height)
++ {
++ screen_width = new_width;
++ screen_height = new_height;
++ }
++ }
++
++ void gl_term()
++ {
++ SDL_GL_DeleteContext(glcontext);
++ }
++#endif
+\ No newline at end of file
+diff -Nur a/core/sdl/sdl.h b/core/sdl/sdl.h
+--- a/core/sdl/sdl.h 2015-10-06 21:43:53.048336444 -0300
++++ b/core/sdl/sdl.h 2015-10-06 22:04:39.683388790 -0300
+@@ -1,5 +1,9 @@
+ #pragma once
+-#include <SDL/SDL.h>
++#ifdef USE_SDL2
++ #include <SDL2/SDL.h>
++#else
++ #include <SDL/SDL.h>
++#endif
+ extern void* sdl_glc;
+ extern void input_sdl_init();
+ extern void input_sdl_handle(u32 port);
+diff -Nur a/shell/linux/Makefile b/shell/linux/Makefile
+--- a/shell/linux/Makefile 2015-10-06 21:43:53.161337253 -0300
++++ b/shell/linux/Makefile 2015-10-06 22:04:39.683388790 -0300
+@@ -175,6 +175,10 @@
+ $(error Unknown platform)
+ endif
+
++ifdef USE_SDL2
++ USE_SDL := 1
++endif
++
+ RZDCY_SRC_DIR = ../../core
+ include $(RZDCY_SRC_DIR)/core.mk
+
+@@ -202,8 +206,14 @@
+ endif
+
+ ifdef USE_SDL
+- CXXFLAGS += `sdl-config --cflags` -D USE_SDL
+- LIBS += `sdl-config --libs`
++ CXXFLAGS += -D USE_SDL
++ ifdef USE_SDL2
++ CXXFLAGS += `sdl2-config --cflags` -D USE_SDL2
++ LIBS += `sdl2-config --libs`
++ else
++ CXXFLAGS += `sdl-config --cflags`
++ LIBS += `sdl-config --libs`
++ endif
+ endif
+
+ ifdef PGO_MAKE