mirror of
https://gitee.com/nomat/lcc-ui-sorting-group-demo.git
synced 2025-12-27 09:08:55 +00:00
3.6.3同步修正
This commit is contained in:
@@ -125,7 +125,7 @@ UI.prototype.update = function() {
|
||||
}
|
||||
}
|
||||
|
||||
UI.prototype.walk = function(node: Node, level = 0, sortingPriority = 0){
|
||||
UI.prototype.walk = function(node: Node, level = 0, sortingPriority = 0, sortingLevel = 0){
|
||||
if (!node.activeInHierarchy) {
|
||||
return;
|
||||
}
|
||||
@@ -135,6 +135,9 @@ UI.prototype.walk = function(node: Node, level = 0, sortingPriority = 0){
|
||||
const stencilEnterLevel = render && (render.stencilStage === _cocos_2d_renderer_stencil_manager__Stage.ENTER_LEVEL || render.stencilStage === _cocos_2d_renderer_stencil_manager__Stage.ENTER_LEVEL_INVERTED);
|
||||
const transform = uiProps.uiTransformComp;
|
||||
sortingPriority = (transform && transform._sortingEnabled) ? transform._sortingPriority : sortingPriority;
|
||||
if((transform && transform._sortingEnabled)){
|
||||
++sortingLevel;
|
||||
}
|
||||
|
||||
// Save opacity
|
||||
const parentOpacity = this._pOpacity;
|
||||
@@ -152,38 +155,49 @@ UI.prototype.walk = function(node: Node, level = 0, sortingPriority = 0){
|
||||
|
||||
// Render assembler update logic
|
||||
if (render && render.enabledInHierarchy) {
|
||||
if(stencilEnterLevel){
|
||||
this.flushRendererCache();
|
||||
|
||||
render.fillBuffers(this);// for rendering
|
||||
|
||||
// Update cascaded opacity to vertex buffer
|
||||
if (this._opacityDirty && render && !render.useVertexOpacity && render.renderData && render.renderData.vertexCount > 0) {
|
||||
// HARD COUPLING
|
||||
updateOpacity(render.renderData, opacity);
|
||||
if(sortingLevel > 0){
|
||||
if(stencilEnterLevel){
|
||||
this.flushRendererCache();
|
||||
|
||||
render.fillBuffers(this);// for rendering
|
||||
|
||||
// Update cascaded opacity to vertex buffer
|
||||
if (this._opacityDirty && render && !render.useVertexOpacity && render.renderData && render.renderData.vertexCount > 0) {
|
||||
// HARD COUPLING
|
||||
updateOpacity(render.renderData, opacity);
|
||||
const buffer = render.renderData.getMeshBuffer();
|
||||
if (buffer) {
|
||||
buffer.setDirty();
|
||||
}
|
||||
}
|
||||
}else{
|
||||
this.rendererCache.push(render);
|
||||
render.renderPriority = sortingPriority;
|
||||
if(sortingPriority != 0){
|
||||
this.rendererOrder = true;
|
||||
}
|
||||
if (this._opacityDirty && render && !render.useVertexOpacity && render.renderData && render.renderData.vertexCount > 0) {
|
||||
render.renderOpacity = opacity;
|
||||
}else{
|
||||
render.renderOpacity = -1;
|
||||
}
|
||||
}
|
||||
}else{
|
||||
render.fillBuffers(this);
|
||||
if(render.renderOpacity >= 0){
|
||||
updateOpacity(render.renderData, render.renderOpacity);
|
||||
const buffer = render.renderData.getMeshBuffer();
|
||||
if (buffer) {
|
||||
buffer.setDirty();
|
||||
}
|
||||
}
|
||||
}else{
|
||||
this.rendererCache.push(render);
|
||||
render.renderPriority = sortingPriority;
|
||||
if(sortingPriority != 0){
|
||||
this.rendererOrder = true;
|
||||
}
|
||||
if (this._opacityDirty && render && !render.useVertexOpacity && render.renderData && render.renderData.vertexCount > 0) {
|
||||
render.renderOpacity = opacity;
|
||||
}else{
|
||||
render.renderOpacity = -1;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (children.length > 0 && !node._static) {
|
||||
for (let i = 0; i < children.length; ++i) {
|
||||
const child = children[i];
|
||||
this.walk(child, level, sortingPriority);
|
||||
this.walk(child, level, sortingPriority, sortingLevel);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -210,5 +224,12 @@ UI.prototype.walk = function(node: Node, level = 0, sortingPriority = 0){
|
||||
}
|
||||
}
|
||||
|
||||
if((transform && transform._sortingEnabled)){
|
||||
--sortingLevel;
|
||||
if(sortingLevel <= 0){
|
||||
this.flushRendererCache();
|
||||
}
|
||||
}
|
||||
|
||||
level += 1;
|
||||
};
|
||||
|
||||
Reference in New Issue
Block a user