parent
b5d93399d5
commit
724d3edb61
@ -0,0 +1,80 @@ |
||||
#include "textures.hpp" |
||||
#include <SFML/Graphics/Sprite.hpp> |
||||
#include <SFML/Graphics/Texture.hpp> |
||||
#include <SFML/Graphics/RenderWindow.hpp> |
||||
#include <SFML/System.hpp> |
||||
#include <SFML/Audio.hpp> |
||||
#include <SFML/Window/Event.hpp> |
||||
#include "dbc.hpp" |
||||
#include <fmt/core.h> |
||||
#include <unistd.h> |
||||
|
||||
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(); |
||||
} |
||||
} |
||||
} |
||||
|
||||
|
||||
int main(int argc, char *argv[]) { |
||||
int opt = 0; |
||||
std::string sprite_name; |
||||
std::string frag_name; |
||||
|
||||
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) { |
||||
switch(opt) { |
||||
case 's': |
||||
sprite_name = optarg; |
||||
break; |
||||
case 'f': |
||||
frag_name = optarg; |
||||
break; |
||||
default: |
||||
fmt::println("USAGE: fragviewer [-s sprite_name] -f shader.frag"); |
||||
return -1; |
||||
} |
||||
} |
||||
|
||||
fmt::println("sprite is", sprite_name); |
||||
|
||||
dbc::check(frag_name != "", "You must set the -f shader.frag option."); |
||||
|
||||
sf::Vector2f u_resolution{720.0, 720.0}; |
||||
|
||||
sf::RenderWindow window(sf::VideoMode({720, 720}), "SFML Frag Shader Viewer"); |
||||
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}); |
||||
|
||||
shader.setUniform("u_resolution", u_resolution); |
||||
|
||||
while(window.isOpen()) { |
||||
Handle_events(window); |
||||
sf::Time u_time = clock.getElapsedTime(); |
||||
sf::Vector2i mouse_at = sf::Mouse::getPosition(window); |
||||
sf::Vector2f u_mouse{float(mouse_at.x), float(mouse_at.y)}; |
||||
|
||||
shader.setUniform("u_mouse", u_mouse); |
||||
shader.setUniform("u_time", u_time.asSeconds()); |
||||
|
||||
window.draw(rect, &shader); |
||||
window.display(); |
||||
} |
||||
} |
Loading…
Reference in new issue