diff --git a/assets/config.json b/assets/config.json index ac5067a..d955570 100644 --- a/assets/config.json +++ b/assets/config.json @@ -47,8 +47,8 @@ }, "rat_king_boss": {"path": "assets/rat_king_2_frame_animation.png", - "frame_width": 256, - "frame_height": 256 + "frame_width": 720, + "frame_height": 720 }, "barrel_small": {"path": "assets/wood_barrel_small-256.png", diff --git a/tools/fragviewer.cpp b/tools/fragviewer.cpp index 8aefe1b..fe4540c 100644 --- a/tools/fragviewer.cpp +++ b/tools/fragviewer.cpp @@ -13,28 +13,44 @@ void Handle_events(sf::RenderWindow &window) { // is this a main event loop while (const auto event = window.pollEvent()) { if(event->is<sf::Event::Closed>()) { - fmt::print("Exiting...\n"); 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 opt = 0; + bool load_sprite = false; std::string sprite_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."); - while((opt = getopt(argc, argv, "-s:-f:")) != -1) { + while((opt = getopt(argc, argv, "-hs:f:")) != -1) { switch(opt) { case 's': sprite_name = optarg; + load_sprite = true; break; case 'f': frag_name = optarg; 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: fmt::println("USAGE: fragviewer [-s sprite_name] -f shader.frag"); return -1; @@ -51,17 +67,23 @@ int main(int argc, char *argv[]) { window.setFramerateLimit(60); window.setVerticalSyncEnabled(true); - sf::Clock clock; - - sf::Shader shader; - bool good_shader = shader.loadFromFile(frag_name, sf::Shader::Type::Fragment); dbc::check(good_shader, fmt::format("failed to load shader {}", frag_name)); - sf::RectangleShape rect; - rect.setPosition({0,0}); - rect.setSize(u_resolution); - rect.setFillColor({255, 0, 0, 255}); + + if(load_sprite) { + sprite_texture = textures::get(sprite_name); + 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); @@ -74,7 +96,14 @@ int main(int argc, char *argv[]) { shader.setUniform("u_mouse", u_mouse); 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(); } }