SFML community forums
Help => Window => Topic started by: golgoth on November 23, 2012, 07:36:59 pm
-
Greetings,
When creating a window I do:
sf::ContextSettings l_settings;
l_settings.majorVersion = 2;
l_settings.minorVersion = 1;
but when I retrieve the info:
mywindow.getSettings().majorVersion
mywindow.getSettings().minorVersion
I get (4 and 2)
How do I force a 2.1 context?
Thx
-
The driver is allowed to use a greater version as long as it's 100% compatible with what you requested.
-
hum, the thing is I'd like to test different Opengl configuration depending on the user's machine. Is there a way to set the context version as being requested?
-
The driver is allowed to do so because it makes absolutely no difference. So there's no point trying to force a specific version -- you can consider that you got it.
-
Don't get me wrong, it’s a very good feature but allowing to create a specific context version (as long as it is supported) would be very handy.
The point is, debugging a 4.2 context to make sure it will run on a system that only support 2.1 is rather painful and It makes a big difference.
I suggest to process the requested context version before:
wglContext.cpp
while (!m_context && (m_settings.majorVersion >= 3))
if the version number is past explicitly and it is supported simply stop there and voila.
-
The point is, debugging a 4.2 context to make sure it will run on a system that only support 2.1 is rather painful and It makes a big difference.
Why? I mean, if drivers are allowed to do that, I guess (and I hope) that it doesn't make any difference for both the programmer and user.
I suggest to process the requested context version before:
wglContext.cpp
while (!m_context && (m_settings.majorVersion >= 3))
if the version number is past explicitly and it is supported simply stop there and voila.
Sorry, I don't understand what you suggest.
If the requested number is less than 3.0 then I use the "old" wglCreateContext function, which creates a pre-3.0 context. It's then the driver who decides to create a greater version. There's nothing I can do, and it's not supposed to be a problem (otherwise they wouldn't be allowed to do that).
-
It's then the driver who decides to create a greater version.
Oh, my apologies! As I read your code, it seemed like you where cycling to the highest supported context explicitly. My question is, is there a point in passing the version number when creating a context?
-
My question is, is there a point in passing the version number when creating a context?
Yes, if you need specific features that were introduced in a specific version greater than 3.0.
-
Oh I see, thank you for your inputs Laurent,
It’s beyond the scope of this thread but I’m guessing you’ve been there before. I’m using VMware 9 on Windows 8 to do testing on Ubuntu and OSX. AFAIK, VMware only supports OpenGL 2.1 and I need to downgrade my OpenGL features for testing purposes. I’m open for suggestions in how to achieve this, if that make any sense to you.
-
wait...
Yes, if you need specific features that were introduced in a specific version greater than 3.0.
Even if I choose any specific version number I always get the higher supported version... I can assure you that this feature worked in the past. I remember creating a 2.1 or 3.3 context without any trouble. Am I taking crazy pills or am I taking a lot of crazy pills?
-
You probably updated your graphics driver.
-
Any way to prevent this automation from the driver? I tried to Google it but I couldn't find anything useful.
-
I don't think so. But you don't need to. Seriously, what's wrong? If the driver is allowed to do that, it's because it doesn't make any difference. It's not to bother developers.
If you want to be sure to stick to OpenGL 2.1, don't use any 3.0+ function. If you use GLEW, you can set a macro to the version that you want to use, and you'll get compiler errors for any function that is 3.0+.