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();
 };