| 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 "GrBatch.h" | 10 #include "GrBatch.h" |
| (...skipping 95 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 106 this->setupColorPassThrough(pb, local.fInputColorType, args.fOutputC
olor, NULL, | 106 this->setupColorPassThrough(pb, local.fInputColorType, args.fOutputC
olor, NULL, |
| 107 &fColorUniform); | 107 &fColorUniform); |
| 108 | 108 |
| 109 // Setup position | 109 // Setup position |
| 110 this->setupPosition(pb, gpArgs, ce.inPosition()->fName, ce.viewMatri
x()); | 110 this->setupPosition(pb, gpArgs, ce.inPosition()->fName, ce.viewMatri
x()); |
| 111 | 111 |
| 112 // emit transforms | 112 // emit transforms |
| 113 this->emitTransforms(args.fPB, gpArgs->fPositionVar, ce.inPosition()
->fName, | 113 this->emitTransforms(args.fPB, gpArgs->fPositionVar, ce.inPosition()
->fName, |
| 114 ce.localMatrix(), args.fTransformsIn, args.fTra
nsformsOut); | 114 ce.localMatrix(), args.fTransformsIn, args.fTra
nsformsOut); |
| 115 | 115 |
| 116 GrGLGPFragmentBuilder* fsBuilder = args.fPB->getFragmentShaderBuilde
r(); | 116 GrGLFragmentBuilder* fsBuilder = args.fPB->getFragmentShaderBuilder(
); |
| 117 fsBuilder->codeAppendf("float d = length(%s.xy);", v.fsIn()); | 117 fsBuilder->codeAppendf("float d = length(%s.xy);", v.fsIn()); |
| 118 fsBuilder->codeAppendf("float edgeAlpha = clamp(%s.z * (1.0 - d), 0.
0, 1.0);", v.fsIn()); | 118 fsBuilder->codeAppendf("float edgeAlpha = clamp(%s.z * (1.0 - d), 0.
0, 1.0);", v.fsIn()); |
| 119 if (ce.isStroked()) { | 119 if (ce.isStroked()) { |
| 120 fsBuilder->codeAppendf("float innerAlpha = clamp(%s.z * (d - %s.
w), 0.0, 1.0);", | 120 fsBuilder->codeAppendf("float innerAlpha = clamp(%s.z * (d - %s.
w), 0.0, 1.0);", |
| 121 v.fsIn(), v.fsIn()); | 121 v.fsIn(), v.fsIn()); |
| 122 fsBuilder->codeAppend("edgeAlpha *= innerAlpha;"); | 122 fsBuilder->codeAppend("edgeAlpha *= innerAlpha;"); |
| 123 } | 123 } |
| 124 | 124 |
| 125 fsBuilder->codeAppendf("%s = vec4(edgeAlpha);", args.fOutputCoverage
); | 125 fsBuilder->codeAppendf("%s = vec4(edgeAlpha);", args.fOutputCoverage
); |
| 126 } | 126 } |
| (...skipping 159 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 286 &fColorUniform); | 286 &fColorUniform); |
| 287 | 287 |
| 288 // Setup position | 288 // Setup position |
| 289 this->setupPosition(pb, gpArgs, ee.inPosition()->fName, ee.viewMatri
x()); | 289 this->setupPosition(pb, gpArgs, ee.inPosition()->fName, ee.viewMatri
x()); |
| 290 | 290 |
| 291 // emit transforms | 291 // emit transforms |
| 292 this->emitTransforms(args.fPB, gpArgs->fPositionVar, ee.inPosition()
->fName, | 292 this->emitTransforms(args.fPB, gpArgs->fPositionVar, ee.inPosition()
->fName, |
| 293 ee.localMatrix(), args.fTransformsIn, args.fTra
nsformsOut); | 293 ee.localMatrix(), args.fTransformsIn, args.fTra
nsformsOut); |
| 294 | 294 |
| 295 // for outer curve | 295 // for outer curve |
| 296 GrGLGPFragmentBuilder* fsBuilder = args.fPB->getFragmentShaderBuilde
r(); | 296 GrGLFragmentBuilder* fsBuilder = args.fPB->getFragmentShaderBuilder(
); |
| 297 fsBuilder->codeAppendf("vec2 scaledOffset = %s*%s.xy;", ellipseOffse
ts.fsIn(), | 297 fsBuilder->codeAppendf("vec2 scaledOffset = %s*%s.xy;", ellipseOffse
ts.fsIn(), |
| 298 ellipseRadii.fsIn()); | 298 ellipseRadii.fsIn()); |
| 299 fsBuilder->codeAppend("float test = dot(scaledOffset, scaledOffset)
- 1.0;"); | 299 fsBuilder->codeAppend("float test = dot(scaledOffset, scaledOffset)
- 1.0;"); |
| 300 fsBuilder->codeAppendf("vec2 grad = 2.0*scaledOffset*%s.xy;", ellips
eRadii.fsIn()); | 300 fsBuilder->codeAppendf("vec2 grad = 2.0*scaledOffset*%s.xy;", ellips
eRadii.fsIn()); |
| 301 fsBuilder->codeAppend("float grad_dot = dot(grad, grad);"); | 301 fsBuilder->codeAppend("float grad_dot = dot(grad, grad);"); |
| 302 | 302 |
| 303 // avoid calling inversesqrt on zero. | 303 // avoid calling inversesqrt on zero. |
| 304 fsBuilder->codeAppend("grad_dot = max(grad_dot, 1.0e-4);"); | 304 fsBuilder->codeAppend("grad_dot = max(grad_dot, 1.0e-4);"); |
| 305 fsBuilder->codeAppend("float invlen = inversesqrt(grad_dot);"); | 305 fsBuilder->codeAppend("float invlen = inversesqrt(grad_dot);"); |
| 306 fsBuilder->codeAppend("float edgeAlpha = clamp(0.5-test*invlen, 0.0,
1.0);"); | 306 fsBuilder->codeAppend("float edgeAlpha = clamp(0.5-test*invlen, 0.0,
1.0);"); |
| (...skipping 179 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 486 this->setupColorPassThrough(pb, local.fInputColorType, args.fOutputC
olor, NULL, | 486 this->setupColorPassThrough(pb, local.fInputColorType, args.fOutputC
olor, NULL, |
| 487 &fColorUniform); | 487 &fColorUniform); |
| 488 | 488 |
| 489 // Setup position | 489 // Setup position |
| 490 this->setupPosition(pb, gpArgs, ee.inPosition()->fName, ee.viewMatri
x()); | 490 this->setupPosition(pb, gpArgs, ee.inPosition()->fName, ee.viewMatri
x()); |
| 491 | 491 |
| 492 // emit transforms | 492 // emit transforms |
| 493 this->emitTransforms(args.fPB, gpArgs->fPositionVar, ee.inPosition()
->fName, | 493 this->emitTransforms(args.fPB, gpArgs->fPositionVar, ee.inPosition()
->fName, |
| 494 ee.localMatrix(), args.fTransformsIn, args.fTra
nsformsOut); | 494 ee.localMatrix(), args.fTransformsIn, args.fTra
nsformsOut); |
| 495 | 495 |
| 496 GrGLGPFragmentBuilder* fsBuilder = args.fPB->getFragmentShaderBuilde
r(); | 496 GrGLFragmentBuilder* fsBuilder = args.fPB->getFragmentShaderBuilder(
); |
| 497 SkAssertResult(fsBuilder->enableFeature( | 497 SkAssertResult(fsBuilder->enableFeature( |
| 498 GrGLFragmentShaderBuilder::kStandardDerivatives_GLSLFeature)
); | 498 GrGLFragmentShaderBuilder::kStandardDerivatives_GLSLFeature)
); |
| 499 // for outer curve | 499 // for outer curve |
| 500 fsBuilder->codeAppendf("vec2 scaledOffset = %s.xy;", offsets0.fsIn()
); | 500 fsBuilder->codeAppendf("vec2 scaledOffset = %s.xy;", offsets0.fsIn()
); |
| 501 fsBuilder->codeAppend("float test = dot(scaledOffset, scaledOffset)
- 1.0;"); | 501 fsBuilder->codeAppend("float test = dot(scaledOffset, scaledOffset)
- 1.0;"); |
| 502 fsBuilder->codeAppendf("vec2 duvdx = dFdx(%s);", offsets0.fsIn()); | 502 fsBuilder->codeAppendf("vec2 duvdx = dFdx(%s);", offsets0.fsIn()); |
| 503 fsBuilder->codeAppendf("vec2 duvdy = dFdy(%s);", offsets0.fsIn()); | 503 fsBuilder->codeAppendf("vec2 duvdy = dFdy(%s);", offsets0.fsIn()); |
| 504 fsBuilder->codeAppendf("vec2 grad = vec2(2.0*%s.x*duvdx.x + 2.0*%s.y
*duvdx.y," | 504 fsBuilder->codeAppendf("vec2 grad = vec2(2.0*%s.x*duvdx.x + 2.0*%s.y
*duvdx.y," |
| 505 " 2.0*%s.x*duvdy.x + 2.0*%s.y
*duvdy.y);", | 505 " 2.0*%s.x*duvdy.x + 2.0*%s.y
*duvdy.y);", |
| 506 offsets0.fsIn(), offsets0.fsIn(), offsets0.fs
In(), offsets0.fsIn()); | 506 offsets0.fsIn(), offsets0.fsIn(), offsets0.fs
In(), offsets0.fsIn()); |
| (...skipping 1716 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2223 geometry.fInnerXRadius = innerXRadius; | 2223 geometry.fInnerXRadius = innerXRadius; |
| 2224 geometry.fInnerYRadius = innerYRadius; | 2224 geometry.fInnerYRadius = innerYRadius; |
| 2225 geometry.fStroke = isStrokeOnly; | 2225 geometry.fStroke = isStrokeOnly; |
| 2226 geometry.fDevBounds = bounds; | 2226 geometry.fDevBounds = bounds; |
| 2227 | 2227 |
| 2228 SkAutoTUnref<GrBatch> batch(RRectEllipseRendererBatch::Create(geometry,
indexBuffer)); | 2228 SkAutoTUnref<GrBatch> batch(RRectEllipseRendererBatch::Create(geometry,
indexBuffer)); |
| 2229 target->drawBatch(pipelineBuilder, batch, &bounds); | 2229 target->drawBatch(pipelineBuilder, batch, &bounds); |
| 2230 } | 2230 } |
| 2231 return true; | 2231 return true; |
| 2232 } | 2232 } |
| OLD | NEW |