void Layer::defer(const OpenGLRenderer& rootRenderer) { ATRACE_LAYER_WORK("Optimize"); updateLightPosFromRenderer(rootRenderer); const float width = layer.getWidth(); const float height = layer.getHeight(); if (dirtyRect.isEmpty() || (dirtyRect.left <= 0 && dirtyRect.top <= 0 && dirtyRect.right >= width && dirtyRect.bottom >= height)) { dirtyRect.set(0, 0, width, height); } deferredList.reset(new DeferredDisplayList(dirtyRect)); DeferStateStruct deferredState(*deferredList, *renderer, RenderNode::kReplayFlag_ClipChildren); renderer->setViewport(width, height); renderer->setupFrameState(dirtyRect.left, dirtyRect.top, dirtyRect.right, dirtyRect.bottom, !isBlend()); renderNode->computeOrdering(); renderNode->defer(deferredState, 0); deferredUpdateScheduled = false; }
void Layer::defer() { const float width = layer.getWidth(); const float height = layer.getHeight(); if (dirtyRect.isEmpty() || (dirtyRect.left <= 0 && dirtyRect.top <= 0 && dirtyRect.right >= width && dirtyRect.bottom >= height)) { dirtyRect.set(0, 0, width, height); } if (deferredList) { deferredList->reset(dirtyRect); } else { deferredList = new DeferredDisplayList(dirtyRect); } DeferStateStruct deferredState(*deferredList, *renderer, DisplayList::kReplayFlag_ClipChildren); renderer->initViewport(width, height); renderer->setupFrameState(dirtyRect.left, dirtyRect.top, dirtyRect.right, dirtyRect.bottom, !isBlend()); displayList->defer(deferredState, 0); deferredUpdateScheduled = false; }