diff options
Diffstat (limited to 'libs/hwui/OpenGLRenderer.cpp')
| -rw-r--r-- | libs/hwui/OpenGLRenderer.cpp | 36 |
1 files changed, 34 insertions, 2 deletions
diff --git a/libs/hwui/OpenGLRenderer.cpp b/libs/hwui/OpenGLRenderer.cpp index 99bb6f01031a..aefefe4dc75f 100644 --- a/libs/hwui/OpenGLRenderer.cpp +++ b/libs/hwui/OpenGLRenderer.cpp @@ -178,7 +178,7 @@ void OpenGLRenderer::finish() { #endif } -void OpenGLRenderer::acquireContext() { +void OpenGLRenderer::interrupt() { if (mCaches.currentProgram) { if (mCaches.currentProgram->isInUse()) { mCaches.currentProgram->remove(); @@ -188,7 +188,11 @@ void OpenGLRenderer::acquireContext() { mCaches.unbindMeshBuffer(); } -void OpenGLRenderer::releaseContext() { +void OpenGLRenderer::acquireContext() { + interrupt(); +} + +void OpenGLRenderer::resume() { glViewport(0, 0, mSnapshot->viewport.getWidth(), mSnapshot->viewport.getHeight()); glEnable(GL_SCISSOR_TEST); @@ -205,6 +209,10 @@ void OpenGLRenderer::releaseContext() { glBlendEquation(GL_FUNC_ADD); } +void OpenGLRenderer::releaseContext() { + resume(); +} + /////////////////////////////////////////////////////////////////////////////// // State management /////////////////////////////////////////////////////////////////////////////// @@ -1477,6 +1485,30 @@ void OpenGLRenderer::drawPath(SkPath* path, SkPaint* paint) { finishDrawTexture(); } +void OpenGLRenderer::drawLayer(int texture, float left, float top, float right, float bottom, + float u, float v, SkPaint* paint) { + if (quickReject(left, top, right, bottom)) { + return; + } + + glActiveTexture(gTextureUnits[0]); + if (!texture) return; + + mCaches.unbindMeshBuffer(); + resetDrawTextureTexCoords(0.0f, v, u, 0.0f); + + int alpha; + SkXfermode::Mode mode; + getAlphaAndMode(paint, &alpha, &mode); + + // TODO: Should get the blend info from the caller + drawTextureMesh(left, top, right, bottom, texture, alpha / 255.0f, mode, true, + &mMeshVertices[0].position[0], &mMeshVertices[0].texture[0], + GL_TRIANGLE_STRIP, gMeshCount); + + resetDrawTextureTexCoords(0.0f, 0.0f, 1.0f, 1.0f); +} + /////////////////////////////////////////////////////////////////////////////// // Shaders /////////////////////////////////////////////////////////////////////////////// |