From 766b20f3f8a0d99844e87380bf2bfbbc6bb43f4d Mon Sep 17 00:00:00 2001 From: "Zed A. Shaw" Date: Sun, 13 Apr 2025 22:31:13 -0400 Subject: [PATCH] Rayview now uses the shader manager. --- assets/shaders/{modal.frag => rayview_sprites.frag} | 0 raycaster.cpp | 11 +++++------ raycaster.hpp | 2 +- shaders.cpp | 11 +++++++---- shaders.hpp | 1 + 5 files changed, 14 insertions(+), 11 deletions(-) rename assets/shaders/{modal.frag => rayview_sprites.frag} (100%) diff --git a/assets/shaders/modal.frag b/assets/shaders/rayview_sprites.frag similarity index 100% rename from assets/shaders/modal.frag rename to assets/shaders/rayview_sprites.frag diff --git a/raycaster.cpp b/raycaster.cpp index 1a51795..b23ca63 100644 --- a/raycaster.cpp +++ b/raycaster.cpp @@ -172,8 +172,8 @@ void Raycaster::sprite_casting(sf::RenderTarget &target) { // float level = sqrt(rec.first); float level = lights[sprite_pos.location.y][sprite_pos.location.x] * PERCENT; if(rec.second == aiming_at) level += 0.2; - $brightness.setUniform("darkness", level); - target.draw(*sf_sprite, &$brightness); + $brightness->setUniform("darkness", level); + target.draw(*sf_sprite, $brightness.get()); } } } @@ -393,8 +393,7 @@ void Raycaster::update_level(GameLevel level) { } void Raycaster::init_shaders() { - // dbc::check(sf::Shader::isAvailable(), "no shaders?!"); - bool good = $brightness.loadFromFile("assets/shaders/modal.frag", sf::Shader::Type::Fragment); - dbc::check(good, "shader could not be loaded"); - $brightness.setUniform("source", sf::Shader::CurrentTexture); + std::string the_fucking_name{"rayview_sprites"}; + $brightness = shaders::get_shared(the_fucking_name); + $brightness->setUniform("source", sf::Shader::CurrentTexture); } diff --git a/raycaster.hpp b/raycaster.hpp index 2c24d1e..0cf51c1 100644 --- a/raycaster.hpp +++ b/raycaster.hpp @@ -12,7 +12,7 @@ using RGBA = uint32_t; struct Raycaster { int $pitch=0; sf::Clock $clock; - sf::Shader $brightness; + std::shared_ptr $brightness = nullptr; double $pos_x = 0; double $pos_y = 0; diff --git a/shaders.cpp b/shaders.cpp index c464d68..72a2adc 100644 --- a/shaders.cpp +++ b/shaders.cpp @@ -12,7 +12,6 @@ namespace shaders { static ShaderManager SMGR; static bool initialized = false; - bool load_shader(std::string name, nlohmann::json& settings) { std::string file_name = settings["file_name"]; auto ptr = std::make_shared(); @@ -23,6 +22,7 @@ namespace shaders { void init() { if(!initialized) { + dbc::check(sf::Shader::isAvailable(), "no shaders?!"); initialized = true; Config config("assets/shaders.json"); bool good = load_shader("ERROR", config["ERROR"]); @@ -43,13 +43,16 @@ namespace shaders { } } - sf::Shader* get(std::string name) { + std::shared_ptr get_shared(std::string& name) { dbc::check(initialized, "you forgot to shaders::init()"); dbc::check(SMGR.shaders.contains(name), fmt::format("shader name '{}' not in assets/shaders.json", name)); - auto& rec = SMGR.shaders.at(name); - return rec.ptr.get(); + return rec.ptr; + } + + sf::Shader* get(std::string name) { + return get_shared(name).get(); } void reload() { diff --git a/shaders.hpp b/shaders.hpp index 25db13b..3de4cf3 100644 --- a/shaders.hpp +++ b/shaders.hpp @@ -19,6 +19,7 @@ namespace shaders { std::unordered_map shaders; }; + std::shared_ptr get_shared(std::string& name); void init(); bool load_shader(std::string& name, nlohmann::json& settings); sf::Shader* get(std::string name);