Files
XCEngine/docs/api/XCEngine/Rendering/RenderMaterialUtility/ResolveSchemaMaterialConstantPayload.md

70 lines
2.4 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.
# 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)