diff options
author | Mike Pavone <pavone@retrodev.com> | 2019-03-31 14:53:29 -0700 |
---|---|---|
committer | Mike Pavone <pavone@retrodev.com> | 2019-03-31 14:53:29 -0700 |
commit | c55f96b60d5b9d47522d2ca4d581acbbbe2d39f9 (patch) | |
tree | c13438a9395cd78dcac9428c76d76bc8da1ce11a | |
parent | 4bf16282102b9c6866dd1d7ebd8ee7e22a5ba23d (diff) |
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
-rwxr-xr-x | render_sdl.c | 10 |
1 files changed, 9 insertions, 1 deletions
diff --git a/render_sdl.c b/render_sdl.c index f25eac9..4cd837a 100755 --- a/render_sdl.c +++ b/render_sdl.c @@ -531,6 +531,10 @@ static GLuint load_shader(char * fname, GLenum shader_type) 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 @@ static int32_t handle_event(SDL_Event *event) 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 @@ static int32_t handle_event(SDL_Event *event) #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 @@ void render_config_updated(void) #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; |