Moved all the rendering code to the new shader generator.

The generator supports features that are not yet implement in the
renderer: color matrix, lighting, porterduff color blending and
composite shaders.

This change also adds support for repeated/mirrored non-power of 2
bitmap shaders.

Change-Id: I903a11a070c0eb9cc8850a60ef305751e5b47234
diff --git a/libs/hwui/Program.cpp b/libs/hwui/Program.cpp
index 86fc154..dbae38e 100644
--- a/libs/hwui/Program.cpp
+++ b/libs/hwui/Program.cpp
@@ -27,16 +27,6 @@
 
 #define SHADER_SOURCE(name, source) const char* name = #source
 
-#include "shaders/drawColor.frag"
-
-#include "shaders/drawTexture.vert"
-#include "shaders/drawTexture.frag"
-
-#include "shaders/drawText.frag"
-
-#include "shaders/drawLinearGradient.vert"
-#include "shaders/drawLinearGradient.frag"
-
 ///////////////////////////////////////////////////////////////////////////////
 // Base program
 ///////////////////////////////////////////////////////////////////////////////
@@ -65,6 +55,10 @@
     }
 
     mUse = false;
+
+    position = addAttrib("position");
+    color = addUniform("color");
+    transform = addUniform("transform");
 }
 
 Program::~Program() {
@@ -73,15 +67,6 @@
     glDeleteProgram(id);
 }
 
-void Program::use() {
-    glUseProgram(id);
-    mUse = true;
-}
-
-void Program::remove() {
-    mUse = false;
-}
-
 int Program::addAttrib(const char* name) {
     int slot = glGetAttribLocation(id, name);
     attributes.add(name, slot);
@@ -89,7 +74,11 @@
 }
 
 int Program::getAttrib(const char* name) {
-    return attributes.valueFor(name);
+    ssize_t index = attributes.indexOfKey(name);
+    if (index >= 0) {
+        return attributes.valueAt(index);
+    }
+    return addAttrib(name);
 }
 
 int Program::addUniform(const char* name) {
@@ -99,7 +88,11 @@
 }
 
 int Program::getUniform(const char* name) {
-    return uniforms.valueFor(name);
+    ssize_t index = uniforms.indexOfKey(name);
+    if (index >= 0) {
+        return uniforms.valueAt(index);
+    }
+    return addUniform(name);
 }
 
 GLuint Program::buildShader(const char* source, GLenum type) {
@@ -121,28 +114,7 @@
     return shader;
 }
 
-///////////////////////////////////////////////////////////////////////////////
-// Draw color
-///////////////////////////////////////////////////////////////////////////////
-
-DrawColorProgram::DrawColorProgram():
-        Program(gDrawTextureVertexShader, gDrawColorFragmentShader) {
-    getAttribsAndUniforms();
-}
-
-DrawColorProgram::DrawColorProgram(const char* vertex, const char* fragment):
-        Program(vertex, fragment) {
-    getAttribsAndUniforms();
-}
-
-void DrawColorProgram::getAttribsAndUniforms() {
-    position = addAttrib("position");
-    texCoords = addAttrib("texCoords");
-    color = addUniform("color");
-    transform = addUniform("transform");
-}
-
-void DrawColorProgram::set(const mat4& projectionMatrix, const mat4& modelViewMatrix,
+void Program::set(const mat4& projectionMatrix, const mat4& modelViewMatrix,
         const mat4& transformMatrix) {
     mat4 t(projectionMatrix);
     t.multiply(transformMatrix);
@@ -151,70 +123,17 @@
     glUniformMatrix4fv(transform, 1, GL_FALSE, &t.data[0]);
 }
 
-void DrawColorProgram::use() {
-    Program::use();
+void Program::use() {
+    glUseProgram(id);
+    mUse = true;
+
     glEnableVertexAttribArray(position);
-    glEnableVertexAttribArray(texCoords);
 }
 
-void DrawColorProgram::remove() {
-    Program::remove();
+void Program::remove() {
+    mUse = false;
+
     glDisableVertexAttribArray(position);
-    glDisableVertexAttribArray(texCoords);
-}
-
-///////////////////////////////////////////////////////////////////////////////
-// Draw texture
-///////////////////////////////////////////////////////////////////////////////
-
-DrawTextureProgram::DrawTextureProgram():
-        DrawColorProgram(gDrawTextureVertexShader, gDrawTextureFragmentShader) {
-    sampler = addUniform("sampler");
-}
-
-DrawTextureProgram::DrawTextureProgram(const char* vertex, const char* fragment):
-        DrawColorProgram(vertex, fragment) {
-    sampler = addUniform("sampler");
-}
-
-void DrawTextureProgram::use() {
-    DrawColorProgram::use();
-    glUniform1i(sampler, 0);
-}
-
-void DrawTextureProgram::remove() {
-    DrawColorProgram::remove();
-}
-
-///////////////////////////////////////////////////////////////////////////////
-// Draw text
-///////////////////////////////////////////////////////////////////////////////
-
-DrawTextProgram::DrawTextProgram():
-        DrawTextureProgram(gDrawTextureVertexShader, gDrawTextFragmentShader) {
-}
-
-///////////////////////////////////////////////////////////////////////////////
-// Draw linear gradient
-///////////////////////////////////////////////////////////////////////////////
-
-DrawLinearGradientProgram::DrawLinearGradientProgram():
-        DrawColorProgram(gDrawLinearGradientVertexShader, gDrawLinearGradientFragmentShader) {
-    gradient = addUniform("gradient");
-    gradientLength = addUniform("gradientLength");
-    sampler = addUniform("sampler");
-    start = addUniform("start");
-    screenSpace = addUniform("screenSpace");
-}
-
-void DrawLinearGradientProgram::use() {
-    DrawColorProgram::use();
-    glActiveTexture(GL_TEXTURE0);
-    glUniform1i(sampler, 0);
-}
-
-void DrawLinearGradientProgram::remove() {
-    DrawColorProgram::remove();
 }
 
 }; // namespace uirenderer