summaryrefslogtreecommitdiffstats
path: root/libs
diff options
context:
space:
mode:
authorRomain Guy <romainguy@google.com>2010-07-09 16:15:35 -0700
committerAndroid (Google) Code Review <android-gerrit@google.com>2010-07-09 16:15:35 -0700
commit4670268f47d38e10c76a9b6bdd9b22f423cd33ab (patch)
tree891c27cd1f698b6615c7c2d434d32d5435f2abee /libs
parentb92cd4fc63597a4d90ba88a5e45d3783532d6734 (diff)
parent16202fc9745e9b11db089ebc8f40119d13732016 (diff)
downloadframeworks_base-4670268f47d38e10c76a9b6bdd9b22f423cd33ab.zip
frameworks_base-4670268f47d38e10c76a9b6bdd9b22f423cd33ab.tar.gz
frameworks_base-4670268f47d38e10c76a9b6bdd9b22f423cd33ab.tar.bz2
Merge "Fix alpha blending and improve fragment shaders performance."
Diffstat (limited to 'libs')
-rw-r--r--libs/hwui/OpenGLRenderer.cpp11
-rw-r--r--libs/hwui/Program.cpp2
-rw-r--r--libs/hwui/shaders/drawColor.frag4
-rw-r--r--libs/hwui/shaders/drawColor.vert4
-rw-r--r--libs/hwui/shaders/drawTexture.frag4
-rw-r--r--libs/hwui/shaders/drawTexture.vert3
6 files changed, 10 insertions, 18 deletions
diff --git a/libs/hwui/OpenGLRenderer.cpp b/libs/hwui/OpenGLRenderer.cpp
index e333060..6d041ae 100644
--- a/libs/hwui/OpenGLRenderer.cpp
+++ b/libs/hwui/OpenGLRenderer.cpp
@@ -469,9 +469,9 @@ void OpenGLRenderer::drawPatch(SkBitmap* bitmap, Res_png_9patch* patch,
// Specify right and bottom as +1.0f from left/top to prevent scaling since the
// patch mesh already defines the final size
- drawTextureMesh(left, top, left + 1.0f, top + 1.0f, texture->id, alpha, mode, texture->blend,
- true, &mesh->vertices[0].position[0], &mesh->vertices[0].texture[0], mesh->indices,
- mesh->indicesCount);
+ drawTextureMesh(left, top, left + 1.0f, top + 1.0f, texture->id, alpha / 255.0f, mode,
+ texture->blend, true, &mesh->vertices[0].position[0],
+ &mesh->vertices[0].texture[0], mesh->indices, mesh->indicesCount);
}
void OpenGLRenderer::drawColor(int color, SkXfermode::Mode mode) {
@@ -518,7 +518,7 @@ void OpenGLRenderer::drawColorRect(float left, float top, float right, float bot
glEnableVertexAttribArray(mDrawColorShader->position);
glVertexAttribPointer(mDrawColorShader->position, 2, GL_FLOAT, GL_FALSE,
gDrawColorVertexStride, p);
- glVertexAttrib4f(mDrawColorShader->color, r, g, b, a);
+ glUniform4f(mDrawColorShader->color, r, g, b, a);
glDrawArrays(GL_TRIANGLE_STRIP, 0, gDrawColorVertexCount);
@@ -558,6 +558,7 @@ void OpenGLRenderer::drawTextureMesh(float left, float top, float right, float b
glActiveTexture(GL_TEXTURE0);
glUniform1i(mDrawTextureShader->sampler, 0);
+ glUniform4f(mDrawTextureShader->color, 1.0f, 1.0f, 1.0f, alpha);
glEnableVertexAttribArray(mDrawTextureShader->position);
glVertexAttribPointer(mDrawTextureShader->position, 2, GL_FLOAT, GL_FALSE,
@@ -567,8 +568,6 @@ void OpenGLRenderer::drawTextureMesh(float left, float top, float right, float b
glVertexAttribPointer(mDrawTextureShader->texCoords, 2, GL_FLOAT, GL_FALSE,
gDrawTextureVertexStride, texCoords);
- glVertexAttrib4f(mDrawTextureShader->color, 1.0f, 1.0f, 1.0f, alpha);
-
if (!indices) {
glDrawArrays(GL_TRIANGLE_STRIP, 0, gDrawTextureVertexCount);
} else {
diff --git a/libs/hwui/Program.cpp b/libs/hwui/Program.cpp
index 2acddfc..819e736 100644
--- a/libs/hwui/Program.cpp
+++ b/libs/hwui/Program.cpp
@@ -126,7 +126,7 @@ DrawColorProgram::DrawColorProgram(const char* vertex, const char* fragment):
void DrawColorProgram::getAttribsAndUniforms() {
position = addAttrib("position");
- color = addAttrib("color");
+ color = addUniform("color");
projection = addUniform("projection");
modelView = addUniform("modelView");
transform = addUniform("transform");
diff --git a/libs/hwui/shaders/drawColor.frag b/libs/hwui/shaders/drawColor.frag
index e84c47b..0628850 100644
--- a/libs/hwui/shaders/drawColor.frag
+++ b/libs/hwui/shaders/drawColor.frag
@@ -1,9 +1,9 @@
SHADER_SOURCE(gDrawColorFragmentShader,
-varying lowp vec4 outColor;
+uniform vec4 color;
void main(void) {
- gl_FragColor = outColor;
+ gl_FragColor = color;
}
);
diff --git a/libs/hwui/shaders/drawColor.vert b/libs/hwui/shaders/drawColor.vert
index cef6e49..742ed98 100644
--- a/libs/hwui/shaders/drawColor.vert
+++ b/libs/hwui/shaders/drawColor.vert
@@ -1,16 +1,12 @@
SHADER_SOURCE(gDrawColorVertexShader,
attribute vec4 position;
-attribute vec4 color;
uniform mat4 projection;
uniform mat4 modelView;
uniform mat4 transform;
-varying vec4 outColor;
-
void main(void) {
- outColor = color;
gl_Position = projection * transform * modelView * position;
}
diff --git a/libs/hwui/shaders/drawTexture.frag b/libs/hwui/shaders/drawTexture.frag
index 5bd420e..0f2aa91 100644
--- a/libs/hwui/shaders/drawTexture.frag
+++ b/libs/hwui/shaders/drawTexture.frag
@@ -1,12 +1,12 @@
SHADER_SOURCE(gDrawTextureFragmentShader,
-varying lowp vec4 outColor;
varying mediump vec2 outTexCoords;
+uniform vec4 color;
uniform sampler2D sampler;
void main(void) {
- gl_FragColor = texture2D(sampler, outTexCoords) * outColor;
+ gl_FragColor = texture2D(sampler, outTexCoords) * color;
}
);
diff --git a/libs/hwui/shaders/drawTexture.vert b/libs/hwui/shaders/drawTexture.vert
index 310a812..8abddb8 100644
--- a/libs/hwui/shaders/drawTexture.vert
+++ b/libs/hwui/shaders/drawTexture.vert
@@ -2,17 +2,14 @@ SHADER_SOURCE(gDrawTextureVertexShader,
attribute vec4 position;
attribute vec2 texCoords;
-attribute vec4 color;
uniform mat4 projection;
uniform mat4 modelView;
uniform mat4 transform;
-varying vec4 outColor;
varying vec2 outTexCoords;
void main(void) {
- outColor = color;
outTexCoords = texCoords;
gl_Position = projection * transform * modelView * position;
}