# D3D12DescriptorHeap::Initialize ```cpp bool Initialize(ID3D12Device* device, DescriptorHeapType type, uint32_t numDescriptors, bool shaderVisible = false); ``` 直接使用 D3D12 设备创描述符堆。这是主要初始化方法,会创建底层的 `ID3D12DescriptorHeap` COM 对象。 **参数:** - `device` - D3D12 设备指针,不得为 `nullptr` - `type` - 描述符堆类型,决定堆中存储的描述符种类 - `numDescriptors` - 描述符数量,必须大于 0 - `shaderVisible` - 是否创建为 shader visible 模式。shader visible 的堆可绑定到命令列表供 shader 访问,但会增加 GPU 访问开销 **返回:** 是否初始化成功。失败时返回 `false`,可能原因包括: - 设备指针无效 - 描述符数量为 0 - D3D12 API 创建堆失败 **复杂度:** O(1) ## 示例 ```cpp ID3D12Device* device = ...; // 创建不可见的 CPU 描述符堆 D3D12DescriptorHeap cpuHeap; cpuHeap.Initialize(device, DescriptorHeapType::CBV_SRV_UAV, 64, false); // 创建 GPU 可见的描述符堆 D3D12DescriptorHeap gpuHeap; gpuHeap.Initialize(device, DescriptorHeapType::CBV_SRV_UAV, 256, true); ``` ## 相关文档 - [D3D12DescriptorHeap 总览](descriptor-heap.md) - 返回类总览 - [Initialize(const DescriptorPoolDesc&)](initialize-from-desc.md) - 描述符重载 - [CreateDesc](create-desc.md) - 创建描述符结构体