opengl: optimize CShaderLoader::getDefines() (#15212)

This commit is contained in:
Daniel Krupiński
2026-06-24 15:37:19 +01:00
committed by GitHub
parent 648a5e82bc
commit fff2db2e6d
+20 -19
View File
@@ -65,26 +65,27 @@ void CShaderLoader::include(const std::string& filename) {
}
std::string CShaderLoader::getDefines(ShaderFeatureFlags features) {
std::string res = "";
std::map<std::string, std::string> 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<std::pair<std::string_view, ePreparedFragmentShaderFeature>>({
{"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;
}