diff options
Diffstat (limited to 'src/libjin/Render/Window.cpp')
-rw-r--r-- | src/libjin/Render/Window.cpp | 90 |
1 files changed, 90 insertions, 0 deletions
diff --git a/src/libjin/Render/Window.cpp b/src/libjin/Render/Window.cpp new file mode 100644 index 0000000..6507691 --- /dev/null +++ b/src/libjin/Render/Window.cpp @@ -0,0 +1,90 @@ +#include "../modules.h" +#if JIN_MODULES_RENDER + +#include <iostream> +#include "window.h" +#include "3rdparty/GLee/GLee.h" +#include "canvas.h" +#include "../utils/utils.h" +#include "../audio/sdl/audio.h" +#include "../utils/log.h" + +namespace jin +{ +namespace render +{ + + onlyonce bool WindowSystem::initSystem(const SettingBase* s) + { + Loghelper::log(Loglevel::LV_INFO, "Init window system"); + + if (SDL_Init(SDL_INIT_VIDEO) < 0) + return false; + + const WindowSetting* setting = (WindowSetting*)s; + + width = setting->width; + height = setting->height; + bool vsync = setting->vsync; + const char* title = setting->title; + + if (wnd) + { + SDL_DestroyWindow(wnd); + SDL_FlushEvent(SDL_WINDOWEVENT); + } + + SDL_GLContext ctx = NULL; + + if (ctx) + { + SDL_GL_DeleteContext(ctx); + } + + SDL_GL_SetAttribute(SDL_GL_CONTEXT_MAJOR_VERSION, 3); + SDL_GL_SetAttribute(SDL_GL_CONTEXT_MINOR_VERSION, 1); + SDL_GL_SetAttribute(SDL_GL_RED_SIZE, 8); + SDL_GL_SetAttribute(SDL_GL_GREEN_SIZE, 8); + SDL_GL_SetAttribute(SDL_GL_BLUE_SIZE, 8); + SDL_GL_SetAttribute(SDL_GL_ALPHA_SIZE, 8); + SDL_GL_SetAttribute(SDL_GL_STENCIL_SIZE, 8); + SDL_GL_SetAttribute(SDL_GL_DOUBLEBUFFER, 1); + + int wx = SDL_WINDOWPOS_UNDEFINED, + wy = SDL_WINDOWPOS_UNDEFINED; + + wnd = SDL_CreateWindow(title, wx, wy, width, height, SDL_WINDOW_SHOWN | SDL_WINDOW_OPENGL); + if (wnd == NULL) + return false; + ctx = SDL_GL_CreateContext(wnd); + if (ctx == NULL) + return false; + SDL_GL_SetSwapInterval(vsync ? 1 : 0); + SDL_GL_MakeCurrent(wnd, ctx); + glClearColor(0.f, 0.f, 0.f, 1.f); + glClear(GL_COLOR_BUFFER_BIT | GL_STENCIL_BUFFER_BIT); + glColor4f(1, 1, 1, 1); + + glEnable(GL_BLEND); + glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); + + Canvas::unbind(); + swapBuffers(); + return true; + } + + onlyonce void WindowSystem::quitSystem() + { + SDL_DestroyWindow(wnd); + } + + inline void WindowSystem::swapBuffers() + { + if (wnd) + SDL_GL_SwapWindow(wnd); + } + +} +} + +#endif // JIN_MODULES_RENDER
\ No newline at end of file |