diff --git a/src/sdl_draw.c b/src/sdl_draw.c index b600188..6155d1e 100644 --- a/src/sdl_draw.c +++ b/src/sdl_draw.c @@ -64,11 +64,10 @@ static void sdl_pal_check(void) { void sdl_updateScreen(void) { if (!sdl_dirty) return; - SDL_Texture *texture = SDL_CreateTextureFromSurface(sdl_renderer, sdl_display); + SDL_UpdateTexture(sdl_texture, NULL, sdl_display->pixels, sdl_display->pitch); SDL_RenderClear(sdl_renderer); - SDL_RenderCopy(sdl_renderer, texture, NULL, NULL); + SDL_RenderCopy(sdl_renderer, sdl_texture, NULL, NULL); SDL_RenderPresent(sdl_renderer); - SDL_DestroyTexture(texture); sdl_dirty = false; } diff --git a/src/sdl_mode.c b/src/sdl_mode.c index aa4c623..1d05626 100644 --- a/src/sdl_mode.c +++ b/src/sdl_mode.c @@ -57,7 +57,11 @@ void sdl_setWindowSize(int x, int y, int w, int h) { view_h = h; SDL_SetWindowSize(sdl_window, w, h); + SDL_FreeSurface(sdl_display); + SDL_DestroyTexture(sdl_texture); sdl_display = SDL_CreateRGBSurface(0, w, h, 32, 0, 0, 0, 0); + sdl_texture = SDL_CreateTexture(sdl_renderer, sdl_display->format->format, + SDL_TEXTUREACCESS_STATIC, w, h); //ms_active = (SDL_GetAppState() & SDL_APPMOUSEFOCUS) ? TRUE : FALSE; } diff --git a/src/sdl_private.h b/src/sdl_private.h index 998773d..63c6868 100644 --- a/src/sdl_private.h +++ b/src/sdl_private.h @@ -34,6 +34,7 @@ struct sdl_private_data { SDL_Window *window; SDL_Renderer *renderer; + SDL_Texture *texture; SDL_Surface *dsp; /* toplevel surface */ SDL_Surface *dib; /* offscreen surface */ @@ -70,6 +71,7 @@ extern struct sdl_private_data *sdl_videodev; #define sdl_window (sdl_videodev->window) #define sdl_renderer (sdl_videodev->renderer) +#define sdl_texture (sdl_videodev->texture) #define sdl_display (sdl_videodev->dsp) #define sdl_dib (sdl_videodev->dib) #define sdl_col (sdl_videodev->col) diff --git a/src/sdl_video.c b/src/sdl_video.c index 1111a18..cc4e97b 100644 --- a/src/sdl_video.c +++ b/src/sdl_video.c @@ -106,6 +106,9 @@ static void window_init(void) { sdl_renderer = SDL_CreateRenderer(sdl_window, -1, 0); sdl_display = SDL_CreateRGBSurface(0, SYS35_DEFAULT_WIDTH, SYS35_DEFAULT_HEIGHT, 32, 0, 0, 0, 0); + sdl_texture = SDL_CreateTexture(sdl_renderer, sdl_display->format->format, + SDL_TEXTUREACCESS_STATIC, + SYS35_DEFAULT_WIDTH, SYS35_DEFAULT_HEIGHT); } static void makeDIB(int width, int height, int depth) {