From 7505915479ac75a67d437277e2043a422d3bafd9 Mon Sep 17 00:00:00 2001 From: tildearrow Date: Sun, 2 Jul 2023 15:10:26 -0500 Subject: [PATCH] GUI: render backend recovery, part 6 untested OpenGL implementation --- src/gui/render/renderGL.cpp | 17 +++++++++++++++++ src/gui/render/renderGL.h | 3 ++- 2 files changed, 19 insertions(+), 1 deletion(-) diff --git a/src/gui/render/renderGL.cpp b/src/gui/render/renderGL.cpp index c51ab7df2..b16f04975 100644 --- a/src/gui/render/renderGL.cpp +++ b/src/gui/render/renderGL.cpp @@ -51,6 +51,10 @@ PFNGLGETUNIFORMLOCATIONPROC furGetUniformLocation=NULL; PFNGLUNIFORM1FPROC furUniform1f=NULL; PFNGLGETSHADERINFOLOGPROC furGetShaderInfoLog=NULL; +#ifndef USE_GLES +PFNGLGETGRAPHICSRESETSTATUSARBPROC furGetGraphicsResetStatusARB=NULL; +#endif + class FurnaceGLTexture: public FurnaceGUITexture { public: GLuint id; @@ -359,6 +363,9 @@ bool FurnaceGUIRenderGL::init(SDL_Window* win) { LOAD_PROC_OPTIONAL(furUniform1f,PFNGLUNIFORM1FPROC,"glUniform1f"); LOAD_PROC_OPTIONAL(furGetShaderInfoLog,PFNGLGETSHADERINFOLOGPROC,"glGetShaderInfoLog"); +#ifndef USE_GLES + LOAD_PROC_OPTIONAL(furGetGraphicsResetStatusARB,PFNGLGETGRAPHICSRESETSTATUSARBPROC,"glGetGraphicsResetStatusARB"); +#endif if (createShader(sh_wipe_srcV,sh_wipe_srcF,sh_wipe_vertex,sh_wipe_fragment,sh_wipe_program)) { sh_wipe_uAlpha=furGetUniformLocation(sh_wipe_program,"uAlpha"); @@ -383,3 +390,13 @@ bool FurnaceGUIRenderGL::quit() { void FurnaceGUIRenderGL::quitGUI() { ImGui_ImplOpenGL3_Shutdown(); } + +bool FurnaceGUIRenderGL::isDead() { +#ifndef USE_GLES + if (furGetGraphicsResetStatusARB==NULL) return false; + return (furGetGraphicsResetStatusARB()!=GL_NO_ERROR); +#else + // handled by SDL... I think + return false; +#endif +} diff --git a/src/gui/render/renderGL.h b/src/gui/render/renderGL.h index 541ee3cb1..55d399730 100644 --- a/src/gui/render/renderGL.h +++ b/src/gui/render/renderGL.h @@ -57,9 +57,10 @@ class FurnaceGUIRenderGL: public FurnaceGUIRender { void initGUI(SDL_Window* win); void quitGUI(); bool quit(); + bool isDead(); FurnaceGUIRenderGL(): context(NULL), sdlWin(NULL) { memset(quadVertex,0,4*3*sizeof(float)); } -}; \ No newline at end of file +};