|
@@ -665,9 +665,11 @@
|
|
|
|
|
|
// For each Instance Data part, refresh it to update the data in the DynamicFloatArray
|
|
// For each Instance Data part, refresh it to update the data in the DynamicFloatArray
|
|
for (let part of this._instanceDataParts) {
|
|
for (let part of this._instanceDataParts) {
|
|
|
|
+ let justAllocated = false;
|
|
// Check if we need to allocate data elements (hidden prim which becomes visible again)
|
|
// Check if we need to allocate data elements (hidden prim which becomes visible again)
|
|
if (visChanged || !part.dataElements || rmChanged) {
|
|
if (visChanged || !part.dataElements || rmChanged) {
|
|
part.allocElements();
|
|
part.allocElements();
|
|
|
|
+ justAllocated = true;
|
|
}
|
|
}
|
|
|
|
|
|
InstanceClassInfo._CurCategories = gii.usedShaderCategories[gii.partIndexFromId.get(part.id.toString())];
|
|
InstanceClassInfo._CurCategories = gii.usedShaderCategories[gii.partIndexFromId.get(part.id.toString())];
|
|
@@ -681,7 +683,7 @@
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
- rebuildTrans = rebuildTrans || part.arrayLengthChanged;
|
|
|
|
|
|
+ rebuildTrans = rebuildTrans || part.arrayLengthChanged || justAllocated;
|
|
}
|
|
}
|
|
this._instanceDirtyFlags = 0;
|
|
this._instanceDirtyFlags = 0;
|
|
|
|
|
|
@@ -705,7 +707,7 @@
|
|
let maxOff = 0;
|
|
let maxOff = 0;
|
|
|
|
|
|
for (let part of this._instanceDataParts) {
|
|
for (let part of this._instanceDataParts) {
|
|
- if (part) {
|
|
|
|
|
|
+ if (part && part.dataElements) {
|
|
part.dataBuffer.pack();
|
|
part.dataBuffer.pack();
|
|
for (let el of part.dataElements) {
|
|
for (let el of part.dataElements) {
|
|
minOff = Math.min(minOff, el.offset);
|
|
minOff = Math.min(minOff, el.offset);
|