Rework Asset Loader API
Offene Aufgaben aus Ticket #63 (closed) müssen noch nachgearbeitet werden. Dabei handelt es sich hauptsächlich um das Anlegen und Befüllen des Sampler-Structs. Desweiteren muss der Asset Loader nach den Entscheidungen aus #74 (closed) überarbeitet werden.
-
sampler struct erstellen -
Code aufräumen -
Problematische Stellen im Code markieren und dokumentieren -
große loadScene
-Funktion in Unterfunktionen Zerlegen -
markierte Stellen im Code nochmal überarbeiten
-
-
API Rework: -
public structs zu Klassen mit private sections + getter (setter brauchen wir nicht, oder?) -
Einzelne loadScene
-Funktion ergänzen entsprechend der Diskussion in #74 (closed):probeScene
,loadScene
undloadMesh
-
Zu loadMesh()
: Es muss irgendwie ein Mesh innerhalb einer Szene identifiziert werden können (nach einem Aufruf vonprobeScene
); was sagt der glTF-Standard zu der Eindeutigkeit von Namen der Meshes? Sind Namen optional?
-
-
Kleinere Sachen -
glTF-Datei finden, die ein image nicht als URI angibt sondern als mime-type+bufferView -
loadTexture
in unsere API integrieren und das extra-struct rausschmeißen
-
-
Randfall beim vertex buffer stride: Wenn in der glTF ein stride von 0
steht (no interleaving), müssen wir selbst rechnen: https://www.khronos.org/opengl/wiki/Vertex_Specification#Vertex_buffer_offset_and_stride -
Randfall: Mehr als einen (vertex)buffer - Siehe Kommentar von @thollmann weiter unten
- Stelle im Code: https://gitlab.uni-koblenz.de/vulkan2021/vkcv-framework/-/blob/79-rework-asset-loader-api/modules/asset_loader/src/vkcv/asset/asset_loader.cpp#L451
-
loadMesh()
lädt derzeit alle Texturen, nicht nur die Texturen, die für das Mesh relevant sind -
probeScene()
lädt derzeit nicht die Metadaten der Texturen und Sampler -
Manche Funktionen wie createTextures
müssen angepasst werden um in verschiedenen Szenarios zu funktionieren (z.B. ob Texturdaten geladen und dekodiert werden sollen). Derzeit sind einige Funktionen nur auf den Fall vonloadScene()
ausgelegt, also direkt alles zu laden. -
Warnung in probeScene()
,loadScene()
etc ausgeben falls Mesh-Namen nicht eindeutig sind -
loadScene()
umschreiben, sodass sie auf einen Aufruf vonprobeScene()
und eine Schleife überloadMesh()
reduziert wird. -
loadMesh()
ändern: Statt einem Pfad kriegt es eine bereits geprobteScene
übergeben und muss die glTF-Datei nicht selbst laden; außerdem wird das Mesh über den index statt den Namen identifiziert. -
URIs im Scene struct speichern -
URIs von Buffern und Texturen in Scene
speichern und inTexture
undVertexGroup
darauf verweisen. -
Sonderfall: Texturen müssen nicht zwingend eine URI haben sondern können stattdessen auf eine bufferView verweisen...
-
-
Randfall testen: Texturen, die statt einer URI eine BufferView haben (ist bereits implementiert, aber ungetestet)Wird nicht getestet, ist entsprechend im API header dokumentiert.-
In diesem Randfall ist das Laden und Decodieren der Daten derzeit aufgeteilt in zwei Schritte:NevermindloadTextureData()
decodiert die Daten, dieprobeScene()
vorher aus dem verlinkten Buffer kopiert hat... aberprobeScene()
sollte eigentlich keine Binärdaten laden und dieser Buffer noch nicht gefüllt sein zu dem Zeitpunkt.
-
CC: @thollmann @tfrisch @larshoerttrich @susannedoetsch @mmints @mvogt
Edited by Trevor Hollmann