Merge branch 'dev' into vanilla-opt

# Conflicts:
#	src/main/java/com/jozufozu/flywheel/backend/instancing/Instancer.java
This commit is contained in:
Jozufozu 2021-07-22 14:09:28 -07:00
commit a42073f59a
2 changed files with 20 additions and 9 deletions

View file

@ -4,7 +4,7 @@ import com.jozufozu.flywheel.backend.gl.buffer.MappedBuffer;
public abstract class InstanceData {
protected final Instancer<?> owner;
Instancer<?> owner;
boolean dirty;
boolean removed;

View file

@ -60,15 +60,14 @@ public class Instancer<D extends InstanceData> {
}
public D createInstance() {
D instanceData = factory.create(this);
instanceData.dirty = true;
anyToUpdate = true;
return _add(factory.create(this));
}
synchronized (data) {
data.add(instanceData);
}
public void stealInstance(D inOther) {
if (inOther.owner == this) return;
return instanceData;
inOther.owner.anyToRemove = true;
_add(inOther);
}
private void init() {
@ -125,6 +124,18 @@ public class Instancer<D extends InstanceData> {
}
}
private D _add(D instanceData) {
instanceData.owner = this;
instanceData.dirty = true;
anyToUpdate = true;
synchronized (data) {
data.add(instanceData);
}
return instanceData;
}
protected void renderSetup() {
if (anyToRemove) {
removeDeletedInstances();
@ -235,7 +246,7 @@ public class Instancer<D extends InstanceData> {
final BitSet removeSet = new BitSet(oldSize);
for (int i = 0; i < oldSize; i++) {
final D element = this.data.get(i);
if (element.removed) {
if (element.removed || element.owner != this) {
removeSet.set(i);
removeCount++;
}