| OLD | NEW |
| 1 | 1 |
| 2 /* | 2 /* |
| 3 * Copyright 2011 Google Inc. | 3 * Copyright 2011 Google Inc. |
| 4 * | 4 * |
| 5 * Use of this source code is governed by a BSD-style license that can be | 5 * Use of this source code is governed by a BSD-style license that can be |
| 6 * found in the LICENSE file. | 6 * found in the LICENSE file. |
| 7 */ | 7 */ |
| 8 | 8 |
| 9 #include "GrContext.h" | 9 #include "GrContext.h" |
| 10 | 10 |
| (...skipping 487 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 498 GrColor fColor; | 498 GrColor fColor; |
| 499 SkMatrix fViewMatrix; | 499 SkMatrix fViewMatrix; |
| 500 SkRect fRect; | 500 SkRect fRect; |
| 501 SkScalar fStrokeWidth; | 501 SkScalar fStrokeWidth; |
| 502 }; | 502 }; |
| 503 | 503 |
| 504 static GrBatch* Create(const Geometry& geometry) { | 504 static GrBatch* Create(const Geometry& geometry) { |
| 505 return SkNEW_ARGS(StrokeRectBatch, (geometry)); | 505 return SkNEW_ARGS(StrokeRectBatch, (geometry)); |
| 506 } | 506 } |
| 507 | 507 |
| 508 const char* name() const SK_OVERRIDE { return "StrokeRectBatch"; } | 508 const char* name() const override { return "StrokeRectBatch"; } |
| 509 | 509 |
| 510 void getInvariantOutputColor(GrInitInvariantOutput* out) const SK_OVERRIDE { | 510 void getInvariantOutputColor(GrInitInvariantOutput* out) const override { |
| 511 // When this is called on a batch, there is only one geometry bundle | 511 // When this is called on a batch, there is only one geometry bundle |
| 512 out->setKnownFourComponents(fGeoData[0].fColor); | 512 out->setKnownFourComponents(fGeoData[0].fColor); |
| 513 } | 513 } |
| 514 | 514 |
| 515 void getInvariantOutputCoverage(GrInitInvariantOutput* out) const SK_OVERRID
E { | 515 void getInvariantOutputCoverage(GrInitInvariantOutput* out) const override { |
| 516 out->setKnownSingleComponent(0xff); | 516 out->setKnownSingleComponent(0xff); |
| 517 } | 517 } |
| 518 | 518 |
| 519 void initBatchTracker(const GrPipelineInfo& init) SK_OVERRIDE { | 519 void initBatchTracker(const GrPipelineInfo& init) override { |
| 520 // Handle any color overrides | 520 // Handle any color overrides |
| 521 if (init.fColorIgnored) { | 521 if (init.fColorIgnored) { |
| 522 fGeoData[0].fColor = GrColor_ILLEGAL; | 522 fGeoData[0].fColor = GrColor_ILLEGAL; |
| 523 } else if (GrColor_ILLEGAL != init.fOverrideColor) { | 523 } else if (GrColor_ILLEGAL != init.fOverrideColor) { |
| 524 fGeoData[0].fColor = init.fOverrideColor; | 524 fGeoData[0].fColor = init.fOverrideColor; |
| 525 } | 525 } |
| 526 | 526 |
| 527 // setup batch properties | 527 // setup batch properties |
| 528 fBatch.fColorIgnored = init.fColorIgnored; | 528 fBatch.fColorIgnored = init.fColorIgnored; |
| 529 fBatch.fColor = fGeoData[0].fColor; | 529 fBatch.fColor = fGeoData[0].fColor; |
| 530 fBatch.fUsesLocalCoords = init.fUsesLocalCoords; | 530 fBatch.fUsesLocalCoords = init.fUsesLocalCoords; |
| 531 fBatch.fCoverageIgnored = init.fCoverageIgnored; | 531 fBatch.fCoverageIgnored = init.fCoverageIgnored; |
| 532 } | 532 } |
| 533 | 533 |
| 534 void generateGeometry(GrBatchTarget* batchTarget, const GrPipeline* pipeline
) SK_OVERRIDE { | 534 void generateGeometry(GrBatchTarget* batchTarget, const GrPipeline* pipeline
) override { |
| 535 SkAutoTUnref<const GrGeometryProcessor> gp( | 535 SkAutoTUnref<const GrGeometryProcessor> gp( |
| 536 GrDefaultGeoProcFactory::Create(GrDefaultGeoProcFactory::kPositi
on_GPType, | 536 GrDefaultGeoProcFactory::Create(GrDefaultGeoProcFactory::kPositi
on_GPType, |
| 537 this->color(), | 537 this->color(), |
| 538 this->viewMatrix(), | 538 this->viewMatrix(), |
| 539 SkMatrix::I())); | 539 SkMatrix::I())); |
| 540 | 540 |
| 541 batchTarget->initDraw(gp, pipeline); | 541 batchTarget->initDraw(gp, pipeline); |
| 542 | 542 |
| 543 // TODO this is hacky, but the only way we have to initialize the GP is
to use the | 543 // TODO this is hacky, but the only way we have to initialize the GP is
to use the |
| 544 // GrPipelineInfo struct so we can generate the correct shader. Once we
have GrBatch | 544 // GrPipelineInfo struct so we can generate the correct shader. Once we
have GrBatch |
| (...skipping 94 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 639 verts[9] = verts[1]; | 639 verts[9] = verts[1]; |
| 640 } | 640 } |
| 641 | 641 |
| 642 | 642 |
| 643 GrColor color() const { return fBatch.fColor; } | 643 GrColor color() const { return fBatch.fColor; } |
| 644 bool usesLocalCoords() const { return fBatch.fUsesLocalCoords; } | 644 bool usesLocalCoords() const { return fBatch.fUsesLocalCoords; } |
| 645 bool colorIgnored() const { return fBatch.fColorIgnored; } | 645 bool colorIgnored() const { return fBatch.fColorIgnored; } |
| 646 const SkMatrix& viewMatrix() const { return fGeoData[0].fViewMatrix; } | 646 const SkMatrix& viewMatrix() const { return fGeoData[0].fViewMatrix; } |
| 647 bool hairline() const { return fBatch.fHairline; } | 647 bool hairline() const { return fBatch.fHairline; } |
| 648 | 648 |
| 649 bool onCombineIfPossible(GrBatch* t) SK_OVERRIDE { | 649 bool onCombineIfPossible(GrBatch* t) override { |
| 650 // StrokeRectBatch* that = t->cast<StrokeRectBatch>(); | 650 // StrokeRectBatch* that = t->cast<StrokeRectBatch>(); |
| 651 | 651 |
| 652 // NonAA stroke rects cannot batch right now | 652 // NonAA stroke rects cannot batch right now |
| 653 // TODO make these batchable | 653 // TODO make these batchable |
| 654 return false; | 654 return false; |
| 655 } | 655 } |
| 656 | 656 |
| 657 struct BatchTracker { | 657 struct BatchTracker { |
| 658 GrColor fColor; | 658 GrColor fColor; |
| 659 bool fUsesLocalCoords; | 659 bool fUsesLocalCoords; |
| (...skipping 177 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 837 static GrBatch* Create(const Geometry& geometry, GrPrimitiveType primitiveTy
pe, | 837 static GrBatch* Create(const Geometry& geometry, GrPrimitiveType primitiveTy
pe, |
| 838 const SkMatrix& viewMatrix, | 838 const SkMatrix& viewMatrix, |
| 839 const SkPoint* positions, int vertexCount, | 839 const SkPoint* positions, int vertexCount, |
| 840 const uint16_t* indices, int indexCount, | 840 const uint16_t* indices, int indexCount, |
| 841 const GrColor* colors, const SkPoint* localCoords) { | 841 const GrColor* colors, const SkPoint* localCoords) { |
| 842 return SkNEW_ARGS(DrawVerticesBatch, (geometry, primitiveType, viewMatri
x, positions, | 842 return SkNEW_ARGS(DrawVerticesBatch, (geometry, primitiveType, viewMatri
x, positions, |
| 843 vertexCount, indices, indexCount,
colors, | 843 vertexCount, indices, indexCount,
colors, |
| 844 localCoords)); | 844 localCoords)); |
| 845 } | 845 } |
| 846 | 846 |
| 847 const char* name() const SK_OVERRIDE { return "DrawVerticesBatch"; } | 847 const char* name() const override { return "DrawVerticesBatch"; } |
| 848 | 848 |
| 849 void getInvariantOutputColor(GrInitInvariantOutput* out) const SK_OVERRIDE { | 849 void getInvariantOutputColor(GrInitInvariantOutput* out) const override { |
| 850 // When this is called on a batch, there is only one geometry bundle | 850 // When this is called on a batch, there is only one geometry bundle |
| 851 if (this->hasColors()) { | 851 if (this->hasColors()) { |
| 852 out->setUnknownFourComponents(); | 852 out->setUnknownFourComponents(); |
| 853 } else { | 853 } else { |
| 854 out->setKnownFourComponents(fGeoData[0].fColor); | 854 out->setKnownFourComponents(fGeoData[0].fColor); |
| 855 } | 855 } |
| 856 } | 856 } |
| 857 | 857 |
| 858 void getInvariantOutputCoverage(GrInitInvariantOutput* out) const SK_OVERRID
E { | 858 void getInvariantOutputCoverage(GrInitInvariantOutput* out) const override { |
| 859 out->setKnownSingleComponent(0xff); | 859 out->setKnownSingleComponent(0xff); |
| 860 } | 860 } |
| 861 | 861 |
| 862 void initBatchTracker(const GrPipelineInfo& init) SK_OVERRIDE { | 862 void initBatchTracker(const GrPipelineInfo& init) override { |
| 863 // Handle any color overrides | 863 // Handle any color overrides |
| 864 if (init.fColorIgnored) { | 864 if (init.fColorIgnored) { |
| 865 fGeoData[0].fColor = GrColor_ILLEGAL; | 865 fGeoData[0].fColor = GrColor_ILLEGAL; |
| 866 } else if (GrColor_ILLEGAL != init.fOverrideColor) { | 866 } else if (GrColor_ILLEGAL != init.fOverrideColor) { |
| 867 fGeoData[0].fColor = init.fOverrideColor; | 867 fGeoData[0].fColor = init.fOverrideColor; |
| 868 } | 868 } |
| 869 | 869 |
| 870 // setup batch properties | 870 // setup batch properties |
| 871 fBatch.fColorIgnored = init.fColorIgnored; | 871 fBatch.fColorIgnored = init.fColorIgnored; |
| 872 fBatch.fColor = fGeoData[0].fColor; | 872 fBatch.fColor = fGeoData[0].fColor; |
| 873 fBatch.fUsesLocalCoords = init.fUsesLocalCoords; | 873 fBatch.fUsesLocalCoords = init.fUsesLocalCoords; |
| 874 fBatch.fCoverageIgnored = init.fCoverageIgnored; | 874 fBatch.fCoverageIgnored = init.fCoverageIgnored; |
| 875 } | 875 } |
| 876 | 876 |
| 877 void generateGeometry(GrBatchTarget* batchTarget, const GrPipeline* pipeline
) SK_OVERRIDE { | 877 void generateGeometry(GrBatchTarget* batchTarget, const GrPipeline* pipeline
) override { |
| 878 int colorOffset = -1, texOffset = -1; | 878 int colorOffset = -1, texOffset = -1; |
| 879 SkAutoTUnref<const GrGeometryProcessor> gp( | 879 SkAutoTUnref<const GrGeometryProcessor> gp( |
| 880 set_vertex_attributes(this->hasLocalCoords(), this->hasColors(),
&colorOffset, | 880 set_vertex_attributes(this->hasLocalCoords(), this->hasColors(),
&colorOffset, |
| 881 &texOffset, this->color(), this->viewMatri
x())); | 881 &texOffset, this->color(), this->viewMatri
x())); |
| 882 | 882 |
| 883 batchTarget->initDraw(gp, pipeline); | 883 batchTarget->initDraw(gp, pipeline); |
| 884 | 884 |
| 885 // TODO this is hacky, but the only way we have to initialize the GP is
to use the | 885 // TODO this is hacky, but the only way we have to initialize the GP is
to use the |
| 886 // GrPipelineInfo struct so we can generate the correct shader. Once we
have GrBatch | 886 // GrPipelineInfo struct so we can generate the correct shader. Once we
have GrBatch |
| 887 // everywhere we can remove this nastiness | 887 // everywhere we can remove this nastiness |
| (...skipping 129 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1017 GrColor color() const { return fBatch.fColor; } | 1017 GrColor color() const { return fBatch.fColor; } |
| 1018 bool usesLocalCoords() const { return fBatch.fUsesLocalCoords; } | 1018 bool usesLocalCoords() const { return fBatch.fUsesLocalCoords; } |
| 1019 bool colorIgnored() const { return fBatch.fColorIgnored; } | 1019 bool colorIgnored() const { return fBatch.fColorIgnored; } |
| 1020 const SkMatrix& viewMatrix() const { return fBatch.fViewMatrix; } | 1020 const SkMatrix& viewMatrix() const { return fBatch.fViewMatrix; } |
| 1021 bool hasColors() const { return fBatch.fHasColors; } | 1021 bool hasColors() const { return fBatch.fHasColors; } |
| 1022 bool hasIndices() const { return fBatch.fHasIndices; } | 1022 bool hasIndices() const { return fBatch.fHasIndices; } |
| 1023 bool hasLocalCoords() const { return fBatch.fHasLocalCoords; } | 1023 bool hasLocalCoords() const { return fBatch.fHasLocalCoords; } |
| 1024 int vertexCount() const { return fBatch.fVertexCount; } | 1024 int vertexCount() const { return fBatch.fVertexCount; } |
| 1025 int indexCount() const { return fBatch.fIndexCount; } | 1025 int indexCount() const { return fBatch.fIndexCount; } |
| 1026 | 1026 |
| 1027 bool onCombineIfPossible(GrBatch* t) SK_OVERRIDE { | 1027 bool onCombineIfPossible(GrBatch* t) override { |
| 1028 DrawVerticesBatch* that = t->cast<DrawVerticesBatch>(); | 1028 DrawVerticesBatch* that = t->cast<DrawVerticesBatch>(); |
| 1029 | 1029 |
| 1030 if (!this->batchablePrimitiveType() || this->primitiveType() != that->pr
imitiveType()) { | 1030 if (!this->batchablePrimitiveType() || this->primitiveType() != that->pr
imitiveType()) { |
| 1031 return false; | 1031 return false; |
| 1032 } | 1032 } |
| 1033 | 1033 |
| 1034 SkASSERT(this->usesLocalCoords() == that->usesLocalCoords()); | 1034 SkASSERT(this->usesLocalCoords() == that->usesLocalCoords()); |
| 1035 | 1035 |
| 1036 // We currently use a uniform viewmatrix for this batch | 1036 // We currently use a uniform viewmatrix for this batch |
| 1037 if (!this->viewMatrix().cheapEqualTo(that->viewMatrix())) { | 1037 if (!this->viewMatrix().cheapEqualTo(that->viewMatrix())) { |
| (...skipping 961 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1999 } | 1999 } |
| 2000 } | 2000 } |
| 2001 | 2001 |
| 2002 void GrContext::removeGpuTraceMarker(const GrGpuTraceMarker* marker) { | 2002 void GrContext::removeGpuTraceMarker(const GrGpuTraceMarker* marker) { |
| 2003 fGpu->removeGpuTraceMarker(marker); | 2003 fGpu->removeGpuTraceMarker(marker); |
| 2004 if (fDrawBuffer) { | 2004 if (fDrawBuffer) { |
| 2005 fDrawBuffer->removeGpuTraceMarker(marker); | 2005 fDrawBuffer->removeGpuTraceMarker(marker); |
| 2006 } | 2006 } |
| 2007 } | 2007 } |
| 2008 | 2008 |
| OLD | NEW |