From 41c2e2ecfcccf62b3c646980dd283848e33a8134 Mon Sep 17 00:00:00 2001 From: fschildt Date: Mon, 29 Sep 2025 16:12:03 +0200 Subject: main: minor refactor --- src/basic/defs.hpp | 2 -- src/basic/math.hpp | 5 ++++ src/main.cpp | 73 ++++++++++++++++++++++++++++++++---------------------- 3 files changed, 49 insertions(+), 31 deletions(-) (limited to 'src') diff --git a/src/basic/defs.hpp b/src/basic/defs.hpp index bfd302e..858bdd7 100644 --- a/src/basic/defs.hpp +++ b/src/basic/defs.hpp @@ -1,8 +1,6 @@ #pragma once #include -#include -#include #define ARRAY_COUNT(x) (sizeof(x) / sizeof(x[0])) diff --git a/src/basic/math.hpp b/src/basic/math.hpp index c5b5940..a3e4b64 100644 --- a/src/basic/math.hpp +++ b/src/basic/math.hpp @@ -1,7 +1,12 @@ #pragma once + #include +#include +#include + + struct V2ST { size_t x; size_t y; diff --git a/src/main.cpp b/src/main.cpp index bdd5a18..16dce53 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -18,7 +18,7 @@ Game::GameType -do_menu() +DrawGameMenu() { Game::GameType type = Game::NO_GAME; @@ -47,14 +47,28 @@ do_menu() } -int -main(int argc, char **argv) +void +DrawPerformanceInfo() +{ + ImGuiIO& io = ImGui::GetIO(); + ImGuiWindowFlags flags = ImGuiWindowFlags_NoNav | ImGuiWindowFlags_NoTitleBar | ImGuiWindowFlags_NoCollapse | ImGuiWindowFlags_NoBackground | ImGuiWindowFlags_NoResize | ImGuiWindowFlags_NoMove; + + ImGui::SetNextWindowPos(ImVec2(io.DisplaySize.x - 200, 0)); + ImGui::Begin("Performance", nullptr, flags); + ImGui::Text("%.3f ms/frame (%.1f FPS)", 1000.0f / io.Framerate, io.Framerate); + ImGui::End(); +} + + +SDL_Window* +CreateWindow() { if (!SDL_Init(SDL_INIT_VIDEO | SDL_INIT_GAMEPAD)) { std::cerr << "Failed to init SDL3: " << SDL_GetError() << '\n'; - return EXIT_FAILURE; + return nullptr; } + const char* glsl_version = "#version 130"; SDL_GL_SetAttribute(SDL_GL_CONTEXT_FLAGS, 0); SDL_GL_SetAttribute(SDL_GL_CONTEXT_PROFILE_MASK, SDL_GL_CONTEXT_PROFILE_CORE); @@ -65,25 +79,31 @@ main(int argc, char **argv) SDL_GL_SetAttribute(SDL_GL_DEPTH_SIZE, 24); SDL_GL_SetAttribute(SDL_GL_STENCIL_SIZE, 8); + SDL_Window *window = SDL_CreateWindow("fsarcade", 1024, 768, SDL_WINDOW_OPENGL | SDL_WINDOW_RESIZABLE | SDL_WINDOW_HIDDEN | SDL_WINDOW_HIGH_PIXEL_DENSITY); if (!window) { std::cerr << "Failed to create SDL_window: " << SDL_GetError() << '\n'; - return EXIT_FAILURE; + return nullptr; } SDL_GLContext sdl_gl_context = SDL_GL_CreateContext(window); if (!sdl_gl_context) { std::cerr << "Failed to create SDL_GLContext: " << SDL_GetError() << '\n'; SDL_DestroyWindow(window); - return EXIT_FAILURE; + return nullptr; } + GLenum glew_error = glewInit(); if (glew_error != GLEW_OK) { - fprintf(stderr, "Error: %s\n", glewGetErrorString(glew_error)); + SDL_GL_DestroyContext(sdl_gl_context); + SDL_DestroyWindow(window); + std::cerr << "Failed to init glew: " << glewGetErrorString(glew_error) << '\n'; + return nullptr; } + SDL_GL_MakeCurrent(window, sdl_gl_context); SDL_GL_SetSwapInterval(1); // enable vsync SDL_SetWindowPosition(window, SDL_WINDOWPOS_CENTERED, SDL_WINDOWPOS_CENTERED); @@ -102,16 +122,27 @@ main(int argc, char **argv) ImGui_ImplSDL3_InitForOpenGL(window, sdl_gl_context); ImGui_ImplOpenGL3_Init(glsl_version); + return window; +} + - g_renderer.Init(window); +int +main(int argc, char **argv) +{ + SDL_Window* window = CreateWindow(); + if (!window) { + return 0; + } + g_renderer.Init(window); std::unique_ptr game = nullptr; std::vector game_events; game_events.reserve(32); + for (;;) { ImGui_ImplOpenGL3_NewFrame(); ImGui_ImplSDL3_NewFrame(); @@ -132,11 +163,11 @@ main(int argc, char **argv) ImGui_ImplSDL3_ProcessEvent(&event); if (event.type == SDL_EVENT_QUIT) - goto QUIT; + return 0; if (event.type == SDL_EVENT_WINDOW_CLOSE_REQUESTED && event.window.windowID == SDL_GetWindowID(window)) - goto QUIT; + return 0; if (event.type == SDL_EVENT_WINDOW_DESTROYED && event.window.windowID == SDL_GetWindowID(window)) { - goto QUIT; + return 0; } } @@ -153,7 +184,7 @@ main(int argc, char **argv) } } else { - Game::GameType type = do_menu(); + Game::GameType type = DrawGameMenu(); if (type != Game::NO_GAME) { game = Game::Select(type); } @@ -161,30 +192,14 @@ main(int argc, char **argv) game_events.clear(); - - ImGuiWindowFlags flags = ImGuiWindowFlags_NoNav | ImGuiWindowFlags_NoTitleBar | ImGuiWindowFlags_NoCollapse | ImGuiWindowFlags_NoBackground | ImGuiWindowFlags_NoResize | ImGuiWindowFlags_NoMove; - - ImGui::SetNextWindowPos(ImVec2(io.DisplaySize.x - 200, 0)); - ImGui::Begin("Performance", nullptr, flags); - ImGui::Text("%.3f ms/frame (%.1f FPS)", 1000.0f / io.Framerate, io.Framerate); - ImGui::End(); - - g_renderer.Draw(); ImGui::Render(); ImGui_ImplOpenGL3_RenderDrawData(ImGui::GetDrawData()); + SDL_GL_SwapWindow(window); g_renderer.Reset(); } -QUIT: - ImGui_ImplOpenGL3_Shutdown(); - ImGui_ImplSDL3_Shutdown(); - ImGui::DestroyContext(); - - SDL_GL_DestroyContext(sdl_gl_context); - SDL_DestroyWindow(window); - SDL_Quit(); return 0; } -- cgit v1.2.3