Traverse layers in update order
bug:8540150 Layers now require traversal in update order, as it will be child first, then parent for layer-in-layer Fixes issue with deferred layer playback not flushing in order, and thus child not painting before parent Also fixes DisplayList to only be cleared after flush in deferred list Change-Id: I2f284d00079cdb20798aeef6a1c94e823940db40
This commit is contained in:
@@ -52,8 +52,6 @@ public:
|
||||
kOpBatch_Count, // Add other batch ids before this
|
||||
};
|
||||
|
||||
void clear();
|
||||
|
||||
bool isEmpty() { return mBatches.isEmpty(); }
|
||||
|
||||
/**
|
||||
@@ -80,6 +78,8 @@ private:
|
||||
*/
|
||||
void resetBatchingState();
|
||||
|
||||
void clear();
|
||||
|
||||
void storeStateOpBarrier(OpenGLRenderer& renderer, StateOp* op);
|
||||
void storeRestoreToCountBarrier(OpenGLRenderer& renderer, StateOp* op, int newSaveCount);
|
||||
|
||||
|
||||
@@ -167,7 +167,6 @@ void Layer::defer() {
|
||||
displayList->defer(deferredState, 0);
|
||||
|
||||
deferredUpdateScheduled = false;
|
||||
displayList = NULL;
|
||||
}
|
||||
|
||||
void Layer::flush() {
|
||||
@@ -182,7 +181,7 @@ void Layer::flush() {
|
||||
renderer = NULL;
|
||||
|
||||
dirtyRect.setEmpty();
|
||||
deferredList->clear();
|
||||
displayList = NULL;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -571,8 +571,8 @@ void OpenGLRenderer::updateLayers() {
|
||||
startMark("Defer Layer Updates");
|
||||
}
|
||||
|
||||
// Note: it is very important to update the layers in reverse order
|
||||
for (int i = count - 1; i >= 0; i--) {
|
||||
// Note: it is very important to update the layers in order
|
||||
for (int i = 0; i < count; i++) {
|
||||
Layer* layer = mLayerUpdates.itemAt(i);
|
||||
updateLayer(layer, false);
|
||||
if (CC_UNLIKELY(mCaches.drawDeferDisabled)) {
|
||||
@@ -594,8 +594,8 @@ void OpenGLRenderer::flushLayers() {
|
||||
startMark("Apply Layer Updates");
|
||||
char layerName[12];
|
||||
|
||||
// Note: it is very important to update the layers in reverse order
|
||||
for (int i = count - 1; i >= 0; i--) {
|
||||
// Note: it is very important to update the layers in order
|
||||
for (int i = 0; i < count; i++) {
|
||||
sprintf(layerName, "Layer #%d", i);
|
||||
startMark(layerName);
|
||||
|
||||
|
||||
Reference in New Issue
Block a user