summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorNicolas Roard <nicolas@android.com>2011-02-11 11:38:49 -0800
committerShimeng (Simon) Wang <swang@google.com>2011-02-18 18:00:01 -0800
commitdc8ac1db6f8a14dbac0eb104ecfc18292f6e9a03 (patch)
tree037c77522417e8c7dcf155dad576e68422aa5a78
parentbdbce22a3ad0e8abea6b824e7ec9fd5ae3ea9637 (diff)
downloadexternal_webkit-dc8ac1db6f8a14dbac0eb104ecfc18292f6e9a03.zip
external_webkit-dc8ac1db6f8a14dbac0eb104ecfc18292f6e9a03.tar.gz
external_webkit-dc8ac1db6f8a14dbac0eb104ecfc18292f6e9a03.tar.bz2
DO NOT MERGE Fix GL_BLEND problem.
glBindAttribLocation() will only work after a shader has been linked; This was working previously due to the way the nvidia driver work when using blending (it generates another shader). Change-Id: Ie5d28ba451e7b37fd9c6a76c14fc3e4e525d9bf0
-rw-r--r--WebCore/platform/graphics/android/ShaderProgram.cpp23
-rw-r--r--WebCore/platform/graphics/android/ShaderProgram.h4
2 files changed, 16 insertions, 11 deletions
diff --git a/WebCore/platform/graphics/android/ShaderProgram.cpp b/WebCore/platform/graphics/android/ShaderProgram.cpp
index 8da6855..c4129f1 100644
--- a/WebCore/platform/graphics/android/ShaderProgram.cpp
+++ b/WebCore/platform/graphics/android/ShaderProgram.cpp
@@ -140,8 +140,6 @@ GLuint ShaderProgram::createProgram(const char* pVertexSource, const char* pFrag
}
glDeleteProgram(program);
program = -1;
- } else {
- XLOG("couldn't link the shader!");
}
}
return program;
@@ -156,15 +154,21 @@ void ShaderProgram::init()
{
m_program = createProgram(gVertexShader, gFragmentShader);
m_videoProgram = createProgram(gVideoVertexShader, gVideoFragmentShader);
+ if (m_program == -1 || m_videoProgram == -1)
+ return;
m_hProjectionMatrix = glGetUniformLocation(m_program, "projectionMatrix");
m_hAlpha = glGetUniformLocation(m_program, "alpha");
m_hTexSampler = glGetUniformLocation(m_program, "s_texture");
+ m_hPosition = glGetAttribLocation(m_program, "vPosition");
+
m_hVideoProjectionMatrix = glGetUniformLocation(m_videoProgram, "projectionMatrix");
m_hVideoTextureMatrix = glGetUniformLocation(m_videoProgram, "textureMatrix");
m_hVideoTexSampler = glGetUniformLocation(m_videoProgram, "s_yuvTexture");
+ m_hVideoPosition = glGetAttribLocation(m_program, "vPosition");
+
const GLfloat coord[] = {
0.0f, 0.0f, // C
1.0f, 0.0f, // D
@@ -214,9 +218,8 @@ void ShaderProgram::drawQuad(SkRect& geometry, int textureId, float opacity)
glBindTexture(GL_TEXTURE_2D, textureId);
glBindBuffer(GL_ARRAY_BUFFER, m_textureBuffer[0]);
- glEnableVertexAttribArray(1);
- glVertexAttribPointer(1, 2, GL_FLOAT, GL_FALSE, 0, 0);
- glBindAttribLocation(program(), 1, "vPosition");
+ glEnableVertexAttribArray(m_hPosition);
+ glVertexAttribPointer(m_hPosition, 2, GL_FLOAT, GL_FALSE, 0, 0);
glUniform1f(alpha(), opacity);
glDrawArrays(GL_TRIANGLE_STRIP, 0, 4);
@@ -290,9 +293,8 @@ void ShaderProgram::drawLayerQuad(const TransformationMatrix& drawMatrix,
glBindTexture(GL_TEXTURE_2D, textureId);
glBindBuffer(GL_ARRAY_BUFFER, m_textureBuffer[0]);
- glEnableVertexAttribArray(1);
- glVertexAttribPointer(1, 2, GL_FLOAT, GL_FALSE, 0, 0);
- glBindAttribLocation(program(), 1, "vPosition");
+ glEnableVertexAttribArray(m_hPosition);
+ glVertexAttribPointer(m_hPosition, 2, GL_FLOAT, GL_FALSE, 0, 0);
glUniform1f(alpha(), opacity);
glDrawArrays(GL_TRIANGLE_STRIP, 0, 4);
@@ -318,9 +320,8 @@ void ShaderProgram::drawVideoLayerQuad(const TransformationMatrix& drawMatrix,
glBindTexture(GL_TEXTURE_EXTERNAL_OES, textureId);
glBindBuffer(GL_ARRAY_BUFFER, m_textureBuffer[0]);
- glEnableVertexAttribArray(1);
- glVertexAttribPointer(1, 2, GL_FLOAT, GL_FALSE, 0, 0);
- glBindAttribLocation(m_videoProgram, 1, "vPosition");
+ glEnableVertexAttribArray(m_hVideoPosition);
+ glVertexAttribPointer(m_hVideoPosition, 2, GL_FLOAT, GL_FALSE, 0, 0);
glDrawArrays(GL_TRIANGLE_STRIP, 0, 4);
diff --git a/WebCore/platform/graphics/android/ShaderProgram.h b/WebCore/platform/graphics/android/ShaderProgram.h
index 1f94290..5e2045c 100644
--- a/WebCore/platform/graphics/android/ShaderProgram.h
+++ b/WebCore/platform/graphics/android/ShaderProgram.h
@@ -72,6 +72,10 @@ class ShaderProgram {
int m_hVideoProjectionMatrix;
int m_hVideoTextureMatrix;
int m_hVideoTexSampler;
+
+ // attribs
+ GLint m_hPosition;
+ GLint m_hVideoPosition;
};
} // namespace WebCore