#include #include #include #include namespace { void ExpectVector4Eq( const XCEngine::Math::Vector4& actual, const XCEngine::Math::Vector4& expected) { EXPECT_FLOAT_EQ(actual.x, expected.x); EXPECT_FLOAT_EQ(actual.y, expected.y); EXPECT_FLOAT_EQ(actual.z, expected.z); EXPECT_FLOAT_EQ(actual.w, expected.w); } } // namespace TEST(FullscreenPassFactory_Test, BuildsColorScaleDescriptorIntoBuiltinVectorFullscreenPass) { const XCEngine::Math::Vector4 payload(1.1f, 0.95f, 0.9f, 1.0f); const XCEngine::Rendering::FullscreenPassStack fullscreenPasses = { XCEngine::Rendering::FullscreenPassDesc::MakeColorScale(payload) }; std::unique_ptr sequence = XCEngine::Rendering::BuildFullscreenPassSequence(fullscreenPasses); ASSERT_NE(sequence, nullptr); ASSERT_EQ(sequence->GetPassCount(), 1u); auto* pass = dynamic_cast( sequence->GetPass(0u)); ASSERT_NE(pass, nullptr); ExpectVector4Eq(pass->GetVectorPayload(), payload); EXPECT_EQ( pass->GetShaderPath(), XCEngine::Resources::GetBuiltinColorScalePostProcessShaderPath()); EXPECT_EQ( pass->GetPreferredPassName(), XCEngine::Containers::String("ColorScale")); } TEST(FullscreenPassFactory_Test, BuildsShaderVectorDescriptorIntoBuiltinVectorFullscreenPass) { const XCEngine::Containers::String shaderPath( "builtin://shaders/color-scale-post-process"); const XCEngine::Containers::String passName("ColorScale"); const XCEngine::Math::Vector4 payload(0.95f, 1.05f, 1.1f, 1.0f); const XCEngine::Rendering::FullscreenPassStack fullscreenPasses = { XCEngine::Rendering::FullscreenPassDesc::MakeShaderVector( shaderPath, payload, passName) }; std::unique_ptr sequence = XCEngine::Rendering::BuildFullscreenPassSequence(fullscreenPasses); ASSERT_NE(sequence, nullptr); ASSERT_EQ(sequence->GetPassCount(), 1u); auto* pass = dynamic_cast( sequence->GetPass(0u)); ASSERT_NE(pass, nullptr); ExpectVector4Eq(pass->GetVectorPayload(), payload); EXPECT_EQ(pass->GetShaderPath(), shaderPath); EXPECT_EQ(pass->GetPreferredPassName(), passName); } TEST(FullscreenPassFactory_Test, IgnoresInvalidShaderVectorDescriptor) { XCEngine::Rendering::FullscreenPassStack fullscreenPasses = { XCEngine::Rendering::FullscreenPassDesc::MakeShaderVector( XCEngine::Containers::String(), XCEngine::Math::Vector4::One()) }; std::unique_ptr sequence = XCEngine::Rendering::BuildFullscreenPassSequence(fullscreenPasses); EXPECT_EQ(sequence, nullptr); }