Fragviewer can now load a sprite from my sprite list and then apply shaders to it.

master
Zed A. Shaw 6 days ago
parent 724d3edb61
commit 576110ea44
  1. 4
      assets/config.json
  2. 53
      tools/fragviewer.cpp

@ -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…
Cancel
Save