From b15ad8e7866e243329693d431ee2cee10075af71 Mon Sep 17 00:00:00 2001 From: lawnjelly Date: Wed, 9 Feb 2022 08:44:37 +0000 Subject: [PATCH] Fix for S3TC on Android and IOS devices On some platforms, exporters are prevented from exporting S3TC textures. This causes problems if the .import file contains a reference to such a texture - the exported project will attempt to load the S3TC, fail, and probably crash. This PR prevents this problem by faking lack of hardware support for S3TC on the affected platforms. This prevents the engine attempting to load the S3TC and avoids the problem. --- drivers/gles2/rasterizer_storage_gles2.cpp | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/drivers/gles2/rasterizer_storage_gles2.cpp b/drivers/gles2/rasterizer_storage_gles2.cpp index 61e93cefbee..10e45fc637e 100644 --- a/drivers/gles2/rasterizer_storage_gles2.cpp +++ b/drivers/gles2/rasterizer_storage_gles2.cpp @@ -6184,6 +6184,13 @@ void RasterizerStorageGLES2::initialize() { config.pvrtc_supported = config.extensions.has("GL_IMG_texture_compression_pvrtc") || config.extensions.has("WEBGL_compressed_texture_pvrtc"); config.support_npot_repeat_mipmap = config.extensions.has("GL_OES_texture_npot"); + // If the desktop build is using S3TC, and you export / run from the IDE for android, if the device supports + // S3TC it will crash trying to load these textures, as they are not exported in the APK. This is a simple way + // to prevent Android devices trying to load S3TC, by faking lack of hardware support. +#if defined(ANDROID_ENABLED) || defined(IPHONE_ENABLED) + config.s3tc_supported = false; +#endif + #ifdef JAVASCRIPT_ENABLED // RenderBuffer internal format must be 16 bits in WebGL, // but depth_texture should default to 32 always