Commit 8c063260

– refactor so that the assumptions about the number of descriptor sets is true
– generate correct object ids
– actually check for further usage before discarding textures

Little is to be added to this commit message except that is also (successfully) included an object removal without scrambling up the object-to-Vulkan vertex structure and texture-to-Vulkan image buffer mapping.

Commit 8db623c6

– refactoring: the GameState is now responsible for adding new objects
– refactoring: the renderer no longer directly adds/removes models but instead implicitly uses the current data from the ModelManager

A substantial refactor that can be summed up in some further bullet points:

  • We now use the GameState to load models, as such the addModel()/and removeModel() functions are removed from the renderer
  • They are being replaced by a function called synchroniseModel()
  • The concept of a state hash is added to the ObjectManager which calculates a unique hash for the current object state
  • The renderer also has a copy of the hash value, if they differ it knows it needs to update the Vulkan specific data structures to draw the new object/model state
  • The instantiation of the homely example scene (if you consider a bunch of chairs hovering over a bottomless void homely) moved from the renderer to the object manager

Commit 0c1c2395

– refactor the renderer so that the does not instantiate the model manager on its own so that it can be used across places
– introduce the object manager and game state classes, even if they are not used yet

This was actually a substantial change, as it finally disconnected the renderer from the model manager. As is hinted in the second point, this introduces the yet unused ObjectManager, which stores logical objects that have a concept of position other than the actual geometrical position used when drawing the models.
This is the first step towards building game logic.
What makes this less monumental is that it is missing the actual object manager files, see the next commit for that.

Commit efd2a7eb

add missing files

The second part of the previous commit. This adds the actual files for the ObjectManager. The ObjectManager has its own instance of the ModelManager and automatically loads models as needed (i.e. a new object is added that uses a certain model). At this point it is not much more than a wrapper around the ModelManager, but that is to change.

Commit 53f983246

fully implement object rotation

This implements per-model (it says object in the commit message, but the concept of a logical object did not exist yet) rotation in addition to the positioning.

This screenshot shows the new feature (note the rotated chairs around the table). Also note that this entire scene is hardcoded, no concept of tiles or even logical objects exists yet.

Commit 99faf261

bind the vertex buffers for each model individually

This is completing the work started in the previous commit, finally allowing to load not only multiple models, but also multiple model types.

Bask in the glory of the low-poly table and chair, which are manually placed (there was no logical tile grid yet, just the renderer). This also removed the ambiguously licensed barrels and moves OLives a little closer to what it is today.