|
@@ -303,22 +303,29 @@ public class TerrainPatch extends Geometry {
|
|
|
|
|
|
protected void setHeight(List<LocationHeight> locationHeights, boolean overrideHeight) {
|
|
|
|
|
|
+ final float[] heightArray = geomap.getHeightArray();
|
|
|
+ final VertexBuffer vertexBuffer = mesh.getBuffer(Type.Position);
|
|
|
+ final FloatBuffer floatBuffer = mesh.getFloatBuffer(Type.Position);
|
|
|
+
|
|
|
for (LocationHeight lh : locationHeights) {
|
|
|
- if (lh.x < 0 || lh.z < 0 || lh.x >= size || lh.z >= size)
|
|
|
+
|
|
|
+ if (lh.x < 0 || lh.z < 0 || lh.x >= size || lh.z >= size) {
|
|
|
continue;
|
|
|
+ }
|
|
|
+
|
|
|
int idx = lh.z * size + lh.x;
|
|
|
+
|
|
|
if (overrideHeight) {
|
|
|
- geomap.getHeightArray()[idx] = lh.h;
|
|
|
+ heightArray[idx] = lh.h;
|
|
|
} else {
|
|
|
- float h = getMesh().getFloatBuffer(Type.Position).get(idx*3+1);
|
|
|
- geomap.getHeightArray()[idx] = h+lh.h;
|
|
|
+ float currentHeight = floatBuffer.get(idx * 3 + 1);
|
|
|
+ heightArray[idx] = currentHeight + lh.h;
|
|
|
}
|
|
|
-
|
|
|
}
|
|
|
|
|
|
- FloatBuffer newVertexBuffer = geomap.writeVertexArray(null, stepScale, false);
|
|
|
- getMesh().clearBuffer(Type.Position);
|
|
|
- getMesh().setBuffer(Type.Position, 3, newVertexBuffer);
|
|
|
+ floatBuffer.clear();
|
|
|
+ geomap.writeVertexArray(floatBuffer, stepScale, false);
|
|
|
+ vertexBuffer.setUpdateNeeded();
|
|
|
}
|
|
|
|
|
|
/**
|