void FWindow::Linux_VerticalSync(GLint EnableSync) { if(EXTSwapControlSupported) { SwapIntervalEXT(WindowManager::GetDisplay(), WindowHandle, EnableSync); } if(MESASwapControlSupported) { SwapIntervalMESA(EnableSync); } if(SGISwapControlSupported) { if(EnableSync < 0) { EnableSync = 0; } SwapIntervalSGI(EnableSync); } }
HWND gkDeviceRenderContext::initDevice(ISystemInitInfo& sii) { ////////////////////////////////////////////////////////////////////////// // create a window SetWindow( sii.fWidth, sii.fHeight, false, 0 ); getRenderer()->SetCurrContent(0,0,0,sii.fWidth, sii.fHeight); ////////////////////////////////////////////////////////////////////////// // create a tmp context m_dc = GetDC( m_hWnd ); PIXELFORMATDESCRIPTOR pfd= { sizeof(PIXELFORMATDESCRIPTOR), 1, PFD_DRAW_TO_WINDOW|PFD_SUPPORT_OPENGL| PFD_DOUBLEBUFFER|PFD_GENERIC_ACCELERATED|PFD_GENERIC_FORMAT, PFD_TYPE_RGBA, 24, 0,0,0,0,0,0, 0, 0, 0, 0,0,0,0, 0, 0, 0, PFD_MAIN_PLANE, 0, 0,0,0 }; int pixelFormat = ChoosePixelFormat( m_dc, &pfd ); if (pixelFormat == 0) { pixelFormat == 1; } DescribePixelFormat(m_dc, pixelFormat, sizeof(PIXELFORMATDESCRIPTOR), &pfd ); SetPixelFormat(m_dc, pixelFormat, &pfd); m_mainContext = wglCreateContext( m_dc ); if (!m_mainContext) { gkLogError( _T("Win32 Create GL Context Failed.") ); } wglMakeCurrent( m_dc, m_mainContext ); ////////////////////////////////////////////////////////////////////////// // get eglextension PFNWGLGETEXTENSIONSSTRINGEXTPROC GetExtensionsStringEXT = (PFNWGLGETEXTENSIONSSTRINGEXTPROC) wglGetProcAddress( "wglGetExtensionsStringEXT" ); PFNWGLGETEXTENSIONSSTRINGARBPROC GetExtensionsStringARB = (PFNWGLGETEXTENSIONSSTRINGARBPROC) wglGetProcAddress( "wglGetExtensionsStringARB" ); PFNWGLCREATECONTEXTATTRIBSARBPROC CreateContextAttribsARB = (PFNWGLCREATECONTEXTATTRIBSARBPROC) wglGetProcAddress( "wglCreateContextAttribsARB" ); SwapIntervalEXT = (PFNWGLSWAPINTERVALEXTPROC) wglGetProcAddress( "wglSwapIntervalEXT" ); PFNWGLGETPIXELFORMATATTRIBIVARBPROC GetPixelFormatAttribivARB = (PFNWGLGETPIXELFORMATATTRIBIVARBPROC) wglGetProcAddress( "wglGetPixelFormatAttribivARB" ); if (!CreateContextAttribsARB || !GetExtensionsStringEXT || !GetExtensionsStringARB || !SwapIntervalEXT || !GetPixelFormatAttribivARB) { gkLogError(_T("Can not Create GL330 device, driver may not support.")); return NULL; } // delete tmp context wglMakeCurrent( NULL, NULL ); wglDeleteContext( m_mainContext ); ////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////// // config int flags, i = 0, attribs[40]; // choose api version attribs[i++] = WGL_CONTEXT_MAJOR_VERSION_ARB; attribs[i++] = 3; attribs[i++] = WGL_CONTEXT_MINOR_VERSION_ARB; attribs[i++] = 2; flags = 0; flags |= WGL_CONTEXT_FORWARD_COMPATIBLE_BIT_ARB; //flags |= WGL_CONTEXT_DEBUG_BIT_ARB; attribs[i++] = WGL_CONTEXT_FLAGS_ARB; attribs[i++] = flags; // core profile or compatibility flags = WGL_CONTEXT_CORE_PROFILE_BIT_ARB; //flags = WGL_CONTEXT_COMPATIBILITY_PROFILE_BIT_ARB; attribs[i++] = WGL_CONTEXT_PROFILE_MASK_ARB; attribs[i++] = flags; attribs[i++] = 0; m_dc = GetDC( m_hWnd ); m_mainContext = CreateContextAttribsARB( m_dc, NULL, attribs ); if (!m_mainContext) { gkLogError( _T("Win32 Create GL Context Failed.") ); } wglMakeCurrent( m_dc, m_mainContext ); SwapIntervalEXT( 0 ); SwapBuffers( m_dc ); return m_hWnd; }
gkDeviceRenderContext::~gkDeviceRenderContext() { ////////////////////////////////////////////////////////////////////////// // get eglextension PFNWGLGETEXTENSIONSSTRINGEXTPROC GetExtensionsStringEXT = (PFNWGLGETEXTENSIONSSTRINGEXTPROC) wglGetProcAddress( "wglGetExtensionsStringEXT" ); PFNWGLGETEXTENSIONSSTRINGARBPROC GetExtensionsStringARB = (PFNWGLGETEXTENSIONSSTRINGARBPROC) wglGetProcAddress( "wglGetExtensionsStringARB" ); PFNWGLCREATECONTEXTATTRIBSARBPROC CreateContextAttribsARB = (PFNWGLCREATECONTEXTATTRIBSARBPROC) wglGetProcAddress( "wglCreateContextAttribsARB" ); SwapIntervalEXT = (PFNWGLSWAPINTERVALEXTPROC) wglGetProcAddress( "wglSwapIntervalEXT" ); PFNWGLGETPIXELFORMATATTRIBIVARBPROC GetPixelFormatAttribivARB = (PFNWGLGETPIXELFORMATATTRIBIVARBPROC) wglGetProcAddress( "wglGetPixelFormatAttribivARB" ); // delete tmp context wglMakeCurrent( NULL, NULL ); wglDeleteContext( m_mainContext ); return; int flags, i = 0, attribs[40]; // choose api version attribs[i++] = WGL_CONTEXT_MAJOR_VERSION_ARB; attribs[i++] = 3; attribs[i++] = WGL_CONTEXT_MINOR_VERSION_ARB; attribs[i++] = 2; flags = 0; flags |= WGL_CONTEXT_FORWARD_COMPATIBLE_BIT_ARB; //flags |= WGL_CONTEXT_DEBUG_BIT_ARB; attribs[i++] = WGL_CONTEXT_FLAGS_ARB; attribs[i++] = flags; // core profile or compatibility flags = WGL_CONTEXT_CORE_PROFILE_BIT_ARB; //flags = WGL_CONTEXT_COMPATIBILITY_PROFILE_BIT_ARB; attribs[i++] = WGL_CONTEXT_PROFILE_MASK_ARB; attribs[i++] = flags; attribs[i++] = 0; m_dc = GetDC( m_hWnd ); m_mainContext = CreateContextAttribsARB( m_dc, NULL, attribs ); if (!m_mainContext) { gkLogError( _T("Win32 Create GL Context Failed.") ); } wglMakeCurrent( m_dc, m_mainContext ); SwapIntervalEXT( 0 ); SwapBuffers( m_dc ); }