Vba & vao

I have a question, from quick searches JME really doesn’t use VBA and VAO on a regular bases.

From what I see that only instancing meshes will use VBA and VAO not regular meshes?

This is correct, right?

Also, what is the thinking behind not using VBA/VAO to store data. Updating the GPU on every frame with new data is much slower than using VBA/VAO.

I’m starting to see why my own engine ended up so much faster than JME, I regularly used VBA/VAO and instancing when producing a bunch of the same meshes.

Using batch nodes is nice and simple but the GPU data is changed every frame, while using instancing you can define many of the data to be “STATIC” so you don’t change geometries, normals texture coords and a few more things on the meshes.

You can define define some of the data to be DYNAMIC so the GPU know some of the data changes. then pass in that data to change Model View and several data. So you only have to get “1” call (Basically) to the GPU. Now you can define the draw limit on the number of objects and then loop to draw all of them.

This is far faster than changing the mesh every frame update and defining a new MESH to the GPU.

Just wondering, does anyone know the reason why JME decided to go down this path and not use VBA/VAO at a standard and reason why NO INSTANCING is anywhere the engine in normal conditions like a particle system.


Not correct. They are used for everything as you can see from the source code .