2.6 KiB
2.6 KiB
MaterialConstantPayloadView
命名空间: XCEngine::Rendering
类型: struct
头文件: XCEngine/Rendering/RenderMaterialUtility.h
描述: 指向 schema-driven 材质常量缓冲字节及其布局的非 owning 视图,用于把 Material::GetConstantBufferData() 直接写入渲染 descriptor set。
概述
MaterialConstantPayloadView 只是一个轻量视图,不负责构造、复制或持有常量缓冲。
按当前实现,它通常由 ResolveSchemaMaterialConstantPayload 返回,
直接指向 Material 内部的 constantBufferData 数组。
BuiltinForwardPipeline 会把它传给 GetOrCreateDynamicDescriptorSet(...),并在需要 Material
constant buffer 的 set 上调用 WriteConstant(binding, data, size) 写入 descriptor set。
字段
| 字段 | 类型 | 说明 |
|---|---|---|
data |
const void* |
指向常量缓冲字节首地址。 |
size |
size_t |
当前 payload 字节数。 |
layout |
MaterialConstantLayoutView | 与这段 payload 对应的字段布局视图。 |
IsValid() 语义
- 当前判定条件是:
data != nullptrsize > 0layout.IsValid()layout.size == size
Material没有 shader、没有生成常量布局、没有生成常量缓冲,或布局大小和 payload 大小不一致时,resolver 都会返回无效 view。- 无效 view 本身不是错误;当前
BuiltinForwardPipeline会在这种情况下回退到BuiltinForwardMaterialData。
所有权与生命周期
- 它不拥有
data指向的内存。 - 当前 view 指向
Material::GetConstantBufferData()与Material::GetConstantLayout()的内部数组;Material销毁或常量缓冲 / 布局重建后,旧 view 不再可靠。 - 调用方应把它当成“本次绘制阶段即时消费”的借用数据,而不是长期缓存的稳定块。
测试覆盖
tests/Rendering/unit/test_render_scene_extractor.cpp 当前验证了:
当 Material 绑定 shader 并生成 _BaseColor 常量时,
ResolveSchemaMaterialConstantPayload 会返回带有效 layout 的 16 字节 payload view。