OLD | NEW |
1 /* | 1 /* |
2 * Copyright 2013 Google Inc. | 2 * Copyright 2013 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 "GrOvalRenderer.h" | 8 #include "GrOvalRenderer.h" |
9 | 9 |
10 #include "GrProcessor.h" | 10 #include "GrProcessor.h" |
(...skipping 105 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
116 | 116 |
117 fsBuilder->codeAppendf("%s = vec4(edgeAlpha);", args.fOutputCoverage
); | 117 fsBuilder->codeAppendf("%s = vec4(edgeAlpha);", args.fOutputCoverage
); |
118 } | 118 } |
119 | 119 |
120 static void GenKey(const GrGeometryProcessor& processor, | 120 static void GenKey(const GrGeometryProcessor& processor, |
121 const GrBatchTracker& bt, | 121 const GrBatchTracker& bt, |
122 const GrGLCaps&, | 122 const GrGLCaps&, |
123 GrProcessorKeyBuilder* b) { | 123 GrProcessorKeyBuilder* b) { |
124 const BatchTracker& local = bt.cast<BatchTracker>(); | 124 const BatchTracker& local = bt.cast<BatchTracker>(); |
125 const CircleEdgeEffect& circleEffect = processor.cast<CircleEdgeEffe
ct>(); | 125 const CircleEdgeEffect& circleEffect = processor.cast<CircleEdgeEffe
ct>(); |
126 b->add32(circleEffect.isStroked() << 16 | local.fInputColorType); | 126 uint16_t key = circleEffect.isStroked() ? 0x1 : 0x0; |
| 127 key |= local.fUsesLocalCoords && processor.localMatrix().hasPerspect
ive() ? 0x2 : 0x0; |
| 128 b->add32(key << 16 | local.fInputColorType); |
127 } | 129 } |
128 | 130 |
129 virtual void setData(const GrGLProgramDataManager& pdman, | 131 virtual void setData(const GrGLProgramDataManager& pdman, |
130 const GrPrimitiveProcessor& gp, | 132 const GrPrimitiveProcessor& gp, |
131 const GrBatchTracker& bt) SK_OVERRIDE { | 133 const GrBatchTracker& bt) SK_OVERRIDE { |
132 const BatchTracker& local = bt.cast<BatchTracker>(); | 134 const BatchTracker& local = bt.cast<BatchTracker>(); |
133 if (kUniform_GrGPInput == local.fInputColorType && local.fColor != f
Color) { | 135 if (kUniform_GrGPInput == local.fInputColorType && local.fColor != f
Color) { |
134 GrGLfloat c[4]; | 136 GrGLfloat c[4]; |
135 GrColorToRGBAFloat(local.fColor, c); | 137 GrColorToRGBAFloat(local.fColor, c); |
136 pdman.set4fv(fColorUniform, 1, c); | 138 pdman.set4fv(fColorUniform, 1, c); |
(...skipping 162 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
299 | 301 |
300 fsBuilder->codeAppendf("%s = vec4(edgeAlpha);", args.fOutputCoverage
); | 302 fsBuilder->codeAppendf("%s = vec4(edgeAlpha);", args.fOutputCoverage
); |
301 } | 303 } |
302 | 304 |
303 static void GenKey(const GrGeometryProcessor& processor, | 305 static void GenKey(const GrGeometryProcessor& processor, |
304 const GrBatchTracker& bt, | 306 const GrBatchTracker& bt, |
305 const GrGLCaps&, | 307 const GrGLCaps&, |
306 GrProcessorKeyBuilder* b) { | 308 GrProcessorKeyBuilder* b) { |
307 const BatchTracker& local = bt.cast<BatchTracker>(); | 309 const BatchTracker& local = bt.cast<BatchTracker>(); |
308 const EllipseEdgeEffect& ellipseEffect = processor.cast<EllipseEdgeE
ffect>(); | 310 const EllipseEdgeEffect& ellipseEffect = processor.cast<EllipseEdgeE
ffect>(); |
309 b->add32(ellipseEffect.isStroked() << 16 | local.fInputColorType); | 311 uint16_t key = ellipseEffect.isStroked() ? 0x1 : 0x0; |
| 312 key |= local.fUsesLocalCoords && processor.localMatrix().hasPerspect
ive() ? 0x2 : 0x0; |
| 313 b->add32(key << 16 | local.fInputColorType); |
310 } | 314 } |
311 | 315 |
312 virtual void setData(const GrGLProgramDataManager& pdman, | 316 virtual void setData(const GrGLProgramDataManager& pdman, |
313 const GrPrimitiveProcessor& gp, | 317 const GrPrimitiveProcessor& gp, |
314 const GrBatchTracker& bt) SK_OVERRIDE { | 318 const GrBatchTracker& bt) SK_OVERRIDE { |
315 const BatchTracker& local = bt.cast<BatchTracker>(); | 319 const BatchTracker& local = bt.cast<BatchTracker>(); |
316 if (kUniform_GrGPInput == local.fInputColorType && local.fColor != f
Color) { | 320 if (kUniform_GrGPInput == local.fInputColorType && local.fColor != f
Color) { |
317 GrGLfloat c[4]; | 321 GrGLfloat c[4]; |
318 GrColorToRGBAFloat(local.fColor, c); | 322 GrColorToRGBAFloat(local.fColor, c); |
319 pdman.set4fv(fColorUniform, 1, c); | 323 pdman.set4fv(fColorUniform, 1, c); |
(...skipping 183 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
503 | 507 |
504 fsBuilder->codeAppendf("%s = vec4(edgeAlpha);", args.fOutputCoverage
); | 508 fsBuilder->codeAppendf("%s = vec4(edgeAlpha);", args.fOutputCoverage
); |
505 } | 509 } |
506 | 510 |
507 static void GenKey(const GrGeometryProcessor& processor, | 511 static void GenKey(const GrGeometryProcessor& processor, |
508 const GrBatchTracker& bt, | 512 const GrBatchTracker& bt, |
509 const GrGLCaps&, | 513 const GrGLCaps&, |
510 GrProcessorKeyBuilder* b) { | 514 GrProcessorKeyBuilder* b) { |
511 const BatchTracker& local = bt.cast<BatchTracker>(); | 515 const BatchTracker& local = bt.cast<BatchTracker>(); |
512 const DIEllipseEdgeEffect& ellipseEffect = processor.cast<DIEllipseE
dgeEffect>(); | 516 const DIEllipseEdgeEffect& ellipseEffect = processor.cast<DIEllipseE
dgeEffect>(); |
513 b->add32(ellipseEffect.getMode() << 16 | local.fInputColorType); | 517 uint16_t key = ellipseEffect.getMode(); |
| 518 key |= local.fUsesLocalCoords && processor.localMatrix().hasPerspect
ive() ? 0x1 << 8 : |
| 519
0x0; |
| 520 b->add32(key << 16 | local.fInputColorType); |
514 } | 521 } |
515 | 522 |
516 virtual void setData(const GrGLProgramDataManager& pdman, | 523 virtual void setData(const GrGLProgramDataManager& pdman, |
517 const GrPrimitiveProcessor& gp, | 524 const GrPrimitiveProcessor& gp, |
518 const GrBatchTracker& bt) SK_OVERRIDE { | 525 const GrBatchTracker& bt) SK_OVERRIDE { |
519 const BatchTracker& local = bt.cast<BatchTracker>(); | 526 const BatchTracker& local = bt.cast<BatchTracker>(); |
520 if (kUniform_GrGPInput == local.fInputColorType && local.fColor != f
Color) { | 527 if (kUniform_GrGPInput == local.fInputColorType && local.fColor != f
Color) { |
521 GrGLfloat c[4]; | 528 GrGLfloat c[4]; |
522 GrColorToRGBAFloat(local.fColor, c); | 529 GrColorToRGBAFloat(local.fColor, c); |
523 pdman.set4fv(fColorUniform, 1, c); | 530 pdman.set4fv(fColorUniform, 1, c); |
(...skipping 555 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1079 } | 1086 } |
1080 GrDrawState::AutoViewMatrixRestore avmr; | 1087 GrDrawState::AutoViewMatrixRestore avmr; |
1081 if (!avmr.setIdentity(drawState)) { | 1088 if (!avmr.setIdentity(drawState)) { |
1082 return false; | 1089 return false; |
1083 } | 1090 } |
1084 drawState->addCoverageProcessor(effect)->unref(); | 1091 drawState->addCoverageProcessor(effect)->unref(); |
1085 SkRect bounds = outer->getBounds(); | 1092 SkRect bounds = outer->getBounds(); |
1086 if (applyAA) { | 1093 if (applyAA) { |
1087 bounds.outset(SK_ScalarHalf, SK_ScalarHalf); | 1094 bounds.outset(SK_ScalarHalf, SK_ScalarHalf); |
1088 } | 1095 } |
1089 target->drawRect(drawState, color, bounds, NULL, NULL); | 1096 target->drawSimpleRect(drawState, color, bounds); |
1090 return true; | 1097 return true; |
1091 } | 1098 } |
1092 | 1099 |
1093 bool GrOvalRenderer::drawRRect(GrDrawTarget* target, | 1100 bool GrOvalRenderer::drawRRect(GrDrawTarget* target, |
1094 GrDrawState* drawState, | 1101 GrDrawState* drawState, |
1095 GrColor color, | 1102 GrColor color, |
1096 bool useAA, | 1103 bool useAA, |
1097 const SkRRect& rrect, | 1104 const SkRRect& rrect, |
1098 const SkStrokeRec& stroke) { | 1105 const SkStrokeRec& stroke) { |
1099 if (rrect.isOval()) { | 1106 if (rrect.isOval()) { |
(...skipping 260 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1360 int indexCnt = isStrokeOnly ? SK_ARRAY_COUNT(gRRectIndices) - 6 : | 1367 int indexCnt = isStrokeOnly ? SK_ARRAY_COUNT(gRRectIndices) - 6 : |
1361 SK_ARRAY_COUNT(gRRectIndices); | 1368 SK_ARRAY_COUNT(gRRectIndices); |
1362 target->setIndexSourceToBuffer(indexBuffer); | 1369 target->setIndexSourceToBuffer(indexBuffer); |
1363 target->drawIndexedInstances(drawState, effect, kTriangles_GrPrimitiveTy
pe, 1, 16, indexCnt, | 1370 target->drawIndexedInstances(drawState, effect, kTriangles_GrPrimitiveTy
pe, 1, 16, indexCnt, |
1364 &bounds); | 1371 &bounds); |
1365 } | 1372 } |
1366 | 1373 |
1367 target->resetIndexSource(); | 1374 target->resetIndexSource(); |
1368 return true; | 1375 return true; |
1369 } | 1376 } |
OLD | NEW |