I've just now started learning OpenGL and I'm getting very overwhelmed and confused with some things. I don't want to permaturely optimize things, but I also don't make decisions about things I still don't fully understand.
Question 1: I know that immediate mode compared to the use of VBOs in OpenGL is primitive and slow, but how much does it really matter for a 2D game, unless I start rendering tens of thousands sprites? At which point does it really justify the hassle of having to go through all that tedious process of the modern OpenGL? (I know modern OpenGL is a better practice, I am just legitimately curious!)
Question 2: I'm making a 2D game, it is going to implement particles, a few sprites, raycasted shadows and some blending tricks. My question is, do I keep one VAO and VBO for each Sprite, or do I create all the sprites in one single VBO / VAO? If so, how do I do that, how should my code be structured? I'm very confused as to how I should batch the draw calls.
Question 3: Is it significantly expensive to swap shaders? How do I handle multiple shaders? I thought about categorizing the objects and join the ones that have the same shader together for drawing, so I don't have to switch shaders as much, but I wasn't sure if it was worth the hassle.