Reworked the way shaders are configured to reduce the amount of times clicks on buttons cause the shared shaders to reset.
This commit is contained in:
parent
19b9a4affd
commit
84a5f06dac
5 changed files with 24 additions and 25 deletions
21
guecs.cpp
21
guecs.cpp
|
@ -66,34 +66,33 @@ namespace guecs {
|
|||
shape->setFillColor(color);
|
||||
}
|
||||
|
||||
void Shader::init(lel::Cell &cell) {
|
||||
void Effect::init(lel::Cell &cell) {
|
||||
$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() {
|
||||
void Effect::step() {
|
||||
sf::Time cur_time = $clock->getElapsedTime();
|
||||
float u_time = cur_time.asSeconds();
|
||||
|
||||
if(u_time < $u_time_end) {
|
||||
$shader->setUniform("u_duration", duration);
|
||||
$shader->setUniform("u_time_end", $u_time_end);
|
||||
$shader->setUniform("u_time", u_time);
|
||||
} else {
|
||||
$active = false;
|
||||
}
|
||||
}
|
||||
|
||||
void Shader::run() {
|
||||
$shader = checkout_ptr();
|
||||
void Effect::run() {
|
||||
$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() {
|
||||
shared_ptr<sf::Shader> Effect::checkout_ptr() {
|
||||
if(shaders::updated($shader_version)) {
|
||||
$shader = shaders::get(name);
|
||||
$shader_version = shaders::version();
|
||||
|
@ -150,7 +149,7 @@ namespace guecs {
|
|||
rect.init(cell);
|
||||
});
|
||||
|
||||
$world.query<lel::Cell, Shader>([](auto, auto& cell, auto& shader) {
|
||||
$world.query<lel::Cell, Effect>([](auto, auto& cell, auto& shader) {
|
||||
shader.init(cell);
|
||||
});
|
||||
|
||||
|
@ -192,7 +191,7 @@ namespace guecs {
|
|||
window.draw(*bg.shape);
|
||||
}
|
||||
|
||||
$world.query<Shader>([&](auto, auto& shader) {
|
||||
$world.query<Effect>([&](auto, auto& shader) {
|
||||
if(shader.$active) shader.step();
|
||||
});
|
||||
|
||||
|
@ -227,8 +226,8 @@ namespace guecs {
|
|||
if((x >= cell.x && x <= cell.x + cell.w) &&
|
||||
(y >= cell.y && y <= cell.y + cell.h))
|
||||
{
|
||||
if($world.has<Shader>(ent)) {
|
||||
auto& shader = $world.get<Shader>(ent);
|
||||
if($world.has<Effect>(ent)) {
|
||||
auto& shader = $world.get<Effect>(ent);
|
||||
shader.run();
|
||||
}
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue