Modifying a mesh

I guess I don’t get what is meant by a mesh being dynamic, as I am unable to hand it in new vertex data after the first time.

I am trying to create a dynamic little patch of seawater, and use this code to try to update the Y values of the vertices:

FloatBuffer mVertices;

float[][] mHeightMap;

Mesh mMesh; // has been setDynamic()

void updateHeights() {

int index = 1;

for (int s = 0; s < pointCountX; s++) {

for (int t = 0; t < pointCountZ; t++) {

mVertices.put(index, mHeightMap[t]);

index += 3;



// setBuffer() throws exception shown below the second time it is used

mMesh.setBuffer(VertexBuffer.Type.Position, 3, mVertices);



The exception is:

java.lang.UnsupportedOperationException: Data has already been sent. Cannot setupData again.

Shall I create a whole new Mesh each update?


You should update the mesh, instead of creating a new one. Use this:

Heres an example where I have used it before:

[java] private void modifyUV(Geometry g, float amount) {

VertexBuffer uv = g.getMesh().getBuffer(Type.TexCoord);

float[] uvArray = BufferUtils.getFloatArray((FloatBuffer) uv.getData());

for (int j = 0; j < uvArray.length; j++) {

if (j % 2 != 0) {

uvArray[j] += amount;





You don’t want to send in a new buffer each time for the mesh. You just have to get the existing buffer and modify it.

Get the buffer from your mesh:

VertexBuffer vb = mesh.getBuffer(Type.Position);

Modify the data in it:

BufferUtils.setInBuffer(myValue, (FloatBuffer)vb.getData(), index);

Update it:


@wezrule’s method will work too


Thanks both!