shaders: replace SHADERS std::map with a constexpr sorted std::array (#15113)

This commit is contained in:
Daniel Krupiński
2026-06-14 13:40:06 +01:00
committed by GitHub
parent a23083e7a1
commit 9ed9f50713
2 changed files with 13 additions and 5 deletions
+9 -3
View File
@@ -9,8 +9,14 @@ if [ ! -d ./src/render/shaders ]; then
fi fi
echo '#pragma once' > ./src/render/shaders/Shaders.hpp echo '#pragma once' > ./src/render/shaders/Shaders.hpp
echo '#include <map>' >> ./src/render/shaders/Shaders.hpp echo '#include <algorithm>' >> ./src/render/shaders/Shaders.hpp
echo 'static const std::map<std::string, std::string> SHADERS = {' >> ./src/render/shaders/Shaders.hpp echo '#include <array>' >> ./src/render/shaders/Shaders.hpp
echo '#include <string_view>' >> ./src/render/shaders/Shaders.hpp
echo '#include <utility>' >> ./src/render/shaders/Shaders.hpp
echo 'inline constexpr auto SHADERS = [](auto shaders) {' >> ./src/render/shaders/Shaders.hpp
echo 'std::ranges::sort(shaders, {}, [](auto pair) { return pair.first; });' >> ./src/render/shaders/Shaders.hpp
echo 'return shaders;' >> ./src/render/shaders/Shaders.hpp
echo '}(std::to_array<std::pair<std::string_view, std::string_view>>({' >> ./src/render/shaders/Shaders.hpp
for filename in `ls ${SHADERS_SRC}`; do for filename in `ls ${SHADERS_SRC}`; do
echo "-- ${filename}" echo "-- ${filename}"
@@ -21,4 +27,4 @@ for filename in `ls ${SHADERS_SRC}`; do
echo "}," >> ./src/render/shaders/Shaders.hpp echo "}," >> ./src/render/shaders/Shaders.hpp
done done
echo '};' >> ./src/render/shaders/Shaders.hpp echo '}));' >> ./src/render/shaders/Shaders.hpp
+4 -2
View File
@@ -183,7 +183,9 @@ std::string CShaderLoader::loadShader(const std::string& filename) {
if (src.has_value()) if (src.has_value())
return src.value(); return src.value();
} }
if (SHADERS.contains(filename))
return SHADERS.at(filename); const auto shader = std::ranges::lower_bound(SHADERS, filename, {}, [](const auto& filenameSource) { return filenameSource.first; });
if (shader != SHADERS.end() && shader->first == filename)
return std::string{shader->second};
throw std::runtime_error(std::format("Couldn't load shader {}", filename)); throw std::runtime_error(std::format("Couldn't load shader {}", filename));
} }