获取窗口的像素格式

时间:2018-05-08 18:09:34

标签: c++ windows opengl glfw

我创建了一个在Windows上运行的OpenGL应用程序。有什么方法可以查询有关当前渲染窗口的像素格式的信息吗? (该窗口是使用GLFW库创建的)

我感兴趣的是:

  • 颜色位
  • 深度位
  • 像素类型

3 个答案:

答案 0 :(得分:1)

GLFW doc中,您可以直接阅读有关使用OpenGL API的信息,例如glGetFramebufferAttachmentParameterivglGetIntegerv

答案 1 :(得分:1)

你可以调用glfwGetWin32Window函数(来自glfw3native.h)并检索窗口句柄。

获取HDC表单句柄(使用GetDC(window_handle)函数)然后将此HDC传递给GetPixelFormat函数并调用DescribePixelFormat。

请在此处查看使用GetPixelFormat + DescribePixelFormat的示例: https://msdn.microsoft.com/en-us/library/windows/desktop/dd318349(v=vs.85).aspx

答案 2 :(得分:1)

我这样做:

int i;
HDC hdc;
PIXELFORMATDESCRIPTOR pfd;
hdc = GetDC(window_handle);                     // get device context
i=GetPixelFormat(hdc);                          // pixel format descriptor index
DescribePixelFormat(hdc,i,sizeof(pfd),&pfd);    // format from index

window_handle处理您的应用窗口的位置。如果您可以直接访问hdc,则可以跳过第一行GetDC。这是我使用 VCL 和我的 GL 引擎打印信息的方式:

scr.text(AnsiString().sprintf("color: %i bit R%i G%i B%i A%i",pfd.cColorBits,pfd.cRedBits,pfd.cGreenBits,pfd.cBlueBits,pfd.cAlphaBits));
scr.text(AnsiString().sprintf("accum: %i",pfd.cAccumBits));
scr.text(AnsiString().sprintf("depth: %i",pfd.cDepthBits));
scr.text(AnsiString().sprintf("stenc: %i",pfd.cStencilBits));
scr.text(AnsiString().sprintf("auxil: %i",pfd.cAuxBuffers));

所以只需使用你所掌握的文字印刷品即可。 pfd结构中有一点像位移,掩码等,只需检查它并打印出你需要的东西。