diff options
| author | Vaxry <vaxry@vaxry.net> | 2026-04-04 19:11:58 +0100 |
|---|---|---|
| committer | Vaxry <43317083+vaxerski@users.noreply.github.com> | 2026-04-04 14:42:04 -0400 |
| commit | 97ee042757d07dad38b98546ddfb005354840c46 (patch) | |
| tree | 50794c7959ef6f4779dbaf2abe8fba3596159b8a /src/render/OpenGL.cpp | |
| parent | 9b05dc1b4c44849a3c23e67381dd7c2f311b4ee3 (diff) | |
render/opengl: optimize getShaderVariant's map access
Diffstat (limited to 'src/render/OpenGL.cpp')
| -rw-r--r-- | src/render/OpenGL.cpp | 13 |
1 files changed, 8 insertions, 5 deletions
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<CShader> 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<CShader>(); Log::logger->log(Log::INFO, "compiling feature set {} for {}", features, FRAG_SHADERS[frag]); @@ -2468,12 +2471,12 @@ WP<CShader> 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<SDRMFormat> CHyprOpenGLImpl::getDRMFormats() { |
