From 0f2b9446d33347fbae87b4d9e5c1a88b9a8e4433 Mon Sep 17 00:00:00 2001 From: Saracen Date: Wed, 17 Feb 2021 22:29:07 +0000 Subject: [PATCH] Add check to TextureLayered set_flags method to not set the flags on the VisualServer if uninitialized. Add error checks on GLES2 and GLES3 rasterizer. --- drivers/gles2/rasterizer_storage_gles2.cpp | 2 ++ drivers/gles3/rasterizer_storage_gles3.cpp | 3 +++ scene/resources/texture.cpp | 4 ++++ 3 files changed, 9 insertions(+) diff --git a/drivers/gles2/rasterizer_storage_gles2.cpp b/drivers/gles2/rasterizer_storage_gles2.cpp index 7769e16df0c4..42e4e951caa1 100644 --- a/drivers/gles2/rasterizer_storage_gles2.cpp +++ b/drivers/gles2/rasterizer_storage_gles2.cpp @@ -953,7 +953,9 @@ Ref RasterizerStorageGLES2::texture_get_data(RID p_texture, int p_layer) void RasterizerStorageGLES2::texture_set_flags(RID p_texture, uint32_t p_flags) { Texture *texture = texture_owner.getornull(p_texture); + ERR_FAIL_COND(!texture); + ERR_FAIL_COND(!texture->active); bool had_mipmaps = texture->flags & VS::TEXTURE_FLAG_MIPMAPS; diff --git a/drivers/gles3/rasterizer_storage_gles3.cpp b/drivers/gles3/rasterizer_storage_gles3.cpp index 169f70439330..257820a6352c 100644 --- a/drivers/gles3/rasterizer_storage_gles3.cpp +++ b/drivers/gles3/rasterizer_storage_gles3.cpp @@ -1388,7 +1388,10 @@ Ref RasterizerStorageGLES3::texture_get_data(RID p_texture, int p_layer) void RasterizerStorageGLES3::texture_set_flags(RID p_texture, uint32_t p_flags) { Texture *texture = texture_owner.get(p_texture); + ERR_FAIL_COND(!texture); + ERR_FAIL_COND(!texture->active); + if (texture->render_target) { p_flags &= VS::TEXTURE_FLAG_FILTER; //can change only filter diff --git a/scene/resources/texture.cpp b/scene/resources/texture.cpp index d0e80033c5ea..2448aeb10ccb 100644 --- a/scene/resources/texture.cpp +++ b/scene/resources/texture.cpp @@ -2237,6 +2237,10 @@ AnimatedTexture::~AnimatedTexture() { void TextureLayered::set_flags(uint32_t p_flags) { flags = p_flags; + if (width == 0 || height == 0 || depth == 0) { + return; //uninitialized, do not set to texture + } + if (texture.is_valid()) { VS::get_singleton()->texture_set_flags(texture, flags); }