Dev Log 2: Building the Foundation

Part I — Solid Ground

After bringing the CRT system to life, I shifted focus to structure. How everything underneath it actually works. RetroEngine needed more than just a display; it needed a framework that could scale. The goal was clear: build a clean, modular core that could render both 3D and 2D scenes through the same signal path.

I introduced an ECS-style layout for all scene data, starting with Components.h for transforms and renderables, Material.h for shading data, and GpuMesh.h to define how geometry lives on the GPU. It’s not a full ECS engine, just structured enough to keep data predictable and render paths isolated.

Part II — Light and Form

The next step was verifying the math. The first procedural cube mesh finally rendered under proper Blinn–Phong lighting, using inverse-transpose normal transforms for correct world-space shading. A simple test scene proved everything worked end-to-end: geometry buffers, camera transforms, constant buffers, and lighting all talking through DirectX 12.

Every pixel rendered here flows through the same HDR render target that the CRT system consumes. Instead of a separate path, the 3D renderer now acts as a signal generator, feeding light data into the analog simulation.

Part III — Preparing for 2D

With the 3D foundation stable, I’m now working on SpriteRenderer2D, a new module built on the same HDR target. It’ll handle orthographic cameras, nearest-neighbor textures, and parallax layers like the SNES and Genesis era. The idea is simple but powerful: both the 3D and 2D systems feed the same CRT simulation, producing one unified analog signal regardless of source.

The long-term vision is modularity; each renderer acting as its own self-contained signal generator, completely independent but visually cohesive under the CRT stage. Every piece of light that reaches the screen should feel earned, not composited.

Closing Thoughts

This stage was about order. The chaos of early experiments is now structured: clean data flow, consistent transforms, and a working 3D test scene that breathes through simulated glass. Next, I’ll shift focus to SpriteRenderer2D, giving RetroEngine its first true sense of motion and parallax.

RetroEngine cube lighting test