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 "GrDistanceFieldGeoProc.h" | 8 #include "GrDistanceFieldGeoProc.h" |
9 #include "GrInvariantOutput.h" | 9 #include "GrInvariantOutput.h" |
10 #include "GrTexture.h" | 10 #include "GrTexture.h" |
(...skipping 17 matching lines...) Expand all Loading... |
28 : fViewMatrix(SkMatrix::InvalidMatrix()) | 28 : fViewMatrix(SkMatrix::InvalidMatrix()) |
29 #ifdef SK_GAMMA_APPLY_TO_A8 | 29 #ifdef SK_GAMMA_APPLY_TO_A8 |
30 , fDistanceAdjust(-1.0f) | 30 , fDistanceAdjust(-1.0f) |
31 #endif | 31 #endif |
32 {} | 32 {} |
33 | 33 |
34 void onEmitCode(EmitArgs& args, GrGPArgs* gpArgs) override{ | 34 void onEmitCode(EmitArgs& args, GrGPArgs* gpArgs) override{ |
35 const GrDistanceFieldA8TextGeoProc& dfTexEffect = | 35 const GrDistanceFieldA8TextGeoProc& dfTexEffect = |
36 args.fGP.cast<GrDistanceFieldA8TextGeoProc>(); | 36 args.fGP.cast<GrDistanceFieldA8TextGeoProc>(); |
37 GrGLSLPPFragmentBuilder* fragBuilder = args.fFragBuilder; | 37 GrGLSLPPFragmentBuilder* fragBuilder = args.fFragBuilder; |
38 SkAssertResult(fragBuilder->enableFeature( | |
39 GrGLSLFragmentShaderBuilder::kStandardDerivatives_GLSLFeature)); | |
40 | 38 |
41 GrGLSLVertexBuilder* vertBuilder = args.fVertBuilder; | 39 GrGLSLVertexBuilder* vertBuilder = args.fVertBuilder; |
42 GrGLSLVaryingHandler* varyingHandler = args.fVaryingHandler; | 40 GrGLSLVaryingHandler* varyingHandler = args.fVaryingHandler; |
43 GrGLSLUniformHandler* uniformHandler = args.fUniformHandler; | 41 GrGLSLUniformHandler* uniformHandler = args.fUniformHandler; |
44 | 42 |
45 // emit attributes | 43 // emit attributes |
46 varyingHandler->emitAttributes(dfTexEffect); | 44 varyingHandler->emitAttributes(dfTexEffect); |
47 | 45 |
48 #ifdef SK_GAMMA_APPLY_TO_A8 | 46 #ifdef SK_GAMMA_APPLY_TO_A8 |
49 // adjust based on gamma | 47 // adjust based on gamma |
(...skipping 256 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
306 class GrGLDistanceFieldPathGeoProc : public GrGLSLGeometryProcessor { | 304 class GrGLDistanceFieldPathGeoProc : public GrGLSLGeometryProcessor { |
307 public: | 305 public: |
308 GrGLDistanceFieldPathGeoProc() | 306 GrGLDistanceFieldPathGeoProc() |
309 : fViewMatrix(SkMatrix::InvalidMatrix()) | 307 : fViewMatrix(SkMatrix::InvalidMatrix()) |
310 , fTextureSize(SkISize::Make(-1, -1)) {} | 308 , fTextureSize(SkISize::Make(-1, -1)) {} |
311 | 309 |
312 void onEmitCode(EmitArgs& args, GrGPArgs* gpArgs) override{ | 310 void onEmitCode(EmitArgs& args, GrGPArgs* gpArgs) override{ |
313 const GrDistanceFieldPathGeoProc& dfTexEffect = args.fGP.cast<GrDistance
FieldPathGeoProc>(); | 311 const GrDistanceFieldPathGeoProc& dfTexEffect = args.fGP.cast<GrDistance
FieldPathGeoProc>(); |
314 | 312 |
315 GrGLSLPPFragmentBuilder* fragBuilder = args.fFragBuilder; | 313 GrGLSLPPFragmentBuilder* fragBuilder = args.fFragBuilder; |
316 SkAssertResult(fragBuilder->enableFeature( | |
317 GrGLSLFragmentShaderBuilder::kStandardDeriv
atives_GLSLFeature)); | |
318 | 314 |
319 GrGLSLVertexBuilder* vertBuilder = args.fVertBuilder; | 315 GrGLSLVertexBuilder* vertBuilder = args.fVertBuilder; |
320 GrGLSLVaryingHandler* varyingHandler = args.fVaryingHandler; | 316 GrGLSLVaryingHandler* varyingHandler = args.fVaryingHandler; |
321 GrGLSLUniformHandler* uniformHandler = args.fUniformHandler; | 317 GrGLSLUniformHandler* uniformHandler = args.fUniformHandler; |
322 | 318 |
323 // emit attributes | 319 // emit attributes |
324 varyingHandler->emitAttributes(dfTexEffect); | 320 varyingHandler->emitAttributes(dfTexEffect); |
325 | 321 |
326 GrGLSLVertToFrag v(kVec2f_GrSLType); | 322 GrGLSLVertToFrag v(kVec2f_GrSLType); |
327 varyingHandler->addVarying("TextureCoords", &v, kHigh_GrSLPrecision); | 323 varyingHandler->addVarying("TextureCoords", &v, kHigh_GrSLPrecision); |
(...skipping 275 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
603 SkASSERT(atlas && SkIsPow2(atlas->width()) && SkIsPow2(atlas->height()))
; | 599 SkASSERT(atlas && SkIsPow2(atlas->width()) && SkIsPow2(atlas->height()))
; |
604 | 600 |
605 GrGLSLVertToFrag st(kVec2f_GrSLType); | 601 GrGLSLVertToFrag st(kVec2f_GrSLType); |
606 varyingHandler->addVarying("IntTextureCoords", &st, kHigh_GrSLPrecision)
; | 602 varyingHandler->addVarying("IntTextureCoords", &st, kHigh_GrSLPrecision)
; |
607 vertBuilder->codeAppendf("%s = vec2(%d, %d) * %s;", st.vsOut(), | 603 vertBuilder->codeAppendf("%s = vec2(%d, %d) * %s;", st.vsOut(), |
608 atlas->width(), atlas->height(), | 604 atlas->width(), atlas->height(), |
609 dfTexEffect.inTextureCoords()->fName); | 605 dfTexEffect.inTextureCoords()->fName); |
610 | 606 |
611 // add frag shader code | 607 // add frag shader code |
612 | 608 |
613 SkAssertResult(fragBuilder->enableFeature( | |
614 GrGLSLFragmentShaderBuilder::kStandardDerivatives_GLSLFeature)); | |
615 | |
616 // create LCD offset adjusted by inverse of transform | 609 // create LCD offset adjusted by inverse of transform |
617 // Use highp to work around aliasing issues | 610 // Use highp to work around aliasing issues |
618 fragBuilder->appendPrecisionModifier(kHigh_GrSLPrecision); | 611 fragBuilder->appendPrecisionModifier(kHigh_GrSLPrecision); |
619 fragBuilder->codeAppendf("vec2 uv = %s;\n", uv.fsIn()); | 612 fragBuilder->codeAppendf("vec2 uv = %s;\n", uv.fsIn()); |
620 fragBuilder->appendPrecisionModifier(kHigh_GrSLPrecision); | 613 fragBuilder->appendPrecisionModifier(kHigh_GrSLPrecision); |
621 | 614 |
622 SkScalar lcdDelta = 1.0f / (3.0f * atlas->width()); | 615 SkScalar lcdDelta = 1.0f / (3.0f * atlas->width()); |
623 if (dfTexEffect.getFlags() & kBGR_DistanceFieldEffectFlag) { | 616 if (dfTexEffect.getFlags() & kBGR_DistanceFieldEffectFlag) { |
624 fragBuilder->codeAppendf("float delta = -%.*f;\n", SK_FLT_DECIMAL_DI
G, lcdDelta); | 617 fragBuilder->codeAppendf("float delta = -%.*f;\n", SK_FLT_DECIMAL_DI
G, lcdDelta); |
625 } else { | 618 } else { |
(...skipping 215 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
841 flags |= d->fRandom->nextBool() ? kScaleOnly_DistanceFieldEffectFlag : 0
; | 834 flags |= d->fRandom->nextBool() ? kScaleOnly_DistanceFieldEffectFlag : 0
; |
842 } | 835 } |
843 flags |= d->fRandom->nextBool() ? kBGR_DistanceFieldEffectFlag : 0; | 836 flags |= d->fRandom->nextBool() ? kBGR_DistanceFieldEffectFlag : 0; |
844 return GrDistanceFieldLCDTextGeoProc::Make(GrRandomColor(d->fRandom), | 837 return GrDistanceFieldLCDTextGeoProc::Make(GrRandomColor(d->fRandom), |
845 GrTest::TestMatrix(d->fRandom), | 838 GrTest::TestMatrix(d->fRandom), |
846 d->fTextures[texIdx], params, | 839 d->fTextures[texIdx], params, |
847 wa, | 840 wa, |
848 flags, | 841 flags, |
849 d->fRandom->nextBool()); | 842 d->fRandom->nextBool()); |
850 } | 843 } |
OLD | NEW |