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

时间:2017-03-21 11:27:51

标签: c++ c windows winapi opengl

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

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

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

  

“一旦有了像素格式编号,就可以像使用SetPixelFormat的任何像素格式一样设置它。”

尽管PIXELFORMATDESCRIPTOR结构并不真正相关,但这仍然存在。在这种情况下,我刚刚通过NULL

我作为SetPixelFormat的第三个参数传递的内容是否重要?如果是的话,何时?

1 个答案:

答案 0 :(得分:4)

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

SetPixelFormat文档有点神秘,但确实提到了这个:

  

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

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

总而言之,我建议无论如何都要传递它,只是为了安全起见。