Scene::ValidationResult SceneShading::validate() { static const double radius_3d(std::sqrt(3.0)); if (rotation_ != 0) return Scene::ValidationUnknown; Canvas::Pixel ref; Canvas::Pixel pixel = canvas_.read_pixel(canvas_.width() / 3, canvas_.height() / 3); const std::string &filter = options_["shading"].value; if (filter == "gouraud") ref = Canvas::Pixel(0x00, 0x00, 0x2d, 0xff); else if (filter == "blinn-phong-inf") ref = Canvas::Pixel(0x1a, 0x1a, 0x3e, 0xff); else if (filter == "phong" && options_["num-lights"].value == "1") ref = Canvas::Pixel(0x05, 0x05, 0xad, 0xff); else return Scene::ValidationUnknown; double dist = pixel.distance_rgb(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; } }
Scene::ValidationResult SceneDesktop::validate() { static const double radius_3d(std::sqrt(3.0 * 2.0 * 2.0)); Canvas::Pixel ref; /* Parse the options */ unsigned int windows(0); unsigned int passes(0); unsigned int blur_radius(0); float window_size_factor(0.0); unsigned int shadow_size(0); windows = Util::fromString<unsigned int>(options_["windows"].value); window_size_factor = Util::fromString<float>(options_["window-size"].value); passes = Util::fromString<unsigned int>(options_["passes"].value); blur_radius = Util::fromString<unsigned int>(options_["blur-radius"].value); shadow_size = Util::fromString<unsigned int>(options_["shadow-size"].value); if (options_["effect"].value == "blur") { if (windows == 4 && passes == 1 && blur_radius == 5) ref = Canvas::Pixel(0x89, 0xa3, 0x53, 0xff); else return Scene::ValidationUnknown; } else if (options_["effect"].value == "shadow") { if (windows == 4 && fabs(window_size_factor - 0.35) < 0.0001 && shadow_size == 20) { ref = Canvas::Pixel(0x1f, 0x27, 0x0d, 0xff); } else { return Scene::ValidationUnknown; } } Canvas::Pixel pixel = canvas_.read_pixel(512, 209); double dist = pixel.distance_rgb(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; }
Scene::ValidationResult SceneBump::validate() { static const double radius_3d(std::sqrt(3.0)); if (rotation_ != 0) return Scene::ValidationUnknown; Canvas::Pixel ref; Canvas::Pixel pixel = canvas_.read_pixel(canvas_.width() / 2, canvas_.height() / 2); const std::string &bump_render = options_["bump-render"].value; if (bump_render == "off") ref = Canvas::Pixel(0x81, 0x81, 0x81, 0xff); else if (bump_render == "high-poly") ref = Canvas::Pixel(0x9c, 0x9c, 0x9c, 0xff); else if (bump_render == "normals") ref = Canvas::Pixel(0xa4, 0xa4, 0xa4, 0xff); else if (bump_render == "normals-tangent") ref = Canvas::Pixel(0x99, 0x99, 0x99, 0xff); else if (bump_render == "height") ref = Canvas::Pixel(0x9d, 0x9d, 0x9d, 0xff); else return Scene::ValidationUnknown; double dist = pixel.distance_rgb(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; } }
Scene::ValidationResult SceneBuffer::validate() { static const double radius_3d(std::sqrt(3.0 * 2.0 * 2.0)); Canvas::Pixel ref(0x34, 0x99, 0xd7, 0xff); Canvas::Pixel pixel = canvas_.read_pixel(402, 189); double dist = pixel.distance_rgb(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; }
Scene::ValidationResult SceneBuild::validate() { static const double radius_3d(std::sqrt(3.0)); if (rotation_ != 0) return Scene::ValidationUnknown; Canvas::Pixel ref(0xa7, 0xa7, 0xa7, 0xff); Canvas::Pixel pixel = canvas_.read_pixel(canvas_.width() / 2, canvas_.height() / 2); double dist = pixel.distance_rgb(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; } }