| Index: tools/render_pictures_main.cpp
|
| ===================================================================
|
| --- tools/render_pictures_main.cpp (revision 8119)
|
| +++ tools/render_pictures_main.cpp (working copy)
|
| @@ -35,7 +35,8 @@
|
| DEFINE_bool(writeWholeImage, false, "In tile mode, write the entire rendered image to a "
|
| "file, instead of an image for each tile.");
|
| DEFINE_bool(validate, false, "Verify that the rendered image contains the same pixels as "
|
| - "the picture rendered in simple mode.");
|
| + "the picture rendered in simple mode. When used in conjunction with --bbh, results "
|
| + "are validated against the picture rendered in the same mode, but without the bbh.");
|
|
|
| static void make_output_filepath(SkString* path, const SkString& dir,
|
| const SkString& name) {
|
| @@ -142,6 +143,32 @@
|
| SkMax32(abs(getByte(v1, 2) - getByte(v2, 2)), abs(getByte(v1, 3) - getByte(v2, 3))));
|
| }
|
|
|
| +namespace {
|
| +class AutoRestoreBbhType {
|
| +public:
|
| + AutoRestoreBbhType() {
|
| + fRenderer = NULL;
|
| + }
|
| +
|
| + void set(sk_tools::PictureRenderer* renderer,
|
| + sk_tools::PictureRenderer::BBoxHierarchyType bbhType) {
|
| + fRenderer = renderer;
|
| + fSavedBbhType = renderer->getBBoxHierarchyType();
|
| + renderer->setBBoxHierarchyType(bbhType);
|
| + }
|
| +
|
| + ~AutoRestoreBbhType() {
|
| + if (NULL != fRenderer) {
|
| + fRenderer->setBBoxHierarchyType(fSavedBbhType);
|
| + }
|
| + }
|
| +
|
| +private:
|
| + sk_tools::PictureRenderer* fRenderer;
|
| + sk_tools::PictureRenderer::BBoxHierarchyType fSavedBbhType;
|
| +};
|
| +}
|
| +
|
| static bool render_picture(const SkString& inputPath, const SkString* outputDir,
|
| sk_tools::PictureRenderer& renderer) {
|
| int diffs[256] = {0};
|
| @@ -159,8 +186,21 @@
|
|
|
| if (FLAGS_validate) {
|
| SkBitmap* referenceBitmap = NULL;
|
| - sk_tools::SimplePictureRenderer referenceRenderer;
|
| - success = render_picture(inputPath, NULL, referenceRenderer,
|
| + sk_tools::PictureRenderer* referenceRenderer;
|
| + // If the renderer uses a BBoxHierarchy, then the reference renderer
|
| + // will be the same renderer, without the bbh.
|
| + AutoRestoreBbhType arbbh;
|
| + if (sk_tools::PictureRenderer::kNone_BBoxHierarchyType !=
|
| + renderer.getBBoxHierarchyType()) {
|
| + referenceRenderer = &renderer;
|
| + referenceRenderer->ref(); // to match auto unref below
|
| + arbbh.set(referenceRenderer, sk_tools::PictureRenderer::kNone_BBoxHierarchyType);
|
| + } else {
|
| + referenceRenderer = SkNEW(sk_tools::SimplePictureRenderer);
|
| + }
|
| + SkAutoTUnref<sk_tools::PictureRenderer> aurReferenceRenderer(referenceRenderer);
|
| +
|
| + success = render_picture(inputPath, NULL, *referenceRenderer,
|
| &referenceBitmap);
|
|
|
| if (!success || NULL == referenceBitmap || NULL == referenceBitmap->getPixels()) {
|
|
|