From fff2db2e6d2e64549d994ebea0934aef52950edf Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Daniel=20Krupi=C5=84ski?= Date: Wed, 24 Jun 2026 16:37:19 +0200 Subject: [PATCH] opengl: optimize CShaderLoader::getDefines() (#15212) --- src/render/ShaderLoader.cpp | 39 +++++++++++++++++++------------------ 1 file changed, 20 insertions(+), 19 deletions(-) diff --git a/src/render/ShaderLoader.cpp b/src/render/ShaderLoader.cpp index 673ccf988..908b45858 100644 --- a/src/render/ShaderLoader.cpp +++ b/src/render/ShaderLoader.cpp @@ -65,26 +65,27 @@ void CShaderLoader::include(const std::string& filename) { } std::string CShaderLoader::getDefines(ShaderFeatureFlags features) { - std::string res = ""; - std::map defines = { - {"USE_RGBA", features & SH_FEAT_RGBA ? "1" : "0"}, - {"USE_DISCARD", features & SH_FEAT_DISCARD ? "1" : "0"}, - {"USE_TINT", features & SH_FEAT_TINT ? "1" : "0"}, - {"USE_ROUNDING", features & SH_FEAT_ROUNDING ? "1" : "0"}, - {"USE_CM", features & SH_FEAT_CM ? "1" : "0"}, - {"USE_TONEMAP", features & SH_FEAT_TONEMAP ? "1" : "0"}, - {"USE_SDR_MOD", features & SH_FEAT_SDR_MOD ? "1" : "0"}, - {"USE_BLUR", features & SH_FEAT_BLUR ? "1" : "0"}, - {"USE_ICC", features & SH_FEAT_ICC ? "1" : "0"}, - {"USE_MIRROR", features & SH_FEAT_MIRROR ? "1" : "0"}, - {"USE_MOTION_BLUR", features & SH_FEAT_MOTION_BLUR ? "1" : "0"}, - {"USE_BLUR_ALPHA_MASK", features & SH_FEAT_BLUR_ALPHA_MASK ? "1" : "0"}, - {"USE_BLUR_MATTE", features & SH_FEAT_BLUR_MATTE ? "1" : "0"}, - {"USE_ALT_TONEMAP", features & SH_FEAT_ALT_TONEMAP ? "1" : "0"}, + static constexpr auto defines = std::to_array>({ + {"USE_RGBA", SH_FEAT_RGBA}, + {"USE_DISCARD", SH_FEAT_DISCARD}, + {"USE_TINT", SH_FEAT_TINT}, + {"USE_ROUNDING", SH_FEAT_ROUNDING}, + {"USE_CM", SH_FEAT_CM}, + {"USE_TONEMAP", SH_FEAT_TONEMAP}, + {"USE_SDR_MOD", SH_FEAT_SDR_MOD}, + {"USE_BLUR", SH_FEAT_BLUR}, + {"USE_ICC", SH_FEAT_ICC}, + {"USE_MIRROR", SH_FEAT_MIRROR}, + {"USE_MOTION_BLUR", SH_FEAT_MOTION_BLUR}, + {"USE_BLUR_ALPHA_MASK", SH_FEAT_BLUR_ALPHA_MASK}, + {"USE_BLUR_MATTE", SH_FEAT_BLUR_MATTE}, + {"USE_ALT_TONEMAP", SH_FEAT_ALT_TONEMAP}, + }); - }; - for (const auto& [name, value] : defines) { - res += std::format("#define {} {}\n", name, value); + std::string res; + res.reserve(309); + for (const auto& [name, flag] : defines) { + std::format_to(std::back_inserter(res), "#define {} {}\n", name, (features & flag) != 0 ? '1' : '0'); } return res; }