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/Program.cpp b/libs/hwui/Program.cpp
index 609b28a..6202ba3 100644
--- a/libs/hwui/Program.cpp
+++ b/libs/hwui/Program.cpp
@@ -33,6 +33,9 @@
 #include "shaders/drawTexture.vert"
 #include "shaders/drawTexture.frag"
 
+#include "shaders/drawLinearGradient.vert"
+#include "shaders/drawLinearGradient.frag"
+
 ///////////////////////////////////////////////////////////////////////////////
 // Base program
 ///////////////////////////////////////////////////////////////////////////////
@@ -178,5 +181,26 @@
     glDisableVertexAttribArray(texCoords);
 }
 
+///////////////////////////////////////////////////////////////////////////////
+// Draw linear gradient
+///////////////////////////////////////////////////////////////////////////////
+
+DrawLinearGradientProgram::DrawLinearGradientProgram():
+        DrawColorProgram(gDrawLinearGradientVertexShader, gDrawLinearGradientFragmentShader) {
+    gradient = addUniform("gradient");
+    gradientLength = addUniform("gradientLength");
+    sampler = addUniform("sampler");
+}
+
+void DrawLinearGradientProgram::use() {
+    DrawColorProgram::use();
+    glActiveTexture(GL_TEXTURE0);
+    glUniform1i(sampler, 0);
+}
+
+void DrawLinearGradientProgram::remove() {
+    DrawColorProgram::remove();
+}
+
 }; // namespace uirenderer
 }; // namespace android