gpt4 book ai didi

c++ - OpenGL独占模式全屏

转载 作者:可可西里 更新时间:2023-11-01 13:44:49 25 4
gpt4 key购买 nike

DirectX 允许应用程序独占 GPU 并将其内容发送到显示器。这称为全屏。使用 OpenGL 时,使用 ChangeDisplaySettings(&dv, CDS_FULLSCREEN) 激活全屏。然而,这样做的结果是一个“假的”全屏——一个全屏窗口。两者的行为方式存在一些差异,尤其是在 alt-tab 键失焦时。

有没有办法像 DirectX 那样仅使用 Win32 api 和 OpenGL 创建全屏窗口,或者这是 DirectX 独有的功能?

最佳答案

如果你愿意让 GLUT 为你做窗口任务,你可以看这里:Full screen in openGL

如果您想自己深入了解 WIN32 的细节,您可以执行以下操作:

#include <stdlib.h>

#include <Windows.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, GetModuleHandle(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) { /*do something*/ }

// 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 ...
}

return 0;
}

关于c++ - OpenGL独占模式全屏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24747815/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com