aboutsummaryrefslogtreecommitdiff
path: root/src/libjin/Render/Window.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/libjin/Render/Window.cpp')
-rw-r--r--src/libjin/Render/Window.cpp90
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