From 60072c1d8089ffd3294e76636198d14710be95b8 Mon Sep 17 00:00:00 2001 From: Yann Herklotz Date: Sat, 9 Sep 2017 07:55:22 +0100 Subject: Restructuring --- yage/base/window.cpp | 97 ++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 97 insertions(+) create mode 100644 yage/base/window.cpp (limited to 'yage/base/window.cpp') diff --git a/yage/base/window.cpp b/yage/base/window.cpp new file mode 100644 index 00000000..143b1d5d --- /dev/null +++ b/yage/base/window.cpp @@ -0,0 +1,97 @@ +/* ---------------------------------------------------------------------------- + * window.cpp + * + * Copyright (c) 2017 Yann Herklotz Grave -- MIT License + * See file LICENSE for more details + * ---------------------------------------------------------------------------- + */ + +#include +#include + +#include +#include + +namespace yage +{ + +Window::Window() = default; + +Window::~Window() +{ + SDL_DestroyWindow(window_); +} + +void Window::create(const std::string &window_name, int width, int height, + unsigned flags) +{ + Uint32 gl_window_states = 0; + + // set the correct input flags + if (flags & WindowFlags::SHOWN) { + gl_window_states |= SDL_WINDOW_OPENGL; + } + if (flags & WindowFlags::HIDDEN) { + gl_window_states |= SDL_WINDOW_HIDDEN; + } + if (flags & WindowFlags::FULLSCREEN) { + gl_window_states |= SDL_WINDOW_FULLSCREEN; + } + if (flags & WindowFlags::BORDERLESS) { + gl_window_states |= SDL_WINDOW_BORDERLESS; + } + + // SDL_GL options + + // SDL_GL_SetAttribute (SDL_GL_CONTEXT_MAJOR_VERSION, 4); + // SDL_GL_SetAttribute (SDL_GL_CONTEXT_MINOR_VERSION, 5); + SDL_GL_SetAttribute(SDL_GL_DOUBLEBUFFER, 1); + + // create the SDL window + window_ = SDL_CreateWindow(window_name.c_str(), SDL_WINDOWPOS_CENTERED, + SDL_WINDOWPOS_CENTERED, width, height, + gl_window_states); + if (window_ == nullptr) { + throw std::runtime_error("SDL_CreateWindow failed"); + } + + // initialize the GL context in the window + SDL_GLContext gl_context = SDL_GL_CreateContext(window_); + if (gl_context == nullptr) { + throw std::runtime_error("SDL_GL_CreateContext failed"); + } + + // initialize glew + GLenum error = glewInit(); + if (error != GLEW_OK) { + throw std::runtime_error("glewInit failed"); + } + + // print out the current OpenGL version to debug + std::cout << "*** OpenGL version: " << glGetString(GL_VERSION) + << " ***\n"; + + // set vsync on instead of custom fps limiting + SDL_GL_SetSwapInterval(1); + // set the clear color to black + glClearColor(0.f, 0.5f, 0.f, 1.f); + // set alpha blending + glEnable(GL_BLEND); + glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); +} + +void Window::swapBuffer() +{ + // swap the window buffer + SDL_GL_SwapWindow(window_); +} + +void Window::clearBuffer() +{ + // set the clear depth + glClearDepth(1.f); + // clears buffer with clear color + glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); +} + +} // namespace yage -- cgit