OpenGL独占模式全屏

DirectX允许应用程序独占GPU和发送内容的监视器。 这被称为全屏。 使用OpenGL时,使用ChangeDisplaySettings(&dv, CDS_FULLSCREEN)激活全屏。 但是,这样做的结果是一个“假”全屏 – 全屏窗口。 这两者的performance有一些差异,特别是在焦点不清的情况下。

有没有办法以全屏方式创build一个窗口的方式,只使用Win32 API和OpenGL,或者这是DirectX独有的function?

如果你愿意让GLUT为你做窗口任务,你可以看看这里: 全屏在openGL中

如果你想自己进入WIN32细节,你可以这样做:

 #include <Windows.h> #include <stdlib.h> #include "glew.h" #include <gl/GL.h> #include <gl/GLU.h> int main() { HWND hwnd; HDC hdc; int pixelFormat; PIXELFORMATDESCRIPTOR pfd; // First create the full screen window hwnd = CreateWindowEx(0 ,"STATIC","",WS_VISIBLE | WS_EX_TOPMOST, 0,0,640,480,0,0,GetmoduleeHandle(NULL),0); WINDOWPLACEMENT g_wpPrev = { sizeof(g_wpPrev) }; DWORD dwStyle = GetWindowLong(hwnd, GWL_STYLE); MONITORINFO mi = { sizeof(mi) }; if (GetWindowPlacement(hwnd, &g_wpPrev) && GetMonitorInfo(MonitorFromWindow(hwnd, MONITOR_DEFAULTTOPRIMARY), &mi)) { SetWindowLong(hwnd, GWL_STYLE, dwStyle & ~WS_OVERLAPPEDWINDOW); SetWindowPos(hwnd, HWND_TOP, mi.rcMonitor.left, mi.rcMonitor.top, mi.rcMonitor.right - mi.rcMonitor.left, mi.rcMonitor.bottom - mi.rcMonitor.top, SWP_NOOWNERZORDER | SWP_FRAMECHANGED); } // Describe the pixel format memset(&pfd,0,sizeof(PIXELFORMATDESCRIPTOR)); pfd.nSize = sizeof(PIXELFORMATDESCRIPTOR); pfd.nVersion = 1; pfd.dwFlags = PFD_DRAW_TO_WINDOW | PFD_SUPPORT_OPENGL | PFD_DOUBLEBUFFER; pfd.iPixelType = PFD_TYPE_RGBA; pfd.cColorBits = 32; pfd.cDepthBits = 16; pfd.iLayerType = PFD_MAIN_PLANE; // Create the device context and rendering context hdc = GetDC(hwnd); pixelFormat = ChoosePixelFormat(hdc,&pfd); SetPixelFormat(hdc,pixelFormat,&pfd); HGLRC rendering_context = wglCreateContext(hdc);; BOOL rc = wglMakeCurrent(hdc, rendering_context); GLenum err = glewInit(); if (GLEW_OK != err){ } //Paint the back buffer red glClearColor(1,0,0,0); glClear(GL_COLOR_BUFFER_BIT); glFlush(); //Show on screen rc = SwapBuffers(hdc); while(1){ // do something... } 

}

希望这可以帮助..