gm: add a flag to force perspective usage in all gms

BUG=
R=reed@google.com, epoger@google.com, borenet@google.com

Author: edisonn@google.com

Review URL: https://chromiumcodereview.appspot.com/23587029

git-svn-id: http://skia.googlecode.com/svn/trunk@11487 2bbb7eff-a529-9590-31e7-b0007b416f81
This commit is contained in:
commit-bot@chromium.org 2013-09-26 20:44:24 +00:00
parent 939ca7ce86
commit f4f9df4c19
3 changed files with 27 additions and 1 deletions

View File

@ -15,6 +15,7 @@ GM::GM() {
fCanvasIsDeferred = false;
fHaveCalledOnceBeforeDraw = false;
fIgnoreFailures = false;
fStarterMatrix.reset();
}
GM::~GM() {}

10
gm/gm.h
View File

@ -74,7 +74,9 @@ namespace skiagm {
// Most GMs will return the identity matrix, but some PDFs tests
// require setting the initial transform.
SkMatrix getInitialTransform() const {
return this->onGetInitialTransform();
SkMatrix matrix = fStarterMatrix;
matrix.preConcat(this->onGetInitialTransform());
return matrix;
}
SkColor getBGColor() const { return fBGColor; }
@ -106,6 +108,11 @@ namespace skiagm {
static GrContext* GetGr(/*very nearly const*/ SkCanvas*);
#endif
const SkMatrix& getStarterMatrix() { return fStarterMatrix; }
void setStarterMatrix(const SkMatrix& matrix) {
fStarterMatrix = matrix;
}
protected:
static SkString gResourcePath;
@ -123,6 +130,7 @@ namespace skiagm {
bool fCanvasIsDeferred; // work-around problem in srcmode.cpp
bool fHaveCalledOnceBeforeDraw;
bool fIgnoreFailures; // whether to file any failures as failure-ignored
SkMatrix fStarterMatrix;
};
typedef SkTRegistry<GM*(*)(void*)> GMRegistry;

View File

@ -1423,6 +1423,14 @@ DEFINE_int32(pdfJpegQuality, -1, "Encodes images in JPEG at quality level N, "
"which can be in range 0-100). N = -1 will disable JPEG compression. "
"Default is N = 100, maximum quality.");
// TODO(edisonn): pass a matrix instead of forcePerspectiveMatrix
// Either the 9 numbers defining the matrix
// or probably more readable would be to replace it with a set of a few predicates
// Like --prerotate 100 200 10 --posttranslate 10, 10
// Probably define spacial names like centerx, centery, top, bottom, left, right
// then we can write something reabable like --rotate centerx centery 90
DEFINE_bool(forcePerspectiveMatrix, false, "Force a perspective matrix.");
static bool encode_to_dct_stream(SkWStream* stream, const SkBitmap& bitmap, const SkIRect& rect) {
// Filter output of warnings that JPEG is not available for the image.
if (bitmap.width() >= 65500 || bitmap.height() >= 65500) return false;
@ -2154,6 +2162,15 @@ int tool_main(int argc, char** argv) {
Iter iter;
GM* gm;
while ((gm = iter.next()) != NULL) {
if (FLAGS_forcePerspectiveMatrix) {
SkMatrix perspective;
perspective.setIdentity();
perspective.setPerspY(SkScalarDiv(SK_Scalar1, SkIntToScalar(1000)));
perspective.setSkewX(SkScalarDiv(SkIntToScalar(8),
SkIntToScalar(25)));
gm->setStarterMatrix(perspective);
}
SkAutoTDelete<GM> adgm(gm);
++gmIndex;
if (moduloRemainder >= 0) {