Mit directX12 haben sie Heap-Deskriptoren eingeführt. Eine Möglichkeit für uns, die Tabelle für Ressourcen zu beschreiben, die wir an die Shader senden wollten. Ich bin zugegebenermaßen sehr neu in der Computergrafik und habe in directX11 nur ein bisschen gebastelt. Ich habe im Moment nicht mit Instanzen oder komplizierteren Dingen gespielt, also habe ich für jedes Netz, das diese Definitionen hat, ein Objekt.
Microsoft::WRL::ComPtr<ID3D12Resource> mVertexBuffer;
D3D12_VERTEX_BUFFER_VIEW mVertexBufferView;
// Index Buffer
Microsoft::WRL::ComPtr<ID3D12Resource> mIndexBuffer;
D3D12_INDEX_BUFFER_VIEW mIndexBufferView;
// World View Projection Constant Buffer
Microsoft::WRL::ComPtr<ID3D12Resource> mWVPConstantBuffer;
WVPData mWVPData;
UINT8* mMappedWVPBuffer;
// Directional Light Constant Buffer
Microsoft::WRL::ComPtr<ID3D12Resource> mDirLightConstantBuffer;
DirLightData mDirLightData;
UINT8* mMappedDirLightBuffer;
// CBVHeap
Microsoft::WRL::ComPtr<ID3D12DescriptorHeap> mCbvHeap;
UINT mCbvDescriptorSize;
Ein Vertex-Puffer, ein Index-Puffer, der cbvHeap und zwei konstante Puffer. Eine für die Transformationsmatrizen und eine für die gerichteten Lichtdaten.
Ich war mir nicht sicher, was der cbvHeap (Heap mit konstanter Pufferansicht) wirklich tat. Ich wusste nur, wie ich es für meine Inhalte auf dem Bildschirm verwenden konnte. Also habe ich experimentiert. Ich habe cbvHeap und mCbvDescriptorSize aus dem Netzobjekt genommen und in das Szenenobjekt (in dem das Netz von Netzen enthalten war) eingefügt und dann denselben cbvheap für alle meine Netze verwendet. Dies funktionierte nicht, da es eine einheitliche Farbe über das gesamte Netz ergab. (dh: Für jedes Netz wurde der gleiche konstante Puffer verwendet, wodurch die gleichen Daten für diffuses und Umgebungslicht erhalten wurden.) Was genau hat der Deskriptorhaufen verursacht, der dies verursacht hat? Und stimmen meine Definitionen pro Netz?
quelle