Revision c43abe6c
Added by Leszek Koltunski about 5 years ago
src/main/java/org/distorted/library/main/DistortedNode.java | ||
---|---|---|
101 | 101 |
mMapNodeID.clear(); |
102 | 102 |
} |
103 | 103 |
|
104 |
/////////////////////////////////////////////////////////////////////////////////////////////////// |
|
105 |
|
|
106 |
public void markForDeletion() |
|
107 |
{ |
|
108 |
if( --mData.numPointingNodes==0 ) |
|
109 |
{ |
|
110 |
mMapNodeID.remove(mData.key); |
|
111 |
|
|
112 |
if( mData.mFBO!=null ) |
|
113 |
{ |
|
114 |
mData.mFBO.markForDeletion(); |
|
115 |
mData.mFBO = null; |
|
116 |
} |
|
117 |
} |
|
118 |
|
|
119 |
mEffects.removeNode(this); |
|
120 |
} |
|
121 |
|
|
104 | 122 |
/////////////////////////////////////////////////////////////////////////////////////////////////// |
105 | 123 |
|
106 | 124 |
private ArrayList<Long> generateIDList() |
... | ... | |
656 | 674 |
public void doWork() |
657 | 675 |
{ |
658 | 676 |
int num = mJobs.size(); |
659 |
Job job; |
|
660 |
|
|
661 |
int numChanges=0; |
|
662 | 677 |
|
663 |
for(int i=0; i<num; i++)
|
|
678 |
if( num>0 )
|
|
664 | 679 |
{ |
665 |
job = mJobs.remove(0); |
|
680 |
Job job; |
|
681 |
int numChanges=0; |
|
666 | 682 |
|
667 |
switch(job.type)
|
|
683 |
for(int i=0; i<num; i++)
|
|
668 | 684 |
{ |
669 |
case ATTACH: numChanges++; |
|
670 |
if( mChildren==null ) mChildren = new ArrayList<>(2); |
|
671 |
job.node.mParent = this; |
|
672 |
job.node.mSurfaceParent = null; |
|
673 |
DistortedMaster.addSortingByBuckets(mChildren,job.node); |
|
674 |
mNumChildren[0]++; |
|
675 |
break; |
|
676 |
case DETACH: numChanges++; |
|
677 |
if( mNumChildren[0]>0 && mChildren.remove(job.node) ) |
|
678 |
{ |
|
679 |
job.node.mParent = null; |
|
685 |
job = mJobs.remove(0); |
|
686 |
|
|
687 |
switch(job.type) |
|
688 |
{ |
|
689 |
case ATTACH: numChanges++; |
|
690 |
if( mChildren==null ) mChildren = new ArrayList<>(2); |
|
691 |
job.node.mParent = this; |
|
680 | 692 |
job.node.mSurfaceParent = null; |
681 |
mNumChildren[0]--; |
|
682 |
} |
|
683 |
break; |
|
684 |
case DETALL: numChanges++; |
|
685 |
if( mNumChildren[0]>0 ) |
|
686 |
{ |
|
687 |
DistortedNode tmp; |
|
688 |
|
|
689 |
for(int j=mNumChildren[0]-1; j>=0; j--) |
|
693 |
DistortedMaster.addSortingByBuckets(mChildren,job.node); |
|
694 |
mNumChildren[0]++; |
|
695 |
break; |
|
696 |
case DETACH: numChanges++; |
|
697 |
if( mNumChildren[0]>0 && mChildren.remove(job.node) ) |
|
690 | 698 |
{ |
691 |
tmp = mChildren.remove(j);
|
|
692 |
tmp.mParent = null;
|
|
693 |
tmp.mSurfaceParent = null;
|
|
699 |
job.node.mParent = null;
|
|
700 |
job.node.mSurfaceParent = null;
|
|
701 |
mNumChildren[0]--;
|
|
694 | 702 |
} |
703 |
break; |
|
704 |
case DETALL: numChanges++; |
|
705 |
if( mNumChildren[0]>0 ) |
|
706 |
{ |
|
707 |
DistortedNode tmp; |
|
708 |
|
|
709 |
for(int j=mNumChildren[0]-1; j>=0; j--) |
|
710 |
{ |
|
711 |
tmp = mChildren.remove(j); |
|
712 |
tmp.mParent = null; |
|
713 |
tmp.mSurfaceParent = null; |
|
714 |
} |
|
695 | 715 |
|
696 |
mNumChildren[0] = 0; |
|
697 |
} |
|
698 |
break; |
|
699 |
case SORT : mChildren.remove(job.node); |
|
700 |
DistortedMaster.addSortingByBuckets(mChildren,job.node); |
|
701 |
break; |
|
716 |
mNumChildren[0] = 0; |
|
717 |
} |
|
718 |
break; |
|
719 |
case SORT : mChildren.remove(job.node); |
|
720 |
DistortedMaster.addSortingByBuckets(mChildren,job.node); |
|
721 |
break; |
|
722 |
} |
|
702 | 723 |
} |
724 |
if( numChanges>0 ) adjustIsomorphism(); |
|
703 | 725 |
} |
704 |
|
|
705 |
if( numChanges>0 ) adjustIsomorphism(); |
|
706 | 726 |
} |
707 | 727 |
|
708 | 728 |
/////////////////////////////////////////////////////////////////////////////////////////////////// |
Also available in: Unified diff
Fixes for memory leak problems uncovered by the 'Rubik' app. (mainly: new method DistortedNode.markForDeletion)