shithub: cstory

Download patch

ref: f6f3c26a3bcecad3ef2c7094725386f63e8d71d6
parent: 48b7a878ba3d69097909ade07d6d6e1f5d3bda82
author: Clownacy <Clownacy@users.noreply.github.com>
date: Wed Jan 22 17:31:19 EST 2020

Converted SDLTexture renderer

--- a/src/Backends/Rendering/SDLTexture.cpp
+++ b/src/Backends/Rendering/SDLTexture.cpp
@@ -13,6 +13,7 @@
 #include "../../Draw.h"
 #include "../../Ending.h"
 #include "../../MapName.h"
+#include "../../Resource.h"
 #include "../../TextScr.h"
 
 typedef struct Backend_Surface
@@ -34,6 +35,7 @@
 	unsigned int height;
 } Backend_Glyph;
 
+static SDL_Window *window;
 static SDL_Renderer *renderer;
 
 static Backend_Surface framebuffer;
@@ -54,13 +56,8 @@
 		sdl_rect->h = 0;
 }
 
-SDL_Window* Backend_CreateWindow(const char *title, int width, int height)
+Backend_Surface* Backend_Init(const char *title, int width, int height, BOOL fullscreen)
 {
-	return SDL_CreateWindow(title, SDL_WINDOWPOS_CENTERED, SDL_WINDOWPOS_CENTERED, width, height, 0);
-}
-
-Backend_Surface* Backend_Init(SDL_Window *window)
-{
 #ifndef NDEBUG
 	puts("Available SDL2 render drivers:");
 
@@ -72,35 +69,55 @@
 	}
 #endif
 
-#if SDL_VERSION_ATLEAST(2,0,10)
-	SDL_SetHint(SDL_HINT_RENDER_BATCHING, "1");	// We never interfere with the renderer, so don't let SDL implicitly disable batching
-#endif
+	window = SDL_CreateWindow(title, SDL_WINDOWPOS_CENTERED, SDL_WINDOWPOS_CENTERED, width, height, 0);
 
-	renderer = SDL_CreateRenderer(window, -1, SDL_RENDERER_ACCELERATED | SDL_RENDERER_TARGETTEXTURE);
+	if (window != NULL)
+	{
+	#ifndef _WIN32	// On Windows, we use native icons instead (so we can give the taskbar and window separate icons, like the original EXE does)
+		size_t resource_size;
+		const unsigned char *resource_data = FindResource("ICON_MINI", "ICON", &resource_size);
+		SDL_RWops *rwops = SDL_RWFromConstMem(resource_data, resource_size);
+		SDL_Surface *icon_surface = SDL_LoadBMP_RW(rwops, 1);
+		SDL_SetWindowIcon(window, icon_surface);
+		SDL_FreeSurface(icon_surface);
+	#endif
 
-	if (renderer == NULL)
-		return NULL;
+		if (fullscreen)
+			SDL_SetWindowFullscreen(window, SDL_WINDOW_FULLSCREEN);
 
-#ifndef NDEBUG
-	SDL_RendererInfo info;
-	SDL_GetRendererInfo(renderer, &info);
-	printf("Selected SDL2 render driver: %s\n", info.name);
-#endif
+	#if SDL_VERSION_ATLEAST(2,0,10)
+		SDL_SetHint(SDL_HINT_RENDER_BATCHING, "1");	// We never interfere with the renderer, so don't let SDL implicitly disable batching
+	#endif
 
-	int width, height;
-	SDL_GetRendererOutputSize(renderer, &width, &height);
-	framebuffer.texture = SDL_CreateTexture(renderer, SDL_PIXELFORMAT_RGBA32, SDL_TEXTUREACCESS_TARGET, width, height);
+		renderer = SDL_CreateRenderer(window, -1, SDL_RENDERER_ACCELERATED | SDL_RENDERER_TARGETTEXTURE);
 
-	if (framebuffer.texture == NULL)
-	{
-		SDL_DestroyRenderer(renderer);
-		return NULL;
-	}
+		if (renderer != NULL)
+		{
+		#ifndef NDEBUG
+			SDL_RendererInfo info;
+			SDL_GetRendererInfo(renderer, &info);
+			printf("Selected SDL2 render driver: %s\n", info.name);
+		#endif
 
-	framebuffer.width = width;
-	framebuffer.height = height;
+			int width, height;
+			SDL_GetRendererOutputSize(renderer, &width, &height);
+			framebuffer.texture = SDL_CreateTexture(renderer, SDL_PIXELFORMAT_RGBA32, SDL_TEXTUREACCESS_TARGET, width, height);
 
-	return &framebuffer;
+			if (framebuffer.texture != NULL)
+			{
+				framebuffer.width = width;
+				framebuffer.height = height;
+
+				return &framebuffer;
+			}
+
+			SDL_DestroyRenderer(renderer);
+		}
+
+		SDL_DestroyWindow(window);
+	}
+
+	return NULL;
 }
 
 void Backend_Deinit(void)
@@ -107,6 +124,7 @@
 {
 	SDL_DestroyTexture(framebuffer.texture);
 	SDL_DestroyRenderer(renderer);
+	SDL_DestroyWindow(window);
 }
 
 void Backend_DrawScreen(void)
--