1 /* 2 * Copyright 2017 Google Inc. 3 * 4 * Use of this source code is governed by a BSD-style license that can be 5 * found in the LICENSE file. 6 */ 7 8 #ifndef GrCCTriangleShader_DEFINED 9 #define GrCCTriangleShader_DEFINED 10 11 #include "ccpr/GrCCCoverageProcessor.h" 12 13 /** 14 * Steps 1 & 2: Draw the triangle's conservative raster hull with a coverage of +1, then smooth the 15 * edges by drawing the conservative rasters of all 3 edges and interpolating from 16 * coverage=-1 on the outside to coverage=0 on the inside. The Impl may choose to 17 * implement these steps in either one or two actual render passes. 18 */ 19 class GrCCTriangleShader : public GrCCCoverageProcessor::Shader { 20 void onEmitVaryings(GrGLSLVaryingHandler*, GrGLSLVarying::Scope, SkString* code, 21 const char* position, const char* inputCoverage, const char* wind) override; 22 void onEmitFragmentCode(GrGLSLFPFragmentBuilder*, const char* outputCoverage) const override; 23 24 GrGLSLVarying fCoverageTimesWind; 25 }; 26 27 /** 28 * Step 3: Touch up the corner pixels. Here we fix the simple distance-to-edge coverage analysis 29 * done previously so that it takes into account the region that is outside both edges at 30 * the same time. 31 */ 32 class GrCCTriangleCornerShader : public GrCCCoverageProcessor::Shader { 33 void emitSetupCode(GrGLSLVertexGeoBuilder*, const char* pts, const char* repetitionID, 34 const char* wind, GeometryVars*) const override; 35 void onEmitVaryings(GrGLSLVaryingHandler*, GrGLSLVarying::Scope, SkString* code, 36 const char* position, const char* inputCoverage, const char* wind) override; 37 void onEmitFragmentCode(GrGLSLFPFragmentBuilder* f, const char* outputCoverage) const override; 38 39 GrShaderVar fAABoxMatrices{"aa_box_matrices", kFloat2x2_GrSLType, 2}; 40 GrShaderVar fAABoxTranslates{"aa_box_translates", kFloat2_GrSLType, 2}; 41 GrShaderVar fGeoShaderBisects{"bisects", kFloat2_GrSLType, 2}; 42 GrGLSLVarying fCornerLocationInAABoxes; 43 GrGLSLVarying fBisectInAABoxes; 44 GrGLSLVarying fWindTimesHalf; 45 }; 46 47 #endif 48