mirror of https://github.com/mgba-emu/mgba.git
SDL: Support resizing the window when using the SDL1 GL renderer
This commit is contained in:
parent
3a6756b399
commit
36ad461ee0
|
@ -51,9 +51,9 @@ void mSDLGLCommonInit(struct mSDLRenderer* renderer) {
|
||||||
#else
|
#else
|
||||||
SDL_GL_SetAttribute(SDL_GL_SWAP_CONTROL, 1);
|
SDL_GL_SetAttribute(SDL_GL_SWAP_CONTROL, 1);
|
||||||
#ifdef COLOR_16_BIT
|
#ifdef COLOR_16_BIT
|
||||||
SDL_SetVideoMode(renderer->viewportWidth, renderer->viewportHeight, 16, SDL_OPENGL | (SDL_FULLSCREEN * renderer->fullscreen));
|
SDL_SetVideoMode(renderer->viewportWidth, renderer->viewportHeight, 16, SDL_OPENGL | SDL_RESIZABLE | (SDL_FULLSCREEN * renderer->fullscreen));
|
||||||
#else
|
#else
|
||||||
SDL_SetVideoMode(renderer->viewportWidth, renderer->viewportHeight, 32, SDL_OPENGL | (SDL_FULLSCREEN * renderer->fullscreen));
|
SDL_SetVideoMode(renderer->viewportWidth, renderer->viewportHeight, 32, SDL_OPENGL | SDL_RESIZABLE | (SDL_FULLSCREEN * renderer->fullscreen));
|
||||||
#endif
|
#endif
|
||||||
SDL_WM_SetCaption(projectName, "");
|
SDL_WM_SetCaption(projectName, "");
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -52,14 +52,18 @@ void mSDLGLRunloop(struct mSDLRenderer* renderer, void* user) {
|
||||||
while (mCoreThreadIsActive(context)) {
|
while (mCoreThreadIsActive(context)) {
|
||||||
while (SDL_PollEvent(&event)) {
|
while (SDL_PollEvent(&event)) {
|
||||||
mSDLHandleEvent(context, &renderer->player, &event);
|
mSDLHandleEvent(context, &renderer->player, &event);
|
||||||
#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) {
|
||||||
|
#if SDL_VERSION_ATLEAST(2, 0, 0)
|
||||||
SDL_GetWindowSize(renderer->window, &renderer->viewportWidth, &renderer->viewportHeight);
|
SDL_GetWindowSize(renderer->window, &renderer->viewportWidth, &renderer->viewportHeight);
|
||||||
|
#else
|
||||||
|
renderer->viewportWidth = renderer->player.newWidth;
|
||||||
|
renderer->viewportHeight = renderer->player.newHeight;
|
||||||
|
mSDLGLCommonInit(renderer);
|
||||||
|
#endif
|
||||||
mSDLGLDoViewport(renderer->viewportWidth, renderer->viewportHeight, v);
|
mSDLGLDoViewport(renderer->viewportWidth, renderer->viewportHeight, v);
|
||||||
renderer->player.windowUpdated = 0;
|
renderer->player.windowUpdated = 0;
|
||||||
}
|
}
|
||||||
#endif
|
|
||||||
}
|
}
|
||||||
renderer->core->desiredVideoDimensions(renderer->core, &renderer->width, &renderer->height);
|
renderer->core->desiredVideoDimensions(renderer->core, &renderer->width, &renderer->height);
|
||||||
if (renderer->width != v->width || renderer->height != v->height) {
|
if (renderer->width != v->width || renderer->height != v->height) {
|
||||||
|
|
|
@ -128,14 +128,18 @@ void mSDLGLES2Runloop(struct mSDLRenderer* renderer, void* user) {
|
||||||
while (mCoreThreadIsActive(context)) {
|
while (mCoreThreadIsActive(context)) {
|
||||||
while (SDL_PollEvent(&event)) {
|
while (SDL_PollEvent(&event)) {
|
||||||
mSDLHandleEvent(context, &renderer->player, &event);
|
mSDLHandleEvent(context, &renderer->player, &event);
|
||||||
#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) {
|
||||||
|
#if SDL_VERSION_ATLEAST(2, 0, 0)
|
||||||
SDL_GetWindowSize(renderer->window, &renderer->viewportWidth, &renderer->viewportHeight);
|
SDL_GetWindowSize(renderer->window, &renderer->viewportWidth, &renderer->viewportHeight);
|
||||||
|
#else
|
||||||
|
renderer->viewportWidth = renderer->player.newWidth;
|
||||||
|
renderer->viewportHeight = renderer->player.newHeight;
|
||||||
|
mSDLGLCommonInit(renderer);
|
||||||
|
#endif
|
||||||
mSDLGLDoViewport(renderer->viewportWidth, renderer->viewportHeight, v);
|
mSDLGLDoViewport(renderer->viewportWidth, renderer->viewportHeight, v);
|
||||||
renderer->player.windowUpdated = 0;
|
renderer->player.windowUpdated = 0;
|
||||||
}
|
}
|
||||||
#endif
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (mCoreSyncWaitFrameStart(&context->impl->sync)) {
|
if (mCoreSyncWaitFrameStart(&context->impl->sync)) {
|
||||||
|
|
|
@ -601,6 +601,12 @@ void mSDLHandleEvent(struct mCoreThread* context, struct mSDLPlayer* sdlContext,
|
||||||
case SDL_WINDOWEVENT:
|
case SDL_WINDOWEVENT:
|
||||||
_mSDLHandleWindowEvent(sdlContext, &event->window);
|
_mSDLHandleWindowEvent(sdlContext, &event->window);
|
||||||
break;
|
break;
|
||||||
|
#else
|
||||||
|
case SDL_VIDEORESIZE:
|
||||||
|
sdlContext->newWidth = event->resize.w;
|
||||||
|
sdlContext->newHeight = event->resize.h;
|
||||||
|
sdlContext->windowUpdated = 1;
|
||||||
|
break;
|
||||||
#endif
|
#endif
|
||||||
case SDL_KEYDOWN:
|
case SDL_KEYDOWN:
|
||||||
case SDL_KEYUP:
|
case SDL_KEYUP:
|
||||||
|
|
|
@ -63,10 +63,10 @@ struct mSDLPlayer {
|
||||||
size_t playerId;
|
size_t playerId;
|
||||||
struct mInputMap* bindings;
|
struct mInputMap* bindings;
|
||||||
struct SDL_JoystickCombo* joystick;
|
struct SDL_JoystickCombo* joystick;
|
||||||
|
int windowUpdated;
|
||||||
#if SDL_VERSION_ATLEAST(2, 0, 0)
|
#if SDL_VERSION_ATLEAST(2, 0, 0)
|
||||||
SDL_Window* window;
|
SDL_Window* window;
|
||||||
int fullscreen;
|
int fullscreen;
|
||||||
int windowUpdated;
|
|
||||||
|
|
||||||
struct mSDLRumble {
|
struct mSDLRumble {
|
||||||
struct mRumble d;
|
struct mRumble d;
|
||||||
|
@ -76,6 +76,9 @@ struct mSDLPlayer {
|
||||||
float activeLevel;
|
float activeLevel;
|
||||||
struct CircleBuffer history;
|
struct CircleBuffer history;
|
||||||
} rumble;
|
} rumble;
|
||||||
|
#else
|
||||||
|
int newWidth;
|
||||||
|
int newHeight;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
struct mSDLRotation {
|
struct mSDLRotation {
|
||||||
|
|
Loading…
Reference in New Issue