【发布时间】:2011-01-09 21:00:24
【问题描述】:
我将继续尝试为我的软件开发 OpenGL 路径。我正在使用带有具体实现的抽象类,但显然我需要一个通用的像素格式枚举器,以便我可以描述两者之间的纹理、后缓冲区/前缓冲区和渲染目标格式。我在每个具体实现中提供一个函数,该函数接受我的抽象标识符 R8G8B8A8,并为具体实现提供适用于 D3D 或 OpenGL 的枚举
我可以使用 CheckDeviceFormat 轻松枚举所有 D3D 像素格式。对于 OpenGL,我首先遍历 Win32 可用的加速格式(使用 DescribePixelFormat),然后查看 PIXELFORMATDESCRIPTOR 以了解它是如何组成的,因此我可以将其分配给我的枚举之一。这就是我的问题开始的地方:
我希望能够发现 OpenGL 在任何给定系统上支持的所有加速格式,就像 D3D 格式一样。但是根据格式描述符,没有任何RGB格式(它们都是BGR)。此外,在 D3D 中可枚举的 DXT1 - 5 格式等内容无法使用上述方法进行枚举。对于后者,我想我可以假设如果扩展可用,它是一种硬件加速格式。
对于前者(如何用RGB/BGR等来解释格式描述符),我不太清楚它是如何工作的。
有人知道这件事吗?
感谢回复。
【问题讨论】:
-
明确地说,当我说所有格式似乎都是 BGR 时,我的意思是返回的描述符中的 cBlueShift == 0 && cGreenShift == 8 && cRedShift == 16。