在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
的第三个参数传递的内容是否重要?如果是的话,何时?
答案 0 :(得分:4)
是的,不是。 PFD结构主要用于ChoosePixelFormat
,除非您当然使用wglChoosePixelFormatARB
。据我所知,SetPixelFormat
依赖于iPixelFormat
并且传递PFD结构只是一个很好的"额外的"换句话说,或元数据。
SetPixelFormat
文档有点神秘,但确实提到了这个:
指向包含逻辑像素格式规范的
PIXELFORMATDESCRIPTOR
结构的指针。系统的元文件组件使用此结构来记录逻辑像素格式规范。该结构对SetPixelFormat
函数的行为没有其他影响。
首先,您需要设置PFD并定义像素格式所需的内容。然后调用ChoosePixelFormat
找到匹配的像素格式并返回索引。调用SetPixelFormat
然后使用索引将此像素格式应用于设备上下文。与SetPixelFormat
相关的PFD只是元数据。
总而言之,我建议无论如何都要传递它,只是为了安全起见。