// the find
MateuszKretkowski/c_sdl3_game_engine
Engine written in pure C using SDL3 + OpenGL Core, no external abstractions. All rendering done via direct OpenGL calls - VAOs, VBOs, shaders, draw commands. Fully manual memory allocation, texture setup, input layer, and update loop. No Unity. No Unreal. No framework. Just bytes, buffers, and raw graphics API.
A solo-built 3D game engine in C on SDL3 + OpenGL 3.3 Core, aimed at people who want to see how an engine is built rather than ship a game with one. It's JSON-driven (scenes, prefabs, materials) with a real component system, basic rigid body physics, and peer-to-peer LAN multiplayer for a Pong demo.
The component registry resolves types through a string-keyed lookup rather than a hardcoded switch, so JSON deserialization can instantiate arbitrary component types without touching engine code. The physics has an actual broad phase (uniform spatial grid) instead of brute-force pairwise checks, and separates collision detection from material-driven restitution/friction. The networking model, while limited, is coherent: ownership-based authority, fixed 50ms tick, non-owned objects forced kinematic, and packets from non-peer addresses dropped outright rather than trusted. Rendering is genuinely manual OpenGL (VAOs, VBOs, shaders) with diffuse/specular/normal maps and a debug renderer for visualizing collision volumes, which is more useful for understanding the physics than most engines bother with.
Collision detection only covers sphere-sphere and sphere-AABB, so it's really a spheres-and-platforms physics demo, not a general rigid body engine. Multiplayer is hardcoded to two peers with no interpolation, delta compression, or reconnection handling, and peer address is entered via stdin at startup, so packet loss shows up as visible snapping and there's no path to more than two players without a rewrite. Soft body and spring components exist in the tree but are unfinished, and audio and UI aren't implemented at all, so several advertised features are stubs. Every dependency except SDL3 (cglm, cJSON, stb_image, glad) is vendored directly into the repo with no version pinning or update mechanism.