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

Unified Diff: src/effects/gradients/SkGradientShaderPriv.h

Issue 22854005: GPU Gradients (Closed) Base URL: https://skia.googlecode.com/svn/trunk
Patch Set: Moved mode toggling back to base class, fixed EffectKey masking. Created 7 years, 4 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/effects/gradients/SkGradientShaderPriv.h
diff --git a/src/effects/gradients/SkGradientShaderPriv.h b/src/effects/gradients/SkGradientShaderPriv.h
index 31cc9f26171c6184b4535004ea1388d2de024bc4..875872f07b94eb214480df7f12d712e2f5172cb8 100644
--- a/src/effects/gradients/SkGradientShaderPriv.h
+++ b/src/effects/gradients/SkGradientShaderPriv.h
@@ -249,6 +249,8 @@ public:
SkScalar getYCoord() const { return fYCoord; };
const SkMatrix& getMatrix() const { return fMatrix;}
+ int numColors;
reed1 2013/08/13 12:33:41 nit: - does this guy really need to be public? - w
dierk 2013/08/13 19:50:17 Done.
+
virtual void getConstantColorComponents(GrColor* color, uint32_t* validFlags) const SK_OVERRIDE;
protected:
@@ -301,6 +303,21 @@ protected:
kMatrixKeyMask = (1 << kMatrixKeyBitCnt) - 1,
};
+ static inline bool is2Color(const GrGradientEffect& e){
bsalomon 2013/08/13 14:28:37 How about an enum named ColorType (or something li
dierk 2013/08/13 19:50:17 Done.
+ return e.numColors == 2;
+ }
+ static inline bool is3Color(const GrGradientEffect& e){
+ return e.numColors == 3;
+ }
+
+ static inline bool is2Color(const EffectKey key){
+ return (key & 0x4000) == 0x4000;
+ }
+ static inline bool is3Color(const EffectKey key){
+ return (key & 0x6000) == 0x6000;
+ }
+
+
/**
* Subclasses must call this. It will return a value restricted to the lower kMatrixKeyBitCnt
* bits.
@@ -323,22 +340,27 @@ protected:
// Emits the uniform used as the y-coord to texture samples in derived classes. Subclasses
// should call this method from their emitCode().
- void emitYCoordUniform(GrGLShaderBuilder* builder);
+ void emitUniforms(GrGLShaderBuilder* builder, EffectKey key);
+
- // emit code that gets a fragment's color from an expression for t; for now this always uses the
- // texture, but for simpler cases we'll be able to lerp. Subclasses should call this method from
+ // emit code that gets a fragment's color from an expression for t; Only used if 4 or more
bsalomon 2013/08/13 14:28:37 Do you mean the sampler array is only used for 4+?
dierk 2013/08/13 19:50:17 Done.
+ // colors, a simpler lerp is used for 2 and 3 colors. Subclasses should call this method from
// their emitCode().
- void emitColorLookup(GrGLShaderBuilder* builder,
- const char* gradientTValue,
- const char* outputColor,
- const char* inputColor,
- const GrGLShaderBuilder::TextureSampler&);
+ void emitColor(GrGLShaderBuilder* builder,
+ const char* gradientTValue,
+ EffectKey key,
+ const char* outputColor,
+ const char* inputColor,
+ const GrGLShaderBuilder::TextureSamplerArray& samplers);
private:
static const GrEffect::CoordsType kCoordsType = GrEffect::kLocal_CoordsType;
SkScalar fCachedYCoord;
GrGLUniformManager::UniformHandle fFSYUni;
+ GrGLUniformManager::UniformHandle fColorStartUni;
+ GrGLUniformManager::UniformHandle fColorMidUni;
+ GrGLUniformManager::UniformHandle fColorEndUni;
GrGLEffectMatrix fEffectMatrix;
typedef GrGLEffect INHERITED;

Powered by Google App Engine
This is Rietveld 408576698