mirror of
https://github.com/kichikuou/system3-sdl2.git
synced 2026-10-08 06:48:05 +03:00
Reuse SDL_Renderer after VM reset
Otherwise mouse input doesn't work after restart in emscripten port.
This commit is contained in:
@@ -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();
|
||||
|
||||
|
||||
+10
-11
@@ -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;
|
||||
}
|
||||
|
||||
|
||||
@@ -39,7 +39,6 @@ class AGS
|
||||
protected:
|
||||
NACT* nact;
|
||||
private:
|
||||
SDL_Renderer* sdlRenderer;
|
||||
SDL_Texture* sdlTexture;
|
||||
|
||||
// Surface
|
||||
|
||||
@@ -8,6 +8,7 @@
|
||||
#include <string.h>
|
||||
|
||||
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;
|
||||
|
||||
Reference in New Issue
Block a user