diff options
author | Nicolas Roard <nicolas@android.com> | 2011-02-11 11:38:49 -0800 |
---|---|---|
committer | Shimeng (Simon) Wang <swang@google.com> | 2011-02-18 18:00:01 -0800 |
commit | dc8ac1db6f8a14dbac0eb104ecfc18292f6e9a03 (patch) | |
tree | 037c77522417e8c7dcf155dad576e68422aa5a78 | |
parent | bdbce22a3ad0e8abea6b824e7ec9fd5ae3ea9637 (diff) | |
download | external_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.cpp | 23 | ||||
-rw-r--r-- | WebCore/platform/graphics/android/ShaderProgram.h | 4 |
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 |