70 lines
2.4 KiB
Markdown
70 lines
2.4 KiB
Markdown
# ResolveSchemaMaterialConstantPayload
|
||
|
||
**命名空间**: `XCEngine::Rendering`
|
||
|
||
**类型**: `function`
|
||
|
||
**头文件**: `XCEngine/Rendering/Materials/RenderMaterialResolve.h`
|
||
|
||
## 签名
|
||
|
||
```cpp
|
||
MaterialConstantPayloadView ResolveSchemaMaterialConstantPayload(const Resources::Material* material);
|
||
```
|
||
|
||
## 作用
|
||
|
||
返回当前 `Material` 已按 shader schema 生成的逐材质 constant-buffer payload 与布局视图。
|
||
|
||
## 当前实现行为
|
||
|
||
当前实现按下面顺序判定:
|
||
|
||
1. 如果 `material == nullptr`,返回无效 view。
|
||
2. 如果 `material->GetShader() == nullptr`,返回无效 view。
|
||
3. 读取 `material->GetConstantLayout()` 和 `material->GetConstantBufferData()`。
|
||
4. 只要布局数组或常量缓冲数组任一为空,都返回无效 view。
|
||
5. 否则先构造:
|
||
|
||
```cpp
|
||
MaterialConstantLayoutView layoutView = {};
|
||
layoutView.fields = constantLayout.Data();
|
||
layoutView.count = constantLayout.Size();
|
||
layoutView.size = constantBufferData.Size();
|
||
```
|
||
|
||
6. 最终返回:
|
||
|
||
```cpp
|
||
{ constantBufferData.Data(), constantBufferData.Size(), layoutView }
|
||
```
|
||
|
||
## 当前语义要点
|
||
|
||
- 这条 helper 不做重新打包,也不推断 fallback 字段;它只暴露 `Material` 当前已经准备好的字节块。
|
||
- 返回值里的 `layout` 直接借用 `Material::GetConstantLayout()`,不会复制字段描述。
|
||
- 返回值是借用视图,不拥有 `Material` 内部数组。
|
||
- 它只处理 `Material` constant buffer payload,不解析纹理、采样器或 render state。
|
||
|
||
## 当前调用链
|
||
|
||
- [BuiltinForwardPipeline](../Pipelines/BuiltinForwardPipeline/BuiltinForwardPipeline.md) 在绘制可见项时先调用它。
|
||
- 如果 view 无效,`BuiltinForwardPipeline` 才会回退到
|
||
[BuildBuiltinForwardMaterialData](BuildBuiltinForwardMaterialData.md) 生成的
|
||
`baseColorFactor` fallback。
|
||
|
||
## 测试覆盖
|
||
|
||
`tests/Rendering/unit/test_render_scene_extractor.cpp` 中的
|
||
`RenderMaterialUtility_Test.ExposesSchemaDrivenMaterialConstantPayload`
|
||
当前验证了它会返回有效 payload,并且字节内容与材质默认 `_BaseColor` 常量一致。
|
||
|
||
## 相关文档
|
||
|
||
- [MaterialConstantPayloadView](MaterialConstantPayloadView.md)
|
||
- [MaterialConstantLayoutView](MaterialConstantLayoutView.md)
|
||
- [BuildBuiltinForwardMaterialData](BuildBuiltinForwardMaterialData.md)
|
||
- [BuiltinForwardMaterialData](BuiltinForwardMaterialData.md)
|
||
- [BuiltinForwardPipeline](../Pipelines/BuiltinForwardPipeline/BuiltinForwardPipeline.md)
|
||
- [RenderMaterialUtility](RenderMaterialUtility.md)
|