From 97ee042757d07dad38b98546ddfb005354840c46 Mon Sep 17 00:00:00 2001 From: Vaxry Date: Sat, 4 Apr 2026 19:11:58 +0100 Subject: render/opengl: optimize getShaderVariant's map access --- src/render/OpenGL.cpp | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) (limited to 'src/render/OpenGL.cpp') diff --git a/src/render/OpenGL.cpp b/src/render/OpenGL.cpp index cfc3dc4e..bf12ac8d 100644 --- a/src/render/OpenGL.cpp +++ b/src/render/OpenGL.cpp @@ -2458,7 +2458,10 @@ bool CHyprOpenGLImpl::explicitSyncSupported() { } WP CHyprOpenGLImpl::getShaderVariant(ePreparedFragmentShader frag, ShaderFeatureFlags features) { - if (!m_shaders->fragVariants[frag].contains(features)) { + auto& variants = m_shaders->fragVariants[frag]; + auto it = variants.find(features); + + if (it == variants.end()) { auto shader = makeShared(); Log::logger->log(Log::INFO, "compiling feature set {} for {}", features, FRAG_SHADERS[frag]); @@ -2468,12 +2471,12 @@ WP CHyprOpenGLImpl::getShaderVariant(ePreparedFragmentShader frag, Shad if (!shader->createProgram(m_shaders->TEXVERTSRC, fragSrc, true, true)) Log::logger->log(Log::ERR, "shader features {} failed for {}", features, FRAG_SHADERS[frag]); - m_shaders->fragVariants[frag][features] = shader; - return shader; + it = variants.emplace(features, std::move(shader)).first; + return it->second; } - ASSERT(m_shaders->fragVariants[frag][features]); - return m_shaders->fragVariants[frag][features]; + ASSERT(it->second); + return it->second; } std::vector CHyprOpenGLImpl::getDRMFormats() { -- cgit v1.2.3