diff options
Diffstat (limited to 'src/amberscript')
-rw-r--r-- | src/amberscript/parser.cc | 24 | ||||
-rw-r--r-- | src/amberscript/parser_sampler_test.cc | 8 |
2 files changed, 31 insertions, 1 deletions
diff --git a/src/amberscript/parser.cc b/src/amberscript/parser.cc index d3e0eb6..8cd6e19 100644 --- a/src/amberscript/parser.cc +++ b/src/amberscript/parser.cc @@ -3893,6 +3893,30 @@ Result Parser::ParseSampler() { sampler->SetNormalizedCoords(false); sampler->SetMinLOD(0.0f); sampler->SetMaxLOD(0.0f); + } else if (param == "COMPARE") { + token = tokenizer_->NextToken(); + + if (!token->IsIdentifier()) + return Result("invalid value for COMPARE"); + + if (token->AsString() == "on") + sampler->SetCompareEnable(true); + else if (token->AsString() == "off") + sampler->SetCompareEnable(false); + else + return Result("invalid value for COMPARE: " + token->AsString()); + } else if (param == "COMPARE_OP") { + token = tokenizer_->NextToken(); + + if (!token->IsIdentifier()) + return Result("invalid value for COMPARE_OP"); + + CompareOp compare_op = StrToCompareOp(token->AsString()); + if (compare_op != CompareOp::kUnknown) { + sampler->SetCompareOp(compare_op); + } else { + return Result("invalid value for COMPARE_OP: " + token->AsString()); + } } else { return Result("unexpected sampler parameter " + param); } diff --git a/src/amberscript/parser_sampler_test.cc b/src/amberscript/parser_sampler_test.cc index 6cba69d..d4b0dd1 100644 --- a/src/amberscript/parser_sampler_test.cc +++ b/src/amberscript/parser_sampler_test.cc @@ -45,6 +45,8 @@ TEST_F(AmberScriptParserTest, SamplerDefaultValues) { EXPECT_EQ(0.0, sampler->GetMinLOD()); EXPECT_EQ(1.0, sampler->GetMaxLOD()); EXPECT_EQ(true, sampler->GetNormalizedCoords()); + EXPECT_EQ(false, sampler->GetCompareEnable()); + EXPECT_EQ(CompareOp::kNever, sampler->GetCompareOp()); } TEST_F(AmberScriptParserTest, SamplerCustomValues) { @@ -57,7 +59,9 @@ SAMPLER sampler MAG_FILTER linear \ BORDER_COLOR float_opaque_white \ MIN_LOD 2.5 \ MAX_LOD 5.0 \ - NORMALIZED_COORDS)"; + NORMALIZED_COORDS \ + COMPARE on \ + COMPARE_OP greater)"; Parser parser; Result r = parser.Parse(in); @@ -81,6 +85,8 @@ SAMPLER sampler MAG_FILTER linear \ EXPECT_EQ(2.5, sampler->GetMinLOD()); EXPECT_EQ(5.0, sampler->GetMaxLOD()); EXPECT_EQ(true, sampler->GetNormalizedCoords()); + EXPECT_EQ(true, sampler->GetCompareEnable()); + EXPECT_EQ(CompareOp::kGreater, sampler->GetCompareOp()); } TEST_F(AmberScriptParserTest, SamplerUnexpectedParameter) { |