We are building an opengl application on windows using glew 2.1 to load extensions. I have some questions about best practices here since there are different options available for the functions I want to call and I don’t really understand the differences.
For example to use VBOs I have the option of checking the glew flag
GLEW_VERSION_1_5 and then using the functions
glBufferData. Or I could check the flag
GLEW_ARB_vertex_buffer_object and use the functions
glGenBuffersARB etc. I’d like to know if there is any reason in practice to prefer one to the other, it sounds like in principle that the ARB functions could be available when the non-ARB are not, in which case is there any downside to just using the ARB version? And is it correct that the reverse scenario is not possible?
We also need to use GLSL, and here I have basically the same choice between checking for
GLEW_VERSION_2_0 and using non ARB, and checking
GLEW_ARB_shader_objects and using ARB.
We also need to use FBOs and here I get particularly confused. The fbo functions like
glBindFramebuffer etc in the glew main header file are not organised under an opengl version but instead appear under the flag
GLEW_ARB_framebuffer_object. Despite this they don’t seem to have an ARB version but they do have an EXT version, the EXT versions appear with the flag
GLEW_EXT_framebuffer_object. Although interestingly glew supplies two separate flags for the multisampling EXT functions
I was looking at some popular open source libraries like Ogre3D and Horde3D and I noticed that for FBOs specifically they do seem to favour the EXT versions. Ogre also uses the ARB versions of VBO and GLSL functions but Horde doesn’t. At the moment I am leaning towards just following the Ogre approach. It’s possible that it doesn’t make much difference these days, but the software does need to run on cheap intel graphics so I’m not sure.
Thanks for any help.