Merge "Ensure we always set the proper blending mode Bug #6527305" into jb-dev
This commit is contained in:
@@ -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;
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user