Win32 OpenGL开发中PIXELFORMATDESCRIPTOR颜色位参数用法咨询
关于Win32 OpenGL PIXELFORMATDESCRIPTOR 颜色位参数的说明
- 你现在用的通用初始化模板里把颜色分量位深、位移参数全部填0是正常用法:当调用
ChoosePixelFormat匹配像素格式时,系统会自动根据你设定的总颜色位深cColorBits(你代码里的32)和PFD_TYPE_RGBA标记,自动适配当前设备支持的最优RGBA分量布局,不需要手动指定这部分参数。 - 如果需要获取某个像素格式的实际缓冲区格式化规则,按照以下步骤操作即可:
- 先调用
ChoosePixelFormat或者扩展函数wglChoosePixelFormatARB拿到目标像素格式的索引值 - 调用
DescribePixelFormat函数,传入该索引,函数会把对应像素格式的完整参数回填到你传入的PIXELFORMATDESCRIPTOR结构体中,此时结构体里的cRedBits/cRedShift、cGreenBits/cGreenShift、cBlueBits/cBlueShift、cAlphaBits/cAlphaShift字段就是实际生效的参数。
- 先调用
- 这些参数的工作机制非常直观:比如常见的32位RGBA格式,返回的参数一般为:
cRedBits=8、cRedShift=16,cGreenBits=8、cGreenShift=8,cBlueBits=8、cBlueShift=0,cAlphaBits=8、cAlphaShift=24,对应每个32位像素的布局为0xAARRGGBB,你如果需要直接读写帧缓冲区原始数据,直接按照位移值提取对应分量即可。 - 额外说明:如果使用3.0及以上版本的现代OpenGL,更推荐先创建一个临时的旧版本GL上下文,加载WGL扩展后用
wglChoosePixelFormatARB来指定更精细的像素格式要求,查询实际布局的逻辑和上述步骤完全一致。
你参考的初始化代码对应标注后的标准写法如下:
PIXELFORMATDESCRIPTOR pfd = { sizeof(PIXELFORMATDESCRIPTOR), 1, PFD_DRAW_TO_WINDOW | PFD_SUPPORT_OPENGL | PFD_DOUBLEBUFFER, // 标记位 PFD_TYPE_RGBA, // 帧缓冲类型:RGBA或者调色板模式 32, // 帧缓冲总颜色位深 0, 0, 0, 0, 0, 0, // 红、绿、蓝分量的位深、位移,自动匹配时填0即可 0, // 透明度分量位深,自动匹配时填0即可 0, // 透明度分量位移,自动匹配时填0即可 0, // 累加缓存位深配置 0, 0, 0, 0, // 累加缓存各分量位深 24, // 深度缓冲位深 8, // 模板缓冲位深 0, // 辅助缓冲数量 PFD_MAIN_PLANE, // 分层类型,常规场景用主平面即可 0, 0, 0, 0 // 已废弃参数,填0即可 };
内容的提问来源于stack exchange,提问作者monkeytea
相关产品推荐
相关产品推荐

