Shaders now are managed by a manger that can do hot reloading and it also will detect a bad shader and use an ERROR shader so you know it's busted visually.
This commit is contained in:
parent
a5b8e411e3
commit
35ced58cc9
14 changed files with 144 additions and 13 deletions
17
guecs.cpp
17
guecs.cpp
|
@ -1,4 +1,5 @@
|
|||
#include "guecs.hpp"
|
||||
#include "shaders.hpp"
|
||||
|
||||
namespace guecs {
|
||||
|
||||
|
@ -66,31 +67,31 @@ namespace guecs {
|
|||
}
|
||||
|
||||
void Shader::init(lel::Cell &cell) {
|
||||
ptr = std::make_shared<sf::Shader>();
|
||||
bool good = ptr->loadFromFile(name, sf::Shader::Type::Fragment);
|
||||
dbc::check(good, fmt::format("failed to load shader {}", name));
|
||||
ptr->setUniform("u_resolution", sf::Vector2f({float(cell.w), float(cell.h)}));
|
||||
|
||||
auto shader = shaders::get(name);
|
||||
shader->setUniform("u_resolution", sf::Vector2f({float(cell.w), float(cell.h)}));
|
||||
clock = std::make_shared<sf::Clock>();
|
||||
}
|
||||
|
||||
void Shader::step() {
|
||||
auto shader = shaders::get(name);
|
||||
sf::Time u_time = clock->getElapsedTime();
|
||||
float current_time = u_time.asSeconds();
|
||||
|
||||
if(current_time < u_time_end) {
|
||||
ptr->setUniform("u_time", current_time);
|
||||
shader->setUniform("u_time", current_time);
|
||||
} else {
|
||||
active = false;
|
||||
}
|
||||
}
|
||||
|
||||
void Shader::run() {
|
||||
auto shader = shaders::get(name);
|
||||
|
||||
active = true;
|
||||
sf::Time u_time = clock->getElapsedTime();
|
||||
u_time_end = u_time.asSeconds() + duration;
|
||||
ptr->setUniform("u_duration", duration);
|
||||
ptr->setUniform("u_time_end", u_time_end);
|
||||
shader->setUniform("u_duration", duration);
|
||||
shader->setUniform("u_time_end", u_time_end);
|
||||
}
|
||||
|
||||
UI::UI() {
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue