Merge "Restore final canvas state after deferred flush" into jb-mr2-dev
This commit is contained in:
@@ -399,12 +399,13 @@ class GLES20Canvas extends HardwareCanvas {
|
||||
///////////////////////////////////////////////////////////////////////////
|
||||
|
||||
void drawHardwareLayer(HardwareLayer layer, float x, float y, Paint paint) {
|
||||
layer.setLayerPaint(paint);
|
||||
|
||||
final GLES20Layer glLayer = (GLES20Layer) layer;
|
||||
final int nativePaint = paint == null ? 0 : paint.mNativePaint;
|
||||
nDrawLayer(mRenderer, glLayer.getLayer(), x, y, nativePaint);
|
||||
nDrawLayer(mRenderer, glLayer.getLayer(), x, y);
|
||||
}
|
||||
|
||||
private static native void nDrawLayer(int renderer, int layer, float x, float y, int paint);
|
||||
private static native void nDrawLayer(int renderer, int layer, float x, float y);
|
||||
|
||||
void interrupt() {
|
||||
nInterrupt(mRenderer);
|
||||
|
||||
@@ -868,8 +868,7 @@ static void android_view_GLES20Canvas_destroyLayerDeferred(JNIEnv* env,
|
||||
}
|
||||
|
||||
static void android_view_GLES20Canvas_drawLayer(JNIEnv* env, jobject clazz,
|
||||
OpenGLRenderer* renderer, Layer* layer, jfloat x, jfloat y, SkPaint* paint) {
|
||||
// TODO: don't pass the paint from java
|
||||
OpenGLRenderer* renderer, Layer* layer, jfloat x, jfloat y) {
|
||||
renderer->drawLayer(layer, x, y);
|
||||
}
|
||||
|
||||
@@ -1051,7 +1050,7 @@ static JNINativeMethod gMethods[] = {
|
||||
{ "nClearLayerTexture", "(I)V", (void*) android_view_GLES20Canvas_clearLayerTexture },
|
||||
{ "nDestroyLayer", "(I)V", (void*) android_view_GLES20Canvas_destroyLayer },
|
||||
{ "nDestroyLayerDeferred", "(I)V", (void*) android_view_GLES20Canvas_destroyLayerDeferred },
|
||||
{ "nDrawLayer", "(IIFFI)V", (void*) android_view_GLES20Canvas_drawLayer },
|
||||
{ "nDrawLayer", "(IIFF)V", (void*) android_view_GLES20Canvas_drawLayer },
|
||||
{ "nCopyLayer", "(II)Z", (void*) android_view_GLES20Canvas_copyLayer },
|
||||
{ "nClearLayerUpdates", "(I)V", (void*) android_view_GLES20Canvas_clearLayerUpdates },
|
||||
{ "nPushLayerUpdate", "(II)V", (void*) android_view_GLES20Canvas_pushLayerUpdate },
|
||||
|
||||
@@ -368,13 +368,18 @@ status_t DeferredDisplayList::flush(OpenGLRenderer& renderer, Rect& dirty) {
|
||||
status_t status = DrawGlInfo::kStatusDone;
|
||||
|
||||
if (isEmpty()) return status; // nothing to flush
|
||||
renderer.restoreToCount(1);
|
||||
|
||||
DEFER_LOGD("--flushing");
|
||||
renderer.eventMark("Flush");
|
||||
|
||||
// save and restore (with draw modifiers) so that reordering doesn't affect final state
|
||||
DrawModifiers restoreDrawModifiers = renderer.getDrawModifiers();
|
||||
renderer.restoreToCount(1);
|
||||
renderer.save(SkCanvas::kMatrix_SaveFlag | SkCanvas::kClip_SaveFlag);
|
||||
|
||||
status |= replayBatchList(mBatches, renderer, dirty);
|
||||
|
||||
renderer.restoreToCount(1);
|
||||
renderer.setDrawModifiers(restoreDrawModifiers);
|
||||
|
||||
DEFER_LOGD("--flush complete, returning %x", status);
|
||||
|
||||
Reference in New Issue
Block a user