Use AutoMatrix in GrTextContext
Review URL: https://codereview.appspot.com/6691043 git-svn-id: http://skia.googlecode.com/svn/trunk@5952 2bbb7eff-a529-9590-31e7-b0007b416f81
This commit is contained in:
parent
1e269b5a08
commit
858804dfe6
@ -11,9 +11,9 @@
|
|||||||
#ifndef GrTextContext_DEFINED
|
#ifndef GrTextContext_DEFINED
|
||||||
#define GrTextContext_DEFINED
|
#define GrTextContext_DEFINED
|
||||||
|
|
||||||
|
#include "GrContext.h"
|
||||||
#include "GrGlyph.h"
|
#include "GrGlyph.h"
|
||||||
#include "GrPaint.h"
|
#include "GrPaint.h"
|
||||||
#include "GrMatrix.h"
|
|
||||||
|
|
||||||
struct GrGpuTextVertex;
|
struct GrGpuTextVertex;
|
||||||
class GrContext;
|
class GrContext;
|
||||||
@ -50,14 +50,14 @@ private:
|
|||||||
kDefaultRequestedVerts = kDefaultRequestedGlyphs * 4,
|
kDefaultRequestedVerts = kDefaultRequestedGlyphs * 4,
|
||||||
};
|
};
|
||||||
|
|
||||||
GrGpuTextVertex* fVertices;
|
GrGpuTextVertex* fVertices;
|
||||||
|
|
||||||
int32_t fMaxVertices;
|
int32_t fMaxVertices;
|
||||||
GrTexture* fCurrTexture;
|
GrTexture* fCurrTexture;
|
||||||
int fCurrVertex;
|
int fCurrVertex;
|
||||||
|
|
||||||
GrIRect fClipRect;
|
GrIRect fClipRect;
|
||||||
GrMatrix fOrigViewMatrix; // restore previous viewmatrix
|
GrContext::AutoMatrix fAutoMatrix;
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
@ -89,38 +89,7 @@ GrTextContext::GrTextContext(GrContext* context, const GrPaint& paint) : fPaint(
|
|||||||
|
|
||||||
devConservativeBound.roundOut(&fClipRect);
|
devConservativeBound.roundOut(&fClipRect);
|
||||||
|
|
||||||
// save the context's original matrix off and restore in destructor
|
fAutoMatrix.setIdentity(fContext, &fPaint);
|
||||||
// this must be done before getTextTarget.
|
|
||||||
fOrigViewMatrix = fContext->getMatrix();
|
|
||||||
fContext->setIdentityMatrix();
|
|
||||||
|
|
||||||
/*
|
|
||||||
We need to call preConcatMatrix with our viewmatrix's inverse, for each
|
|
||||||
texture and mask in the paint. However, computing the inverse can be
|
|
||||||
expensive, and its possible we may not have any textures or masks, so these
|
|
||||||
two loops are written such that we only compute the inverse (once) if we
|
|
||||||
need it. We do this on our copy of the paint rather than directly on the
|
|
||||||
draw target because we re-provide the paint to the context when we have
|
|
||||||
to flush our glyphs or draw a glyph as a path midstream.
|
|
||||||
*/
|
|
||||||
bool invVMComputed = false;
|
|
||||||
GrMatrix invVM;
|
|
||||||
for (int t = 0; t < GrPaint::kMaxColorStages; ++t) {
|
|
||||||
if (fPaint.isColorStageEnabled(t)) {
|
|
||||||
if (invVMComputed || fOrigViewMatrix.invert(&invVM)) {
|
|
||||||
invVMComputed = true;
|
|
||||||
fPaint.colorSampler(t)->preConcatMatrix(invVM);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
for (int m = 0; m < GrPaint::kMaxCoverageStages; ++m) {
|
|
||||||
if (fPaint.isCoverageStageEnabled(m)) {
|
|
||||||
if (invVMComputed || fOrigViewMatrix.invert(&invVM)) {
|
|
||||||
invVMComputed = true;
|
|
||||||
fPaint.coverageSampler(m)->preConcatMatrix(invVM);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
fDrawTarget = NULL;
|
fDrawTarget = NULL;
|
||||||
|
|
||||||
@ -137,7 +106,6 @@ GrTextContext::~GrTextContext() {
|
|||||||
if (fDrawTarget) {
|
if (fDrawTarget) {
|
||||||
fDrawTarget->drawState()->disableStages();
|
fDrawTarget->drawState()->disableStages();
|
||||||
}
|
}
|
||||||
fContext->setMatrix(fOrigViewMatrix);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void GrTextContext::flush() {
|
void GrTextContext::flush() {
|
||||||
|
Loading…
Reference in New Issue
Block a user