Chromium Code Reviews| Index: src/gpu/GrDefaultGeoProcFactory.cpp |
| diff --git a/src/gpu/GrDefaultGeoProcFactory.cpp b/src/gpu/GrDefaultGeoProcFactory.cpp |
| index 6e2ea060dfa8606b89d8202f591408c9c0015a17..a72c88052c7270bd0f099da06e011786dd226d7f 100644 |
| --- a/src/gpu/GrDefaultGeoProcFactory.cpp |
| +++ b/src/gpu/GrDefaultGeoProcFactory.cpp |
| @@ -55,7 +55,7 @@ public: |
| class GLProcessor : public GrGLGeometryProcessor { |
| public: |
| GLProcessor(const GrGeometryProcessor& gp, const GrBatchTracker&) |
| - : fColor(GrColor_ILLEGAL), fCoverage(0xff) {} |
| + : fViewMatrix(SkMatrix::InvalidMatrix()), fColor(GrColor_ILLEGAL), fCoverage(0xff) {} |
| void onEmitCode(EmitArgs& args, GrGPArgs* gpArgs) override { |
| const DefaultGeoProc& gp = args.fGP.cast<DefaultGeoProc>(); |
| @@ -76,7 +76,8 @@ public: |
| } |
| // Setup position |
| - this->setupPosition(pb, gpArgs, gp.inPosition()->fName, gp.viewMatrix()); |
| + this->setupPosition(pb, gpArgs, gp.inPosition()->fName, gp.viewMatrix(), |
| + &fViewMatrixUniform); |
| if (gp.inLocalCoords()) { |
| // emit transforms with explicit local coords |
| @@ -128,7 +129,13 @@ public: |
| const GrPrimitiveProcessor& gp, |
| const GrBatchTracker& bt) override { |
| const DefaultGeoProc& dgp = gp.cast<DefaultGeoProc>(); |
| - this->setUniformViewMatrix(pdman, dgp.viewMatrix()); |
| + |
| + if (!dgp.viewMatrix().isIdentity() && !fViewMatrix.cheapEqualTo(dgp.viewMatrix())) { |
|
robertphillips
2015/05/21 18:07:41
You didn't like the "SkASSERT(fViewMatrixUniform.i
|
| + fViewMatrix = dgp.viewMatrix(); |
| + GrGLfloat viewMatrix[3 * 3]; |
| + GrGLGetMatrix<3>(viewMatrix, fViewMatrix); |
| + pdman.setMatrix3f(fViewMatrixUniform, viewMatrix); |
| + } |
| if (dgp.color() != fColor && !dgp.hasVertexColor()) { |
| GrGLfloat c[4]; |
| @@ -151,8 +158,10 @@ public: |
| } |
| private: |
| + SkMatrix fViewMatrix; |
| GrColor fColor; |
| uint8_t fCoverage; |
| + UniformHandle fViewMatrixUniform; |
| UniformHandle fColorUniform; |
| UniformHandle fCoverageUniform; |