diff options
Diffstat (limited to 'src/gpu/ccpr/GrCCCoverageProcessor_GSImpl.cpp')
-rw-r--r-- | src/gpu/ccpr/GrCCCoverageProcessor_GSImpl.cpp | 24 |
1 files changed, 7 insertions, 17 deletions
diff --git a/src/gpu/ccpr/GrCCCoverageProcessor_GSImpl.cpp b/src/gpu/ccpr/GrCCCoverageProcessor_GSImpl.cpp index b1d886cf8c..61bb4ec7cf 100644 --- a/src/gpu/ccpr/GrCCCoverageProcessor_GSImpl.cpp +++ b/src/gpu/ccpr/GrCCCoverageProcessor_GSImpl.cpp @@ -59,18 +59,11 @@ protected: GrShaderVar wind("wind", kHalf_GrSLType); g->declareGlobal(wind); - if (PrimitiveType::kWeightedTriangles != proc.fPrimitiveType) { - g->codeAppend ("float area_x2 = determinant(float2x2(pts[0] - pts[1], " - "pts[0] - pts[2]));"); - if (4 == numInputPoints) { - g->codeAppend ("area_x2 += determinant(float2x2(pts[0] - pts[2], " - "pts[0] - pts[3]));"); - } - g->codeAppendf("%s = sign(area_x2);", wind.c_str()); - } else { + Shader::CalcWind(proc, g, "pts", wind.c_str()); + if (PrimitiveType::kWeightedTriangles == proc.fPrimitiveType) { SkASSERT(3 == numInputPoints); SkASSERT(kFloat4_GrVertexAttribType == proc.getAttrib(0).fType); - g->codeAppendf("%s = sk_in[0].sk_Position.w;", wind.c_str()); + g->codeAppendf("%s *= sk_in[0].sk_Position.w;", wind.c_str()); } SkString emitVertexFn; @@ -306,10 +299,8 @@ public: const GrShaderVar& wind, const char* emitVertexFn) const override { fShader->emitSetupCode(g, "pts", wind.c_str()); - bool isTriangle = PrimitiveType::kTriangles == proc.fPrimitiveType || - PrimitiveType::kWeightedTriangles == proc.fPrimitiveType; g->codeAppendf("int corneridx = sk_InvocationID;"); - if (!isTriangle) { + if (!proc.isTriangles()) { g->codeAppendf("corneridx *= %i;", proc.numInputPoints() - 1); } @@ -336,7 +327,7 @@ public: Shader::CalcCornerAttenuation(g, "leftdir", "rightdir", "attenuation"); g->codeAppend ("}"); - if (isTriangle) { + if (proc.isTriangles()) { g->codeAppend ("half2 left_coverages; {"); Shader::CalcEdgeCoveragesAtBloatVertices(g, "left", "corner", "-outbloat", "-crossbloat", "left_coverages"); @@ -384,7 +375,7 @@ public: g->codeAppendf("%s(corner + crossbloat * bloat, -1, half2(1));", emitVertexFn); } - g->configure(InputType::kLines, OutputType::kTriangleStrip, 4, isTriangle ? 3 : 2); + g->configure(InputType::kLines, OutputType::kTriangleStrip, 4, proc.isTriangles() ? 3 : 2); } }; @@ -416,8 +407,7 @@ void GrCCCoverageProcessor::appendGSMesh(GrBuffer* instanceBuffer, int instanceC GrGLSLPrimitiveProcessor* GrCCCoverageProcessor::createGSImpl(std::unique_ptr<Shader> shadr) const { if (GSSubpass::kHulls == fGSSubpass) { - return (PrimitiveType::kTriangles == fPrimitiveType || - PrimitiveType::kWeightedTriangles == fPrimitiveType) + return this->isTriangles() ? (GSImpl*) new GSTriangleHullImpl(std::move(shadr)) : (GSImpl*) new GSCurveHullImpl(std::move(shadr)); } |