| OLD | NEW |
| 1 /* | 1 /* |
| 2 * Copyright 2012 Google Inc. | 2 * Copyright 2012 Google Inc. |
| 3 * | 3 * |
| 4 * Use of this source code is governed by a BSD-style license that can be | 4 * Use of this source code is governed by a BSD-style license that can be |
| 5 * found in the LICENSE file. | 5 * found in the LICENSE file. |
| 6 */ | 6 */ |
| 7 | 7 |
| 8 #include "GrAARectRenderer.h" | 8 #include "GrAARectRenderer.h" |
| 9 #include "GrDefaultGeoProcFactory.h" |
| 10 #include "GrGeometryProcessor.h" |
| 9 #include "GrGpu.h" | 11 #include "GrGpu.h" |
| 10 #include "gl/builders/GrGLProgramBuilder.h" | 12 #include "GrTBackendProcessorFactory.h" |
| 13 #include "SkColorPriv.h" |
| 11 #include "gl/GrGLProcessor.h" | 14 #include "gl/GrGLProcessor.h" |
| 12 #include "gl/GrGLGeometryProcessor.h" | 15 #include "gl/GrGLGeometryProcessor.h" |
| 13 #include "GrTBackendProcessorFactory.h" | 16 #include "gl/builders/GrGLProgramBuilder.h" |
| 14 #include "SkColorPriv.h" | |
| 15 #include "GrGeometryProcessor.h" | |
| 16 | 17 |
| 17 /////////////////////////////////////////////////////////////////////////////// | 18 /////////////////////////////////////////////////////////////////////////////// |
| 18 | 19 |
| 19 namespace { | 20 namespace { |
| 20 extern const GrVertexAttrib gAARectAttribs[] = { | |
| 21 {kVec2f_GrVertexAttribType, 0, kPosition_Gr
VertexAttribBinding}, | |
| 22 {kVec4ub_GrVertexAttribType, sizeof(SkPoint), kColor_GrVer
texAttribBinding}, | |
| 23 {kFloat_GrVertexAttribType, sizeof(SkPoint) + sizeof(SkColor), kCoverage_Gr
VertexAttribBinding}, | |
| 24 }; | |
| 25 | |
| 26 // Should the coverage be multiplied into the color attrib or use a separate att
rib. | 21 // Should the coverage be multiplied into the color attrib or use a separate att
rib. |
| 27 enum CoverageAttribType { | 22 enum CoverageAttribType { |
| 28 kUseColor_CoverageAttribType, | 23 kUseColor_CoverageAttribType, |
| 29 kUseCoverage_CoverageAttribType, | 24 kUseCoverage_CoverageAttribType, |
| 30 }; | 25 }; |
| 31 } | 26 } |
| 32 | 27 |
| 33 static CoverageAttribType set_rect_attribs(GrDrawState* drawState) { | 28 static CoverageAttribType set_rect_attribs(GrDrawState* drawState) { |
| 34 if (drawState->canTweakAlphaForCoverage()) { | 29 if (drawState->canTweakAlphaForCoverage()) { |
| 35 drawState->setVertexAttribs<gAARectAttribs>(2, sizeof(SkPoint) + sizeof(
SkColor)); | 30 drawState->setGeometryProcessor( |
| 31 GrDefaultGeoProcFactory::CreateAndSetAttribs( |
| 32 drawState, |
| 33 GrDefaultGeoProcFactory::kColor_GPType))->unref(); |
| 36 return kUseColor_CoverageAttribType; | 34 return kUseColor_CoverageAttribType; |
| 37 } else { | 35 } else { |
| 38 drawState->setVertexAttribs<gAARectAttribs>(3, sizeof(SkPoint) + sizeof(
SkColor) + | 36 drawState->setGeometryProcessor( |
| 39 sizeof(float)); | 37 GrDefaultGeoProcFactory::CreateAndSetAttribs( |
| 38 drawState, |
| 39 GrDefaultGeoProcFactory::kColor_GPType | |
| 40 GrDefaultGeoProcFactory::kCoverage_GPType))->unref(); |
| 40 return kUseCoverage_CoverageAttribType; | 41 return kUseCoverage_CoverageAttribType; |
| 41 } | 42 } |
| 42 } | 43 } |
| 43 | 44 |
| 44 static void set_inset_fan(SkPoint* pts, size_t stride, | 45 static void set_inset_fan(SkPoint* pts, size_t stride, |
| 45 const SkRect& r, SkScalar dx, SkScalar dy) { | 46 const SkRect& r, SkScalar dx, SkScalar dy) { |
| 46 pts->setRectFan(r.fLeft + dx, r.fTop + dy, | 47 pts->setRectFan(r.fLeft + dx, r.fTop + dy, |
| 47 r.fRight - dx, r.fBottom - dy, stride); | 48 r.fRight - dx, r.fBottom - dy, stride); |
| 48 } | 49 } |
| 49 | 50 |
| (...skipping 122 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 172 } | 173 } |
| 173 return fAABevelStrokeRectIndexBuffer; | 174 return fAABevelStrokeRectIndexBuffer; |
| 174 } | 175 } |
| 175 } | 176 } |
| 176 | 177 |
| 177 void GrAARectRenderer::geometryFillAARect(GrDrawTarget* target, | 178 void GrAARectRenderer::geometryFillAARect(GrDrawTarget* target, |
| 178 const SkRect& rect, | 179 const SkRect& rect, |
| 179 const SkMatrix& combinedMatrix, | 180 const SkMatrix& combinedMatrix, |
| 180 const SkRect& devRect) { | 181 const SkRect& devRect) { |
| 181 GrDrawState* drawState = target->drawState(); | 182 GrDrawState* drawState = target->drawState(); |
| 183 GrDrawState::AutoRestoreEffects are(drawState); |
| 182 | 184 |
| 183 GrColor color = drawState->getColor(); | 185 GrColor color = drawState->getColor(); |
| 184 | 186 |
| 185 CoverageAttribType covAttribType = set_rect_attribs(drawState); | 187 CoverageAttribType covAttribType = set_rect_attribs(drawState); |
| 186 if (kUseCoverage_CoverageAttribType == covAttribType && GrColorIsOpaque(colo
r)) { | 188 if (kUseCoverage_CoverageAttribType == covAttribType && GrColorIsOpaque(colo
r)) { |
| 187 drawState->setHint(GrDrawState::kVertexColorsAreOpaque_Hint, true); | 189 drawState->setHint(GrDrawState::kVertexColorsAreOpaque_Hint, true); |
| 188 } | 190 } |
| 189 | 191 |
| 190 GrDrawTarget::AutoReleaseGeometry geo(target, 8, 0); | 192 GrDrawTarget::AutoReleaseGeometry geo(target, 8, 0); |
| 191 if (!geo.succeeded()) { | 193 if (!geo.succeeded()) { |
| (...skipping 177 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 369 | 371 |
| 370 this->geometryStrokeAARect(target, devOutside, devOutsideAssist, devInside,
miterStroke); | 372 this->geometryStrokeAARect(target, devOutside, devOutsideAssist, devInside,
miterStroke); |
| 371 } | 373 } |
| 372 | 374 |
| 373 void GrAARectRenderer::geometryStrokeAARect(GrDrawTarget* target, | 375 void GrAARectRenderer::geometryStrokeAARect(GrDrawTarget* target, |
| 374 const SkRect& devOutside, | 376 const SkRect& devOutside, |
| 375 const SkRect& devOutsideAssist, | 377 const SkRect& devOutsideAssist, |
| 376 const SkRect& devInside, | 378 const SkRect& devInside, |
| 377 bool miterStroke) { | 379 bool miterStroke) { |
| 378 GrDrawState* drawState = target->drawState(); | 380 GrDrawState* drawState = target->drawState(); |
| 381 GrDrawState::AutoRestoreEffects are(drawState); |
| 379 | 382 |
| 380 CoverageAttribType covAttribType = set_rect_attribs(drawState); | 383 CoverageAttribType covAttribType = set_rect_attribs(drawState); |
| 381 | 384 |
| 382 GrColor color = drawState->getColor(); | 385 GrColor color = drawState->getColor(); |
| 383 if (kUseCoverage_CoverageAttribType == covAttribType && GrColorIsOpaque(colo
r)) { | 386 if (kUseCoverage_CoverageAttribType == covAttribType && GrColorIsOpaque(colo
r)) { |
| 384 drawState->setHint(GrDrawState::kVertexColorsAreOpaque_Hint, true); | 387 drawState->setHint(GrDrawState::kVertexColorsAreOpaque_Hint, true); |
| 385 } | 388 } |
| 386 | 389 |
| 387 int innerVertexNum = 4; | 390 int innerVertexNum = 4; |
| 388 int outerVertexNum = miterStroke ? 4 : 8; | 391 int outerVertexNum = miterStroke ? 4 : 8; |
| (...skipping 122 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 511 // can't call mapRect for devInside since it calls sort | 514 // can't call mapRect for devInside since it calls sort |
| 512 combinedMatrix.mapPoints((SkPoint*)&devInside, (const SkPoint*)&rects[1], 2)
; | 515 combinedMatrix.mapPoints((SkPoint*)&devInside, (const SkPoint*)&rects[1], 2)
; |
| 513 | 516 |
| 514 if (devInside.isEmpty()) { | 517 if (devInside.isEmpty()) { |
| 515 this->fillAARect(target, devOutside, SkMatrix::I(), devOutside); | 518 this->fillAARect(target, devOutside, SkMatrix::I(), devOutside); |
| 516 return; | 519 return; |
| 517 } | 520 } |
| 518 | 521 |
| 519 this->geometryStrokeAARect(target, devOutside, devOutsideAssist, devInside,
true); | 522 this->geometryStrokeAARect(target, devOutside, devOutsideAssist, devInside,
true); |
| 520 } | 523 } |
| OLD | NEW |