60 lines
1.5 KiB
Markdown
60 lines
1.5 KiB
Markdown
# RHIFactory::CreateRHIDevice
|
|
|
|
```cpp
|
|
static RHIDevice* CreateRHIDevice(const std::string& typeName);
|
|
```
|
|
|
|
根据指定的 RHI 类型名称创建一个新的 RHI 设备实例。
|
|
|
|
**参数:**
|
|
- `typeName` - RHI 类型的字符串名称,支持的值包括:
|
|
- `"D3D12"` - DirectX 12
|
|
- `"OpenGL"` - OpenGL
|
|
- `"Vulkan"` - Vulkan
|
|
- `"Metal"` - Metal
|
|
|
|
**返回:** 新创建的 RHIDevice 指针,如果创建失败则返回 nullptr。
|
|
|
|
**异常:** 无
|
|
|
|
**线程安全:** ❌ 该方法本身是线程安全的,但返回的 RHIDevice 实例通常不是线程安全的。
|
|
|
|
**复杂度:** O(n),其中 n 为 typeName 字符串长度
|
|
|
|
**示例:**
|
|
|
|
```cpp
|
|
#include "XCEngine/RHI/RHIFactory.h"
|
|
#include "XCEngine/RHI/RHIDevice.h"
|
|
#include <iostream>
|
|
|
|
using namespace XCEngine::RHI;
|
|
|
|
int main() {
|
|
RHIDevice* device = RHIFactory::CreateRHIDevice("Vulkan");
|
|
if (!device) {
|
|
std::cerr << "Failed to create Vulkan device" << std::endl;
|
|
return 1;
|
|
}
|
|
|
|
RHIDeviceDesc desc;
|
|
if (!device->Initialize(desc)) {
|
|
std::cerr << "Failed to initialize device" << std::endl;
|
|
delete device;
|
|
return 1;
|
|
}
|
|
|
|
const RHIDeviceInfo& info = device->GetDeviceInfo();
|
|
std::cout << "Device created: " << info.deviceName << std::endl;
|
|
|
|
device->Shutdown();
|
|
delete device;
|
|
return 0;
|
|
}
|
|
```
|
|
|
|
## 相关文档
|
|
|
|
- [RHIFactory](factory.md) - 返回类总览
|
|
- [`CreateRHIDevice(RHIType)`](create-rhi-device-type.md) - 根据枚举类型创建设备
|