Rayview now uses the shader manager.

master
Zed A. Shaw 5 days ago
parent edee3ac0c9
commit 766b20f3f8
  1. 0
      assets/shaders/rayview_sprites.frag
  2. 11
      raycaster.cpp
  3. 2
      raycaster.hpp
  4. 11
      shaders.cpp
  5. 1
      shaders.hpp

@ -172,8 +172,8 @@ void Raycaster::sprite_casting(sf::RenderTarget &target) {
// float level = sqrt(rec.first); // float level = sqrt(rec.first);
float level = lights[sprite_pos.location.y][sprite_pos.location.x] * PERCENT; float level = lights[sprite_pos.location.y][sprite_pos.location.x] * PERCENT;
if(rec.second == aiming_at) level += 0.2; if(rec.second == aiming_at) level += 0.2;
$brightness.setUniform("darkness", level); $brightness->setUniform("darkness", level);
target.draw(*sf_sprite, &$brightness); target.draw(*sf_sprite, $brightness.get());
} }
} }
} }
@ -393,8 +393,7 @@ void Raycaster::update_level(GameLevel level) {
} }
void Raycaster::init_shaders() { void Raycaster::init_shaders() {
// dbc::check(sf::Shader::isAvailable(), "no shaders?!"); std::string the_fucking_name{"rayview_sprites"};
bool good = $brightness.loadFromFile("assets/shaders/modal.frag", sf::Shader::Type::Fragment); $brightness = shaders::get_shared(the_fucking_name);
dbc::check(good, "shader could not be loaded"); $brightness->setUniform("source", sf::Shader::CurrentTexture);
$brightness.setUniform("source", sf::Shader::CurrentTexture);
} }

@ -12,7 +12,7 @@ using RGBA = uint32_t;
struct Raycaster { struct Raycaster {
int $pitch=0; int $pitch=0;
sf::Clock $clock; sf::Clock $clock;
sf::Shader $brightness; std::shared_ptr<sf::Shader> $brightness = nullptr;
double $pos_x = 0; double $pos_x = 0;
double $pos_y = 0; double $pos_y = 0;

@ -12,7 +12,6 @@ namespace shaders {
static ShaderManager SMGR; static ShaderManager SMGR;
static bool initialized = false; static bool initialized = false;
bool load_shader(std::string name, nlohmann::json& settings) { bool load_shader(std::string name, nlohmann::json& settings) {
std::string file_name = settings["file_name"]; std::string file_name = settings["file_name"];
auto ptr = std::make_shared<sf::Shader>(); auto ptr = std::make_shared<sf::Shader>();
@ -23,6 +22,7 @@ namespace shaders {
void init() { void init() {
if(!initialized) { if(!initialized) {
dbc::check(sf::Shader::isAvailable(), "no shaders?!");
initialized = true; initialized = true;
Config config("assets/shaders.json"); Config config("assets/shaders.json");
bool good = load_shader("ERROR", config["ERROR"]); bool good = load_shader("ERROR", config["ERROR"]);
@ -43,13 +43,16 @@ namespace shaders {
} }
} }
sf::Shader* get(std::string name) { std::shared_ptr<sf::Shader> get_shared(std::string& name) {
dbc::check(initialized, "you forgot to shaders::init()"); dbc::check(initialized, "you forgot to shaders::init()");
dbc::check(SMGR.shaders.contains(name), dbc::check(SMGR.shaders.contains(name),
fmt::format("shader name '{}' not in assets/shaders.json", name)); fmt::format("shader name '{}' not in assets/shaders.json", name));
auto& rec = SMGR.shaders.at(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() { void reload() {

@ -19,6 +19,7 @@ namespace shaders {
std::unordered_map<std::string, Record> shaders; std::unordered_map<std::string, Record> shaders;
}; };
std::shared_ptr<sf::Shader> get_shared(std::string& name);
void init(); void init();
bool load_shader(std::string& name, nlohmann::json& settings); bool load_shader(std::string& name, nlohmann::json& settings);
sf::Shader* get(std::string name); sf::Shader* get(std::string name);

Loading…
Cancel
Save