Merge "Ensure we always set the proper blending mode Bug #6527305" into jb-dev

This commit is contained in:
Romain Guy
2012-05-22 14:28:58 -07:00
committed by Android (Google) Code Review
3 changed files with 24 additions and 10 deletions

View File

@@ -296,7 +296,8 @@ void DisplayList::output(OpenGLRenderer& renderer, uint32_t level) {
indent[i] = ' ';
}
indent[count] = '\0';
ALOGD("%sStart display list (%p, %s)", (char*) indent + 2, this, mName.string());
ALOGD("%sStart display list (%p, %s, render=%d)", (char*) indent + 2, this,
mName.string(), isRenderable());
ALOGD("%s%s %d", indent, "Save", SkCanvas::kMatrix_SaveFlag | SkCanvas::kClip_SaveFlag);
int saveCount = renderer.getSaveCount() - 1;

View File

@@ -176,14 +176,26 @@ void OpenGLRenderer::prepareDirty(float left, float top, float right, float bott
mSnapshot->fbo = getTargetFbo();
mSaveCount = 1;
glViewport(0, 0, mWidth, mHeight);
mCaches.setScissor(left, mSnapshot->height - bottom, right - left, bottom - top);
mSnapshot->setClip(left, top, right, bottom);
mDirtyClip = false;
mDirtyClip = opaque;
syncState();
if (!opaque) {
mCaches.setScissor(left, mSnapshot->height - bottom, right - left, bottom - top);
glClear(GL_COLOR_BUFFER_BIT);
} else {
mCaches.resetScissor();
}
}
void OpenGLRenderer::syncState() {
glViewport(0, 0, mWidth, mHeight);
if (mCaches.blend) {
glEnable(GL_BLEND);
} else {
glDisable(GL_BLEND);
}
}
@@ -290,11 +302,6 @@ status_t OpenGLRenderer::invokeFunctors(Rect& dirty) {
}
}
// Restore state possibly changed by the functors in process mode
GLboolean value;
glGetBooleanv(GL_BLEND, &value);
mCaches.blend = value;
mCaches.activeTexture(0);
return result;

View File

@@ -214,6 +214,12 @@ protected:
void drawTextureLayer(Layer* layer, const Rect& rect);
private:
/**
* Ensures the state of the renderer is the same as the state of
* the GL context.
*/
void syncState();
/**
* Saves the current state of the renderer as a new snapshot.
* The new snapshot is saved in mSnapshot and the previous snapshot