| |
|
Lewis 
Posted in reply to Vladimir Marchevsky
| On Monday, 24 February 2025 at 10:27:00 UTC, Vladimir Marchevsky wrote:
> On Monday, 24 February 2025 at 03:08:11 UTC, Lewis wrote:
> Hello! I'm Lewis, a solo developer from Vancouver. I've been working on The Art of Reflection for ~4 years. It's basically Superliminal meets Viewfinder with mirrors, with a bit of Portal and The Witness thrown in for good measure.
I built the game and engine from scratch in D, using D3D11, PhysX, FMOD, and a few other libraries. Happy to answer any questions about the process, but in short I'm super happy with my decision to use D. I honestly can't really imagine going back to C++ at this point.
You can play the demo right now if you want to give it a spin. Feedback is always welcome and appreciated.
Thanks so much for your support!
-Lewis
Congratulations on such a great achievement! Do you use D restricted to betterC subset, avoiding GC and everything related?
I don't strictly use betterC, but I do avoid GC usage in all frame-to-frame gameplay code. I allow myself GC usage for debug code, editor tools, and major state changes where a hitch is okay (eg. startup, loading a save game).
The bulk of my frame-to-frame allocations are handled by an object pooling system that reuses elements and grows if needed. I also have a per-thread linear allocator that resets after each frame, useful for scratch allocations that don't need to outlive a frame. I made some minor changes to druntime so that in any given scope I can switch into "scrapheap mode" as I call it, at which point all GC allocations get redirected to my linear allocator until the scope exits. This lets me use phobos, druntime, and other libraries even if they would allocate to the GC in a problematic way. As long as the allocation doesn't need to outlive the frame, I can use the library unmodified by just switching into scrapheap mode.
|