mirror of
https://github.com/JulianGro/overte.git
synced 2025-05-05 10:07:43 +02:00
Fix for clearing empty nodes.
This commit is contained in:
parent
34cba5c031
commit
ef0a400dcb
1 changed files with 41 additions and 37 deletions
|
@ -1049,19 +1049,14 @@ int HeightfieldClearFetchVisitor::visit(MetavoxelInfo& info) {
|
||||||
}
|
}
|
||||||
|
|
||||||
// if all is gone, clear the node
|
// if all is gone, clear the node
|
||||||
if (!foundNonZero) {
|
if (foundNonZero) {
|
||||||
info.outputValues[0] = AttributeValue(_outputs.at(0),
|
|
||||||
encodeInline<HeightfieldHeightDataPointer>(HeightfieldHeightDataPointer()));
|
|
||||||
info.outputValues[1] = AttributeValue(_outputs.at(1),
|
|
||||||
encodeInline<HeightfieldColorDataPointer>(HeightfieldColorDataPointer()));
|
|
||||||
info.outputValues[2] = AttributeValue(_outputs.at(2),
|
|
||||||
encodeInline<HeightfieldMaterialDataPointer>(HeightfieldMaterialDataPointer()));
|
|
||||||
return STOP_RECURSION;
|
|
||||||
}
|
|
||||||
|
|
||||||
HeightfieldHeightDataPointer newHeightPointer(new HeightfieldHeightData(contents));
|
HeightfieldHeightDataPointer newHeightPointer(new HeightfieldHeightData(contents));
|
||||||
info.outputValues[0] = AttributeValue(_outputs.at(0), encodeInline<HeightfieldHeightDataPointer>(newHeightPointer));
|
info.outputValues[0] = AttributeValue(_outputs.at(0), encodeInline<HeightfieldHeightDataPointer>(newHeightPointer));
|
||||||
|
|
||||||
|
} else {
|
||||||
|
info.outputValues[0] = AttributeValue(_outputs.at(0));
|
||||||
|
}
|
||||||
|
|
||||||
// allow a border for what we clear in terms of color/material
|
// allow a border for what we clear in terms of color/material
|
||||||
innerBounds.minimum.x += increment;
|
innerBounds.minimum.x += increment;
|
||||||
innerBounds.minimum.z += increment;
|
innerBounds.minimum.z += increment;
|
||||||
|
@ -1090,6 +1085,7 @@ int HeightfieldClearFetchVisitor::visit(MetavoxelInfo& info) {
|
||||||
memcpy(dest, src, destWidth * DataBlock::COLOR_BYTES);
|
memcpy(dest, src, destWidth * DataBlock::COLOR_BYTES);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (foundNonZero) {
|
||||||
destX = (innerOverlap.minimum.x - info.minimum.x) * heightScale;
|
destX = (innerOverlap.minimum.x - info.minimum.x) * heightScale;
|
||||||
destY = (innerOverlap.minimum.z - info.minimum.z) * heightScale;
|
destY = (innerOverlap.minimum.z - info.minimum.z) * heightScale;
|
||||||
destWidth = glm::ceil((innerOverlap.maximum.x - innerOverlap.minimum.x) * heightScale);
|
destWidth = glm::ceil((innerOverlap.maximum.x - innerOverlap.minimum.x) * heightScale);
|
||||||
|
@ -1102,7 +1098,11 @@ int HeightfieldClearFetchVisitor::visit(MetavoxelInfo& info) {
|
||||||
}
|
}
|
||||||
|
|
||||||
HeightfieldColorDataPointer newColorPointer(new HeightfieldColorData(contents));
|
HeightfieldColorDataPointer newColorPointer(new HeightfieldColorData(contents));
|
||||||
info.outputValues[1] = AttributeValue(_outputs.at(1), encodeInline<HeightfieldColorDataPointer>(newColorPointer));
|
info.outputValues[1] = AttributeValue(_outputs.at(1),
|
||||||
|
encodeInline<HeightfieldColorDataPointer>(newColorPointer));
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
info.outputValues[1] = AttributeValue(_outputs.at(1));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1139,6 +1139,7 @@ int HeightfieldClearFetchVisitor::visit(MetavoxelInfo& info) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (foundNonZero) {
|
||||||
destX = (innerOverlap.minimum.x - info.minimum.x) * heightScale;
|
destX = (innerOverlap.minimum.x - info.minimum.x) * heightScale;
|
||||||
destY = (innerOverlap.minimum.z - info.minimum.z) * heightScale;
|
destY = (innerOverlap.minimum.z - info.minimum.z) * heightScale;
|
||||||
destWidth = glm::ceil((innerOverlap.maximum.x - innerOverlap.minimum.x) * heightScale);
|
destWidth = glm::ceil((innerOverlap.maximum.x - innerOverlap.minimum.x) * heightScale);
|
||||||
|
@ -1155,6 +1156,9 @@ int HeightfieldClearFetchVisitor::visit(MetavoxelInfo& info) {
|
||||||
info.outputValues[2] = AttributeValue(_outputs.at(2),
|
info.outputValues[2] = AttributeValue(_outputs.at(2),
|
||||||
encodeInline<HeightfieldMaterialDataPointer>(newMaterialPointer));
|
encodeInline<HeightfieldMaterialDataPointer>(newMaterialPointer));
|
||||||
}
|
}
|
||||||
|
} else {
|
||||||
|
info.outputValues[2] = AttributeValue(_outputs.at(2));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return STOP_RECURSION;
|
return STOP_RECURSION;
|
||||||
|
|
Loading…
Reference in a new issue