mirror of
https://github.com/SFML/SFML.git
synced 2025-01-31 21:55:13 +08:00
Made the context creation code more flexible, to allow 4.x contexts
git-svn-id: https://sfml.svn.sourceforge.net/svnroot/sfml/branches/sfml2@1788 4e206d99-4929-0410-ac5d-dfc041789085
This commit is contained in:
parent
7c61189f27
commit
c48792e933
@ -223,7 +223,7 @@ void GlxContext::CreateContext(GlxContext* shared, unsigned int bitsPerPixel, co
|
|||||||
// Get the context to share display lists with
|
// Get the context to share display lists with
|
||||||
GLXContext toShare = shared ? shared->myContext : NULL;
|
GLXContext toShare = shared ? shared->myContext : NULL;
|
||||||
|
|
||||||
// Create the OpenGL context -- first try an OpenGL 3.0 context if it is requested
|
// Create the OpenGL context -- first try context versions >= 3.0 if it is requested (they require special code)
|
||||||
while (!myContext && (mySettings.MajorVersion >= 3))
|
while (!myContext && (mySettings.MajorVersion >= 3))
|
||||||
{
|
{
|
||||||
const GLubyte* name = reinterpret_cast<const GLubyte*>("glXCreateContextAttribsARB");
|
const GLubyte* name = reinterpret_cast<const GLubyte*>("glXCreateContextAttribsARB");
|
||||||
@ -249,7 +249,8 @@ void GlxContext::CreateContext(GlxContext* shared, unsigned int bitsPerPixel, co
|
|||||||
XFree(configs);
|
XFree(configs);
|
||||||
}
|
}
|
||||||
|
|
||||||
// If we couldn't create an OpenGL 3 context, adjust the settings
|
// If we couldn't create the context, lower the version number and try again -- stop at 3.0
|
||||||
|
// Invalid version numbers will be generated by this algorithm (like 3.9), but we really don't care
|
||||||
if (!myContext)
|
if (!myContext)
|
||||||
{
|
{
|
||||||
if (mySettings.MinorVersion > 0)
|
if (mySettings.MinorVersion > 0)
|
||||||
@ -259,13 +260,14 @@ void GlxContext::CreateContext(GlxContext* shared, unsigned int bitsPerPixel, co
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
// If the minor version is 0, we decrease the major version and stop with 3.x contexts
|
// If the minor version is 0, we decrease the major version
|
||||||
mySettings.MajorVersion = 2;
|
mySettings.MajorVersion--;
|
||||||
|
mySettings.MinorVersion = 9;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// If the OpenGL 3.0 context failed or if we don't want one, create a regular OpenGL 1.x/2.x context
|
// If the OpenGL >= 3.0 context failed or if we don't want one, create a regular OpenGL 1.x/2.x context
|
||||||
if (!myContext)
|
if (!myContext)
|
||||||
{
|
{
|
||||||
myContext = glXCreateContext(myDisplay, bestVisual, toShare, true);
|
myContext = glXCreateContext(myDisplay, bestVisual, toShare, true);
|
||||||
|
@ -253,7 +253,7 @@ void WglContext::CreateContext(WglContext* shared, unsigned int bitsPerPixel, co
|
|||||||
// Get the context to share display lists with
|
// Get the context to share display lists with
|
||||||
HGLRC sharedContext = shared ? shared->myContext : NULL;
|
HGLRC sharedContext = shared ? shared->myContext : NULL;
|
||||||
|
|
||||||
// Create the OpenGL context -- first try an OpenGL 3.0 context if it is requested
|
// Create the OpenGL context -- first try context versions >= 3.0 if it is requested (they require special code)
|
||||||
while (!myContext && (mySettings.MajorVersion >= 3))
|
while (!myContext && (mySettings.MajorVersion >= 3))
|
||||||
{
|
{
|
||||||
PFNWGLCREATECONTEXTATTRIBSARBPROC wglCreateContextAttribsARB = reinterpret_cast<PFNWGLCREATECONTEXTATTRIBSARBPROC>(wglGetProcAddress("wglCreateContextAttribsARB"));
|
PFNWGLCREATECONTEXTATTRIBSARBPROC wglCreateContextAttribsARB = reinterpret_cast<PFNWGLCREATECONTEXTATTRIBSARBPROC>(wglGetProcAddress("wglCreateContextAttribsARB"));
|
||||||
@ -269,7 +269,8 @@ void WglContext::CreateContext(WglContext* shared, unsigned int bitsPerPixel, co
|
|||||||
myContext = wglCreateContextAttribsARB(myDeviceContext, sharedContext, attributes);
|
myContext = wglCreateContextAttribsARB(myDeviceContext, sharedContext, attributes);
|
||||||
}
|
}
|
||||||
|
|
||||||
// If we couldn't create an OpenGL 3 context, adjust the settings
|
// If we couldn't create the context, lower the version number and try again -- stop at 3.0
|
||||||
|
// Invalid version numbers will be generated by this algorithm (like 3.9), but we really don't care
|
||||||
if (!myContext)
|
if (!myContext)
|
||||||
{
|
{
|
||||||
if (mySettings.MinorVersion > 0)
|
if (mySettings.MinorVersion > 0)
|
||||||
@ -279,13 +280,14 @@ void WglContext::CreateContext(WglContext* shared, unsigned int bitsPerPixel, co
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
// If the minor version is 0, we decrease the major version and stop with 3.x contexts
|
// If the minor version is 0, we decrease the major version
|
||||||
mySettings.MajorVersion = 2;
|
mySettings.MajorVersion--;
|
||||||
|
mySettings.MinorVersion = 9;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// If the OpenGL 3.0 context failed or if we don't want one, create a regular OpenGL 1.x/2.x context
|
// If the OpenGL >= 3.0 context failed or if we don't want one, create a regular OpenGL 1.x/2.x context
|
||||||
if (!myContext)
|
if (!myContext)
|
||||||
{
|
{
|
||||||
myContext = wglCreateContext(myDeviceContext);
|
myContext = wglCreateContext(myDeviceContext);
|
||||||
|
Loading…
Reference in New Issue
Block a user