18 #include <glutil/glutil.h> 21 #include <JoystickTranslator.h> 23 Window::Window(
int width,
int height, std::string title) {
24 # if defined(__linux__) 25 linux_initialize_cwd();
26 # endif // ! __linux__ 29 this->height = height;
31 Globals::set(Globals::WINDOW_HEIGHT,height);
32 Globals::set(Globals::WINDOW_WIDTH,width);
34 sf::ContextSettings settings = sf::ContextSettings(32, 8, 0, 3, 3);
36 settings.majorVersion = 4;
37 settings.minorVersion = 2;
38 settings.attributeFlags = sf::ContextSettings::Debug | sf::ContextSettings::Core;
39 window =
new sf::Window(sf::VideoMode(width, height), title, sf::Style::Default, settings);
40 glEnable(GL_FRAMEBUFFER_SRGB);
48 void Window::initGL() {
49 glewExperimental = GL_TRUE;
57 startupGLDiagnostics();
58 setupGLDebugMessages();
61 void Window::resize(
unsigned int width,
unsigned int height) {
62 Globals::set(Globals::Key::WINDOW_HEIGHT, height);
63 Globals::set(Globals::Key::WINDOW_WIDTH, width);
64 resizeMethod(width, height);
67 void Window::start(
unsigned int maxFPS) {
68 window->setFramerateLimit(maxFPS);
69 resize(this->width, this->height);
71 sf::Vector2i pos = sf::Mouse::getPosition(*window);
72 Globals::set(Globals::Key::MOUSE_WINDOW_X, pos.x);
73 Globals::set(Globals::Key::MOUSE_WINDOW_Y, pos.y);
75 if (idleMethod ==
nullptr)
76 Logger::logWarning(
"Renderer: No idle method specified.");
77 if (displayMethod ==
nullptr) {
78 Logger::logError(
"Renderer: No display method specified.");
82 sf::Clock sinceStart, sinceLastIdleMethodCall;
88 while (window->pollEvent(event)) {
89 if (event.type == sf::Event::Closed) {
93 else if (event.type == sf::Event::MouseMoved) {
94 Globals::set(Globals::Key::MOUSE_WINDOW_X, event.mouseMove.x);
95 Globals::set(Globals::Key::MOUSE_WINDOW_Y, event.mouseMove.y);
97 else if (event.type == sf::Event::JoystickDisconnected || event.type == sf::Event::JoystickConnected) {
98 JoystickTranslator::getInstance()->updateMapping();
100 else if (event.type == sf::Event::Resized)
102 resize(event.size.width, event.size.height);
107 float dt = sinceLastIdleMethodCall.restart().asSeconds();
108 float totTime = sinceStart.getElapsedTime().asSeconds();
109 if (idleMethod !=
nullptr)
110 idleMethod(totTime, dt);
111 displayMethod(totTime, dt);
118 void Window::setResizeMethod(
void(*resize)(
int,
int)) {
119 resizeMethod = resize;
123 displayMethod = display;
130 sf::Window* Window::getWindow() {
void setIdleMethod(void(*idle)(float sinceStart, float sinceLastMethodCall))
void setDisplayMethod(void(*display)(float sinceStart, float sinceLastMethodCall))