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

2.6 KiB
Raw Blame History

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 != nullptr
    • size > 0
    • layout.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。

相关文档