if you use OF_PRIMITIVE_TRIANGLES in the vboMesh, you can append the circles directly in the vbo and draw all of them at once, using mesh.append(circleMesh)
the fastest way though is by using instanced drawing and a custom attribute in the vbo to pass the position.
there's a couple of examples in 0.9 i think the most similar to what you want to do is textureBufferInstancedExample although you wouldn't need the texture buffer, something like:
//.h
ofVboMesh circleMesh;
vector<ofVec3f> posVector;
//setup
//create 1 circle in circleMesh
for(int i=0;i<numPositions;i++){
posVector.push_back(newPosition);
}
circleMesh.getVbo().setAttributeData(shader.getLocation("circlePosition"), posVector.data(), 3, posVector.size());
circleMesh.setAttributeDivisor(shader.getLocation("circlePosition"),1); // this tells that the circlePosition attribute is passed once per instance instead of once per vertex
//update
for(auto & pos: posVector){
pos = ...;
}
circleMesh.getVbo().updateAttributeData(shader.getLocation("circlePosition"), posVector.data(), posVector.size());
// draw
shader.begin();
circleMesh.drawInstanced(OF_MESH_FILL, posVector.size() );
shader.end();
where shader should have the usual attributes for position, color, texcoord (or whatever you are using) and a vec3 circlePosition
attribute that allows to position the circle.