I am creating a system with many individual elements. Like a ballpit, each element a full object that must be updated continuously as the system receives outside input.
I’m updating my VBO like so:
public void updateData()
{
FloatBuffer vertices = BufferUtils.createFloatBuffer((4*this.getObjectCount()) * 7); //4 * 7
IntBuffer elements = BufferUtils.createIntBuffer((2*this.getObjectCount()) * 3); //2 * 3
for(int i = 0; i < this.getObjectCount(); i++)
{
vertices.put(this.getObject(i).getX()).put(this.getObject(i).getY()).put(rVal).put(gVal).put(bVal).put(this.getObject(i).getTCX1()).put(this.getObject(i).getTCY2());
vertices.put(this.getObject(i).getX() + this.getObject(i).getCurrFrameWidth()).put(this.getObject(i).getY()).put(rVal).put(gVal).put(bVal).put(this.getObject(i).getTCX2()).put(this.getObject(i).getTCY2());
vertices.put(this.getObject(i).getX() + this.getObject(i).getCurrFrameWidth()).put(this.getObject(i).getY() + this.getObject(i).getCurrFrameHeight()).put(rVal).put(gVal).put(bVal).put(this.getObject(i).getTCX2()).put(this.getObject(i).getTCY1());
vertices.put(this.getObject(i).getX()).put(this.getObject(i).getY() + this.getObject(i).getCurrFrameHeight()).put(rVal).put(gVal).put(bVal).put(this.getObject(i).getTCX1()).put(this.getObject(i).getTCY1());
elements.put((i*4) + 0).put((i*4) + 1).put((i*4) + 2);
elements.put((i*4) + 2).put((i*4) + 3).put((i*4) + 0);
}
vertices.flip();
elements.flip();
vbo2.bind(GL_ARRAY_BUFFER);
vbo2.updateData(GL_ARRAY_BUFFER, 0, vertices);
vbo2.unbind(GL_ARRAY_BUFFER);
ebo2.bind(GL_ELEMENT_ARRAY_BUFFER);
ebo2.updateData(GL_ELEMENT_ARRAY_BUFFER, 0, elements);
ebo2.unbind(GL_ELEMENT_ARRAY_BUFFER);
}
[icode]those vertices are: X, Y, r, g, b, tex1, tex2[/icode]
If I do not update the VBO, the system runs at around my normal best framerate. If updating the VBO is allowed, at <300 objects it runs decently, but after 300-400 you start to feel it and the FPS is already dropping by 33%. What can I do to relieve this? Is updating the VBO likely the problem, or do you think this could indicate a problem elsewhere?
I thought VBOs had a max size or an optimal size, but I’m seeing mixed information, or maybe it has changed with new OpenGL.
I’ve read about double buffering, but I’m not sure it is right, and I was having trouble grasping how it would help this situation.