Fix for clearing empty nodes.

This commit is contained in:
Andrzej Kapolka 2014-10-23 13:37:11 -07:00
parent 34cba5c031
commit ef0a400dcb

View file

@ -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;