Skip to content

Commit c3e16cd

Browse files
committed
Merge pull request #97379 from clayjohn/webgl-errors
Clean up two recently introduced WebGL errors
2 parents 9355845 + 0305e43 commit c3e16cd

File tree

4 files changed

+11
-4
lines changed

4 files changed

+11
-4
lines changed

drivers/gles3/rasterizer_canvas_gles3.cpp

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2184,7 +2184,9 @@ void RasterizerCanvasGLES3::canvas_begin(RID p_to_render_target, bool p_to_backb
21842184
glBindFramebuffer(GL_FRAMEBUFFER, render_target->fbo);
21852185
glActiveTexture(GL_TEXTURE0 + config->max_texture_image_units - 4);
21862186
glBindTexture(GL_TEXTURE_2D, render_target->backbuffer);
2187-
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAX_LEVEL, p_backbuffer_has_mipmaps ? render_target->mipmap_count - 1 : 0);
2187+
if (render_target->backbuffer != 0) {
2188+
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAX_LEVEL, p_backbuffer_has_mipmaps ? render_target->mipmap_count - 1 : 0);
2189+
}
21882190
}
21892191

21902192
if (render_target->is_transparent || p_to_backbuffer) {

drivers/gles3/rasterizer_gles3.cpp

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -349,9 +349,6 @@ RasterizerGLES3::RasterizerGLES3() {
349349
}
350350
}
351351

352-
// Disable OpenGL linear to sRGB conversion, because Godot will always do this conversion itself.
353-
glDisable(GL_FRAMEBUFFER_SRGB);
354-
355352
// OpenGL needs to be initialized before initializing the Rasterizers
356353
config = memnew(GLES3::Config);
357354
utilities = memnew(GLES3::Utilities);
@@ -368,6 +365,11 @@ RasterizerGLES3::RasterizerGLES3() {
368365
fog = memnew(GLES3::Fog);
369366
canvas = memnew(RasterizerCanvasGLES3());
370367
scene = memnew(RasterizerSceneGLES3());
368+
369+
// Disable OpenGL linear to sRGB conversion, because Godot will always do this conversion itself.
370+
if (config->srgb_framebuffer_supported) {
371+
glDisable(GL_FRAMEBUFFER_SRGB);
372+
}
371373
}
372374

373375
RasterizerGLES3::~RasterizerGLES3() {

drivers/gles3/storage/config.cpp

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -88,6 +88,7 @@ Config::Config() {
8888
etc2_supported = false;
8989
s3tc_supported = true;
9090
rgtc_supported = true; //RGTC - core since OpenGL version 3.0
91+
srgb_framebuffer_supported = true;
9192
} else {
9293
float_texture_supported = extensions.has("GL_EXT_color_buffer_float");
9394
etc2_supported = true;
@@ -100,6 +101,7 @@ Config::Config() {
100101
s3tc_supported = extensions.has("GL_EXT_texture_compression_dxt1") || extensions.has("GL_EXT_texture_compression_s3tc") || extensions.has("WEBGL_compressed_texture_s3tc");
101102
#endif
102103
rgtc_supported = extensions.has("GL_EXT_texture_compression_rgtc") || extensions.has("GL_ARB_texture_compression_rgtc") || extensions.has("EXT_texture_compression_rgtc");
104+
srgb_framebuffer_supported = extensions.has("GL_EXT_sRGB_write_control");
103105
}
104106

105107
glGetIntegerv(GL_MAX_VERTEX_TEXTURE_IMAGE_UNITS, &max_vertex_texture_image_units);

drivers/gles3/storage/config.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -80,6 +80,7 @@ class Config {
8080
bool astc_supported = false;
8181
bool astc_hdr_supported = false;
8282
bool astc_layered_supported = false;
83+
bool srgb_framebuffer_supported = false;
8384

8485
bool force_vertex_shading = false;
8586

0 commit comments

Comments
 (0)