changeset 1820:70a1304b432b

Fix crash that occurs when changing video screen settings if the emulator window is currently fullscreen. Add a little more error handling to Open GL code
author Mike Pavone <pavone@retrodev.com>
date Sun, 31 Mar 2019 14:53:29 -0700
parents 4fb9af0c65b6
children 4f3443ecb6d6 8500bd987dda
files render_sdl.c
diffstat 1 files changed, 9 insertions(+), 1 deletions(-) [+]
line wrap: on
line diff
--- a/render_sdl.c	Sun Mar 31 12:38:47 2019 -0700
+++ b/render_sdl.c	Sun Mar 31 14:53:29 2019 -0700
@@ -531,6 +531,10 @@
 		fsize += strlen(shader_prefix);
 	}
 	GLuint ret = glCreateShader(shader_type);
+	if (!ret) {
+		warning("glCreateShader failed with error %d\n", glGetError());
+		return 0;
+	}
 	glShaderSource(ret, 1, (const GLchar **)&text, (const GLint *)&fsize);
 	free(text);
 	glCompileShader(ret);
@@ -965,6 +969,9 @@
 		switch (event->window.event)
 		{
 		case SDL_WINDOWEVENT_SIZE_CHANGED:
+			if (!main_window) {
+				break;
+			}
 			main_width = event->window.data1;
 			main_height = event->window.data2;
 			update_aspect();
@@ -984,7 +991,7 @@
 #endif
 			break;
 		case SDL_WINDOWEVENT_CLOSE:
-			if (SDL_GetWindowID(main_window) == event->window.windowID) {
+			if (main_window && SDL_GetWindowID(main_window) == event->window.windowID) {
 				exit(0);
 			} else {
 				for (int i = 0; i < num_textures - FRAMEBUFFER_USER_START; i++)
@@ -1305,6 +1312,7 @@
 #endif
 	in_toggle = 1;
 	SDL_DestroyWindow(main_window);
+	main_window = NULL;
 	drain_events();
 	
 	char *config_width = tern_find_path(config, "video\0width\0", TVAL_PTR).ptrval;