aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorfschildt <florian.schildt@protonmail.com>2025-09-29 16:12:03 +0200
committerfschildt <florian.schildt@protonmail.com>2025-09-29 16:12:03 +0200
commit41c2e2ecfcccf62b3c646980dd283848e33a8134 (patch)
treebb5764261560445f6348c5806a6f77b7aa19b740 /src
parent9d72ed2d5801b1506158082f08bd0b47e58db17f (diff)
main: minor refactor
Diffstat (limited to 'src')
-rw-r--r--src/basic/defs.hpp2
-rw-r--r--src/basic/math.hpp5
-rw-r--r--src/main.cpp73
3 files changed, 49 insertions, 31 deletions
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 <cassert>
-#include <cstdint>
-#include <cstddef>
#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 <basic/defs.hpp>
+#include <cstddef>
+#include <cstdint>
+
+
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> game = nullptr;
std::vector<SDL_Event> 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;
}