OpenGL和D3D像素格式之间的差异

OpenGL和D3D像素格式之间的差异,opengl,format,pixel,Opengl,Format,Pixel,我正在继续尝试为我的软件开发一个OpenGL路径。我正在使用抽象类和具体实现来实现这两种格式,但显然我需要一个通用的像素格式枚举器,这样我就可以描述纹理、backbuffer/frontbuffer以及两者之间的渲染目标格式。我在每个具体实现中提供一个函数,该函数接受我的抽象标识符,例如R8G8B8A8,并为具体实现提供适合D3D或OpenGL的枚举 我可以使用CheckDeviceFormat轻松枚举所有D3D像素格式。对于OpenGL,我首先遍历Win32可用的加速格式(使用Describe

我正在继续尝试为我的软件开发一个OpenGL路径。我正在使用抽象类和具体实现来实现这两种格式,但显然我需要一个通用的像素格式枚举器,这样我就可以描述纹理、backbuffer/frontbuffer以及两者之间的渲染目标格式。我在每个具体实现中提供一个函数,该函数接受我的抽象标识符,例如R8G8B8A8,并为具体实现提供适合D3D或OpenGL的枚举

我可以使用CheckDeviceFormat轻松枚举所有D3D像素格式。对于OpenGL,我首先遍历Win32可用的加速格式(使用DescribePixelFormat),然后查看PIXELFORMATDESCRIPTOR以了解它是如何构成的,这样我就可以为它分配一个枚举。这就是我的问题开始的地方:

我希望能够发现OpenGL在任何给定系统上支持的所有加速格式,就像D3D格式一样。但是根据格式描述符,没有任何RGB格式(它们都是BGR)。此外,像DXT1-5格式这样的东西,在D3D中是可枚举的,使用上述方法是不可枚举的。对于后者,我想我可以假设如果扩展可用,它是一种硬件加速格式

对于前者(如何根据RGB/BGR等解释格式描述符),我不太确定它是如何工作的

有人知道这件事吗


感谢您的回复。

好的,我想我找到了我想要的:


某些图像格式由规范定义(用于backbuffer/深度模具、纹理、渲染目标等),因此在一定程度上可以保证这些格式可用(它们不需要枚举)。像素格式描述符仍然可以用于计算给定窗口的可用前缓冲区格式。

要清楚,当我说所有格式似乎都是BGR时,我的意思是返回描述符中的cBlueShift==0&&cgreeshift==8&&cRedShift==16。