f18e5e4adc
- Add asio dependency for async signal handling - Register SIGINT and SIGTERM to quit the application - Poll signals each frame for non-blocking shutdown - Q key and Ctrl+C both cleanly exit the program
48 lines
890 B
C++
48 lines
890 B
C++
#define GLFW_INCLUDE_NONE
|
|
#include "GLFW/glfw3.h"
|
|
|
|
#include "cbt/window.hpp"
|
|
|
|
#include <csignal>
|
|
|
|
#include <asio.hpp>
|
|
|
|
#include "glad/glad.h"
|
|
|
|
auto main(int, char const*[]) -> int {
|
|
auto w = cbt::window("cuber", 1280, 720);
|
|
|
|
if (!w.valid()) {
|
|
return 1;
|
|
}
|
|
|
|
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()) {}
|
|
};
|
|
|
|
while (!w.should_close()) {
|
|
process_signals();
|
|
|
|
if (quit || glfwGetKey(static_cast<GLFWwindow*>(w.raw()), GLFW_KEY_Q) == GLFW_PRESS) {
|
|
break;
|
|
}
|
|
|
|
glClearColor(0.6f, 0.8f, 1.0f, 1.0f);
|
|
glClear(GL_COLOR_BUFFER_BIT);
|
|
|
|
w.swap_buffers();
|
|
w.poll_events();
|
|
}
|
|
|
|
return 0;
|
|
}
|