Formalize material schema and constant layout contract
This commit is contained in:
@@ -479,6 +479,55 @@ TEST(RenderMaterialUtility_Test, ResolvesBuiltinForwardMaterialContractFromShade
|
||||
EXPECT_EQ(ResolveBuiltinBaseColorTexture(&material), texture);
|
||||
}
|
||||
|
||||
TEST(RenderMaterialUtility_Test, ResolvesBuiltinForwardMaterialContractFromShaderSemanticDefaults) {
|
||||
auto* shader = new Shader();
|
||||
|
||||
ShaderPropertyDesc colorProperty = {};
|
||||
colorProperty.name = "TintColor";
|
||||
colorProperty.displayName = "Tint";
|
||||
colorProperty.type = ShaderPropertyType::Color;
|
||||
colorProperty.defaultValue = "(0.11,0.22,0.33,0.44)";
|
||||
colorProperty.semantic = "BaseColor";
|
||||
shader->AddProperty(colorProperty);
|
||||
|
||||
Material material;
|
||||
material.SetShader(ResourceHandle<Shader>(shader));
|
||||
|
||||
EXPECT_EQ(ResolveBuiltinBaseColorFactor(&material), Vector4(0.11f, 0.22f, 0.33f, 0.44f));
|
||||
EXPECT_EQ(ResolveBuiltinBaseColorTexture(&material), nullptr);
|
||||
}
|
||||
|
||||
TEST(RenderMaterialUtility_Test, ExposesSchemaDrivenMaterialConstantPayload) {
|
||||
auto* shader = new Shader();
|
||||
|
||||
ShaderPropertyDesc colorProperty = {};
|
||||
colorProperty.name = "_BaseColor";
|
||||
colorProperty.type = ShaderPropertyType::Color;
|
||||
colorProperty.defaultValue = "(0.25,0.5,0.75,1.0)";
|
||||
colorProperty.semantic = "BaseColor";
|
||||
shader->AddProperty(colorProperty);
|
||||
|
||||
Material material;
|
||||
material.SetShader(ResourceHandle<Shader>(shader));
|
||||
|
||||
const MaterialConstantPayloadView payload = ResolveSchemaMaterialConstantPayload(&material);
|
||||
ASSERT_TRUE(payload.IsValid());
|
||||
ASSERT_EQ(payload.size, 16u);
|
||||
ASSERT_TRUE(payload.layout.IsValid());
|
||||
ASSERT_EQ(payload.layout.count, 1u);
|
||||
EXPECT_EQ(payload.layout.size, 16u);
|
||||
EXPECT_EQ(payload.layout.fields[0].name, "_BaseColor");
|
||||
EXPECT_EQ(payload.layout.fields[0].offset, 0u);
|
||||
EXPECT_EQ(payload.layout.fields[0].size, 16u);
|
||||
EXPECT_EQ(payload.layout.fields[0].alignedSize, 16u);
|
||||
|
||||
const float* values = static_cast<const float*>(payload.data);
|
||||
EXPECT_FLOAT_EQ(values[0], 0.25f);
|
||||
EXPECT_FLOAT_EQ(values[1], 0.5f);
|
||||
EXPECT_FLOAT_EQ(values[2], 0.75f);
|
||||
EXPECT_FLOAT_EQ(values[3], 1.0f);
|
||||
}
|
||||
|
||||
TEST(RenderMaterialUtility_Test, UsesOpacityOnlyWhenBaseColorFactorIsMissing) {
|
||||
Material material;
|
||||
material.SetFloat("opacity", 0.35f);
|
||||
|
||||
Reference in New Issue
Block a user