notaz / picodrive

Fast MegaDrive/MegaCD/32X emulator
Other
291 stars 165 forks source link

Scale for generic sdl build? #74

Open tokumeiwokiboushimasu opened 6 years ago

tokumeiwokiboushimasu commented 6 years ago

I want to use this emulator with 2x scale. Is it possible? If not, can you add the option please?

noabody commented 6 years ago

I was wondering about 2x scaling on Ubuntu 18.04 x86-64. Best I could come up with was a patch to build the opengl output which normally scales that way.

Not being a programmer, I constructed the LDFLAGS based on various stackexchange questions regarding how to build GL/GLES. Using this patch is something like:

git apply picogl.patch
patch -p1 < picogl.patch
diff --git a/Makefile b/Makefile
index 2903a68..956cadc 100644
--- a/Makefile
+++ b/Makefile
@@ -86,10 +86,14 @@ OBJS += platform/libpicofe/gl_platform.o
 USE_FRONTEND = 1
 endif
 ifeq "$(PLATFORM)" "generic"
+CFLAGS += -DHAVE_GLES
+LDFLAGS += -ldl -lpthread -lGL -lGLU -lglut -lEGL -lGLESv2
 OBJS += platform/linux/emu.o platform/linux/blit.o # FIXME
 OBJS += platform/common/plat_sdl.o
 OBJS += platform/libpicofe/plat_sdl.o platform/libpicofe/in_sdl.o
 OBJS += platform/libpicofe/plat_dummy.o
+OBJS += platform/libpicofe/gl.o
+OBJS += platform/libpicofe/gl_platform.o
 USE_FRONTEND = 1
 endif
 ifeq "$(PLATFORM)" "pandora"
diff --git a/platform/libpicofe/gl.c b/platform/libpicofe/gl.c
--- a/platform/libpicofe/gl.c   2018-07-07 20:00:32.282290503 -0600
+++ b/platform/libpicofe/gl.c   2018-07-07 19:52:54.322950774 -0600
@@ -2,7 +2,7 @@
 #include <stdlib.h>

 #include <EGL/egl.h>
-#include <GLES/gl.h>
+#include <GL/gl.h>
 #include "gl_platform.h"
 #include "gl.h"

diff --git a/platform/libpicofe/gl_platform.c b/platform/libpicofe/gl_platform.c
--- a/platform/libpicofe/gl_platform.c  2018-07-07 20:00:32.282290503 -0600
+++ b/platform/libpicofe/gl_platform.c  2018-07-07 19:52:45.643114431 -0600
@@ -1,7 +1,7 @@
 #include <stdio.h>
 #include <stdlib.h>
 #include <EGL/egl.h>
-#include <GLES/gl.h>
+#include <GL/gl.h>

 #include "gl.h"
 #include "gl_platform.h"

Includes would be like: libglu1-mesa-dev libgles2-mesa-dev libglew-dev freeglut3-dev

dilworks commented 5 years ago

Is freeglut strictly needed? I managed to compile using your patch on one of my systems that didn't had freeglut3-dev installed by just leaving -lglut out.

noabody commented 5 years ago

Oh, I haven't used that for awhile I guess. You can view my current patch at Picodrive patch.

The relevant part is is limited and extends joystick functionality to the d-pad. The full patch also makes picodrive system install possible on debian with checkinstall:


diff --git a/Makefile b/Makefile
index 2903a68..a06c5b4 100644
--- a/Makefile
+++ b/Makefile
@@ -86,10 +86,14 @@ OBJS += platform/libpicofe/gl_platform.o
 USE_FRONTEND = 1
 endif
 ifeq "$(PLATFORM)" "generic"
+CFLAGS += -DHAVE_GLES
+LDFLAGS += -ldl -lpthread -lGL -lEGL
 OBJS += platform/linux/emu.o platform/linux/blit.o # FIXME
 OBJS += platform/common/plat_sdl.o
 OBJS += platform/libpicofe/plat_sdl.o platform/libpicofe/in_sdl.o
 OBJS += platform/libpicofe/plat_dummy.o
