With directX12 they introduced heap descriptors. A way for us to describe the table for resources we wanted to send to the shaders. I'm admittedly very new at computer graphics and only tinkered a bit in directX11. I have not toyed with instancing or any more complicated things right now so I have a object for every mesh that has these defintions.
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;
A vertex buffer, index buffer, the cbvHeap, and two constant buffers. One for the transformation matrices and one for the directional light data.
I wasn't really sure what the cbvHeap (constant buffer view heap) was really doing. I just knew how to use it to my content to the screen. So I experimented. I took the cbvHeap and mCbvDescriptorSize out of the mesh object and put it in the scene object (where the array of meshes were contained) and then used the same cbvheap across all my meshes. This did not work as it gave one consistent color across the whole mesh. (ie: The same constant buffer was used for every mesh giving them the same diffuse and ambient light data.) What exactly is the descriptor heap doing that caused this? And are my definitions right per mesh?