36 lines
1005 B
Markdown
36 lines
1005 B
Markdown
# RHIShader::GetNativeHandle
|
||
|
||
```cpp
|
||
virtual void* GetNativeHandle() = 0;
|
||
```
|
||
|
||
获取原生图形 API 句柄。
|
||
|
||
返回底层图形 API(如 D3D12、Vulkan)的原生着色器对象指针。用于需要直接访问底层 API 的高级场景,或与外部库互操作。
|
||
|
||
**返回:** 指向原生着色器对象的指针,类型取决于具体实现(如 D3D12: `ID3DBlob*`,Vulkan: `VkShaderModule`)
|
||
|
||
**线程安全:** ❌(访问底层资源,非线程安全)
|
||
|
||
**复杂度:** O(1)
|
||
|
||
**示例:**
|
||
|
||
```cpp
|
||
RHIShader* shader = device->CreateShader();
|
||
shader->CompileFromFile(L"shaders/compute.cso", "CSMain", "cs_5_0");
|
||
|
||
void* nativeHandle = shader->GetNativeHandle();
|
||
#ifdef XCENGINE_D3D12
|
||
ID3DBlob* d3dBlob = static_cast<ID3DBlob*>(nativeHandle);
|
||
// 使用 D3D12 API...
|
||
#elif defined(XCENGINE_VULKAN)
|
||
VkShaderModule vkModule = reinterpret_cast<VkShaderModule>(nativeHandle);
|
||
// 使用 Vulkan API...
|
||
#endif
|
||
```
|
||
|
||
## 相关文档
|
||
|
||
- [RHIShader](shader.md) - 返回类总览
|