41 lines
1.2 KiB
Markdown
41 lines
1.2 KiB
Markdown
# RHIShader::Compile
|
|
|
|
```cpp
|
|
virtual bool Compile(const void* sourceData, size_t sourceSize, const char* entryPoint, const char* target) = 0;
|
|
```
|
|
|
|
从内存数据编译着色器。
|
|
|
|
将已加载到内存中的着色器代码编译为 GPU 可执行的着色器程序。适用于从资源包、网络或自定义加载器获取着色器代码的场景。
|
|
|
|
**参数:**
|
|
- `sourceData` - 指向着色器源代码或字节码的指针
|
|
- `sourceSize` - 源数据大小(字节数)
|
|
- `entryPoint` - 着色器入口点函数名称
|
|
- `target` - 着色器目标配置文件
|
|
|
|
**返回:** 编译成功返回 `true`,失败返回 `false`
|
|
|
|
**线程安全:** ❌(多线程同时编译同一着色器可能导致未定义行为)
|
|
|
|
**复杂度:** O(n),其中 n 为着色器代码行数
|
|
|
|
**示例:**
|
|
|
|
```cpp
|
|
std::vector<char> shaderBytes = LoadShaderFromResource("vertex_shader");
|
|
if (!shaderBytes.empty()) {
|
|
RHIShader* shader = device->CreateShader();
|
|
if (shader->Compile(shaderBytes.data(), shaderBytes.size(), "VSMain", "vs_5_0")) {
|
|
shader->Bind();
|
|
// 使用着色器...
|
|
}
|
|
shader->Shutdown();
|
|
}
|
|
```
|
|
|
|
## 相关文档
|
|
|
|
- [RHIShader](shader.md) - 返回类总览
|
|
- [`CompileFromFile`](compile-from-file.md) - 从文件编译着色器
|