Many improvements this week, including: per-frame, linear allocated buffers for pushing entity data to the GPU. Rewrite and optimization of the ECS and a pile of stability fixes. Now able to handle 100k+ active entities at 60 FPS.
youtu.be/foEuMwZdNHM
#gameengine #gamedev #indiedev #vulkan
Posts by James Yarwood
System memory/RAM allocation viewer.
GPU memory/VRAM allocation viewer.
This weekend, a (very) basic RAM and GPU/VRAM memory viewer. Now able to see per-heap GPU memory allocation and overall consumption. Next step is to visualize the sub-allocations for VRAM usage.
#vulkan #gamedev #indiedev #gameengine
This morning, improvements to device initialization. Also finished off the primary-secondary device system. Initially, secondary devices will be used to offload certain compute tasks.
Also the beginning of a useful render metrics GUI!
#vulkan #imgui #gamedev #indiedev #gameengine
Apologies for the poor quality screenshot. Seems Bluesky doesn't like 4k screenshots. Will keep that in mind for next time!
ImGui demo window
This weekend, optimization and improvements around buffer usage. I've also successfully integrated ImGui a few minutes ago!
#ImGui #gameengine #Vulkan #gamedev #indiedev
This weekend, I've been working on stability and render performance. Now at a point where 40000 entities can be drawn/updated. A massive increase from the 1500 in last week's post.
www.youtube.com/watch?v=MuMM...
#gamedev #gameengine #vulkan #indiedev
Bluesky seems to have some crazy video compression! Apologies for the poor video quality!
This weekend, I've added keyboard and mouse support to my #Vulkan #gameengine. It's nice to finally be able to move!
#gamedev #indiedev
Finally back up and running after separating the engine into .NET/C# while keeping the #Vulkan renderer and @shader-slang.bsky.social compiler in C++.
Added a few performance improvements too, but still a long way to go!
#gameengine #indiedev #gamedev
I've gone down a rabbit hole with building my own interop generator this month, to allow my engine to be used from #csharp. SWIG and CppSharp exist, but I wanted to attempt my own.
I've made a lot of progress on it already, but still a lot to be done!
#gameengine #interop #dotnet #cpp
Also realised I need to put more work into the scene system so that objects can be individually scaled. Right now, the GLTF-loaded spheres in the screenshots are much more massive than the hard-coded cubes!
Depth buffering helps the GPU figure out which objects are drawn infront or behind other objects. Without it, rendering distant objects may cause them to be drawn over closer ones, depending on the draw order.
With most of the pipeline management stuff out of the way, I've started implementing depth buffering support. The difference isn't very obvious in the screenshots!
#Vulkan #gameengine #gamedev #indiedev
This is looking awesome. Keep it up!
Once this (quite large!) foundational functionality is in place, you can start to do some pretty neat things, like chain render passes together for multi-pass shader effects or mix and match shaders/materials to create some pretty awesome end-results. Not quite there yet though!
There's a lot variety of different pipeline state objects to keep track of in Vulkan, so being able to keep track of them all is important, as this information can later be used to automate batching and ordering draw calls based on material, pipeline state, vertex layout, descriptor layout, etc.
Not much visual progress this month. I've been working on the beginnings of a render graph system which is progressing nicely. Now it's able to render more than 1 type of mesh/shader to the same render target.
#Vulkan #GameEngine #indiedev #gamedev
The volumetric effects look great. Keep it up!
The next item on the renderer feature list is depth-buffering. Without that, any of the more complicated models will look like they've been turned inside out!
With memory allocation out of the way, I've been working on a custom #glTF loader. It's now able to load basic mesh data, but there is still lot of work to do on it.
For the video, I'm using planet.gltf from the vulkan samples library.
#vulkan #gamedev #gameengine #indiedev
If you want to try your hand at a custom vulkan memory allocator, I highly recommend watching the Vulkanized 2018 presentation on memory management. Everything mentioned is still relevant in 2025.
www.youtube.com/watch?v=zSG6...
#vulkan #gamedev
I've been working on a custom #vulkan memory allocator, for self-teaching. Works better than expected, with block allocation, basic defragmentation, typed memory, virtual map/unmap and more.
But, I recommend using VMA if you want to skip memory management: gpuopen.com/vulkan-memor...
#gamedev
Many hours have gone into implementing automatic shader binding, but it would have been many more without #RenderDoc. This tool helps immensely in finding issues with your vulkan/DX API calls!
It provides a detailed breakdown of the GPU state for any captured frame.
#gamedev #gameengine #vulkan
Everything is back up and running in my vulkan renderer after implementing automatic shader mapping/binding using the @shader-slang.bsky.social API.
It's now possible to set shader parameters by name instead of using the raw descriptor set/write API.
#vulkan #gameengine #rendering #gamedev
Now I realised you're already on steam, which is great. Wishlisted!
This is awesome. I hope you get it onto steam at some point in the future. I'd definitely buy it. Keep it up!
This is looking very impressive. Awesome work!
Finally completed the initial implementation of @shader-slang.bsky.social in my engine. Now working on descriptor pool/set management and a shader <-> mesh binding system.
Will hopefully have something nice to show soon!
#vulkan #gameengine #gamedev
Initially I thought this post was nonsense and thought of all the parts in 3D graphics programming where float isn't used... I quickly realised how right you are.
You can't escape them easily!
This looks like a really cool game. Definitely something I'd play!