Với directX12 họ đã giới thiệu mô tả heap. Một cách để chúng tôi mô tả bảng cho các tài nguyên mà chúng tôi muốn gửi cho các shader. Tôi thừa nhận rất mới về đồ họa máy tính và chỉ sửa một chút trong directX11. Tôi chưa từng đùa giỡn với bất kỳ điều gì phức tạp hơn bây giờ vì vậy tôi có một đối tượng cho mọi lưới có những khuyết điểm này.
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;
Một bộ đệm đỉnh, bộ đệm chỉ mục, cbvHeap và hai bộ đệm không đổi. Một cho ma trận biến đổi và một cho dữ liệu ánh sáng định hướng.
Tôi không thực sự chắc chắn những gì cbvHeap (heap xem bộ đệm liên tục) thực sự đang làm. Tôi chỉ biết làm thế nào để sử dụng nó cho nội dung của tôi lên màn hình. Vì vậy, tôi đã thử nghiệm. Tôi lấy cbvHeap và mCbvDescriptorSize ra khỏi đối tượng mắt lưới và đặt nó vào đối tượng cảnh (nơi chứa các mảng lưới) và sau đó sử dụng cùng một cbvheap trên tất cả các mắt lưới của tôi. Điều này đã không hoạt động vì nó đã cho một màu nhất quán trên toàn bộ lưới. (tức là: Bộ đệm không đổi giống nhau được sử dụng cho mọi lưới cung cấp cho chúng cùng một dữ liệu ánh sáng khuếch tán và môi trường xung quanh.) Chính xác thì đống mô tả đã làm gì gây ra điều này? Và định nghĩa của tôi là đúng trên mỗi lưới?