Files
XCEngine/docs/api/rhi/rhi-device.md

90 lines
2.8 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# RHIDevice
**命名空间**: `XCEngine::RHI`
**类型**: `class` (abstract)
**描述**: RHI 渲染设备抽象接口,代表一个图形设备实例。
## 概述
`RHIDevice` 是 RHI 模块的核心接口之一,负责创建和管理所有 GPU 资源。每个 RHI 后端D3D12、OpenGL 等)都需要实现此接口。
## 公共方法
### 生命周期
| 方法 | 描述 |
|------|------|
| `virtual bool Initialize(const RHIDeviceDesc& desc)` | 初始化设备 |
| `virtual void Shutdown()` | 关闭设备,释放所有资源 |
### 资源创建
| 方法 | 描述 |
|------|------|
| `virtual RHIBuffer* CreateBuffer(const BufferDesc& desc)` | 创建 GPU 缓冲区 |
| `virtual RHITexture* CreateTexture(const TextureDesc& desc)` | 创建 GPU 纹理 |
| `virtual RHISwapChain* CreateSwapChain(const SwapChainDesc& desc)` | 创建交换链 |
| `virtual RHICommandList* CreateCommandList(const CommandListDesc& desc)` | 创建命令列表 |
| `virtual RHICommandQueue* CreateCommandQueue(const CommandQueueDesc& desc)` | 创建命令队列 |
| `virtual RHIShader* CompileShader(const ShaderCompileDesc& desc)` | 编译着色器 |
| `virtual RHIPipelineState* CreatePipelineState(const PipelineStateDesc& desc)` | 创建管线状态对象 |
| `virtual RHIFence* CreateFence(const FenceDesc& desc)` | 创建同步栅栏 |
| `virtual RHISampler* CreateSampler(const SamplerDesc& desc)` | 创建采样器 |
### 设备信息
| 方法 | 描述 |
|------|------|
| `virtual const RHICapabilities& GetCapabilities() const` | 获取设备能力 |
| `virtual const RHIDeviceInfo& GetDeviceInfo() const` | 获取设备信息 |
| `virtual void* GetNativeDevice() = 0` | 获取原生设备指针 |
## 使用示例
```cpp
// 创建 D3D12 设备
RHI::RHIDevice* device = RHI::RHIFactory::CreateRHIDevice(RHI::RHIType::D3D12);
// 配置设备描述
RHI::RHIDeviceDesc desc;
desc.windowHandle = hwnd;
desc.width = 1280;
desc.height = 720;
desc.appName = L"MyApp";
desc.enableDebugLayer = true;
// 初始化设备
if (device->Initialize(desc)) {
// 获取设备能力
const RHI::RHICapabilities& caps = device->GetCapabilities();
if (caps.bSupportsRayTracing) {
// 设备支持光线追踪
}
// 获取设备信息
const RHI::RHIDeviceInfo& info = device->GetDeviceInfo();
printf("GPU: %ls\n", info.description.c_str());
// 创建资源
RHI::BufferDesc bufferDesc;
bufferDesc.size = 1024;
bufferDesc.bufferType = (uint32_t)RHI::BufferType::Vertex;
RHI::RHIBuffer* buffer = device->CreateBuffer(bufferDesc);
// ... 使用设备 ...
// 关闭设备
device->Shutdown();
}
delete device;
```
## 相关文档
- [RHIFactory](./rhi-factory.md) - 设备工厂
- [RHICapabilities](./rhi-capabilities.md) - 设备能力
- [RHITypes](./rhi-types.md) - 设备描述结构体