| 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 "GrFontAtlasSizes.h" | 9 #include "GrFontAtlasSizes.h" |
| 10 #include "GrInvariantOutput.h" | 10 #include "GrInvariantOutput.h" |
| (...skipping 24 matching lines...) Expand all Loading... |
| 35 #ifdef SK_GAMMA_APPLY_TO_A8 | 35 #ifdef SK_GAMMA_APPLY_TO_A8 |
| 36 , fDistanceAdjust(-1.0f) | 36 , fDistanceAdjust(-1.0f) |
| 37 #endif | 37 #endif |
| 38 {} | 38 {} |
| 39 | 39 |
| 40 void onEmitCode(EmitArgs& args, GrGPArgs* gpArgs) override{ | 40 void onEmitCode(EmitArgs& args, GrGPArgs* gpArgs) override{ |
| 41 const GrDistanceFieldA8TextGeoProc& dfTexEffect = | 41 const GrDistanceFieldA8TextGeoProc& dfTexEffect = |
| 42 args.fGP.cast<GrDistanceFieldA8TextGeoProc>(); | 42 args.fGP.cast<GrDistanceFieldA8TextGeoProc>(); |
| 43 const DistanceFieldBatchTracker& local = args.fBT.cast<DistanceFieldBatc
hTracker>(); | 43 const DistanceFieldBatchTracker& local = args.fBT.cast<DistanceFieldBatc
hTracker>(); |
| 44 GrGLGPBuilder* pb = args.fPB; | 44 GrGLGPBuilder* pb = args.fPB; |
| 45 GrGLGPFragmentBuilder* fsBuilder = args.fPB->getFragmentShaderBuilder(); | 45 GrGLFragmentBuilder* fsBuilder = args.fPB->getFragmentShaderBuilder(); |
| 46 SkAssertResult(fsBuilder->enableFeature( | 46 SkAssertResult(fsBuilder->enableFeature( |
| 47 GrGLFragmentShaderBuilder::kStandardDerivatives_GLSLFeature)); | 47 GrGLFragmentShaderBuilder::kStandardDerivatives_GLSLFeature)); |
| 48 | 48 |
| 49 GrGLVertexBuilder* vsBuilder = args.fPB->getVertexShaderBuilder(); | 49 GrGLVertexBuilder* vsBuilder = args.fPB->getVertexShaderBuilder(); |
| 50 | 50 |
| 51 // emit attributes | 51 // emit attributes |
| 52 vsBuilder->emitAttributes(dfTexEffect); | 52 vsBuilder->emitAttributes(dfTexEffect); |
| 53 | 53 |
| 54 #ifdef SK_GAMMA_APPLY_TO_A8 | 54 #ifdef SK_GAMMA_APPLY_TO_A8 |
| 55 // adjust based on gamma | 55 // adjust based on gamma |
| (...skipping 249 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 305 public: | 305 public: |
| 306 GrGLDistanceFieldPathGeoProc(const GrGeometryProcessor&, | 306 GrGLDistanceFieldPathGeoProc(const GrGeometryProcessor&, |
| 307 const GrBatchTracker&) | 307 const GrBatchTracker&) |
| 308 : fColor(GrColor_ILLEGAL), fTextureSize(SkISize::Make(-1, -1)) {} | 308 : fColor(GrColor_ILLEGAL), fTextureSize(SkISize::Make(-1, -1)) {} |
| 309 | 309 |
| 310 void onEmitCode(EmitArgs& args, GrGPArgs* gpArgs) override{ | 310 void onEmitCode(EmitArgs& args, GrGPArgs* gpArgs) override{ |
| 311 const GrDistanceFieldPathGeoProc& dfTexEffect = args.fGP.cast<GrDistance
FieldPathGeoProc>(); | 311 const GrDistanceFieldPathGeoProc& dfTexEffect = args.fGP.cast<GrDistance
FieldPathGeoProc>(); |
| 312 | 312 |
| 313 const DistanceFieldPathBatchTracker& local = args.fBT.cast<DistanceField
PathBatchTracker>(); | 313 const DistanceFieldPathBatchTracker& local = args.fBT.cast<DistanceField
PathBatchTracker>(); |
| 314 GrGLGPBuilder* pb = args.fPB; | 314 GrGLGPBuilder* pb = args.fPB; |
| 315 GrGLGPFragmentBuilder* fsBuilder = args.fPB->getFragmentShaderBuilder(); | 315 GrGLFragmentBuilder* fsBuilder = args.fPB->getFragmentShaderBuilder(); |
| 316 SkAssertResult(fsBuilder->enableFeature( | 316 SkAssertResult(fsBuilder->enableFeature( |
| 317 GrGLFragmentShaderBuilder::kStandardDerivat
ives_GLSLFeature)); | 317 GrGLFragmentShaderBuilder::kStandardDerivat
ives_GLSLFeature)); |
| 318 | 318 |
| 319 GrGLVertexBuilder* vsBuilder = args.fPB->getVertexShaderBuilder(); | 319 GrGLVertexBuilder* vsBuilder = args.fPB->getVertexShaderBuilder(); |
| 320 | 320 |
| 321 // emit attributes | 321 // emit attributes |
| 322 vsBuilder->emitAttributes(dfTexEffect); | 322 vsBuilder->emitAttributes(dfTexEffect); |
| 323 | 323 |
| 324 GrGLVertToFrag v(kVec2f_GrSLType); | 324 GrGLVertToFrag v(kVec2f_GrSLType); |
| 325 args.fPB->addVarying("TextureCoords", &v, kHigh_GrSLPrecision); | 325 args.fPB->addVarying("TextureCoords", &v, kHigh_GrSLPrecision); |
| (...skipping 254 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 580 vsBuilder->codeAppendf("%s = %s;", st.vsOut(), dfTexEffect.inTextureCoor
ds()->fName); | 580 vsBuilder->codeAppendf("%s = %s;", st.vsOut(), dfTexEffect.inTextureCoor
ds()->fName); |
| 581 | 581 |
| 582 GrGLVertToFrag uv(kVec2f_GrSLType); | 582 GrGLVertToFrag uv(kVec2f_GrSLType); |
| 583 args.fPB->addVarying("TextureCoords", &uv, kHigh_GrSLPrecision); | 583 args.fPB->addVarying("TextureCoords", &uv, kHigh_GrSLPrecision); |
| 584 // this is only used with text, so our texture bounds always match the g
lyph atlas | 584 // this is only used with text, so our texture bounds always match the g
lyph atlas |
| 585 vsBuilder->codeAppendf("%s = vec2(" GR_FONT_ATLAS_A8_RECIP_WIDTH ", " | 585 vsBuilder->codeAppendf("%s = vec2(" GR_FONT_ATLAS_A8_RECIP_WIDTH ", " |
| 586 GR_FONT_ATLAS_RECIP_HEIGHT ")*%s;", uv.vsOut(), | 586 GR_FONT_ATLAS_RECIP_HEIGHT ")*%s;", uv.vsOut(), |
| 587 dfTexEffect.inTextureCoords()->fName); | 587 dfTexEffect.inTextureCoords()->fName); |
| 588 | 588 |
| 589 // add frag shader code | 589 // add frag shader code |
| 590 GrGLGPFragmentBuilder* fsBuilder = args.fPB->getFragmentShaderBuilder(); | 590 GrGLFragmentBuilder* fsBuilder = args.fPB->getFragmentShaderBuilder(); |
| 591 | 591 |
| 592 SkAssertResult(fsBuilder->enableFeature( | 592 SkAssertResult(fsBuilder->enableFeature( |
| 593 GrGLFragmentShaderBuilder::kStandardDerivatives_GLSLFeature)); | 593 GrGLFragmentShaderBuilder::kStandardDerivatives_GLSLFeature)); |
| 594 | 594 |
| 595 // create LCD offset adjusted by inverse of transform | 595 // create LCD offset adjusted by inverse of transform |
| 596 // Use highp to work around aliasing issues | 596 // Use highp to work around aliasing issues |
| 597 fsBuilder->codeAppend(GrGLShaderVar::PrecisionString(kHigh_GrSLPrecision
, | 597 fsBuilder->codeAppend(GrGLShaderVar::PrecisionString(kHigh_GrSLPrecision
, |
| 598 pb->ctxInfo().stand
ard())); | 598 pb->ctxInfo().stand
ard())); |
| 599 fsBuilder->codeAppendf("vec2 uv = %s;\n", uv.fsIn()); | 599 fsBuilder->codeAppendf("vec2 uv = %s;\n", uv.fsIn()); |
| 600 fsBuilder->codeAppend(GrGLShaderVar::PrecisionString(kHigh_GrSLPrecision
, | 600 fsBuilder->codeAppend(GrGLShaderVar::PrecisionString(kHigh_GrSLPrecision
, |
| (...skipping 215 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 816 DistanceAdjust wa = { 0.0f, 0.1f, -0.1f }; | 816 DistanceAdjust wa = { 0.0f, 0.1f, -0.1f }; |
| 817 uint32_t flags = kUseLCD_DistanceFieldEffectFlag; | 817 uint32_t flags = kUseLCD_DistanceFieldEffectFlag; |
| 818 flags |= random->nextBool() ? kUniformScale_DistanceFieldEffectMask : 0; | 818 flags |= random->nextBool() ? kUniformScale_DistanceFieldEffectMask : 0; |
| 819 flags |= random->nextBool() ? kBGR_DistanceFieldEffectFlag : 0; | 819 flags |= random->nextBool() ? kBGR_DistanceFieldEffectFlag : 0; |
| 820 return GrDistanceFieldLCDTextGeoProc::Create(GrRandomColor(random), | 820 return GrDistanceFieldLCDTextGeoProc::Create(GrRandomColor(random), |
| 821 GrTest::TestMatrix(random), | 821 GrTest::TestMatrix(random), |
| 822 textures[texIdx], params, | 822 textures[texIdx], params, |
| 823 wa, | 823 wa, |
| 824 flags); | 824 flags); |
| 825 } | 825 } |
| OLD | NEW |