Add program for linear gradient.
This change adds a new DrawLinearGradientProgram class to enable the drawing
of linear gradients. Two new vertex and fragment shaders are introduced,
based on DrawTextureProgram's shaders.
Change-Id: I885afc076bb6cef8cd3962ae21a086fa6a03bf96
diff --git a/libs/hwui/OpenGLRenderer.cpp b/libs/hwui/OpenGLRenderer.cpp
index 1431563..731862b 100644
--- a/libs/hwui/OpenGLRenderer.cpp
+++ b/libs/hwui/OpenGLRenderer.cpp
@@ -124,6 +124,7 @@
mDrawColorProgram = new DrawColorProgram;
mDrawTextureProgram = new DrawTextureProgram;
+ mDrawLinearGradientProgram = new DrawLinearGradientProgram;
mCurrentProgram = mDrawTextureProgram;
mShader = kShaderNone;
@@ -521,6 +522,7 @@
void OpenGLRenderer::resetShader() {
mShader = OpenGLRenderer::kShaderNone;
+ mShaderKey = NULL;
mShaderBlend = false;
mShaderTileX = SkShader::kClamp_TileMode;
mShaderTileY = SkShader::kClamp_TileMode;
@@ -536,9 +538,11 @@
mShaderMatrix = matrix;
}
-void OpenGLRenderer::setupLinearGradientShader(float* bounds, uint32_t* colors,
+void OpenGLRenderer::setupLinearGradientShader(SkShader* shader, float* bounds,uint32_t* colors,
float* positions, SkShader::TileMode tileMode, SkMatrix* matrix, bool hasAlpha) {
+ // TODO: We should use a struct to describe each shader
mShader = OpenGLRenderer::kShaderLinearGradient;
+ mShaderKey = shader;
mShaderBlend = hasAlpha;
mShaderTileX = tileMode;
mShaderTileY = tileMode;