From 2cb0b2a2a2bee9221662e4d219ebc9866f07a744 Mon Sep 17 00:00:00 2001 From: kichikuou Date: Sun, 26 Jun 2022 15:00:23 +0900 Subject: [PATCH] Reuse SDL_Renderer after VM reset Otherwise mouse input doesn't work after restart in emscripten port. --- src/sdlmain.cpp | 3 +++ src/sys/ags.cpp | 21 ++++++++++----------- src/sys/ags.h | 1 - src/sys/ags_cursor.cpp | 5 +++-- 4 files changed, 16 insertions(+), 14 deletions(-) diff --git a/src/sdlmain.cpp b/src/sdlmain.cpp index 8fe64f1..76e1718 100644 --- a/src/sdlmain.cpp +++ b/src/sdlmain.cpp @@ -15,6 +15,7 @@ #endif SDL_Window* g_window; +SDL_Renderer* g_renderer; NACT* g_nact; int main(int argc, char *argv[]) @@ -35,6 +36,7 @@ int main(int argc, char *argv[]) Uint32 flags = SDL_WINDOW_RESIZABLE; #endif g_window = SDL_CreateWindow("Scenario Decoder SYSTEM3", SDL_WINDOWPOS_UNDEFINED, SDL_WINDOWPOS_UNDEFINED, 640, 400, flags); + g_renderer = SDL_CreateRenderer(g_window, -1, 0); // system3 初期化 g_nact = NACT::create(config); @@ -84,6 +86,7 @@ int main(int argc, char *argv[]) g_nact = NACT::create(config); } + SDL_DestroyRenderer(g_renderer); SDL_DestroyWindow(g_window); SDL_Quit(); diff --git a/src/sys/ags.cpp b/src/sys/ags.cpp index 77cfdbc..cd09fe9 100644 --- a/src/sys/ags.cpp +++ b/src/sys/ags.cpp @@ -11,6 +11,7 @@ #include "../fileio.h" extern SDL_Window* g_window; +extern SDL_Renderer* g_renderer; static SDL_Surface* display_surface; #define SET_TEXT(n, x1, y1, x2, y2, f) { \ @@ -37,9 +38,8 @@ static SDL_Surface* display_surface; AGS::AGS(NACT* parent, const Config& config) : nact(parent), dirty(false) { - sdlRenderer = SDL_CreateRenderer(g_window, -1, 0); - SDL_RenderSetLogicalSize(sdlRenderer, 640, 400); - sdlTexture = SDL_CreateTexture(sdlRenderer, SDL_PIXELFORMAT_ARGB8888, SDL_TEXTUREACCESS_STATIC, 640, 400); // TOOD: pixelformat? + SDL_RenderSetLogicalSize(g_renderer, 640, 400); + sdlTexture = SDL_CreateTexture(g_renderer, SDL_PIXELFORMAT_ARGB8888, SDL_TEXTUREACCESS_STATIC, 640, 400); // TOOD: pixelformat? // DIBSection 8bpp * 3 (表, 裏, メニュー) for(int i = 0; i < 3; i++) { @@ -375,7 +375,6 @@ AGS::~AGS() SDL_FreeSurface(hBmpDest); SDL_DestroyTexture(sdlTexture); - SDL_DestroyRenderer(sdlRenderer); } void AGS::set_palette(int index, int r, int g, int b) @@ -491,15 +490,15 @@ void AGS::update_screen() { if (!dirty) return; - SDL_RenderClear(sdlRenderer); - SDL_RenderCopy(sdlRenderer, sdlTexture, NULL, NULL); + SDL_RenderClear(g_renderer); + SDL_RenderCopy(g_renderer, sdlTexture, NULL, NULL); if (fade_level) { - SDL_SetRenderDrawBlendMode(sdlRenderer, SDL_BLENDMODE_BLEND); - SDL_SetRenderDrawColor(sdlRenderer, fade_color, fade_color, fade_color, fade_level); - SDL_RenderFillRect(sdlRenderer, NULL); - SDL_SetRenderDrawBlendMode(sdlRenderer, SDL_BLENDMODE_NONE); + SDL_SetRenderDrawBlendMode(g_renderer, SDL_BLENDMODE_BLEND); + SDL_SetRenderDrawColor(g_renderer, fade_color, fade_color, fade_color, fade_level); + SDL_RenderFillRect(g_renderer, NULL); + SDL_SetRenderDrawBlendMode(g_renderer, SDL_BLENDMODE_NONE); } - SDL_RenderPresent(sdlRenderer); + SDL_RenderPresent(g_renderer); dirty = false; } diff --git a/src/sys/ags.h b/src/sys/ags.h index bd23577..9a0d5fa 100644 --- a/src/sys/ags.h +++ b/src/sys/ags.h @@ -39,7 +39,6 @@ class AGS protected: NACT* nact; private: - SDL_Renderer* sdlRenderer; SDL_Texture* sdlTexture; // Surface diff --git a/src/sys/ags_cursor.cpp b/src/sys/ags_cursor.cpp index dd2e705..e125d9e 100644 --- a/src/sys/ags_cursor.cpp +++ b/src/sys/ags_cursor.cpp @@ -8,6 +8,7 @@ #include extern SDL_Window* g_window; +extern SDL_Renderer* g_renderer; void AGS::load_cursor(int page) { @@ -97,13 +98,13 @@ void AGS::translate_mouse_coords(int* x, int* y) { // scale mouse x and y float scalex, scaley; - SDL_RenderGetScale(sdlRenderer, &scalex, &scaley); + SDL_RenderGetScale(g_renderer, &scalex, &scaley); *x *= scalex; *y *= scaley; // calculate window borders int logw, logh; - SDL_RenderGetLogicalSize(sdlRenderer, &logw, &logh); + SDL_RenderGetLogicalSize(g_renderer, &logw, &logh); float scalew, scaleh; scalew = logw * scalex;