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.

Commit 7c820fd1

– add descriptor sets for every model which contains the position + texture
– big refactoring so that we use this instead of trying to push this into many dynamic UBOs
– introduce many bleeding handles. fix this.

This rectifies a misunderstanding on my part of how to do things in Vulkan, which encourages an arbitrary number of descriptor sets as opposed to a bigger number of dynamic uniform buffer objects (UBOs). To this day (Septer 2019) I am unsure if this is the right way to go, since I am in no way an expert. 🙂
While this fixed the basic approach and got things working again, it also introduced the creation of a lot of Vulkan handles that weren’t properly freed again.

Commit 764460fb

– add dummy textures so that we can run the renderer before textures were loaded
– implement removing models (and their textures)
– keep track of the occurences of textures and do not overwrite them if they have the same id (do not bleed handles)
– attributes for certain function in the renderer (fix clion warnings)

Similar to the ModelManager, the TextureManager is also having the concept of dummy data to make sure to never crash, even if not fully initialised.
Furthermore it is now possible to fully remove models again, releasing the resources of models/textures if no instance of this type of model/texture no longer exists.

Commit e90d9d96

– finalise support for dyanmic uniform buffer support to update object locations
– do not query the family queue indices *every* time when creating a buffer
– try to find a physical device that supports exclusive transfer queues

This completes the dynamic uniform buffer support started in the previous commit. Furthermore OLives finally supports having models in arbitrary positions.
A small fix was made to let OLives run on computers with more than one GPU.

This also happens to be the first screenshot of OLives existing (taken from a video), this is supposed to showcase the new ability to have separate instances of a model in different positions.