Fix scene selection outline mask path
This commit is contained in:
@@ -18,11 +18,15 @@ using XCEngine::Editor::GetSceneViewportInfiniteGridShaderPath;
|
||||
using XCEngine::Editor::GetSceneViewportPointLightGizmoIconPath;
|
||||
using XCEngine::Editor::GetSceneViewportSpotLightGizmoIconPath;
|
||||
using XCEngine::Resources::GetBuiltinObjectIdOutlineShaderPath;
|
||||
using XCEngine::Resources::GetBuiltinSelectionMaskShaderPath;
|
||||
using XCEngine::Resources::GetBuiltinSelectionOutlineShaderPath;
|
||||
using XCEngine::Resources::LoadResult;
|
||||
using XCEngine::Resources::ResourceHandle;
|
||||
using XCEngine::Resources::ResourceManager;
|
||||
using XCEngine::Resources::Shader;
|
||||
using XCEngine::Resources::ShaderBackend;
|
||||
using XCEngine::Resources::ShaderKeywordDeclarationType;
|
||||
using XCEngine::Resources::ShaderKeywordSet;
|
||||
using XCEngine::Resources::ShaderLoader;
|
||||
using XCEngine::Resources::ShaderPass;
|
||||
using XCEngine::Resources::ShaderStageVariant;
|
||||
@@ -110,4 +114,61 @@ TEST(SceneViewportShaderPathsTest, ResourceManagerLoadsSceneViewportOutlineShade
|
||||
manager.Shutdown();
|
||||
}
|
||||
|
||||
TEST(SceneViewportShaderPathsTest, ResourceManagerLoadsSelectionOutlineShadersByResolvedPath) {
|
||||
ResourceManager& manager = ResourceManager::Get();
|
||||
manager.Shutdown();
|
||||
|
||||
const ResourceHandle<Shader> maskShaderHandle = manager.Load<Shader>(GetBuiltinSelectionMaskShaderPath());
|
||||
ASSERT_TRUE(maskShaderHandle.IsValid());
|
||||
|
||||
const ShaderPass* maskPass = maskShaderHandle->FindPass("SelectionMask");
|
||||
ASSERT_NE(maskPass, nullptr);
|
||||
ASSERT_EQ(maskPass->variants.Size(), 4u);
|
||||
ASSERT_EQ(maskPass->keywordDeclarations.Size(), 1u);
|
||||
EXPECT_EQ(maskPass->keywordDeclarations[0].type, ShaderKeywordDeclarationType::ShaderFeatureLocal);
|
||||
ASSERT_EQ(maskPass->keywordDeclarations[0].options.Size(), 2u);
|
||||
EXPECT_EQ(maskPass->keywordDeclarations[0].options[0], "_");
|
||||
EXPECT_EQ(maskPass->keywordDeclarations[0].options[1], "XC_ALPHA_TEST");
|
||||
EXPECT_TRUE(maskShaderHandle->PassDeclaresKeyword("SelectionMask", "XC_ALPHA_TEST"));
|
||||
|
||||
const ShaderStageVariant* maskFragment = maskShaderHandle->FindVariant(
|
||||
"SelectionMask",
|
||||
ShaderType::Fragment,
|
||||
ShaderBackend::D3D12);
|
||||
ASSERT_NE(maskFragment, nullptr);
|
||||
EXPECT_NE(
|
||||
std::string(maskFragment->sourceCode.CStr()).find("XC_BUILTIN_SELECTION_MASK_D3D12_PS"),
|
||||
std::string::npos);
|
||||
|
||||
ShaderKeywordSet alphaKeywords = {};
|
||||
alphaKeywords.enabledKeywords.PushBack("XC_ALPHA_TEST");
|
||||
const ShaderStageVariant* alphaMaskFragment = maskShaderHandle->FindVariant(
|
||||
"SelectionMask",
|
||||
ShaderType::Fragment,
|
||||
ShaderBackend::D3D12,
|
||||
alphaKeywords);
|
||||
ASSERT_NE(alphaMaskFragment, nullptr);
|
||||
EXPECT_NE(
|
||||
std::string(alphaMaskFragment->sourceCode.CStr()).find("#define XC_ALPHA_TEST 1"),
|
||||
std::string::npos);
|
||||
|
||||
const ResourceHandle<Shader> outlineShaderHandle = manager.Load<Shader>(GetBuiltinSelectionOutlineShaderPath());
|
||||
ASSERT_TRUE(outlineShaderHandle.IsValid());
|
||||
|
||||
const ShaderPass* outlinePass = outlineShaderHandle->FindPass("SelectionOutline");
|
||||
ASSERT_NE(outlinePass, nullptr);
|
||||
ASSERT_EQ(outlinePass->variants.Size(), 2u);
|
||||
|
||||
const ShaderStageVariant* outlineFragment = outlineShaderHandle->FindVariant(
|
||||
"SelectionOutline",
|
||||
ShaderType::Fragment,
|
||||
ShaderBackend::D3D12);
|
||||
ASSERT_NE(outlineFragment, nullptr);
|
||||
EXPECT_NE(
|
||||
std::string(outlineFragment->sourceCode.CStr()).find("XC_BUILTIN_SELECTION_OUTLINE_D3D12_PS"),
|
||||
std::string::npos);
|
||||
|
||||
manager.Shutdown();
|
||||
}
|
||||
|
||||
} // namespace
|
||||
|
||||
Reference in New Issue
Block a user