SceneConditionals: Implement validation.
diff --git a/src/scene-conditionals.cpp b/src/scene-conditionals.cpp
index 95ec272..099284d 100644
--- a/src/scene-conditionals.cpp
+++ b/src/scene-conditionals.cpp
@@ -116,3 +116,38 @@
startTime_ = Scene::get_timestamp_us() / 1000000.0;
lastUpdateTime_ = startTime_;
}
+
+Scene::ValidationResult
+SceneConditionals::validate()
+{
+ static const double radius_3d(std::sqrt(3.0));
+
+ bool frg_conditionals = options_["fragment-conditionals"].value == "true";
+ int frg_steps(Util::fromString<int>(options_["fragment-steps"].value));
+
+ if (!frg_conditionals)
+ return Scene::ValidationUnknown;
+
+ Canvas::Pixel ref;
+
+ if (frg_steps == 0)
+ ref = Canvas::Pixel(0xa0, 0xa0, 0xa0, 0xff);
+ else if (frg_steps == 5)
+ ref = Canvas::Pixel(0x21, 0x21, 0x21, 0xff);
+ else
+ return Scene::ValidationUnknown;
+
+ Canvas::Pixel pixel = canvas_.read_pixel(293, 89);
+
+ double dist = pixel_value_distance(pixel, ref);
+ if (dist < radius_3d + 0.01) {
+ return Scene::ValidationSuccess;
+ }
+ else {
+ Log::debug("Validation failed! Expected: 0x%x Actual: 0x%x Distance: %f\n",
+ ref.to_le32(), pixel.to_le32(), dist);
+ return Scene::ValidationFailure;
+ }
+
+ return Scene::ValidationUnknown;
+}
diff --git a/src/scene.h b/src/scene.h
index 0b3233c..b995197 100644
--- a/src/scene.h
+++ b/src/scene.h
@@ -240,6 +240,7 @@
public:
SceneConditionals(Canvas &pCanvas);
void setup();
+ ValidationResult validate();
~SceneConditionals();
};