瀏覽代碼

Merge pull request #24575 from nekomatata/android-curve-texture

Fixed CurveTexture with GLES3 on Android
Rémi Verschelde 6 年之前
父節點
當前提交
99c4faf837
共有 2 個文件被更改,包括 23 次插入0 次删除
  1. 21 0
      drivers/gles3/rasterizer_storage_gles3.cpp
  2. 2 0
      drivers/gles3/rasterizer_storage_gles3.h

+ 21 - 0
drivers/gles3/rasterizer_storage_gles3.cpp

@@ -632,6 +632,25 @@ void RasterizerStorageGLES3::texture_allocate(RID p_texture, int p_width, int p_
 		p_flags &= ~VS::TEXTURE_FLAG_MIPMAPS; // no mipies for video
 		p_flags &= ~VS::TEXTURE_FLAG_MIPMAPS; // no mipies for video
 	}
 	}
 
 
+#ifndef GLES_OVER_GL
+	switch (p_format) {
+		case Image::Format::FORMAT_RF:
+		case Image::Format::FORMAT_RGF:
+		case Image::Format::FORMAT_RGBF:
+		case Image::Format::FORMAT_RGBAF:
+		case Image::Format::FORMAT_RH:
+		case Image::Format::FORMAT_RGH:
+		case Image::Format::FORMAT_RGBH:
+		case Image::Format::FORMAT_RGBAH: {
+			if (!config.texture_float_linear_supported) {
+				// disable linear texture filtering when not supported for float format on some devices (issue #24295)
+				p_flags &= ~VS::TEXTURE_FLAG_FILTER;
+			}
+		} break;
+		default: {}
+	}
+#endif
+
 	Texture *texture = texture_owner.get(p_texture);
 	Texture *texture = texture_owner.get(p_texture);
 	ERR_FAIL_COND(!texture);
 	ERR_FAIL_COND(!texture);
 	texture->width = p_width;
 	texture->width = p_width;
@@ -7671,11 +7690,13 @@ void RasterizerStorageGLES3::initialize() {
 	config.etc2_supported = false;
 	config.etc2_supported = false;
 	config.s3tc_supported = true;
 	config.s3tc_supported = true;
 	config.rgtc_supported = true; //RGTC - core since OpenGL version 3.0
 	config.rgtc_supported = true; //RGTC - core since OpenGL version 3.0
+	config.texture_float_linear_supported = true;
 #else
 #else
 	config.etc2_supported = true;
 	config.etc2_supported = true;
 	config.hdr_supported = false;
 	config.hdr_supported = false;
 	config.s3tc_supported = config.extensions.has("GL_EXT_texture_compression_dxt1") || config.extensions.has("GL_EXT_texture_compression_s3tc") || config.extensions.has("WEBGL_compressed_texture_s3tc");
 	config.s3tc_supported = config.extensions.has("GL_EXT_texture_compression_dxt1") || config.extensions.has("GL_EXT_texture_compression_s3tc") || config.extensions.has("WEBGL_compressed_texture_s3tc");
 	config.rgtc_supported = config.extensions.has("GL_EXT_texture_compression_rgtc") || config.extensions.has("GL_ARB_texture_compression_rgtc") || config.extensions.has("EXT_texture_compression_rgtc");
 	config.rgtc_supported = config.extensions.has("GL_EXT_texture_compression_rgtc") || config.extensions.has("GL_ARB_texture_compression_rgtc") || config.extensions.has("EXT_texture_compression_rgtc");
+	config.texture_float_linear_supported = config.extensions.has("GL_OES_texture_float_linear");
 #endif
 #endif
 
 
 	config.pvrtc_supported = config.extensions.has("GL_IMG_texture_compression_pvrtc");
 	config.pvrtc_supported = config.extensions.has("GL_IMG_texture_compression_pvrtc");

+ 2 - 0
drivers/gles3/rasterizer_storage_gles3.h

@@ -87,6 +87,8 @@ public:
 
 
 		bool srgb_decode_supported;
 		bool srgb_decode_supported;
 
 
+		bool texture_float_linear_supported;
+
 		bool use_rgba_2d_shadows;
 		bool use_rgba_2d_shadows;
 
 
 		float anisotropic_level;
 		float anisotropic_level;