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

Unified Diff: src/gpu/gl/GrGLGeometryProcessor.h

Issue 854013002: Refactor position computation to enable device space "nudge" (Closed) Base URL: https://skia.googlesource.com/skia.git@master
Patch Set: Update to ToT 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/gl/GrGLGeometryProcessor.h
diff --git a/src/gpu/gl/GrGLGeometryProcessor.h b/src/gpu/gl/GrGLGeometryProcessor.h
index 3c95830fb290878505408c26045e42c4983170be..88b69a6d8fb0252a090a34143e1eb8b0b4dd72ed 100644
--- a/src/gpu/gl/GrGLGeometryProcessor.h
+++ b/src/gpu/gl/GrGLGeometryProcessor.h
@@ -127,6 +127,7 @@ private:
};
class GrGLPathRendering;
+class GrGLVertexBuilder;
/**
* If a GL effect needs a GrGLFullShaderBuilder* object to emit vertex code, then it must inherit
* from this class. Since paths don't have vertices, this class is only meant to be used internally
@@ -143,26 +144,47 @@ public:
const SkTArray<const GrCoordTransform*, true>& transforms);
protected:
- const char* position() const { return "pos3"; }
-
// Many GrGeometryProcessors do not need explicit local coords
void emitTransforms(GrGLGPBuilder* gp,
- const char* position,
+ const GrShaderVar& posVar,
const SkMatrix& localMatrix,
const TransformsIn& tin,
TransformsOut* tout) {
- this->emitTransforms(gp, position, position, localMatrix, tin, tout);
+ this->emitTransforms(gp, posVar, posVar.c_str(), localMatrix, tin, tout);
}
void emitTransforms(GrGLGPBuilder*,
- const char* position,
+ const GrShaderVar& posVar,
const char* localCoords,
const SkMatrix& localMatrix,
const TransformsIn&,
TransformsOut*);
+ struct GrGPArgs {
+ // The variable used by a GP to store its position. It can be
+ // either a vec2 or a vec3 depending on the presence of perspective.
+ GrShaderVar fPositionVar;
+ };
+
+ // Create the correct type of position variable given the CTM
+ static void SetupPosition(GrGLVertexBuilder* vsBuilder,
+ GrGPArgs* gpArgs,
+ const char* posName,
+ const SkMatrix& mat,
+ const char* matName);
+
+ static uint32_t ComputePosKey(const SkMatrix& mat) {
+ if (mat.isIdentity()) {
+ return 0x0;
+ } else if (!mat.hasPerspective()) {
+ return 0x01;
+ } else {
+ return 0x02;
+ }
+ }
+
private:
- virtual void onEmitCode(EmitArgs&) = 0;
+ virtual void onEmitCode(EmitArgs&, GrGPArgs*) = 0;
typedef GrGLPrimitiveProcessor INHERITED;
};

Powered by Google App Engine
This is Rietveld 408576698