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