Question about VAO and GL 3.2 core

Is VAO (Vertex array object) a requirement when using OpenGL 3.2 core profile ?

Is drawing call like glDrawArrays or glDrawElements still operate if I don’t use VAO.

assume that I use VBO and shader and no other shader-deprecate built-in variable.

I still using OpenGL 2.1 but would like to design my code to be easily port to GL3.2. (I already get rid of all deprecate stuff like GLU,Matrix stack relate function,predefine uniform/attribute variable)

Yes, VAO is in 3.2 core. It is even in 3.0 forward compatible context.

Yes, draw functions can run without VAO. On pre-GL3 core/fc versions you can use display lists to simulate VAO’s.

Is VAO (Vertex array object) a requirement when using OpenGL 3.2 core profile ?

What exactly do you mean by that?

GL 3.0 and above have VAOs as a core feature. So yes, VAOs are required in GL 3.2 core. But does that mean you need to encapsulate all of your objects in separate VAOs?

Vertex Array Objects, much like texture objects and other OpenGL Objects, are designed to degrade gracefully in the absence of their use. VAOs encapsulate the state that is set by all of the gl*Pointer functions, as well as glEnableVertexAttrib and its ilk.

The VAO object number 0 works like it does for many object types: it acts as a single, global, undeleteable VAO object. Thus, if you never bind a VAO object, your code will act exactly like it does if VAO is not implemented.

VAO functionality will be available in 3.0 and above. But you do not have to use it. Though I suggest you do.

I still using OpenGL 2.1 but would like to design my code to be easily port to GL3.2.

FYI: VAO is an extension too. It is implemented on quite a lot of GL 2.1 implementations (if you have recent drivers).