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