The reload mechanism for shaders is a bit better, but still to make them unique.
This commit is contained in:
parent
08bc48df3d
commit
19b9a4affd
7 changed files with 68 additions and 44 deletions
40
guecs.cpp
40
guecs.cpp
|
@ -67,31 +67,39 @@ namespace guecs {
|
|||
}
|
||||
|
||||
void Shader::init(lel::Cell &cell) {
|
||||
auto shader = shaders::get(name);
|
||||
shader->setUniform("u_resolution", sf::Vector2f({float(cell.w), float(cell.h)}));
|
||||
clock = std::make_shared<sf::Clock>();
|
||||
$shader_version = shaders::version();
|
||||
$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();
|
||||
sf::Time cur_time = $clock->getElapsedTime();
|
||||
float u_time = cur_time.asSeconds();
|
||||
|
||||
if(current_time < u_time_end) {
|
||||
shader->setUniform("u_time", current_time);
|
||||
if(u_time < $u_time_end) {
|
||||
$shader->setUniform("u_time", u_time);
|
||||
} else {
|
||||
active = false;
|
||||
$active = false;
|
||||
}
|
||||
}
|
||||
|
||||
void Shader::run() {
|
||||
auto shader = shaders::get(name);
|
||||
$shader = checkout_ptr();
|
||||
$active = true;
|
||||
sf::Time u_time = $clock->getElapsedTime();
|
||||
$u_time_end = u_time.asSeconds() + duration;
|
||||
$shader->setUniform("u_duration", duration);
|
||||
$shader->setUniform("u_time_end", $u_time_end);
|
||||
}
|
||||
|
||||
active = true;
|
||||
sf::Time u_time = clock->getElapsedTime();
|
||||
u_time_end = u_time.asSeconds() + duration;
|
||||
shader->setUniform("u_duration", duration);
|
||||
shader->setUniform("u_time_end", u_time_end);
|
||||
shared_ptr<sf::Shader> Shader::checkout_ptr() {
|
||||
if(shaders::updated($shader_version)) {
|
||||
$shader = shaders::get(name);
|
||||
$shader_version = shaders::version();
|
||||
}
|
||||
|
||||
return $shader;
|
||||
}
|
||||
|
||||
UI::UI() {
|
||||
|
@ -185,7 +193,7 @@ namespace guecs {
|
|||
}
|
||||
|
||||
$world.query<Shader>([&](auto, auto& shader) {
|
||||
if(shader.active) shader.step();
|
||||
if(shader.$active) shader.step();
|
||||
});
|
||||
|
||||
$world.query<Rectangle>([&](auto ent, auto& rect) {
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue