From fc32fa3a783bdeb7f6aab56b3e1bc0909c5f0605 Mon Sep 17 00:00:00 2001 From: Mathias Agopian Date: Mon, 19 Jul 2021 17:55:19 -0700 Subject: [PATCH] Improve s3tc_srgb detection on desktop Fixes #4336 --- filament/backend/src/opengl/OpenGLContext.cpp | 5 +++-- filament/backend/src/opengl/OpenGLContext.h | 5 +++-- filament/backend/src/opengl/OpenGLDriver.cpp | 11 ++++++++--- 3 files changed, 14 insertions(+), 7 deletions(-) diff --git a/filament/backend/src/opengl/OpenGLContext.cpp b/filament/backend/src/opengl/OpenGLContext.cpp index 3741fffe82..ad92525ad3 100644 --- a/filament/backend/src/opengl/OpenGLContext.cpp +++ b/filament/backend/src/opengl/OpenGLContext.cpp @@ -262,8 +262,9 @@ void OpenGLContext::initExtensionsGLES(GLint major, GLint minor, ExtentionSet co ext.QCOM_tiled_rendering = hasExtension(exts, "GL_QCOM_tiled_rendering"); ext.EXT_texture_compression_s3tc = hasExtension(exts, "GL_EXT_texture_compression_s3tc"); ext.EXT_texture_compression_s3tc_srgb = hasExtension(exts, "GL_EXT_texture_compression_s3tc_srgb"); - ext.WEBGL_texture_compression_s3tc = hasExtension(exts, "WEBGL_compressed_texture_s3tc"); - ext.WEBGL_texture_compression_s3tc_srgb = hasExtension(exts, "WEBGL_compressed_texture_s3tc_srgb"); + ext.WEBGL_compressed_texture_s3tc = hasExtension(exts, "WEBGL_compressed_texture_s3tc"); + ext.WEBGL_compressed_texture_s3tc_srgb = hasExtension(exts, "WEBGL_compressed_texture_s3tc_srgb"); + ext.WEBGL_compressed_texture_etc = hasExtension(exts, "WEBGL_compressed_texture_etc"); // ES 3.2 implies EXT_color_buffer_float if (major >= 3 && minor >= 2) { ext.EXT_color_buffer_float = true; diff --git a/filament/backend/src/opengl/OpenGLContext.h b/filament/backend/src/opengl/OpenGLContext.h index 47a55cce97..48f801cbb0 100644 --- a/filament/backend/src/opengl/OpenGLContext.h +++ b/filament/backend/src/opengl/OpenGLContext.h @@ -147,8 +147,9 @@ public: bool GOOGLE_cpp_style_line_directive = false; bool EXT_texture_compression_s3tc = false; bool EXT_texture_compression_s3tc_srgb = false; - bool WEBGL_texture_compression_s3tc = false; - bool WEBGL_texture_compression_s3tc_srgb = false; + bool WEBGL_compressed_texture_s3tc = false; + bool WEBGL_compressed_texture_s3tc_srgb = false; + bool WEBGL_compressed_texture_etc = false; } ext; struct { diff --git a/filament/backend/src/opengl/OpenGLDriver.cpp b/filament/backend/src/opengl/OpenGLDriver.cpp index 5fc18caf90..fd6f396173 100644 --- a/filament/backend/src/opengl/OpenGLDriver.cpp +++ b/filament/backend/src/opengl/OpenGLDriver.cpp @@ -1440,13 +1440,18 @@ FenceStatus OpenGLDriver::wait(Handle fh, uint64_t timeout) { bool OpenGLDriver::isTextureFormatSupported(TextureFormat format) { const auto& ext = mContext.ext; if (isETC2Compression(format)) { - return ext.EXT_texture_compression_etc2; + return ext.EXT_texture_compression_etc2 || + ext.WEBGL_compressed_texture_etc; // WEBGL specific, apparently contains ETC2 } if (isS3TCSRGBCompression(format)) { - return ext.EXT_texture_compression_s3tc_srgb || ext.WEBGL_texture_compression_s3tc_srgb; + // see https://www.khronos.org/registry/OpenGL/extensions/EXT/EXT_texture_sRGB.txt + return ext.WEBGL_compressed_texture_s3tc_srgb || // this is WEBGL specific + ext.EXT_texture_compression_s3tc_srgb || // this is ES specific + (ext.EXT_texture_compression_s3tc && ext.EXT_texture_sRGB); } if (isS3TCCompression(format)) { - return ext.EXT_texture_compression_s3tc || ext.WEBGL_texture_compression_s3tc; + return ext.EXT_texture_compression_s3tc || // this is ES specific + ext.WEBGL_compressed_texture_s3tc; // this is WEBGL specific } return getInternalFormat(format) != 0; }