aboutsummaryrefslogtreecommitdiff
path: root/src/amberscript
diff options
context:
space:
mode:
Diffstat (limited to 'src/amberscript')
-rw-r--r--src/amberscript/parser.cc24
-rw-r--r--src/amberscript/parser_sampler_test.cc8
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) {