void fgNewWGLCreateContext( SFG_Window* window ) { HGLRC context; int attributes[9]; PFNWGLCREATECONTEXTATTRIBSARBPROC wglCreateContextAttribsARB; /* If nothing fancy has been required, leave the context as it is */ if ( fghIsLegacyContextRequested() ) { return; } wglMakeCurrent( window->Window.pContext.Device, window->Window.Context ); if ( !fghIsExtensionSupported( window->Window.pContext.Device, "WGL_ARB_create_context" ) ) { /* wglCreateContextAttribsARB not found, yet the user has requested the new context creation */ fgWarning( "OpenGL >2.1 context requested but wglCreateContextAttribsARB is not available! Falling back to legacy context creation" ); /* Legacy context already created at this point in WM_CREATE path of fgPlatformWindowProc, just return */ return; } /* new context creation */ fghFillContextAttributes( attributes ); wglCreateContextAttribsARB = (PFNWGLCREATECONTEXTATTRIBSARBPROC) wglGetProcAddress( "wglCreateContextAttribsARB" ); if ( wglCreateContextAttribsARB == NULL ) { /* wglCreateContextAttribsARB not found, yet the user has requested the new context creation */ fgWarning( "OpenGL >2.1 context requested but wglCreateContextAttribsARB is not available! Falling back to legacy context creation" ); /* Legacy context already created at this point in WM_CREATE path of fgPlatformWindowProc, just return */ return; } context = wglCreateContextAttribsARB( window->Window.pContext.Device, 0, attributes ); if ( context == NULL ) { fghContextCreationError(); } wglMakeCurrent( NULL, NULL ); wglDeleteContext( window->Window.Context ); window->Window.Context = context; }
void fgNewWGLCreateContext( SFG_Window* window ) { HGLRC context; int attributes[9]; PFNWGLCREATECONTEXTATTRIBSARBPROC wglCreateContextAttribsARB; /* If nothing fancy has been required, leave the context as it is */ if ( fghIsLegacyContextRequested() ) { return; } wglMakeCurrent( window->Window.pContext.Device, window->Window.Context ); if ( !fghIsExtensionSupported( window->Window.pContext.Device, "WGL_ARB_create_context" ) ) { return; } /* new context creation */ fghFillContextAttributes( attributes ); wglCreateContextAttribsARB = (PFNWGLCREATECONTEXTATTRIBSARBPROC) wglGetProcAddress( "wglCreateContextAttribsARB" ); if ( wglCreateContextAttribsARB == NULL ) { fgError( "wglCreateContextAttribsARB not found" ); } context = wglCreateContextAttribsARB( window->Window.pContext.Device, 0, attributes ); if ( context == NULL ) { fghContextCreationError(); } wglMakeCurrent( NULL, NULL ); wglDeleteContext( window->Window.Context ); window->Window.Context = context; }