PDA

View Full Version : EXT vs. non-EXT



Zajo1
12-19-2008, 07:01 PM
I apologize for the n00b question but I tried a few searches and I didn't find anything to answer it.

Should I be using the EXT or the non-EXT version of a given function? For example, should I call glGenRenderbuffersEXT or just glGenRenderbuffers? Both seem to be available on my nVidia-based system so I'm puzzled.

Thanks,
Emil Dotchevski
http://www.revergestudios.com/reblog/index.php?n=ReCode

Zengar
12-19-2008, 07:22 PM
If I am not mistaken, the non EXT version was first introduced in GL 3.0... I guess you should stick to the EXT if you don't explicitely require GL3.0 for your app.

Zajo1
12-19-2008, 07:33 PM
My question was more general, it seems like on my platform I have many EXT functions that are also available as non-EXT functions, and not all of them are GL3.0-only.

So what are the official guidelines about this? Which versions should I call? What about #defines like GL_COLOR_ATTACHMENT0_EXT -- I also have GL_COLOR_ATTACHMENT0!

This is really confusing :)

Thanks,
Emil Dotchevski
http://www.revergestudios.com/reblog/index.php?n=ReCode

Ido_Ilan
12-20-2008, 01:34 AM
Use non-EXT when available.

Ido

Jan
12-20-2008, 03:52 AM
An extension has usually this way to evolve:

vendor specific (NV, ATI, ...) => common extension (EXT) => ARB approved (ARB) => taken into core (no suffix at all)


So to answer your question more detailed, if you have a function with NO suffix at all, that means it is a core function, so use that. If you have it with EXT or ARB suffix, prefer the one labeled ARB. If you have a function labeled "ATI" or "NV" or something similar vendor-specific, and another version labeled "EXT", prefer the EXT version.

Hope that clears it up,
Jan.

Zengar
12-20-2008, 12:28 PM
First of all, read the specification: it contains a list of extensions that have been promoted to the core.

Then, you have to deside which base GL version is minimal for you application. For example, if you need lots of features that are part of OpenGL 2.0, it makes sence to require OpenGl 2.0 for your app: then you can use all non-extension (core) functionality that is part of GL2.0. If you only need one small bit, maybe it is more smart to use the extension. A good example is the framebuffer object, which is part of the 3.0 core. But if it is the only bit of 3.0 functionality you need, you probably shoudl stick to the EXT version, as only few cards nowadays support GL3.0 and it won't be reasonable to restrict your application to them.