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

Unified Diff: src/gpu/GrOvalRenderer.cpp

Issue 822423004: Move most of the transform logic into the primitive processors (Closed) Base URL: https://skia.googlesource.com/skia.git@master
Patch Set: tiny update Created 5 years, 11 months 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
Index: src/gpu/GrOvalRenderer.cpp
diff --git a/src/gpu/GrOvalRenderer.cpp b/src/gpu/GrOvalRenderer.cpp
index b43c48561fcfc4b10bd83444dbeb4f2d8933981b..68a1f6c1bfade167aab18a3383cdc34a4ab2eb9a 100644
--- a/src/gpu/GrOvalRenderer.cpp
+++ b/src/gpu/GrOvalRenderer.cpp
@@ -83,12 +83,15 @@ public:
const GrBatchTracker&)
: fColor(GrColor_ILLEGAL) {}
- virtual void emitCode(const EmitArgs& args) SK_OVERRIDE {
+ virtual void emitCode(EmitArgs& args) SK_OVERRIDE {
const CircleEdgeEffect& ce = args.fGP.cast<CircleEdgeEffect>();
GrGLGPBuilder* pb = args.fPB;
const BatchTracker& local = args.fBT.cast<BatchTracker>();
GrGLVertexBuilder* vsBuilder = args.fPB->getVertexShaderBuilder();
+ // emit attributes
+ vsBuilder->emitAttributes(ce);
+
GrGLVertToFrag v(kVec4f_GrSLType);
args.fPB->addVarying("CircleEdge", &v);
vsBuilder->codeAppendf("%s = %s;", v.vsOut(), ce.inCircleEdge()->fName);
@@ -97,16 +100,20 @@ public:
this->setupColorPassThrough(pb, local.fInputColorType, args.fOutputColor, NULL,
&fColorUniform);
- // setup coord outputs
- vsBuilder->codeAppendf("%s = %s;", vsBuilder->positionCoords(), ce.inPosition()->fName);
- vsBuilder->codeAppendf("%s = %s;", vsBuilder->localCoords(), ce.inPosition()->fName);
-
// setup uniform viewMatrix
this->addUniformViewMatrix(pb);
- // setup position varying
- vsBuilder->codeAppendf("%s = %s * vec3(%s, 1);", vsBuilder->glPosition(),
- this->uViewM(), ce.inPosition()->fName);
+ // Setup position
+ const char* pos3 = "pos3";
bsalomon 2015/01/13 14:51:14 why do this and not just hardcode pos3 in the belo
+ vsBuilder->codeAppendf("vec3 %s;", pos3);
+ vsBuilder->codeAppendf("%s = %s * vec3(%s, 1);", pos3, this->uViewM(),
+ ce.inPosition()->fName);
+
+ // emit transforms
+ this->emitTransforms(args.fPB, pos3, ce.inPosition()->fName, ce.localMatrix(),
+ args.fTransformsIn, args.fTransformsOut);
+
+ vsBuilder->transformToNormalizedDeviceSpace(pos3);
GrGLGPFragmentBuilder* fsBuilder = args.fPB->getFragmentShaderBuilder();
fsBuilder->codeAppendf("float d = length(%s.xy);", v.fsIn());
@@ -157,7 +164,8 @@ public:
GLProcessor::GenKey(*this, bt, caps, b);
}
- virtual GrGLGeometryProcessor* createGLInstance(const GrBatchTracker& bt) const SK_OVERRIDE {
+ virtual GrGLPrimitiveProcessor* createGLInstance(const GrBatchTracker& bt,
+ const GrGLCaps&) const SK_OVERRIDE {
return SkNEW_ARGS(GLProcessor, (*this, bt));
}
@@ -255,12 +263,15 @@ public:
const GrBatchTracker&)
: fColor(GrColor_ILLEGAL) {}
- virtual void emitCode(const EmitArgs& args) SK_OVERRIDE {
+ virtual void emitCode(EmitArgs& args) SK_OVERRIDE {
const EllipseEdgeEffect& ee = args.fGP.cast<EllipseEdgeEffect>();
GrGLGPBuilder* pb = args.fPB;
const BatchTracker& local = args.fBT.cast<BatchTracker>();
GrGLVertexBuilder* vsBuilder = args.fPB->getVertexShaderBuilder();
+ // emit attributes
+ vsBuilder->emitAttributes(ee);
+
GrGLVertToFrag ellipseOffsets(kVec2f_GrSLType);
args.fPB->addVarying("EllipseOffsets", &ellipseOffsets);
vsBuilder->codeAppendf("%s = %s;", ellipseOffsets.vsOut(),
@@ -275,16 +286,20 @@ public:
this->setupColorPassThrough(pb, local.fInputColorType, args.fOutputColor, NULL,
&fColorUniform);
- // setup coord outputs
- vsBuilder->codeAppendf("%s = %s;", vsBuilder->positionCoords(), ee.inPosition()->fName);
- vsBuilder->codeAppendf("%s = %s;", vsBuilder->localCoords(), ee.inPosition()->fName);
-
// setup uniform viewMatrix
this->addUniformViewMatrix(pb);
- // setup position varying
- vsBuilder->codeAppendf("%s = %s * vec3(%s, 1);", vsBuilder->glPosition(),
- this->uViewM(), ee.inPosition()->fName);
+ // Setup position
+ const char* pos3 = "pos3";
+ vsBuilder->codeAppendf("vec3 %s;", pos3);
+ vsBuilder->codeAppendf("%s = %s * vec3(%s, 1);", pos3, this->uViewM(),
+ ee.inPosition()->fName);
+
+ // emit transforms
+ this->emitTransforms(args.fPB, pos3, ee.inPosition()->fName, ee.localMatrix(),
+ args.fTransformsIn, args.fTransformsOut);
+
+ vsBuilder->transformToNormalizedDeviceSpace(pos3);
// for outer curve
GrGLGPFragmentBuilder* fsBuilder = args.fPB->getFragmentShaderBuilder();
@@ -351,7 +366,8 @@ public:
GLProcessor::GenKey(*this, bt, caps, b);
}
- virtual GrGLGeometryProcessor* createGLInstance(const GrBatchTracker& bt) const SK_OVERRIDE {
+ virtual GrGLPrimitiveProcessor* createGLInstance(const GrBatchTracker& bt,
+ const GrGLCaps&) const SK_OVERRIDE {
return SkNEW_ARGS(GLProcessor, (*this, bt));
}
@@ -455,12 +471,15 @@ public:
const GrBatchTracker&)
: fColor(GrColor_ILLEGAL) {}
- virtual void emitCode(const EmitArgs& args) SK_OVERRIDE {
+ virtual void emitCode(EmitArgs& args) SK_OVERRIDE {
const DIEllipseEdgeEffect& ee = args.fGP.cast<DIEllipseEdgeEffect>();
GrGLGPBuilder* pb = args.fPB;
const BatchTracker& local = args.fBT.cast<BatchTracker>();
GrGLVertexBuilder* vsBuilder = args.fPB->getVertexShaderBuilder();
+ // emit attributes
+ vsBuilder->emitAttributes(ee);
+
GrGLVertToFrag offsets0(kVec2f_GrSLType);
args.fPB->addVarying("EllipseOffsets0", &offsets0);
vsBuilder->codeAppendf("%s = %s;", offsets0.vsOut(),
@@ -475,16 +494,20 @@ public:
this->setupColorPassThrough(pb, local.fInputColorType, args.fOutputColor, NULL,
&fColorUniform);
- // setup coord outputs
- vsBuilder->codeAppendf("%s = %s;", vsBuilder->positionCoords(), ee.inPosition()->fName);
- vsBuilder->codeAppendf("%s = %s;", vsBuilder->localCoords(), ee.inPosition()->fName);
-
// setup uniform viewMatrix
this->addUniformViewMatrix(pb);
- // setup position varying
- vsBuilder->codeAppendf("%s = %s * vec3(%s, 1);", vsBuilder->glPosition(),
- this->uViewM(), ee.inPosition()->fName);
+ // Setup position
+ const char* pos3 = "pos3";
+ vsBuilder->codeAppendf("vec3 %s;", pos3);
+ vsBuilder->codeAppendf("%s = %s * vec3(%s, 1);", pos3, this->uViewM(),
+ ee.inPosition()->fName);
+
+ // emit transforms
+ this->emitTransforms(args.fPB, pos3, ee.inPosition()->fName, ee.localMatrix(),
+ args.fTransformsIn, args.fTransformsOut);
+
+ vsBuilder->transformToNormalizedDeviceSpace(pos3);
GrGLGPFragmentBuilder* fsBuilder = args.fPB->getFragmentShaderBuilder();
SkAssertResult(fsBuilder->enableFeature(
@@ -566,7 +589,8 @@ public:
GLProcessor::GenKey(*this, bt, caps, b);
}
- virtual GrGLGeometryProcessor* createGLInstance(const GrBatchTracker& bt) const SK_OVERRIDE {
+ virtual GrGLPrimitiveProcessor* createGLInstance(const GrBatchTracker& bt,
+ const GrGLCaps&) const SK_OVERRIDE {
return SkNEW_ARGS(GLProcessor, (*this, bt));
}

Powered by Google App Engine
This is Rietveld 408576698