mirror of https://github.com/mgba-emu/mgba.git
SDL: More refactoring
This commit is contained in:
parent
4e64b4fde4
commit
dfaa06d0d2
|
@ -111,6 +111,8 @@ void mSDLGLRunloopGB(struct mSDLRenderer* renderer, void* user) {
|
||||||
struct GB* gb = user;
|
struct GB* gb = user;
|
||||||
SDL_Event event;
|
SDL_Event event;
|
||||||
struct VideoBackend* v = &renderer->gl.d;
|
struct VideoBackend* v = &renderer->gl.d;
|
||||||
|
int activeKeys = 0;
|
||||||
|
gb->keySource = &activeKeys;
|
||||||
|
|
||||||
while (true) {
|
while (true) {
|
||||||
int64_t frameCounter = gb->video.frameCounter;
|
int64_t frameCounter = gb->video.frameCounter;
|
||||||
|
@ -118,6 +120,23 @@ void mSDLGLRunloopGB(struct mSDLRenderer* renderer, void* user) {
|
||||||
LR35902Tick(gb->cpu);
|
LR35902Tick(gb->cpu);
|
||||||
}
|
}
|
||||||
while (SDL_PollEvent(&event)) {
|
while (SDL_PollEvent(&event)) {
|
||||||
|
// TODO: Refactor out
|
||||||
|
if (event.type == SDL_KEYUP || event.type == SDL_KEYDOWN) {
|
||||||
|
int key;
|
||||||
|
#if !defined(BUILD_PANDORA) && SDL_VERSION_ATLEAST(2, 0, 0)
|
||||||
|
key = GBAInputMapKey(renderer->player.bindings, SDL_BINDING_KEY, event.key.keysym.scancode);
|
||||||
|
#else
|
||||||
|
key = GBAInputMapKey(renderer->player.bindings, SDL_BINDING_KEY, event.key.keysym.sym);
|
||||||
|
#endif
|
||||||
|
if (key != GBA_KEY_NONE) {
|
||||||
|
if (event.type == SDL_KEYDOWN) {
|
||||||
|
activeKeys |= 1 << key;
|
||||||
|
} else {
|
||||||
|
activeKeys &= ~(1 << key);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
#if SDL_VERSION_ATLEAST(2, 0, 0)
|
#if SDL_VERSION_ATLEAST(2, 0, 0)
|
||||||
// Event handling can change the size of the screen
|
// Event handling can change the size of the screen
|
||||||
if (renderer->player.windowUpdated) {
|
if (renderer->player.windowUpdated) {
|
||||||
|
|
|
@ -47,7 +47,7 @@ static void mSDLDeinit(struct mSDLRenderer* renderer);
|
||||||
|
|
||||||
// TODO: Clean up signatures
|
// TODO: Clean up signatures
|
||||||
#ifdef M_CORE_GBA
|
#ifdef M_CORE_GBA
|
||||||
static int mSDLRunGBA(struct mSDLRenderer* renderer, struct GBAArguments* args, struct GBAOptions* opts, struct GBAConfig* config, struct GBAInputMap* inputMap);
|
static int mSDLRunGBA(struct mSDLRenderer* renderer, struct GBAArguments* args, struct GBAOptions* opts, struct GBAConfig* config);
|
||||||
#endif
|
#endif
|
||||||
#ifdef M_CORE_GB
|
#ifdef M_CORE_GB
|
||||||
static int mSDLRunGB(struct mSDLRenderer* renderer, struct GBAArguments* args);
|
static int mSDLRunGB(struct mSDLRenderer* renderer, struct GBAArguments* args);
|
||||||
|
@ -116,6 +116,14 @@ int main(int argc, char** argv) {
|
||||||
if (!opts.height) {
|
if (!opts.height) {
|
||||||
opts.height = VIDEO_VERTICAL_PIXELS;
|
opts.height = VIDEO_VERTICAL_PIXELS;
|
||||||
}
|
}
|
||||||
|
GBAVideoSoftwareRendererCreate(&renderer.d);
|
||||||
|
#ifdef BUILD_GL
|
||||||
|
mSDLGLCreate(&renderer);
|
||||||
|
#elif defined(BUILD_GLES2) || defined(USE_EPOXY)
|
||||||
|
mSDLGLES2Create(&renderer);
|
||||||
|
#else
|
||||||
|
mSDLSWCreate(&renderer);
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
#ifdef M_CORE_GB
|
#ifdef M_CORE_GB
|
||||||
|
@ -127,6 +135,14 @@ int main(int argc, char** argv) {
|
||||||
if (!opts.height) {
|
if (!opts.height) {
|
||||||
opts.height = /*GB_*/VIDEO_VERTICAL_PIXELS;
|
opts.height = /*GB_*/VIDEO_VERTICAL_PIXELS;
|
||||||
}
|
}
|
||||||
|
GBVideoSoftwareRendererCreate(&renderer.gb);
|
||||||
|
#ifdef BUILD_GL
|
||||||
|
mSDLGLCreateGB(&renderer);
|
||||||
|
#elif defined(BUILD_GLES2) || defined(USE_EPOXY)
|
||||||
|
mSDLGLES2CreateGB(&renderer);
|
||||||
|
#else
|
||||||
|
mSDLSWCreateGB(&renderer);
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
else {
|
else {
|
||||||
|
@ -157,11 +173,25 @@ int main(int argc, char** argv) {
|
||||||
renderer.lockAspectRatio = opts.lockAspectRatio;
|
renderer.lockAspectRatio = opts.lockAspectRatio;
|
||||||
renderer.filter = opts.resampleVideo;
|
renderer.filter = opts.resampleVideo;
|
||||||
|
|
||||||
|
if (!mSDLInit(&renderer)) {
|
||||||
|
freeArguments(&args);
|
||||||
|
GBAConfigFreeOpts(&opts);
|
||||||
|
GBAConfigDeinit(&config);
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
renderer.player.bindings = &inputMap;
|
||||||
|
GBASDLInitBindings(&inputMap);
|
||||||
|
GBASDLInitEvents(&renderer.events);
|
||||||
|
GBASDLEventsLoadConfig(&renderer.events, GBAConfigGetInput(&config));
|
||||||
|
GBASDLAttachPlayer(&renderer.events, &renderer.player);
|
||||||
|
GBASDLPlayerLoadConfig(&renderer.player, GBAConfigGetInput(&config));
|
||||||
|
|
||||||
int ret;
|
int ret;
|
||||||
|
|
||||||
switch (platform) {
|
switch (platform) {
|
||||||
case PLATFORM_GBA:
|
case PLATFORM_GBA:
|
||||||
ret = mSDLRunGBA(&renderer, &args, &opts, &config, &inputMap);
|
ret = mSDLRunGBA(&renderer, &args, &opts, &config);
|
||||||
break;
|
break;
|
||||||
case PLATFORM_GB:
|
case PLATFORM_GB:
|
||||||
ret = mSDLRunGB(&renderer, &args);
|
ret = mSDLRunGB(&renderer, &args);
|
||||||
|
@ -170,6 +200,10 @@ int main(int argc, char** argv) {
|
||||||
ret = 1;
|
ret = 1;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
GBASDLDetachPlayer(&renderer.events, &renderer.player);
|
||||||
|
GBAInputMapDeinit(&inputMap);
|
||||||
|
|
||||||
|
mSDLDeinit(&renderer);
|
||||||
|
|
||||||
freeArguments(&args);
|
freeArguments(&args);
|
||||||
GBAConfigFreeOpts(&opts);
|
GBAConfigFreeOpts(&opts);
|
||||||
|
@ -179,20 +213,7 @@ int main(int argc, char** argv) {
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef M_CORE_GBA
|
#ifdef M_CORE_GBA
|
||||||
int mSDLRunGBA(struct mSDLRenderer* renderer, struct GBAArguments* args, struct GBAOptions* opts, struct GBAConfig* config, struct GBAInputMap* inputMap) {
|
int mSDLRunGBA(struct mSDLRenderer* renderer, struct GBAArguments* args, struct GBAOptions* opts, struct GBAConfig* config) {
|
||||||
GBAVideoSoftwareRendererCreate(&renderer->d);
|
|
||||||
#ifdef BUILD_GL
|
|
||||||
mSDLGLCreate(renderer);
|
|
||||||
#elif defined(BUILD_GLES2) || defined(USE_EPOXY)
|
|
||||||
mSDLGLES2Create(renderer);
|
|
||||||
#else
|
|
||||||
mSDLSWCreate(renderer);
|
|
||||||
#endif
|
|
||||||
|
|
||||||
if (!mSDLInit(renderer)) {
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
struct GBAThread context = {
|
struct GBAThread context = {
|
||||||
.renderer = &renderer->d.d,
|
.renderer = &renderer->d.d,
|
||||||
.userData = renderer
|
.userData = renderer
|
||||||
|
@ -202,6 +223,7 @@ int mSDLRunGBA(struct mSDLRenderer* renderer, struct GBAArguments* args, struct
|
||||||
|
|
||||||
GBAMapOptionsToContext(opts, &context);
|
GBAMapOptionsToContext(opts, &context);
|
||||||
GBAMapArgumentsToContext(args, &context);
|
GBAMapArgumentsToContext(args, &context);
|
||||||
|
context.overrides = GBAConfigGetOverrides(config);
|
||||||
|
|
||||||
bool didFail = false;
|
bool didFail = false;
|
||||||
|
|
||||||
|
@ -214,14 +236,6 @@ int mSDLRunGBA(struct mSDLRenderer* renderer, struct GBAArguments* args, struct
|
||||||
didFail = true;
|
didFail = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
renderer->player.bindings = inputMap;
|
|
||||||
GBASDLInitBindings(inputMap);
|
|
||||||
GBASDLInitEvents(&renderer->events);
|
|
||||||
GBASDLEventsLoadConfig(&renderer->events, GBAConfigGetInput(config));
|
|
||||||
GBASDLAttachPlayer(&renderer->events, &renderer->player);
|
|
||||||
GBASDLPlayerLoadConfig(&renderer->player, GBAConfigGetInput(config));
|
|
||||||
context.overrides = GBAConfigGetOverrides(config);
|
|
||||||
|
|
||||||
if (!didFail) {
|
if (!didFail) {
|
||||||
#if SDL_VERSION_ATLEAST(2, 0, 0)
|
#if SDL_VERSION_ATLEAST(2, 0, 0)
|
||||||
GBASDLSetScreensaverSuspendable(&renderer->events, opts->suspendScreensaver);
|
GBASDLSetScreensaverSuspendable(&renderer->events, opts->suspendScreensaver);
|
||||||
|
@ -247,10 +261,6 @@ int mSDLRunGBA(struct mSDLRenderer* renderer, struct GBAArguments* args, struct
|
||||||
}
|
}
|
||||||
free(context.debugger);
|
free(context.debugger);
|
||||||
GBADirectorySetDeinit(&context.dirs);
|
GBADirectorySetDeinit(&context.dirs);
|
||||||
GBASDLDetachPlayer(&renderer->events, &renderer->player);
|
|
||||||
GBAInputMapDeinit(inputMap);
|
|
||||||
|
|
||||||
mSDLDeinit(renderer);
|
|
||||||
|
|
||||||
return didFail;
|
return didFail;
|
||||||
}
|
}
|
||||||
|
@ -258,19 +268,6 @@ int mSDLRunGBA(struct mSDLRenderer* renderer, struct GBAArguments* args, struct
|
||||||
|
|
||||||
#ifdef M_CORE_GB
|
#ifdef M_CORE_GB
|
||||||
int mSDLRunGB(struct mSDLRenderer* renderer, struct GBAArguments* args) {
|
int mSDLRunGB(struct mSDLRenderer* renderer, struct GBAArguments* args) {
|
||||||
GBVideoSoftwareRendererCreate(&renderer->gb);
|
|
||||||
#ifdef BUILD_GL
|
|
||||||
mSDLGLCreateGB(renderer);
|
|
||||||
#elif defined(BUILD_GLES2)
|
|
||||||
mSDLGLES2CreateGB(renderer);
|
|
||||||
#else
|
|
||||||
mSDLSWCreateGB(renderer);
|
|
||||||
#endif
|
|
||||||
|
|
||||||
if (!mSDLInit(renderer)) {
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
struct LR35902Core cpu;
|
struct LR35902Core cpu;
|
||||||
struct GB gb;
|
struct GB gb;
|
||||||
|
|
||||||
|
@ -285,8 +282,6 @@ int mSDLRunGB(struct mSDLRenderer* renderer, struct GBAArguments* args) {
|
||||||
LR35902Reset(&cpu);
|
LR35902Reset(&cpu);
|
||||||
renderer->runloop(renderer, &gb);
|
renderer->runloop(renderer, &gb);
|
||||||
vf->close(vf);
|
vf->close(vf);
|
||||||
|
|
||||||
mSDLDeinit(renderer);
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
Loading…
Reference in New Issue