diff options
author | Romain Guy <romainguy@google.com> | 2010-07-09 16:15:35 -0700 |
---|---|---|
committer | Android (Google) Code Review <android-gerrit@google.com> | 2010-07-09 16:15:35 -0700 |
commit | 4670268f47d38e10c76a9b6bdd9b22f423cd33ab (patch) | |
tree | 891c27cd1f698b6615c7c2d434d32d5435f2abee /libs | |
parent | b92cd4fc63597a4d90ba88a5e45d3783532d6734 (diff) | |
parent | 16202fc9745e9b11db089ebc8f40119d13732016 (diff) | |
download | frameworks_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.cpp | 11 | ||||
-rw-r--r-- | libs/hwui/Program.cpp | 2 | ||||
-rw-r--r-- | libs/hwui/shaders/drawColor.frag | 4 | ||||
-rw-r--r-- | libs/hwui/shaders/drawColor.vert | 4 | ||||
-rw-r--r-- | libs/hwui/shaders/drawTexture.frag | 4 | ||||
-rw-r--r-- | libs/hwui/shaders/drawTexture.vert | 3 |
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; } |