Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(426)

Unified Diff: src/gpu/effects/GrDashingEffect.cpp

Issue 715903002: Push creation of default GP to the caller (Closed) Base URL: https://skia.googlesource.com/skia.git@master
Patch Set: added comment Created 6 years, 1 month ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « src/gpu/GrOptDrawState.cpp ('k') | tests/GLProgramsTest.cpp » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: src/gpu/effects/GrDashingEffect.cpp
diff --git a/src/gpu/effects/GrDashingEffect.cpp b/src/gpu/effects/GrDashingEffect.cpp
index bee7b87a41c27383bc5df156a7503d8b7693a287..af96ef63185acb9ee23426458f3bc8ee6f13abfb 100644
--- a/src/gpu/effects/GrDashingEffect.cpp
+++ b/src/gpu/effects/GrDashingEffect.cpp
@@ -10,20 +10,20 @@
#include "../GrAARectRenderer.h"
#include "GrGeometryProcessor.h"
-#include "gl/builders/GrGLProgramBuilder.h"
-#include "gl/GrGLProcessor.h"
-#include "gl/GrGLGeometryProcessor.h"
-#include "gl/GrGLSL.h"
#include "GrContext.h"
#include "GrCoordTransform.h"
+#include "GrDefaultGeoProcFactory.h"
#include "GrDrawTarget.h"
#include "GrDrawTargetCaps.h"
#include "GrInvariantOutput.h"
#include "GrProcessor.h"
-#include "GrGpu.h"
#include "GrStrokeInfo.h"
#include "GrTBackendProcessorFactory.h"
#include "SkGr.h"
+#include "gl/GrGLGeometryProcessor.h"
+#include "gl/GrGLProcessor.h"
+#include "gl/GrGLSL.h"
+#include "gl/builders/GrGLProgramBuilder.h"
///////////////////////////////////////////////////////////////////////////////
@@ -70,10 +70,6 @@ struct DashLineVertex {
SkPoint fDashPos;
};
-extern const GrVertexAttrib gDashLineNoAAVertexAttribs[] = {
- { kVec2f_GrVertexAttribType, 0, kPosition_GrVertexAttribBinding }
-};
-
extern const GrVertexAttrib gDashLineVertexAttribs[] = {
{ kVec2f_GrVertexAttribType, 0, kPosition_GrVertexAttribBinding },
{ kVec2f_GrVertexAttribType, sizeof(SkPoint), kGeometryProcessor_GrVertexAttribBinding },
@@ -150,7 +146,6 @@ static SkScalar calc_end_adjustment(const SkPathEffect::DashInfo& info, const Sk
static void setup_dashed_rect(const SkRect& rect, DashLineVertex* verts, int idx, const SkMatrix& matrix,
SkScalar offset, SkScalar bloat, SkScalar len, SkScalar stroke) {
-
SkScalar startDashX = offset - bloat;
SkScalar endDashX = offset + len + bloat;
SkScalar startDashY = -stroke - bloat;
@@ -159,15 +154,21 @@ static void setup_dashed_rect(const SkRect& rect, DashLineVertex* verts, int idx
verts[idx + 1].fDashPos = SkPoint::Make(startDashX, endDashY);
verts[idx + 2].fDashPos = SkPoint::Make(endDashX, endDashY);
verts[idx + 3].fDashPos = SkPoint::Make(endDashX, startDashY);
-
verts[idx].fPos = SkPoint::Make(rect.fLeft, rect.fTop);
verts[idx + 1].fPos = SkPoint::Make(rect.fLeft, rect.fBottom);
verts[idx + 2].fPos = SkPoint::Make(rect.fRight, rect.fBottom);
verts[idx + 3].fPos = SkPoint::Make(rect.fRight, rect.fTop);
-
matrix.mapPointsWithStride(&verts[idx].fPos, sizeof(DashLineVertex), 4);
}
+static void setup_dashed_rect_pos(const SkRect& rect, int idx, const SkMatrix& matrix,
+ SkPoint* verts) {
+ verts[idx] = SkPoint::Make(rect.fLeft, rect.fTop);
+ verts[idx + 1] = SkPoint::Make(rect.fLeft, rect.fBottom);
+ verts[idx + 2] = SkPoint::Make(rect.fRight, rect.fBottom);
+ verts[idx + 3] = SkPoint::Make(rect.fRight, rect.fTop);
+ matrix.mapPoints(&verts[idx], 4);
+}
bool GrDashingEffect::DrawDashLine(const SkPoint pts[2], const GrPaint& paint,
const GrStrokeInfo& strokeInfo, GrGpu* gpu,
@@ -340,7 +341,8 @@ bool GrDashingEffect::DrawDashLine(const SkPoint pts[2], const GrPaint& paint,
}
devIntervals[0] = lineLength;
}
- if (devIntervals[1] > 0.f || useAA) {
+ bool fullDash = devIntervals[1] > 0.f || useAA;
+ if (fullDash) {
SkPathEffect::DashInfo devInfo;
devInfo.fPhase = devPhase;
devInfo.fCount = 2;
@@ -358,8 +360,10 @@ bool GrDashingEffect::DrawDashLine(const SkPoint pts[2], const GrPaint& paint,
sizeof(DashLineVertex));
} else {
// Set up the vertex data for the line and start/end dashes
- drawState->setVertexAttribs<gDashLineNoAAVertexAttribs>(
- SK_ARRAY_COUNT(gDashLineNoAAVertexAttribs), sizeof(DashLineVertex));
+ drawState->setGeometryProcessor(
+ GrDefaultGeoProcFactory::CreateAndSetAttribs(
+ drawState,
+ GrDefaultGeoProcFactory::kPosition_GPType))->unref();
}
int totalRectCnt = 0;
@@ -374,8 +378,6 @@ bool GrDashingEffect::DrawDashLine(const SkPoint pts[2], const GrPaint& paint,
return false;
}
- DashLineVertex* verts = reinterpret_cast<DashLineVertex*>(geo.vertices());
-
int curVIdx = 0;
if (SkPaint::kRound_Cap == cap && 0 != srcStrokeWidth) {
@@ -395,24 +397,44 @@ bool GrDashingEffect::DrawDashLine(const SkPoint pts[2], const GrPaint& paint,
SkRect bounds;
bounds.set(ptsRot[0].fX, ptsRot[0].fY, ptsRot[1].fX, ptsRot[1].fY);
bounds.outset(bloatX + strokeAdj, bloatY + halfSrcStroke);
- setup_dashed_rect(bounds, verts, curVIdx, combinedMatrix, startOffset, devBloat,
- lineLength, halfDevStroke);
+ if (fullDash) {
+ DashLineVertex* verts = reinterpret_cast<DashLineVertex*>(geo.vertices());
+ setup_dashed_rect(bounds, verts, curVIdx, combinedMatrix, startOffset, devBloat,
+ lineLength, halfDevStroke);
+ } else {
+ SkPoint* verts = reinterpret_cast<SkPoint*>(geo.vertices());
+ setup_dashed_rect_pos(bounds, curVIdx, combinedMatrix, verts);
+ }
curVIdx += 4;
}
if (hasStartRect) {
SkASSERT(useAA); // so that we know bloatX and bloatY have been set
startRect.outset(bloatX, bloatY);
- setup_dashed_rect(startRect, verts, curVIdx, combinedMatrix, startOffset, devBloat,
- devIntervals[0], halfDevStroke);
+ if (fullDash) {
+ DashLineVertex* verts = reinterpret_cast<DashLineVertex*>(geo.vertices());
+ setup_dashed_rect(startRect, verts, curVIdx, combinedMatrix, startOffset, devBloat,
+ devIntervals[0], halfDevStroke);
+ } else {
+ SkPoint* verts = reinterpret_cast<SkPoint*>(geo.vertices());
+ setup_dashed_rect_pos(startRect, curVIdx, combinedMatrix, verts);
+ }
+
curVIdx += 4;
}
if (hasEndRect) {
SkASSERT(useAA); // so that we know bloatX and bloatY have been set
endRect.outset(bloatX, bloatY);
- setup_dashed_rect(endRect, verts, curVIdx, combinedMatrix, startOffset, devBloat,
- devIntervals[0], halfDevStroke);
+ if (fullDash) {
+ DashLineVertex* verts = reinterpret_cast<DashLineVertex*>(geo.vertices());
+ setup_dashed_rect(endRect, verts, curVIdx, combinedMatrix, startOffset, devBloat,
+ devIntervals[0], halfDevStroke);
+ } else {
+ SkPoint* verts = reinterpret_cast<SkPoint*>(geo.vertices());
+ setup_dashed_rect_pos(endRect, curVIdx, combinedMatrix, verts);
+ }
+
}
target->setIndexSourceToBuffer(gpu->getContext()->getQuadIndexBuffer());
« no previous file with comments | « src/gpu/GrOptDrawState.cpp ('k') | tests/GLProgramsTest.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698