When vendor makes drivers '1.4 do they have to support all the standard extensions'?

One thing I don’t understand (or ‘another thing’ :slight_smile: Is that when a vendor makes drivers for their chip/graphic card and say thay say the drivers support OpenGL 1.4, does it mean that they have to support all the extensions (ARB) that are ‘standard and in the core’ ?
(Why the heck are they still ‘extensions’ if they are in the core?
Then, if they don’t put a particular extension support in the driver and say your game engine uses an extensions that is not supported by the driver, will there be software emulation (like in a case of DirectX, me thinks, where if a feature is not available on hardware it can be software emulated, at least I think that how it is over there :slight_smile: or do you have to rewrite your game engine, or part of it, so it doesn’t use that feature?
I promise this was the last question for tonight :slight_smile:
Thank you very much,
Luke

Everything that is above OpenGL 1.1 (I think) has to be an extension as microsoft refuses to update its OpenGL lib (another good reason for linux, this is up to date).

If a program uses an extension that is not supported, it crashes (if not checking it properly), while others may be there but cause a fallback to software rendering because they are not supported by the hardware.

But there is a silent agreement in the world of OpenGL programmers which extensions to use, and also, there are nearly only two chip manufacturers left, so in general, if you do not strictly use only ARB extension, there’s an ATI way to do things and an NVIDIA way to do things, causing games like doom3 to have six or seven or even more rendering engines implemented, several ati, several nvidia (gf2, gf3+4, gf fx) and one or two arb ways.

“Everything that is above OpenGL 1.1 (I think) has to be an extension as microsoft refuses to update its OpenGL lib (another good reason for linux, this is up to date).”

Can’t someone else update the OpenGL lib? They do it on Linux :slight_smile:

“If a program uses an extension that is not supported, it crashes (if not checking it properly), while others may be there but cause a fallback to software rendering because they are not supported by the hardware.”

But is this software rendering automatically done by OpenGL if it doesn’t encounter the needed hardware, or does one have to implement it’s own software renderer?

"But there is a silent agreement in the world of OpenGL programmers which extensions to use, and also, there are nearly only two chip manufacturers left, so in general, if you do not strictly use only ARB extension, there’s an ATI way to do things and an NVIDIA way to do things, causing games like doom3 to have six or seven or even more rendering engines implemented, several ati, several nvidia (gf2, gf3+4, gf fx) and one or two arb ways. "

I see, so any OpenGL driver must implement all ARB extensions? Why do we still need a few engines for ATI or a few for NVidia? Do some NVidia cards support only certian extensions, while other cards more or other extensions?
(This is confusing :slight_smile:

Where can I find out which cards support which extensions?

Huge thanks Jan,
Luke

Originally posted by BigShooter:
Can’t someone else update the OpenGL lib? They do it on Linux :slight_smile:

No. The OpenGL lib is part of the operating system, and Windows is not open source.

Originally posted by BigShooter:
[b]I see, so any OpenGL driver must implement all ARB extensions? Why do we still need a few engines for ATI or a few for NVidia? Do some NVidia cards support only certian extensions, while other cards more or other extensions?

Where can I find out which cards support which extensions?

Huge thanks Jan,
Luke[/b]

No. An OpenGL driver is not required to support any extension. An OpenGL driver must implement all features of its core version (except the imaging subset which is an optional core feature). Usually, the interaction between extension and core goes like this : at a given moment, a new extension is defined by one or more hardware vendors. If the extension proves to be well defined, usefull, widely supported and used by the software community, it can be promoted to core feature in the next revision of OpenGL. Example : OpenGL 1.1 (core) does not support 3D textures. At some point, an extension was defined to enable applications to use 3D textures. 3D textures were later integrated into the core in OpenGL 1.2. This means that :
1/ any OpenGL driver with version >= 1.2 must support 3D textures
2/ an OpenGL 1.1 driver can support 3D textures through an extension.

of course one does not have to use the standard OpenGL libs provided with various programming packages (MSVC, Dev-C++, LCC-Win32, Delphi, …) for C/C++ programmers ExtGL by Lev Povalahev is a great option to use OpenGL functionality up to Version 1.4 (if your video card driver supports it).
For Delphi one may use the OpenGL.pas of the Ogl engine (http://www.martinscad.cjb.net) which does also support OpenGL 1.4 functionality (however, only the core functions are supported - no extensions).

stay tuned and have fun

mw

Extensions are not in the core by definition. ARB extensions are optional parts that a vendor does not need to support to claim 1.x support. It is a way to promote a feature to be almost core but placate vendors who might otherwise vote it down through pure self interest. I don’t think it’s really different from an EXT although there may be some distinction there like the function entry points getting put in maintained versions of gl.h (not sure about this I’m just speculating). Oh and it’ll get covered in the Red Book etc.

Any practical difference is minor.

ARB extensions are optional parts that a vendor does not need to support to claim 1.x support.

That’s not quite true. Extensions (ARB or otherwise) which got promoted to the core must be exposed in some way for the driver to claim 1.x compatibility. That is, if the driver claims it is compliant with GL 1.4, then all of the non-optional GL 1.4 API must be available, either directly or via the extension mechanism.

For example, on Windows, glSecondaryColor3f is available via the extension mechanism on GL 1.4 implementations. Notice that the function call doesn’t have an ARB or EXT suffix.

For reference, the only optional part of GL 1.4 is ARB_imaging.

Extensions that are promoted to the core are no longer extensions (well, they still exists as extensions, but the extension itself is not required), since they are in the core. The fact that you, on Windows, have to use the extension mechanism to get them is a different story. Don’t confuse 1.2+ core features with extensions just because you have to load them yourself.

So no extensions are required to be supported, only core features.