如何让 WGL 创建 32 位深度缓冲区?
How do I get WGL to create a 32 bit depth buffer?
如果我将 cDepthBits, cStencilBits
设置为 24, 8
它可以正常工作,但 32, 0
则不行。这是我正在做的事情:
PIXELFORMATDESCRIPTOR pfd = {0};
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 = 32;
pfd.cStencilBits = 0;
pfd.dwLayerMask = PFD_MAIN_PLANE;
i32 pixelFormatIndex = ChoosePixelFormat(windows.hdc, &pfd);
SetPixelFormat(windows.hdc, pixelFormatIndex, &pfd);
windows.hrc = wglCreateContext(windows.hdc);
wglMakeCurrent(windows.hdc, windows.hrc);
然后我用DescribePixelFormat(windows.hdc, GetPixelFormat(windows.hdc), ..)
查询PFD,cDepthBits
只有24.
嗯,目前还不清楚您的实现是否确实支持默认帧缓冲区的 32 位深度缓冲区。
但是,使用 WGL_ARB_pixel_format 扩展可以让您更好地控制像素格式。特别是,wglChoosePixelFormatARB()
将 return 一组 集 像素格式数学(或多或少严格地)您查询的属性。然后您可以遍历这些并使用 wglGetPixelFormatAttribivARB()
/wglGetPixelFormatAttribfvARB()
查询 returned 格式的详细属性,以及 select 您最喜欢的格式 - 您可以检查其中是否有任何 32 位深度格式。
如果我将 cDepthBits, cStencilBits
设置为 24, 8
它可以正常工作,但 32, 0
则不行。这是我正在做的事情:
PIXELFORMATDESCRIPTOR pfd = {0};
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 = 32;
pfd.cStencilBits = 0;
pfd.dwLayerMask = PFD_MAIN_PLANE;
i32 pixelFormatIndex = ChoosePixelFormat(windows.hdc, &pfd);
SetPixelFormat(windows.hdc, pixelFormatIndex, &pfd);
windows.hrc = wglCreateContext(windows.hdc);
wglMakeCurrent(windows.hdc, windows.hrc);
然后我用DescribePixelFormat(windows.hdc, GetPixelFormat(windows.hdc), ..)
查询PFD,cDepthBits
只有24.
嗯,目前还不清楚您的实现是否确实支持默认帧缓冲区的 32 位深度缓冲区。
但是,使用 WGL_ARB_pixel_format 扩展可以让您更好地控制像素格式。特别是,wglChoosePixelFormatARB()
将 return 一组 集 像素格式数学(或多或少严格地)您查询的属性。然后您可以遍历这些并使用 wglGetPixelFormatAttribivARB()
/wglGetPixelFormatAttribfvARB()
查询 returned 格式的详细属性,以及 select 您最喜欢的格式 - 您可以检查其中是否有任何 32 位深度格式。