windows – 如何将我的OpenGL应用程序置于全屏模式?
发布时间:2020-12-14 02:51:01 所属栏目:Windows 来源:网络整理
导读:我是OpenGL的新手,但我编写了一个在窗口中运行良好的小应用程序.现在我想全屏运行它. FAQ中有this,但似乎需要GLUT,这不是开源的.将OpenGL应用程序置于全屏模式的好方法是什么?现在在Windows XP上,但我将移植到其他平台. 解决方法 Maciek的答案应该有效.您只
我是OpenGL的新手,但我编写了一个在窗口中运行良好的小应用程序.现在我想全屏运行它.
FAQ中有this,但似乎需要GLUT,这不是开源的.将OpenGL应用程序置于全屏模式的好方法是什么?现在在Windows XP上,但我将移植到其他平台. 解决方法
Maciek的答案应该有效.您只需要NeHe教程的完整资源.
还有更多的资源来处理所有细节,例如将窗口调整为全屏,覆盖起始栏.这是我的一个应用程序中的CreateGLWindow函数(NeHe方法的近似副本). inline BOOL CreateGLWindow(char* title,int width,int height,int bits,bool fullscreenflag) { GLuint PixelFormat; // Holds The Results After Searching For A Match HINSTANCE hInstance; // Holds The Instance Of The Application WNDCLASS wc; // Windows Class Structure DWORD dwExStyle; // Window Extended Style DWORD dwStyle; // Window Style RECT WindowRect; // Grabs Rectangle Upper Left / Lower Right Values WindowRect.left=(long)0; // Set Left Value To 0 WindowRect.right=(long)width; // Set Right Value To Requested Width WindowRect.top=(long)0; // Set Top Value To 0 WindowRect.bottom=(long)height; // Set Bottom Value To Requested Height SCREENWIDTH=width; SCREENHEIGHT=height; fullscreen=fullscreenflag; // Set The Global Fullscreen Flag hInstance = GetModuleHandle(NULL); // Grab An Instance For Our Window wc.style = CS_HREDRAW | CS_VREDRAW | CS_OWNDC; // Redraw On Size,And Own DC For Window. wc.lpfnWndProc = (WNDPROC) WndProc; // WndProc Handles Messages wc.cbClsExtra = 0; // No Extra Window Data wc.cbWndExtra = 0; // No Extra Window Data wc.hInstance = hInstance; // Set The Instance wc.hIcon = LoadIcon(NULL,IDI_WINLOGO); // Load The Default Icon wc.hCursor = LoadCursor(NULL,IDC_ARROW); // Load The Arrow Pointer wc.hbrBackground = NULL; // No Background Required For GL wc.lpszMenuName = NULL; // We Don't Want A Menu wc.lpszClassName = "OpenGL"; // Set The Class Name if (!RegisterClass(&wc)) // Attempt To Register The Window Class { MessageBox(NULL,"Failed To Register The Window Class.","ERROR",MB_OK|MB_ICONEXCLAMATION); return FALSE; // Return FALSE } if (fullscreen) // Attempt Fullscreen Mode? { DEVMODE dmScreenSettings; // Device Mode memset(&dmScreenSettings,sizeof(dmScreenSettings)); // Makes Sure Memory's Cleared dmScreenSettings.dmSize=sizeof(dmScreenSettings); // Size Of The Devmode Structure dmScreenSettings.dmPelsWidth = width; // Selected Screen Width dmScreenSettings.dmPelsHeight = height; // Selected Screen Height dmScreenSettings.dmBitsPerPel = bits; // Selected Bits Per Pixel dmScreenSettings.dmFields=DM_BITSPERPEL|DM_PELSWIDTH|DM_PELSHEIGHT; // Try To Set Selected Mode And Get Results. NOTE: CDS_FULLSCREEN Gets Rid Of Start Bar. if (ChangeDisplaySettings(&dmScreenSettings,CDS_FULLSCREEN)!=DISP_CHANGE_SUCCESSFUL) { // If The Mode Fails,Offer Two Options. Quit Or Use Windowed Mode. if (MessageBox(NULL,"The Requested Fullscreen Mode Is Not Supported BynYour Video Card. Use Windowed Mode Instead?","NeHe GL",MB_YESNO|MB_ICONEXCLAMATION)==IDYES) { fullscreen=FALSE; // Windowed Mode Selected. Fullscreen = FALSE } else { // Pop Up A Message Box Letting User Know The Program Is Closing. MessageBox(NULL,"Program Will Now Close.",MB_OK|MB_ICONSTOP); return FALSE; // Return FALSE } } } if (fullscreen) // Are We Still In Fullscreen Mode? { dwExStyle=WS_EX_APPWINDOW; // Window Extended Style dwStyle=WS_POPUP | WS_CLIPSIBLINGS | WS_CLIPCHILDREN; // Windows Style ShowCursor(FALSE); // Hide Mouse Pointer } else { dwExStyle=WS_EX_APPWINDOW | WS_EX_WINDOWEDGE; // Window Extended Style dwStyle=WS_OVERLAPPEDWINDOW | WS_CLIPSIBLINGS | WS_CLIPCHILDREN; // Windows Style } AdjustWindowRectEx(&WindowRect,dwStyle,FALSE,dwExStyle); // Adjust Window To True Requested Size // Create The Window if (!(hWnd=CreateWindowEx( dwExStyle,// Extended Style For The Window "OpenGL",// Class Name title,// Window Title dwStyle | // Defined Window Style WS_CLIPSIBLINGS | // Required Window Style WS_CLIPCHILDREN,// Required Window Style 0,// Window Position WindowRect.right-WindowRect.left,// Calculate Window Width WindowRect.bottom-WindowRect.top,// Calculate Window Height NULL,// No Parent Window NULL,// No Menu hInstance,// Instance NULL))) // Dont Pass Anything To WM_CREATE { KillGLWindow(); // Reset The Display MessageBox(NULL,"Window Creation Error.",MB_OK|MB_ICONEXCLAMATION); return FALSE; // Return FALSE } static PIXELFORMATDESCRIPTOR pfd= // pfd Tells Windows How We Want Things To Be { sizeof(PIXELFORMATDESCRIPTOR),// Size Of This Pixel Format Descriptor 1,// Version Number PFD_DRAW_TO_WINDOW | // Format Must Support Window PFD_SUPPORT_OPENGL | // Format Must Support OpenGL PFD_DOUBLEBUFFER,// Must Support Double Buffering PFD_TYPE_RGBA,// Request An RGBA Format bits,// Select Our Color Depth 0,// Color Bits Ignored 0,// No Alpha Buffer 0,// Shift Bit Ignored 0,// No Accumulation Buffer 0,// Accumulation Bits Ignored 32,// 16Bit Z-Buffer (Depth Buffer) 0,// No Stencil Buffer 0,// No Auxiliary Buffer PFD_MAIN_PLANE,// Main Drawing Layer 0,// Reserved 0,0 // Layer Masks Ignored }; if (!(hDC=GetDC(hWnd))) // Did We Get A Device Context? { KillGLWindow(); // Reset The Display MessageBox(NULL,"Can't Create A GL Device Context.",MB_OK|MB_ICONEXCLAMATION); return FALSE; // Return FALSE } if (!(PixelFormat=ChoosePixelFormat(hDC,&pfd))) // Did Windows Find A Matching Pixel Format? { KillGLWindow(); // Reset The Display MessageBox(NULL,"Can't Find A Suitable PixelFormat.",MB_OK|MB_ICONEXCLAMATION); return FALSE; // Return FALSE } if(!SetPixelFormat(hDC,PixelFormat,&pfd)) // Are We Able To Set The Pixel Format? { KillGLWindow(); // Reset The Display MessageBox(NULL,"Can't Set The PixelFormat.",MB_OK|MB_ICONEXCLAMATION); return FALSE; // Return FALSE } if (!(hRC=wglCreateContext(hDC))) // Are We Able To Get A Rendering Context? { KillGLWindow(); // Reset The Display MessageBox(NULL,"Can't Create A GL Rendering Context.",MB_OK|MB_ICONEXCLAMATION); return FALSE; // Return FALSE } if(!wglMakeCurrent(hDC,hRC)) // Try To Activate The Rendering Context { KillGLWindow(); // Reset The Display MessageBox(NULL,"Can't Activate The GL Rendering Context.",MB_OK|MB_ICONEXCLAMATION); return FALSE; // Return FALSE } ShowWindow(hWnd,SW_SHOW); // Show The Window SetForegroundWindow(hWnd); // Slightly Higher Priority SetFocus(hWnd); // Sets Keyboard Focus To The Window ReSizeGLScene(width,height); // Set Up Our Perspective GL Screen if (!InitGL()) // Initialize Our Newly Created GL Window { KillGLWindow(); // Reset The Display MessageBox(NULL,"Initialization Failed.",MB_OK|MB_ICONEXCLAMATION); return FALSE; // Return FALSE } return TRUE; // Success } 这一切都包含在NeHe Lesson 1中. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容
推荐文章
站长推荐
- windows – 将特定列从一个文本文件复制到另一个
- windows – 多个DNS,服务器优先级
- typescript – Element隐式具有’any’类型,因为
- windows-phone-7 – WP7 Live Tile文字颜色?
- winforms – windows窗体:带有历史记录的文本框
- 将两个Uint32Array值转换为Javascript编号
- windows-7 – VS2012,Windows 8,DirectX及其SDK
- windows-server-2008 – 随着时间的推移,响应时间
- windows – regexp在日志文件中匹配,返回匹配上下
- win7安装Anaconda+TensorFlow(cpu版)+配置PyCh
热点阅读