1
0
mirror of https://github.com/rwengine/openrw.git synced 2024-09-18 16:32:32 +02:00
openrw/rwgame/GameWindow.cpp
Daniel Evans 47d654854e Remove SetWindowGrab to allow dismissing the error dialog
If an error occurs while the game is running, the window grabbing input
focus would prevent the mouse from being able to click on "OK".
Since SetRelativeMouseMode already warps the cursor for us we don't
need to grab the input.
2016-08-27 00:40:10 +01:00

69 lines
1.6 KiB
C++

#include <core/Logger.hpp>
#include "GameWindow.hpp"
GameWindow::GameWindow() :
window(nullptr), glcontext(nullptr)
{
}
void GameWindow::create(const std::string& title, size_t w, size_t h, bool fullscreen)
{
Uint32 style = SDL_WINDOW_OPENGL | SDL_WINDOW_RESIZABLE | SDL_WINDOW_HIDDEN;
if (fullscreen)
style |= SDL_WINDOW_FULLSCREEN;
SDL_GL_SetAttribute(SDL_GL_CONTEXT_PROFILE_MASK, SDL_GL_CONTEXT_PROFILE_CORE);
SDL_GL_SetAttribute(SDL_GL_CONTEXT_MAJOR_VERSION, 3);
SDL_GL_SetAttribute(SDL_GL_CONTEXT_MINOR_VERSION, 3);
SDL_GL_SetAttribute(SDL_GL_DOUBLEBUFFER, 1);
SDL_GL_SetAttribute(SDL_GL_DEPTH_SIZE, 24);
SDL_GL_SetAttribute(SDL_GL_STENCIL_SIZE, 8);
window = SDL_CreateWindow(title.c_str(), SDL_WINDOWPOS_CENTERED, SDL_WINDOWPOS_CENTERED, w, h, style);
if (window == nullptr) {
// Window creation failure is fatal
std::string sdlErrorStr = SDL_GetError();
throw std::runtime_error("SDL_CreateWindow failed: " + sdlErrorStr);
}
glcontext = SDL_GL_CreateContext(window);
if (glcontext == nullptr) {
// context creation failure is fatal
std::string sdlErrorStr = SDL_GetError();
throw std::runtime_error("SDL_GL_CreateContext failed: " + sdlErrorStr);
}
SDL_ShowWindow(window);
}
void GameWindow::close()
{
SDL_GL_DeleteContext(glcontext);
SDL_DestroyWindow(window);
window = nullptr;
}
void GameWindow::showCursor()
{
SDL_SetRelativeMouseMode(SDL_FALSE);
}
void GameWindow::hideCursor()
{
SDL_SetRelativeMouseMode(SDL_TRUE);
}
glm::ivec2 GameWindow::getSize() const
{
int x, y;
SDL_GL_GetDrawableSize(window, &x, &y);
return glm::ivec2(x, y);
}