opengl version problems

Started by
8 comments, last by izzo 18 years, 5 months ago
Argh.. I just installed the latest NVIDIA drivers and now OpenGL reports itself as version 2.0.1. That's not a problem. What is a problem is the poorly written demos that I want to run that have crappy version checking code! I tried running some old projects of mine that used extgl to get access to OpenGL extensions and found that even extgl had bodgy version checking code! It would assume that if the first digit of the version string returned by glGetString was not a 1, then you don't have OpenGL 1.2, 1.3, or 1.4! Grr. Is there any way to force the driver to report a different version of OpenGL? cheers sam
Advertisement
Yes, the demos are badly written and that sucks.

It's just as worrying that the Nvidia drivers are reporting OpenGL Version 2.0.1, which does not exist...
Quote:Original post by RichardS
It's just as worrying that the Nvidia drivers are reporting OpenGL Version 2.0.1, which does not exist...


The OpenGL version has format
<major-version>.<minor-version>.<release number><space><vendor specific info>
where release number and vendor specific info are only optional and it's format is implementation dependent.
OpenGL version should be checked only against major and minor numbers (if you do not want to distinguish between various builds of your driver).
2.0.1 is valid version string. My ATI for example returns 2.0.5469 WinXP Release.
Quote:Original post by b2b3
Quote:Original post by RichardS
It's just as worrying that the Nvidia drivers are reporting OpenGL Version 2.0.1, which does not exist...


The OpenGL version has format
<major-version>.<minor-version>.<release number><space><vendor specific info>
where release number and vendor specific info are only optional and it's format is implementation dependent.
OpenGL version should be checked only against major and minor numbers (if you do not want to distinguish between various builds of your driver).
2.0.1 is valid version string. My ATI for example returns 2.0.5469 WinXP Release.


Good to know, thanks.
My fix for this was rather simple, in extgl_InitSupportedExtensions:

    char *s = (char*) glGetString(GL_VERSION);    extgl_ExtString[0] = 0;    if (!s)        return;    s = strstr(s, "1.");    if (s == NULL)    {		// Assume higher version        extgl_Extensions.OpenGL12 = 1;            extgl_Extensions.OpenGL13 = 1;            extgl_Extensions.OpenGL14 = 1;    }


Simply changed the 0s to 1s, because these are suppored if the number is >1 (and I don't think that it's ever likely to be <=0).

~SPH
AIM ME: aGaBoOgAmOnGeR
also not good, heres from a nvidia pdf

4.2. Proper Version String Parsing
Early application testing by NVIDIA has encountered a few isolated OpenGL
applications that incorrectly parse the GL_VERSION string when the OpenGL version
changed from 1.5 to 2.0.
OpenGL developers are strongly urged to examine their application code that parses the
GL_VERSION string to make sure pairing the application with an OpenGL 2.0
implementation will not confuse or crash the application.
Use the routine below to correctly test if at least a particular major and minor version of
OpenGL is available.
static int
supportsOpenGLVersion(int atLeastMajor, int atLeastMinor)
{
const char *version;
int major, minor;
version = (const char *) glGetString(GL_VERSION);
if (sscanf(version, "%d.%d", &major, &minor) == 2) {
if (major > atLeastMajor)
return 1;
if (major == atLeastMajor && minor >= atLeastMinor)
return 1;
} else {
/* OpenGL version string malformed! */
}
return 0;
}
For example, the above routine returns true if OpenGL 2.0 or better is supported (and
false otherwise) when the routine is called like this:
int hasOpenGL20 = supportsOpenGLVersion(2, 0);
Be sure your OpenGL applications behave correctly with OpenGL 2.0 when the
GL_VERSION string changes.
and for those of you who bother to read the Forum FAQ 3DLabs have released some code to check the version number of various OpenGL things properly.
Yep.. I fixed it in my local copy of extgl, but unfortunately I still have a few poorly written demos I'd like to watch. Oh well! I thought there might be some way to force the driver to report a particular version..

cheers
sam


well, iirc glIntercept can fake the opengl number, so in theory, you could put the glIntercept dll in the exe's directory, turn off all the logging and switch on the faked OpenGL version stuff should let you watch stuff without too much of a speed hit..
Ahh perfect! That's exactly what I was hoping for! Thanks!!

This topic is closed to new replies.

Advertisement