Fragviewer can now load a sprite from my sprite list and then apply shaders to it.
This commit is contained in:
parent
724d3edb61
commit
576110ea44
2 changed files with 43 additions and 14 deletions
|
@ -47,8 +47,8 @@
|
||||||
},
|
},
|
||||||
"rat_king_boss":
|
"rat_king_boss":
|
||||||
{"path": "assets/rat_king_2_frame_animation.png",
|
{"path": "assets/rat_king_2_frame_animation.png",
|
||||||
"frame_width": 256,
|
"frame_width": 720,
|
||||||
"frame_height": 256
|
"frame_height": 720
|
||||||
},
|
},
|
||||||
"barrel_small":
|
"barrel_small":
|
||||||
{"path": "assets/wood_barrel_small-256.png",
|
{"path": "assets/wood_barrel_small-256.png",
|
||||||
|
|
|
@ -13,28 +13,44 @@ void Handle_events(sf::RenderWindow &window) {
|
||||||
// is this a main event loop
|
// is this a main event loop
|
||||||
while (const auto event = window.pollEvent()) {
|
while (const auto event = window.pollEvent()) {
|
||||||
if(event->is<sf::Event::Closed>()) {
|
if(event->is<sf::Event::Closed>()) {
|
||||||
fmt::print("Exiting...\n");
|
|
||||||
window.close();
|
window.close();
|
||||||
|
} else if(const auto* key = event->getIf<sf::Event::KeyPressed>()) {
|
||||||
|
using KEY = sf::Keyboard::Scan;
|
||||||
|
if(key->scancode == KEY::Escape) {
|
||||||
|
window.close();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
int main(int argc, char *argv[]) {
|
int main(int argc, char *argv[]) {
|
||||||
int opt = 0;
|
int opt = 0;
|
||||||
|
bool load_sprite = false;
|
||||||
std::string sprite_name;
|
std::string sprite_name;
|
||||||
std::string frag_name;
|
std::string frag_name;
|
||||||
|
sf::Clock clock;
|
||||||
|
sf::Shader shader;
|
||||||
|
sf::RectangleShape rect;
|
||||||
|
textures::SpriteTexture sprite_texture;
|
||||||
|
|
||||||
|
textures::init();
|
||||||
|
|
||||||
dbc::check(sf::Shader::isAvailable(), "You apparently are a time traveler from the 80s who doesn't have shaders.");
|
dbc::check(sf::Shader::isAvailable(), "You apparently are a time traveler from the 80s who doesn't have shaders.");
|
||||||
|
|
||||||
while((opt = getopt(argc, argv, "-s:-f:")) != -1) {
|
while((opt = getopt(argc, argv, "-hs:f:")) != -1) {
|
||||||
switch(opt) {
|
switch(opt) {
|
||||||
case 's':
|
case 's':
|
||||||
sprite_name = optarg;
|
sprite_name = optarg;
|
||||||
|
load_sprite = true;
|
||||||
break;
|
break;
|
||||||
case 'f':
|
case 'f':
|
||||||
frag_name = optarg;
|
frag_name = optarg;
|
||||||
break;
|
break;
|
||||||
|
case 'h':
|
||||||
|
fmt::println(
|
||||||
|
"fragviewer is a simple tool to play fragment shaders.\n"
|
||||||
|
"USAGE: fragviewer [-s sprite_name] -f shader.frag");
|
||||||
|
return 0;
|
||||||
default:
|
default:
|
||||||
fmt::println("USAGE: fragviewer [-s sprite_name] -f shader.frag");
|
fmt::println("USAGE: fragviewer [-s sprite_name] -f shader.frag");
|
||||||
return -1;
|
return -1;
|
||||||
|
@ -51,17 +67,23 @@ int main(int argc, char *argv[]) {
|
||||||
window.setFramerateLimit(60);
|
window.setFramerateLimit(60);
|
||||||
window.setVerticalSyncEnabled(true);
|
window.setVerticalSyncEnabled(true);
|
||||||
|
|
||||||
sf::Clock clock;
|
|
||||||
|
|
||||||
sf::Shader shader;
|
|
||||||
|
|
||||||
bool good_shader = shader.loadFromFile(frag_name, sf::Shader::Type::Fragment);
|
bool good_shader = shader.loadFromFile(frag_name, sf::Shader::Type::Fragment);
|
||||||
dbc::check(good_shader, fmt::format("failed to load shader {}", frag_name));
|
dbc::check(good_shader, fmt::format("failed to load shader {}", frag_name));
|
||||||
|
|
||||||
sf::RectangleShape rect;
|
|
||||||
rect.setPosition({0,0});
|
if(load_sprite) {
|
||||||
rect.setSize(u_resolution);
|
sprite_texture = textures::get(sprite_name);
|
||||||
rect.setFillColor({255, 0, 0, 255});
|
sprite_texture.sprite->setPosition({0,0});
|
||||||
|
auto bounds = sprite_texture.sprite->getLocalBounds();
|
||||||
|
sf::Vector2f scale{u_resolution.x / bounds.size.x,
|
||||||
|
u_resolution.y / bounds.size.y};
|
||||||
|
sprite_texture.sprite->setScale(scale);
|
||||||
|
shader.setUniform("texture", sf::Shader::CurrentTexture);
|
||||||
|
} else {
|
||||||
|
rect.setPosition({0,0});
|
||||||
|
rect.setSize(u_resolution);
|
||||||
|
rect.setFillColor({255, 0, 0, 255});
|
||||||
|
}
|
||||||
|
|
||||||
shader.setUniform("u_resolution", u_resolution);
|
shader.setUniform("u_resolution", u_resolution);
|
||||||
|
|
||||||
|
@ -74,7 +96,14 @@ int main(int argc, char *argv[]) {
|
||||||
shader.setUniform("u_mouse", u_mouse);
|
shader.setUniform("u_mouse", u_mouse);
|
||||||
shader.setUniform("u_time", u_time.asSeconds());
|
shader.setUniform("u_time", u_time.asSeconds());
|
||||||
|
|
||||||
window.draw(rect, &shader);
|
window.clear();
|
||||||
|
|
||||||
|
if(load_sprite) {
|
||||||
|
window.draw(*sprite_texture.sprite, &shader);
|
||||||
|
} else {
|
||||||
|
window.draw(rect, &shader);
|
||||||
|
}
|
||||||
|
|
||||||
window.display();
|
window.display();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue