SetPixelFormat() 中的第三个参数对于 OpenGL 上下文创建有什么意义?

What is the point of the third parameter in SetPixelFormat() for OpenGL context creation?

本文关键字:创建 上下文 OpenGL 什么 参数 SetPixelFormat 三个      更新时间:2023-10-16

在Windows上创建OpenGL上下文之前,我们需要为Windows的设备上下文调用SetPixelFormat。其功能原型如下:

BOOL WINAPI SetPixelFormat(
HDC hdc,
int iPixelFormat,
const PIXELFORMATDESCRIPTOR *ppfd);

在创建固定函数上下文时,我们通过使用所需的像素格式调用ChoosePixelFormat来获得支持的像素格式索引,因此真正重要的值是作为iPixelFormat参数传递的值。在创建现代 GL 上下文时,我们仍然需要根据文档调用SetPixelFormat

"一旦你有了像素格式编号,你就可以像任何像素格式一样设置它SetPixelFormat。">

即使PIXELFORMATDESCRIPTOR结构并不真正相关,也是如此。在这种情况下,我刚刚通过了NULL.

我作为第三个参数传递给SetPixelFormat有什么关系吗?如果是,什么时候?

嗯,是也不是。PFD结构主要用于ChoosePixelFormat,除非你当然使用wglChoosePixelFormatARB。据我所知,SetPixelFormat依赖于iPixelFormat,换句话说,传递 PFD 结构只是一个不错的"额外"或元数据。

SetPixelFormat文档有点晦涩难懂,但实际上提到了这一点:

指向包含逻辑像素格式规范的PIXELFORMATDESCRIPTOR结构的指针。系统的图元文件组件使用此结构来记录逻辑像素格式规范。该结构对SetPixelFormat函数的行为没有其他影响。

因此,首先要设置PFD并定义像素格式所需的内容。然后调用ChoosePixelFormat查找匹配的像素格式并返回索引。然后,调用SetPixelFormat将使用索引将此像素格式应用于设备上下文。与SetPixelFormat相关的PFD只是元数据。

总而言之,为了安全起见,我还是建议通过它。