X-Git-Url: https://git.localhorst.tv/?a=blobdiff_plain;f=src%2Finit.cpp;fp=src%2Finit.cpp;h=0000000000000000000000000000000000000000;hb=b7d09e1e35ef90282c97509e0020b20db3c7ea9f;hp=a56674c309506b5ac8f0876be5338b8241dfebf3;hpb=e53a0e2e711a7d8bd9b0ddacd1360aa14370643f;p=blank.git diff --git a/src/init.cpp b/src/init.cpp deleted file mode 100644 index a56674c..0000000 --- a/src/init.cpp +++ /dev/null @@ -1,185 +0,0 @@ -#include "init.hpp" - -#include -#include -#include -#include -#include -#include - - -namespace { - -void sdl_error(std::string msg) { - const char *error = SDL_GetError(); - if (*error != '\0') { - msg += ": "; - msg += error; - SDL_ClearError(); - } - throw std::runtime_error(msg); -} - -} - -namespace blank { - -InitSDL::InitSDL() { - if (SDL_Init(SDL_INIT_VIDEO) != 0) { - sdl_error("SDL_Init(SDL_INIT_VIDEO)"); - } -} - -InitSDL::~InitSDL() { - SDL_Quit(); -} - - -InitIMG::InitIMG() { - if (IMG_Init(IMG_INIT_PNG) == 0) { - sdl_error("IMG_Init(IMG_INIT_PNG)"); - } -} - -InitIMG::~InitIMG() { - IMG_Quit(); -} - - -InitGL::InitGL(bool double_buffer, int sample_size) { - if (SDL_GL_SetAttribute(SDL_GL_CONTEXT_MAJOR_VERSION, 3) != 0) { - sdl_error("SDL_GL_SetAttribute(SDL_GL_CONTEXT_MAJOR_VERSION, 3)"); - } - if (SDL_GL_SetAttribute(SDL_GL_CONTEXT_MINOR_VERSION, 3) != 0) { - sdl_error("SDL_GL_SetAttribute(SDL_GL_CONTEXT_MINOR_VERSION, 3)"); - } - if (SDL_GL_SetAttribute(SDL_GL_CONTEXT_PROFILE_MASK, SDL_GL_CONTEXT_PROFILE_CORE) != 0) { - sdl_error("SDL_GL_SetAttribute(SDL_GL_CONTEXT_PROFILE_MASK, SDL_GL_CONTEXT_PROFILE_CORE)"); - } - - if (double_buffer) { - if (SDL_GL_SetAttribute(SDL_GL_DOUBLEBUFFER, 1) != 0) { - sdl_error("SDL_GL_SetAttribute(SDL_GL_DOUBLEBUFFER, 1)"); - } - } - - if (sample_size > 1) { - if (SDL_GL_SetAttribute(SDL_GL_MULTISAMPLEBUFFERS, 1) != 0) { - sdl_error("SDL_GL_SetAttribute(SDL_GL_MULTISAMPLEBUFFERS)"); - } - if (SDL_GL_SetAttribute(SDL_GL_MULTISAMPLESAMPLES, sample_size) != 0) { - sdl_error("SDL_GL_SetAttribute(SDL_GL_MULTISAMPLESAMPLES)"); - } - } -} - - -Window::Window() -: handle(SDL_CreateWindow( - "blank", - SDL_WINDOWPOS_UNDEFINED, SDL_WINDOWPOS_UNDEFINED, - 960, 600, - SDL_WINDOW_OPENGL | SDL_WINDOW_RESIZABLE -)) { - if (!handle) { - sdl_error("SDL_CreateWindow"); - } -} - -Window::~Window() { - SDL_DestroyWindow(handle); -} - -void Window::GrabInput() { - SDL_SetWindowGrab(handle, SDL_TRUE); -} - -void Window::ReleaseInput() { - SDL_SetWindowGrab(handle, SDL_FALSE); -} - -void Window::GrabMouse() { - if (SDL_SetRelativeMouseMode(SDL_TRUE) != 0) { - sdl_error("SDL_SetRelativeMouseMode"); - } -} - -void Window::ReleaseMouse() { - if (SDL_SetRelativeMouseMode(SDL_FALSE) != 0) { - sdl_error("SDL_SetRelativeMouseMode"); - } -} - -GLContext Window::CreateContext() { - return GLContext(handle); -} - -void Window::Flip() { - SDL_GL_SwapWindow(handle); -} - - -GLContext::GLContext(SDL_Window *win) -: handle(SDL_GL_CreateContext(win)) { - if (!handle) { - sdl_error("SDL_GL_CreateContext"); - } -} - -GLContext::~GLContext() { - if (handle) { - SDL_GL_DeleteContext(handle); - } -} - - -GLContext::GLContext(GLContext &&other) -: handle(other.handle) { - other.handle = nullptr; -} - -GLContext &GLContext::operator =(GLContext &&other) { - std::swap(handle, other.handle); - return *this; -} - -void GLContext::EnableVSync() { - if (SDL_GL_SetSwapInterval(1) != 0) { - sdl_error("SDL_GL_SetSwapInterval"); - } -} - -void GLContext::EnableDepthTest() noexcept { - glEnable(GL_DEPTH_TEST); - glDepthFunc(GL_LESS); -} - -void GLContext::EnableBackfaceCulling() noexcept { - glEnable(GL_CULL_FACE); -} - -void GLContext::Clear() noexcept { - glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); -} - -void GLContext::ClearDepthBuffer() noexcept { - glClear(GL_DEPTH_BUFFER_BIT); -} - - -InitGLEW::InitGLEW() { - glewExperimental = GL_TRUE; - GLenum glew_err = glewInit(); - if (glew_err != GLEW_OK) { - std::string msg("glewInit: "); - const GLubyte *errBegin = glewGetErrorString(glew_err); - const GLubyte *errEnd = errBegin; - while (*errEnd != '\0') { - ++errEnd; - } - msg.append(errBegin, errEnd); - throw std::runtime_error(msg); - } -} - -}