Files
XCEngine/docs/api/rhi/d3d12/descriptor-heap/initialize-device.md

41 lines
1.3 KiB
Markdown
Raw Normal View History

2026-03-20 02:35:45 +08:00
# 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) - 创建描述符结构体