Add material render state and pipeline caching

This commit is contained in:
2026-03-27 12:18:04 +08:00
parent 4b9a63098e
commit 9a5c187abc
9 changed files with 717 additions and 26 deletions

View File

@@ -37,6 +37,11 @@ TEST(Material, SetGetShader) {
TEST(Material, DefaultRenderMetadata) {
Material material;
EXPECT_EQ(material.GetRenderQueue(), static_cast<XCEngine::Core::int32>(MaterialRenderQueue::Geometry));
EXPECT_EQ(material.GetRenderState().cullMode, MaterialCullMode::None);
EXPECT_FALSE(material.GetRenderState().blendEnable);
EXPECT_TRUE(material.GetRenderState().depthTestEnable);
EXPECT_TRUE(material.GetRenderState().depthWriteEnable);
EXPECT_EQ(material.GetRenderState().depthFunc, MaterialComparisonFunc::Less);
EXPECT_TRUE(material.GetShaderPass().Empty());
EXPECT_EQ(material.GetTagCount(), 0u);
}
@@ -51,6 +56,40 @@ TEST(Material, SetGetRenderQueue) {
EXPECT_EQ(material.GetRenderQueue(), 2600);
}
TEST(Material, SetGetRenderState) {
Material material;
MaterialRenderState renderState;
renderState.cullMode = MaterialCullMode::Back;
renderState.blendEnable = true;
renderState.srcBlend = MaterialBlendFactor::SrcAlpha;
renderState.dstBlend = MaterialBlendFactor::InvSrcAlpha;
renderState.srcBlendAlpha = MaterialBlendFactor::One;
renderState.dstBlendAlpha = MaterialBlendFactor::InvSrcAlpha;
renderState.blendOp = MaterialBlendOp::Add;
renderState.blendOpAlpha = MaterialBlendOp::Add;
renderState.depthTestEnable = true;
renderState.depthWriteEnable = false;
renderState.depthFunc = MaterialComparisonFunc::LessEqual;
renderState.colorWriteMask = 0x7;
material.SetRenderState(renderState);
const MaterialRenderState& result = material.GetRenderState();
EXPECT_EQ(result.cullMode, MaterialCullMode::Back);
EXPECT_TRUE(result.blendEnable);
EXPECT_EQ(result.srcBlend, MaterialBlendFactor::SrcAlpha);
EXPECT_EQ(result.dstBlend, MaterialBlendFactor::InvSrcAlpha);
EXPECT_EQ(result.srcBlendAlpha, MaterialBlendFactor::One);
EXPECT_EQ(result.dstBlendAlpha, MaterialBlendFactor::InvSrcAlpha);
EXPECT_EQ(result.blendOp, MaterialBlendOp::Add);
EXPECT_EQ(result.blendOpAlpha, MaterialBlendOp::Add);
EXPECT_TRUE(result.depthTestEnable);
EXPECT_FALSE(result.depthWriteEnable);
EXPECT_EQ(result.depthFunc, MaterialComparisonFunc::LessEqual);
EXPECT_EQ(result.colorWriteMask, 0x7);
}
TEST(Material, SetGetShaderPass) {
Material material;