+OBJS += platform/libpicofe/gl.o
+OBJS += platform/libpicofe/gl_platform.o
 USE_FRONTEND = 1
 endif
 ifeq "$(PLATFORM)" "pandora"
diff --git a/platform/libpicofe/gl.c b/platform/libpicofe/gl.c
--- a/platform/libpicofe/gl.c   2018-07-07 20:00:32.282290503 -0600
+++ b/platform/libpicofe/gl.c   2018-07-07 19:52:54.322950774 -0600
@@ -2,7 +2,11 @@
 #include <stdlib.h>

 #include <EGL/egl.h>
-#include <GLES/gl.h>
+#if defined(__arm__)
+  #include <GLES/gl.h>
+#else
+  #include <GL/gl.h>
+#endif
 #include "gl_platform.h"
 #include "gl.h"

diff --git a/platform/libpicofe/gl_platform.c b/platform/libpicofe/gl_platform.c
--- a/platform/libpicofe/gl_platform.c  2018-07-07 20:00:32.282290503 -0600
+++ b/platform/libpicofe/gl_platform.c  2018-07-07 19:52:45.643114431 -0600
@@ -1,7 +1,11 @@
 #include <stdio.h>
 #include <stdlib.h>
 #include <EGL/egl.h>
-#include <GLES/gl.h>
+#if defined(__arm__)
+  #include <GLES/gl.h>
+#else
+  #include <GL/gl.h>
+#endif

 #include "gl.h"
 #include "gl_platform.h"

diff --git a/platform/libpicofe/in_sdl.c  b/platform/libpicofe/in_sdl.c
--- a/platform/libpicofe/in_sdl.c   2018-07-29 08:38:02.016564259 -0600
+++ b/platform/libpicofe/in_sdl.c   2018-07-29 08:37:06.309806921 -0600
@@ -300,6 +300,34 @@
        }
        break;

+   case SDL_JOYHATMOTION:
+       if (event->jhat.which != state->joy_id)
+           return -2;
+       if (event->jhat.value == SDL_HAT_CENTERED) {
+           kc = state->axis_keydown[event->jhat.hat];
+           state->axis_keydown[event->jhat.hat] = 0;
+           ret = 1;
+       }
+       else if (event->jhat.value & SDL_HAT_UP || event->jhat.value & SDL_HAT_LEFT) {
+           kc = state->axis_keydown[event->jhat.hat];
+           if (kc)
+               update_keystate(state->keystate, kc, 0);
+           kc = (event->jhat.value & SDL_HAT_UP) ? SDLK_UP : SDLK_LEFT;
+           state->axis_keydown[event->jhat.hat] = kc;
+           down = 1;
+           ret = 1;
+       }
+       else if (event->jhat.value & SDL_HAT_DOWN || event->jhat.value & SDL_HAT_RIGHT) {
+           kc = state->axis_keydown[event->jhat.hat];
+           if (kc)
+               update_keystate(state->keystate, kc, 0);
+           kc = (event->jhat.value & SDL_HAT_DOWN) ? SDLK_DOWN : SDLK_RIGHT;
+           state->axis_keydown[event->jhat.hat] = kc;
+           down = 1;
+           ret = 1;
+       }
+       break;
+
    case SDL_JOYBUTTONDOWN:
    case SDL_JOYBUTTONUP:
        if (event->jbutton.which != state->joy_id)
xerz-one commented 4 years ago

As a sort of patch while this isn't implemented, in Linux you can use xpra like the following:

xpra start --no-daemon --exit-with-children=True --attach=True --opengl=yes:gtk --desktop-scaling=200% --start-child=PicoDrive

where --desktop-scaling lets you set at which scale you want to run the emulator at.