summaryrefslogtreecommitdiff
path: root/libs/hwui/OpenGLRenderer.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'libs/hwui/OpenGLRenderer.cpp')
-rw-r--r--libs/hwui/OpenGLRenderer.cpp36
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
///////////////////////////////////////////////////////////////////////////////