40ae94788e
- C++ std headers first, then third-party, then local - Apply consistently in cbt/ and scenes/
60 lines
1.1 KiB
C++
60 lines
1.1 KiB
C++
#define GLFW_INCLUDE_NONE
|
|
|
|
#include <csignal>
|
|
|
|
#include "GLFW/glfw3.h"
|
|
#include "asio.hpp"
|
|
|
|
#include "cbt/opengl/context.hpp"
|
|
#include "scenes/cube.hpp"
|
|
|
|
auto main(int, char const*[]) -> int {
|
|
auto ctx = cbt::opengl::context("cuber", 1280, 720);
|
|
|
|
if (!ctx.valid()) {
|
|
return 1;
|
|
}
|
|
|
|
auto scn = cbt::scenes::cube();
|
|
if (!scn.init()) {
|
|
return 1;
|
|
}
|
|
|
|
// signal handling
|
|
asio::io_context io;
|
|
asio::signal_set signals(io, SIGINT, SIGTERM);
|
|
bool quit = false;
|
|
|
|
signals.async_wait([&](auto, auto) {
|
|
quit = true;
|
|
io.stop();
|
|
});
|
|
|
|
auto process_signals = [&]() -> void {
|
|
while (io.poll()) {}
|
|
};
|
|
|
|
// render loop
|
|
auto prev = std::chrono::steady_clock::now();
|
|
|
|
while (!ctx.should_close()) {
|
|
process_signals();
|
|
|
|
if (quit || glfwGetKey(ctx.raw(), GLFW_KEY_Q) == GLFW_PRESS) {
|
|
break;
|
|
}
|
|
|
|
auto now = std::chrono::steady_clock::now();
|
|
auto dt = std::chrono::duration<float>(now - prev).count();
|
|
prev = now;
|
|
|
|
scn.update(dt);
|
|
scn.render();
|
|
|
|
ctx.swap_buffers();
|
|
ctx.poll_events();
|
|
}
|
|
|
|
return 0;
|
|
}
|