Index

zydeco / 0dd781a

Experiment in graphics programming, C++, OpenGL, simulation techniques.

Latest Commit

{#}TimeHashSubjectAuthor#(+)(-)GPG?
405 Aug 2023 20:500dd781aCreate event handling and threads structureJosh Stockin1830G

Blob @ zydeco / src / sdl2 / WindowSDL2.cpp

text/plain2238 bytesdownload raw
1#include "ZydecoCommon.hpp"
2#include "CommonSDL2.hpp"
3#include "WindowSDL2.hpp"
4
5
6static Logger LOGGER("WINDOW");
7
8
9// Static initialize
10bool WindowSDL2::s_sdlInitialized = false;
11
12
13WindowSDL2::WindowSDL2(std::string title, uint64_t window_config_flags):
14 m_windowTitle(title)
15{
16 _SdlInitialize();
17
18 LOGGER.Log(Logger::INFO, "SDL Creating OpenGL Window ('{}')", title);
19
20 SDL_CallPointerReturningFunction(SDL_CreateWindow, m_pSdlWindow,
21 m_windowTitle.c_str(), SDL_WINDOWPOS_UNDEFINED, SDL_WINDOWPOS_UNDEFINED, 800, 600, window_config_flags);
22
23 SDL_CallPointerReturningFunction(SDL_CreateRenderer, m_pSdlRenderer,
24 m_pSdlWindow, -1, SDL_RENDERER_ACCELERATED);
25
26 SDL_CallPointerReturningFunction(SDL_GL_CreateContext, m_pGlContext, m_pSdlWindow);
27
28 SDL_ShowWindow(m_pSdlWindow);
29}
30
31WindowSDL2::~WindowSDL2()
32{
33 LOGGER.Log(Logger::DEBUG, "Destroying window {}", m_windowTitle);
34 SDL_GL_DeleteContext(m_pGlContext);
35 SDL_DestroyRenderer(m_pSdlRenderer);
36 SDL_DestroyWindow(m_pSdlWindow);
37}
38
39bool WindowSDL2::Update(uint64_t time_since_last_update_us)
40{
41 LOGGER.Log(Logger::TRACE, "Refreshing SDL window {}", time_since_last_update_us);
42
43 // Update SDL renderer display
44 SDL_CallErrorReturningFunction(SDL_RenderClear, m_pSdlRenderer);
45
46 // Update OpenGL context display
47 SDL_GL_SwapWindow(m_pSdlWindow);
48
49 SDL_RenderPresent(m_pSdlRenderer);
50
51 return false;
52}
53
54void WindowSDL2::SetTitle(std::string new_title)
55{
56 m_windowTitle = new_title;
57 SDL_SetWindowTitle(m_pSdlWindow, m_windowTitle.c_str());
58}
59
60void WindowSDL2::SetFullscreen(bool is_fullscreen)
61{
62 SDL_CallErrorReturningFunction(SDL_SetWindowFullscreen, m_pSdlWindow, is_fullscreen ? SDL_WINDOW_FULLSCREEN_DESKTOP : 0);
63}
64
65void WindowSDL2::SetSize(uint64_t new_width, uint64_t new_height)
66{
67 SDL_SetWindowSize(m_pSdlWindow, new_width, new_height);
68}
69
70void WindowSDL2::SetPosition(uint64_t new_x, uint64_t new_y)
71{
72 SDL_SetWindowPosition(m_pSdlWindow, new_x, new_y);
73}
74
75void WindowSDL2::_SdlInitialize()
76{
77 if (s_sdlInitialized) { return; }
78
79 LOGGER.Log(Logger::INFO, "SDL Init");
80 SDL_CallErrorReturningFunction(SDL_Init, SDL_INIT_VIDEO | SDL_INIT_EVENTS);
81
82 s_sdlInitialized = true;
83}
84