summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorclayjohn <claynjohn@gmail.com>2019-10-30 07:45:09 -0700
committerclayjohn <claynjohn@gmail.com>2019-10-30 07:45:09 -0700
commit033ae8a543b0be3af8795070f7f2bff46b350de2 (patch)
tree554ccb046a14436c4c9ef0fa1d09437c6aba9335
parent924db5fa58ab28912857029ec8dd34fbde771550 (diff)
When framebuffer allocation fails for MSAA in GLES2 revert to normal without ERR_FAIL
-rw-r--r--drivers/gles2/rasterizer_storage_gles2.cpp29
1 files changed, 23 insertions, 6 deletions
diff --git a/drivers/gles2/rasterizer_storage_gles2.cpp b/drivers/gles2/rasterizer_storage_gles2.cpp
index 0f51d07b6e..b55b623632 100644
--- a/drivers/gles2/rasterizer_storage_gles2.cpp
+++ b/drivers/gles2/rasterizer_storage_gles2.cpp
@@ -4742,16 +4742,33 @@ void RasterizerStorageGLES2::_render_target_allocate(RenderTarget *rt) {
GLenum status = glCheckFramebufferStatus(GL_FRAMEBUFFER);
if (status != GL_FRAMEBUFFER_COMPLETE) {
+ // Delete allocated resources and default to no MSAA
WARN_PRINT_ONCE("Cannot allocate back framebuffer for MSAA");
printf("err status: %x\n", status);
- _render_target_clear(rt);
- ERR_FAIL_COND(status != GL_FRAMEBUFFER_COMPLETE);
+ config.multisample_supported = false;
+ rt->multisample_active = false;
+
+ glDeleteFramebuffers(1, &rt->multisample_fbo);
+ rt->multisample_fbo = 0;
+
+ glDeleteRenderbuffers(1, &rt->multisample_depth);
+ rt->multisample_depth = 0;
+#ifdef ANDROID_ENABLED
+ glDeleteTextures(1, &rt->multisample_color);
+#else
+ glDeleteRenderbuffers(1, &rt->multisample_color);
+#endif
+ rt->multisample_color = 0;
}
glBindRenderbuffer(GL_RENDERBUFFER, 0);
+ glBindFramebuffer(GL_FRAMEBUFFER, 0);
+#ifdef ANDROID_ENABLED
+ glBindTexture(GL_TEXTURE_2D, 0);
+#endif
} else
-#endif
+#endif // JAVASCRIPT_ENABLED
{
rt->multisample_active = false;
}
@@ -4987,10 +5004,10 @@ void RasterizerStorageGLES2::_render_target_clear(RenderTarget *rt) {
glDeleteRenderbuffers(1, &rt->multisample_depth);
rt->multisample_depth = 0;
-#ifdef GLES_OVER_GL
- glDeleteRenderbuffers(1, &rt->multisample_color);
-#else
+#ifdef ANDROID_ENABLED
glDeleteTextures(1, &rt->multisample_color);
+#else
+ glDeleteRenderbuffers(1, &rt->multisample_color);
#endif
rt->multisample_color = 0;
}