No I meant VAO everywhere I wrote it.
So, I wasn't talking about having all vertex attributes in a single buffer - that's called interleaving and you SHOULD do it for all attributes that have the same frequency of changing values. So for all stuff that's constant, have a buffer with all the attributes interleaved (vertex positions, UVs, colors, etc), and additional buffers for stuff that might change, like skinning matrices.
What I'm talking about is the following - you have a vertex array object, and I assume you create and store one for each mesh that you have from the code you posted. You also have one or several vertex buffers, it doesn't really matter how many.
Now, you correctly setup bindings between vertex attributes and the buffers to source the data from using glVertexAttribPtr, HOWEVER, you do it every time you draw something. Now, the purpose of a vertex array object is to STORE that binding information, so you can switch between different configurations by just changing the vertex array object binding. This is theoretically faster and also better stilistically.
So instead of going, in each draw or update method
glBindVertexArray(m_IDVAO);
glEnableVertexAttribArray(m_attrPos);
glBindBuffer(GL_ARRAY_BUFFER, m_IDVBO);
glVertexAttribPointer(...)
(....and so on)
You can just do that ONCE, after creating all the buffers, and then in your update or draw or whatever you have, for each draw call, just go
glBindVertexArray(m_IDVAO);
glDrawElements(GL_TRIANGLES...);
and that's it. No rebinding required.
You'll still have to bind the element array buffer individually though.
On the topic of tutorials, they're all shit. Well, most of them. The ONLY tutorials on OpenGL that I can recommend are those:
https://learnopengl.com/https://open.gl/http://www.opengl-tutorial.org/In that order. The first one actually covers everything you need, and better than the other two in my opinion. EVERYTHING ELSE is deprecated bullshit that you should never read.
ESPECIALLY not the red book.
Problem is, most OpenGL tutorials, including the famous NeHe stuff that everybody followed back in the day, are just teaching deprecated stuff that you should never do anymore. Actually, even those I posted above teach deprecated stuff, but it's still reasonable to use.
Personally, I recommend not ever again using ANY API below OpenGL 4.5 - because 4.5 is where the API starts to kinda get more concise if you really throw out everything else. So OpenGL4.5 Core is what I personally use exclusively to stay more or less sane.
However that's not an option for you because Apple decided to ditch support for everything above 4.1 so there you go.
If any of the above still is confusing, what I'd find understandable because it's more of a rambling, feel free to ask.