No Game Engine Game Dev: Word Sleuth 036: Two bugs and std container hunting

3 months ago
8

Streamed on 2024-08-22 (https://www.twitch.tv/thediscouragerofhesitancy)

Game Engines are for sissies!

I started off with some bugs that had crept in during some of the major refactors of the last week or two. The first bug was with text color not updating correctly. With a bit of tracing I found the issue to be similar to what we found before ... the colors weren't being applied all the way to the end of the desired colors list. Really it should just always match the quad capacity, so there's now a TODO item for that.

The second bug was about a texture not showing up right. It turns out that I had an array index out of bounds write in the ShaderStore that was overwriting the array in TextureStore, but it took some digging to figure that out. Once I spotted it, the cause for the error was easy to identify and the fix was easy. In ShaderWarehouse there are pairs of files: vertex shader and fragment shader. So I know the number of files is 8. However, a shader program takes one of each, so the ShaderStore has room for 4. Then, when I request a Shader from the ShaderStore, the index was with respect to the 8 files in ShaderWarehouse and needed to be adjusted to the number of shader programs in ShaderStore. With a little indexing magic, all was well with the world once more.

Then it was time to continue the hunt for standard library containers. I have found that every time I use one, it can be refactored away into something more basic and just as functional. So I removed the std::vector from VertexBufferLayout with relative ease. Then I started on the last std container in my code base. It is the ActionSequence scheduler. Instead of keeping lists, each ActionSequence maintains more internal state (Idle, Waiting and Running) and the Scheduler has an ActionSequence pool. This should eliminate all allocations/frees nicely. It very nearly works, but there is still a bug or two I am working through. On Monday I should have eliminated all std containers and be in a good working state.

Loading 1 comment...