diff options
author | Nicolas Roard <nicolas@android.com> | 2010-12-13 13:27:59 -0800 |
---|---|---|
committer | Nicolas Roard <nicolas@android.com> | 2010-12-13 13:27:59 -0800 |
commit | f9b61180850e854778bcc25ef9b58716d8f29b53 (patch) | |
tree | 67fbbbc63bee2b5de2b3ed344f5769bee6cab559 /WebCore/platform/graphics/android/ShaderProgram.cpp | |
parent | c9ab9bf00ba3ce8289f917675f81b40e4438a864 (diff) | |
download | external_webkit-f9b61180850e854778bcc25ef9b58716d8f29b53.zip external_webkit-f9b61180850e854778bcc25ef9b58716d8f29b53.tar.gz external_webkit-f9b61180850e854778bcc25ef9b58716d8f29b53.tar.bz2 |
Refactor the orthographic matrix computation and add a drawLayerQuad() method
Change-Id: I45a3581300abdedcd427a9eda8a519f11a3d1bb1
Diffstat (limited to 'WebCore/platform/graphics/android/ShaderProgram.cpp')
-rw-r--r-- | WebCore/platform/graphics/android/ShaderProgram.cpp | 31 |
1 files changed, 26 insertions, 5 deletions
diff --git a/WebCore/platform/graphics/android/ShaderProgram.cpp b/WebCore/platform/graphics/android/ShaderProgram.cpp index aa41a48..2195bd4 100644 --- a/WebCore/platform/graphics/android/ShaderProgram.cpp +++ b/WebCore/platform/graphics/android/ShaderProgram.cpp @@ -149,11 +149,7 @@ void ShaderProgram::setViewport(SkRect& viewport) { TransformationMatrix ortho; GLUtils::setOrthographicMatrix(ortho, viewport.fLeft, viewport.fTop, viewport.fRight, viewport.fBottom, -1000, 1000); - TransformationMatrix invert; - invert.scale3d(1.0, -1.0, 1.0); - TransformationMatrix total = invert; - total.multLeft(ortho); - m_projectionMatrix = total; + m_projectionMatrix = ortho; } void ShaderProgram::setProjectionMatrix(SkRect& geometry) { @@ -184,6 +180,31 @@ void ShaderProgram::drawQuad(SkRect& geometry, int textureId, float opacity) { glUniform1f(alpha(), opacity); glDrawArrays(GL_TRIANGLE_STRIP, 0, 4); + + GLUtils::checkGlError("drawQuad"); +} + +void ShaderProgram::drawLayerQuad(const TransformationMatrix& drawMatrix, + SkRect& geometry, int textureId, float opacity) { + + TransformationMatrix renderMatrix = drawMatrix; + renderMatrix.scale3d(geometry.width(), geometry.height(), 1); + renderMatrix.multiply(m_projectionMatrix); + + GLfloat projectionMatrix[16]; + GLUtils::toGLMatrix(projectionMatrix, renderMatrix); + glUniformMatrix4fv(m_hProjectionMatrix, 1, GL_FALSE, projectionMatrix); + + glActiveTexture(GL_TEXTURE0); + 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"); + glUniform1f(alpha(), opacity); + + glDrawArrays(GL_TRIANGLE_STRIP, 0, 4); } } // namespace WebCore |