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).