refactoring

This commit is contained in:
Stepanov Igor 2025-10-05 01:00:22 +03:00
parent 9dad26232a
commit 2293f6f5fa
3 changed files with 66 additions and 16 deletions

1
.gitignore vendored
View file

@ -9,6 +9,7 @@ Debug/voxel_engine
/export /export
/config /config
/out /out
/compile_commands.json
/projects /projects
/misc /misc

View file

@ -20,6 +20,10 @@ input_sdl::input_sdl() {
} }
void input_sdl::pollEvents() { void input_sdl::pollEvents() {
/* static */ SDL_Event event;
while (SDL_PollEvent(&event)) {
}
// delta.x = 0.0f; // delta.x = 0.0f;
// delta.y = 0.0f; // delta.y = 0.0f;
// scroll = 0; // scroll = 0;

View file

@ -1,6 +1,5 @@
#include "window/detail/window_sdl.hpp" #include "window/detail/window_sdl.hpp"
#include <GL/gl.h>
#include <GL/glew.h> #include <GL/glew.h>
#include <SDL3/SDL.h> #include <SDL3/SDL.h>
#include <SDL3/SDL_error.h> #include <SDL3/SDL_error.h>
@ -105,13 +104,17 @@ static bool initialize_gl(int width, int height) {
} else { } else {
logger.error() << "failed to initialize GLEW:\n" logger.error() << "failed to initialize GLEW:\n"
<< glewGetErrorString(glewErr); << glewGetErrorString(glewErr);
return true; return false;
} }
} }
init_gl_extensions_list();
#ifndef __APPLE__ #ifndef __APPLE__
glEnable(GL_DEBUG_OUTPUT); if (is_gl_extension_supported("GL_KHR_debug")) {
// glDebugMessageCallback(gl_message_callback, 0); glEnable(GL_DEBUG_OUTPUT);
glDebugMessageCallback(gl_message_callback, nullptr);
}
#endif #endif
glViewport(0, 0, width, height); glViewport(0, 0, width, height);
@ -132,7 +135,7 @@ static bool initialize_gl(int width, int height) {
logger.info() << "GL Renderer: " logger.info() << "GL Renderer: "
<< reinterpret_cast<const char *>(renderer); << reinterpret_cast<const char *>(renderer);
logger.info() << "SDL: " << SDL_GetVersion(); logger.info() << "SDL: " << SDL_GetVersion();
return false; return true;
} }
window_sdl::window_sdl(DisplaySettings *settings, std::string title) noexcept { window_sdl::window_sdl(DisplaySettings *settings, std::string title) noexcept {
@ -142,7 +145,7 @@ window_sdl::window_sdl(DisplaySettings *settings, std::string title) noexcept {
return; return;
} }
SDL_WindowFlags flags = SDL_WINDOW_OPENGL; SDL_WindowFlags flags = SDL_WINDOW_OPENGL | SDL_WINDOW_RESIZABLE;
if (settings->fullscreen.get()) { if (settings->fullscreen.get()) {
flags |= SDL_WINDOW_FULLSCREEN; flags |= SDL_WINDOW_FULLSCREEN;
@ -156,17 +159,58 @@ window_sdl::window_sdl(DisplaySettings *settings, std::string title) noexcept {
isSuccessfull = false; isSuccessfull = false;
return; return;
} }
int width = 0;
int height = 0;
if (!SDL_GetWindowSize(window, &width, &height)) {
logger.error() << "failed to get window size: " << SDL_GetError();
isSuccessfull = false;
return;
}
size = {width, height};
SDL_GL_SetAttribute(SDL_GL_CONTEXT_MAJOR_VERSION, 3);
SDL_GL_SetAttribute(SDL_GL_CONTEXT_MINOR_VERSION, 3);
#ifdef __APPLE__
SDL_GL_SetAttribute(
SDL_GL_CONTEXT_PROFILE_MASK, SDL_GL_CONTEXT_PROFILE_CORE
);
SDL_GL_SetAttribute(
SDL_GL_CONTEXT_FLAGS, SDL_GL_CONTEXT_FORWARD_COMPATIBLE_FLAG
);
// ??
// SDL_GL_SetAttribute(SDL_WINDOW_ALLOW_HIGHDPI, false);
#endif
SDL_GL_SetAttribute(SDL_GL_MULTISAMPLEBUFFERS, settings->samples.get());
context = SDL_GL_CreateContext(window); context = SDL_GL_CreateContext(window);
if (!context) { if (!context) {
logger.error() << "failed to create GL context: " << SDL_GetError(); logger.error() << "failed to create GL context: " << SDL_GetError();
isSuccessfull = false; isSuccessfull = false;
return; return;
} }
if (!initialize_gl(width, height)) {
logger.error() << "failed to init GL: " << SDL_GetError();
return;
}
if (!SDL_GL_SetSwapInterval(1)) {
logger.error() << "failed to set vsync: " << SDL_GetError();
isSuccessfull = false;
return;
}
} }
window_sdl::~window_sdl() { window_sdl::~window_sdl() {
SDL_DestroyWindow(window); if (window) {
if (!SDL_GL_DestroyContext(context)) { SDL_DestroyWindow(window);
logger.error() << "Cant destroy gl context: " << SDL_GetError(); }
if (context) {
if (!SDL_GL_DestroyContext(context)) {
logger.error() << "Cant destroy gl context: " << SDL_GetError();
}
} }
} }
@ -176,13 +220,15 @@ void window_sdl::swapBuffers() const noexcept {
} }
} }
bool window_sdl::isMaximized() const { bool window_sdl::isMaximized() const {
return maximized; return (SDL_GetWindowFlags(window) & SDL_WINDOW_MAXIMIZED) != 0;
} }
bool window_sdl::isFocused() const { bool window_sdl::isFocused() const {
return focused; Uint32 flags = SDL_GetWindowFlags(window);
return (flags & SDL_WINDOW_INPUT_FOCUS) != 0 ||
(flags & SDL_WINDOW_MOUSE_FOCUS) != 0;
} }
bool window_sdl::isIconified() const { bool window_sdl::isIconified() const {
return iconified; return (SDL_GetWindowFlags(window) & SDL_WINDOW_MINIMIZED) != 0;
} }
bool window_sdl::isShouldClose() const { bool window_sdl::isShouldClose() const {
@ -246,10 +292,9 @@ double window_sdl::time() {
void window_sdl::setFramerate(int framerate) { void window_sdl::setFramerate(int framerate) {
/*todo*/ /*todo*/
if (!SDL_GL_SetSwapInterval(framerate)) { if (!SDL_GL_SetSwapInterval(1)) {
logger.error() << "Failed to set framerate: " logger.error() << "Failed to set framerate: " << SDL_GetError();
<< SDL_GetError(); }
}
} }
// todo: move somewhere // todo: move somewhere