From 5bc3cd8d8cf73438ec0265bdf9cc9a6a19356f05 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=A9r=C3=B4me=20Leclercq?= Date: Thu, 3 Jun 2021 17:15:12 +0200 Subject: [PATCH] OpenGLRenderer: Add GL_EXT_texture_compression_s3tc check for DXT pixel formats --- include/Nazara/OpenGLRenderer/Wrapper/Context.hpp | 1 + src/Nazara/OpenGLRenderer/OpenGLDevice.cpp | 5 +++++ src/Nazara/OpenGLRenderer/Wrapper/Context.cpp | 3 +++ 3 files changed, 9 insertions(+) diff --git a/include/Nazara/OpenGLRenderer/Wrapper/Context.hpp b/include/Nazara/OpenGLRenderer/Wrapper/Context.hpp index bbaa38cf9..f76f0715c 100644 --- a/include/Nazara/OpenGLRenderer/Wrapper/Context.hpp +++ b/include/Nazara/OpenGLRenderer/Wrapper/Context.hpp @@ -50,6 +50,7 @@ namespace Nz::GL { SpirV, TextureFilterAnisotropic, + TextureCompressionS3tc, Max = TextureFilterAnisotropic }; diff --git a/src/Nazara/OpenGLRenderer/OpenGLDevice.cpp b/src/Nazara/OpenGLRenderer/OpenGLDevice.cpp index 08e4c4f56..61e072e38 100644 --- a/src/Nazara/OpenGLRenderer/OpenGLDevice.cpp +++ b/src/Nazara/OpenGLRenderer/OpenGLDevice.cpp @@ -191,7 +191,12 @@ namespace Nz case PixelFormat::DXT1: case PixelFormat::DXT3: case PixelFormat::DXT5: + { + if (!m_referenceContext->IsExtensionSupported(GL::Extension::TextureCompressionS3tc)) + return false; + return usage == TextureUsage::InputAttachment || usage == TextureUsage::ShaderSampling || usage == TextureUsage::TransferDestination || usage == TextureUsage::TransferSource; + } case PixelFormat::Depth16: case PixelFormat::Depth16Stencil8: diff --git a/src/Nazara/OpenGLRenderer/Wrapper/Context.cpp b/src/Nazara/OpenGLRenderer/Wrapper/Context.cpp index e23a3c7a9..e719249e1 100644 --- a/src/Nazara/OpenGLRenderer/Wrapper/Context.cpp +++ b/src/Nazara/OpenGLRenderer/Wrapper/Context.cpp @@ -281,6 +281,9 @@ namespace Nz::GL m_extensionStatus.fill(ExtensionStatus::NotSupported); + if (m_supportedExtensions.count("GL_EXT_texture_compression_s3tc")) + m_extensionStatus[UnderlyingCast(Extension::TextureCompressionS3tc)] = ExtensionStatus::EXT; + // TextureFilterAnisotropic if (m_supportedExtensions.count("GL_ARB_texture_filter_anisotropic")) m_extensionStatus[UnderlyingCast(Extension::TextureFilterAnisotropic)] = ExtensionStatus::ARB;