Looking for C++20 feedback on a small SDL3 game
I’ve been working on a small Defender-style arcade game, mostly as a learning project to improve my C++ skills.
My main question is: does this look like reasonably idiomatic modern C++ for a small SDL game, or are there design/ownership issues I should fix before building future projects from this style?
GitHub: https://github.com/nathan-websculpt/sdl3-defender-v3
The game itself is intentionally small, but I’ve tried to treat the codebase as more than a throwaway prototype. I’m trying to make the structure, contracts, tooling, and resource ownership as professional as possible.
I would appreciate C++-focused feedback on things like:
- Whether the project structure and responsibility boundaries make sense
- Whether my ownership/resource-management patterns are idiomatic C++20
- Whether the SDL3-specific code is isolated cleanly from the game/simulation logic
- Whether the public APIs, naming, and contracts are clear
- Whether anything looks overengineered, underengineered, brittle, or hard to maintain
- Whether the CMake/vcpkg/tooling setup looks reasonable from a C++ project perspective
Some context about the project:
- SDL3 renderer/window/audio/input integration
- Fixed-step simulation loop
- Mostly SDL-free simulation layer
- RAII-style ownership for SDL resources
- High-score persistence
- CMake/vcpkg build setup
- Debug/Release scripts
- Tests and Windows release smoke checks
- Packaged Windows release artifacts
I realize that reviewing a full repository is a big ask, so feedback on even one subsystem, one ownership pattern, one header/API, or one build/test pattern would be useful.