EXT vs. non-EXT

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

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.

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 :slight_smile:

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

Use non-EXT when available.

Ido

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.

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.