Browse Source

Merge pull request #101909 from BlueCube3310/compat-rgtc-arr

WebGL2: Fix 2D array textures with RGTC compression not rendering
Thaddeus Crews 7 months ago
parent
commit
802cb0fed8
1 changed files with 10 additions and 1 deletions
  1. 10 1
      drivers/gles3/storage/texture_storage.cpp

+ 10 - 1
drivers/gles3/storage/texture_storage.cpp

@@ -1509,8 +1509,17 @@ void TextureStorage::_texture_set_data(RID p_texture, const Ref<Image> &p_image,
 	GLenum internal_format;
 	GLenum internal_format;
 	bool compressed = false;
 	bool compressed = false;
 
 
+	bool needs_decompress = texture->resize_to_po2;
+
+	// Support for RGTC-compressed Texture Arrays isn't mandated by GLES3/WebGL.
+	if (!RasterizerGLES3::is_gles_over_gl() && texture->target == GL_TEXTURE_2D_ARRAY) {
+		if (p_image->get_format() == Image::FORMAT_RGTC_R || p_image->get_format() == Image::FORMAT_RGTC_RG) {
+			needs_decompress = true;
+		}
+	}
+
 	Image::Format real_format;
 	Image::Format real_format;
-	Ref<Image> img = _get_gl_image_and_format(p_image, p_image->get_format(), real_format, format, internal_format, type, compressed, texture->resize_to_po2);
+	Ref<Image> img = _get_gl_image_and_format(p_image, p_image->get_format(), real_format, format, internal_format, type, compressed, needs_decompress);
 	ERR_FAIL_COND(img.is_null());
 	ERR_FAIL_COND(img.is_null());
 	if (texture->resize_to_po2) {
 	if (texture->resize_to_po2) {
 		if (p_image->is_compressed()) {
 		if (p_image->is_compressed()) {