Add support for reading the dst pixel value in an effect. Use in a new effect for the kDarken xfer mode.
The current implementation is to always make a copy of the entire dst before the draw.
It will only succeed if the RT is also a texture.
Obviously, there is lots of room for improvement.
Review URL: https://codereview.chromium.org/13314002
git-svn-id: http://skia.googlecode.com/svn/trunk@8449 2bbb7eff-a529-9590-31e7-b0007b416f81
diff --git a/src/gpu/gl/GrGLProgram.h b/src/gpu/gl/GrGLProgram.h
index f5fd06e..27b6f80 100644
--- a/src/gpu/gl/GrGLProgram.h
+++ b/src/gpu/gl/GrGLProgram.h
@@ -102,7 +102,11 @@
*
* The color and coverage params override the GrDrawState's getColor() and getCoverage() values.
*/
- void setData(GrGpuGL*, GrColor color, GrColor coverage, SharedGLState*);
+ void setData(GrGpuGL*,
+ GrColor color,
+ GrColor coverage,
+ const GrDeviceCoordTexture* dstCopy, // can be NULL
+ SharedGLState*);
private:
GrGLProgram(const GrGLContext& gl,
@@ -154,11 +158,18 @@
UniformHandle fColorUni;
UniformHandle fCoverageUni;
UniformHandle fColorFilterUni;
+
// We use the render target height to provide a y-down frag coord when specifying
// origin_upper_left is not supported.
UniformHandle fRTHeightUni;
+
+ // Uniforms for computing texture coords to do the dst-copy lookup
+ UniformHandle fDstCopyTopLeftUni;
+ UniformHandle fDstCopyScaleUni;
+ UniformHandle fDstCopySamplerUni;
+
// An array of sampler uniform handles for each effect.
- SamplerUniSArray fSamplerUnis[GrDrawState::kNumStages];
+ SamplerUniSArray fEffectSamplerUnis[GrDrawState::kNumStages];
UniformHandles() {
fViewMatrixUni = GrGLUniformManager::kInvalidUniformHandle;
@@ -166,6 +177,9 @@
fCoverageUni = GrGLUniformManager::kInvalidUniformHandle;
fColorFilterUni = GrGLUniformManager::kInvalidUniformHandle;
fRTHeightUni = GrGLUniformManager::kInvalidUniformHandle;
+ fDstCopyTopLeftUni = GrGLUniformManager::kInvalidUniformHandle;
+ fDstCopyScaleUni = GrGLUniformManager::kInvalidUniformHandle;
+ fDstCopySamplerUni = GrGLUniformManager::kInvalidUniformHandle;
}
};