so, for what i need for now this works well on a single mesh, but how to adapt the code to load multiple objects, i read that i can use multiple VAOs or a single big VAO (hope this is correct), so my question is if someone of you can you help me to find my way through this

I'd extract all the data-setting elements for the geometry into a struct or class and call it something like "Model" or "GeometryPacket". You need a VAO per different VBO and different set of program attribute bindings you use.

You can do something like this and use VAOs instead of storing the vertices and indices themselves in the "GeometryPacket".

Here's what I use in my little renderer. It provides the VAO for a program, the VBO (I update some geometry while running, so I need the buffer and would rather not glGet it) and primitive type and number of vertices for drawing. I don't use element arrays right now since its a super-simple toy renderer.

i'm sorry but i can't understand what is your suggestion, my idea is to fill a single VBO with all the vertices of the objects i want to draw and the EBO with the indices of all the objects then call a glDrawElements for each objects that i want draw by specifying an offset, i know is not one of the best method but i need to learn first easy things then pass to some more complicated stuff. Your method seems quite complicated to me, but hey, probably i can't really understand what your renderer does

so, for what i need for now this works well on a single mesh, but how to adapt the code to load multiple objects, i read that i can use multiple VAOs or a single big VAO (hope this is correct), so my question is if someone of you can you help me to find my way through this

You can use a single big VAO, but this makes you need to rebind each VBO and then setup all the vertex attrib pointers, over and over again. I had been doing that until someone here on the forums pointed me in the direction of not doing that.

A VAO keeps all the data you need to supply vertices into a single OpenGL object. Then instead of doing this for every object in your scene:

As an example I had rewritten a simpler version of your "ContentManager" using my concept in the airport from your previous thread, so here it is. It looks like all your ContentManager did was load a model, so I changed the name to SimpleModel. Then, I can create instances of SimpleModel, each with a different mesh.