Jump to content
  • Advertisement
Sign in to follow this  
izzo

OpenGL opengl version problems

This topic is 4863 days old which is more than the 365 day threshold we allow for new replies. Please post a new topic.

If you intended to correct an error in the post then please contact us.

Recommended Posts

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

Share this post


Link to post
Share on other sites
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...

Share this post


Link to post
Share on other sites
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.

Share this post


Link to post
Share on other sites
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.

Share this post


Link to post
Share on other sites
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

Share this post


Link to post
Share on other sites
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.

Share this post


Link to post
Share on other sites
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


Share this post


Link to post
Share on other sites
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..

Share this post


Link to post
Share on other sites
Sign in to follow this  

  • Advertisement
×

Important Information

By using GameDev.net, you agree to our community Guidelines, Terms of Use, and Privacy Policy.

GameDev.net is your game development community. Create an account for your GameDev Portfolio and participate in the largest developer community in the games industry.

Sign me up!