mirror of
https://github.com/hyprwm/Hyprland.git
synced 2026-08-24 02:24:14 -05:00
shaders: replace SHADERS std::map with a constexpr sorted std::array (#15113)
This commit is contained in:
@@ -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
|
||||||
|
|||||||
@@ -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));
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user