This question already has an answer here:
What is the PIXELFORMATDESCRIPTOR parameter in SetPixelFormat() used for?

(1个答案)


3年前关闭。




在Windows上创建OpenGL上下文之前,我们需要为Windows的设备上下文调用SetPixelFormat。其功能原型(prototype)如下:
BOOL WINAPI SetPixelFormat(
     HDC hdc,
     int iPixelFormat,
     const PIXELFORMATDESCRIPTOR *ppfd);

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



即使PIXELFORMATDESCRIPTOR结构并不真正相关。在这种情况下,我只是传递了NULL

我将第三个参数传递给SetPixelFormat无关紧要吗?如果是这样,什么时候?

最佳答案

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

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



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

总之,为了安全起见,我建议无论如何都要通过它。

08-16 21:30