C++ 在OpenGL中,所有纹理都应该使用GL_ARGB格式吗?

C++ 在OpenGL中,所有纹理都应该使用GL_ARGB格式吗?,c++,windows,opengl,C++,Windows,Opengl,这一直困扰着我一段时间。。。在性能上很难看到任何差异,所以我在这里问: 如果我的图像不使用alpha通道,我应该使用“GL_RGB”将其保存在GFX卡内存中,还是使用“GL_ARGB”,因为它的32位块已满,因此处理速度会更快 还是GFX卡会自动将24位图像转换为32位图像以缩短渲染时间 编辑:我没有性能问题,但我只想用最好的方式来做!我还想确保该程序在旧图形卡上呈现良好效果,而这些旧图形卡不需要像新图形卡一样进行优化。选择适合纹理数据的格式,并让视频卡驱动程序担心细节。不要试图胜过它。Open

这一直困扰着我一段时间。。。在性能上很难看到任何差异,所以我在这里问:

如果我的图像不使用alpha通道,我应该使用“GL_RGB”将其保存在GFX卡内存中,还是使用“GL_ARGB”,因为它的32位块已满,因此处理速度会更快

还是GFX卡会自动将24位图像转换为32位图像以缩短渲染时间

编辑:我没有性能问题,但我只想用最好的方式来做!我还想确保该程序在旧图形卡上呈现良好效果,而这些旧图形卡不需要像新图形卡一样进行优化。

选择适合纹理数据的格式,并让视频卡驱动程序担心细节。不要试图胜过它。OpenGL实现经过了很好的优化,将为您做出所有必要的决策,以获得最佳性能,无论这意味着将所有纹理转换为32bpp或其他内部格式

如果发现存在性能问题,请使用类似于解决性能瓶颈的工具。您的纹理格式不太可能成为瓶颈


编辑:如果问题仅仅是内存压力,那么你有太多太大的纹理。就这么简单。使用压缩、使用较低质量(每个通道的比特数较少)的纹理或使用较小的纹理。

如果您担心内存使用,请尝试纹理压缩:


很难给出使用哪一种的一般建议。试试那些适用于你的纹理格式的(RGB纹理不适用于RG压缩),好好看看结果的视觉质量。

好吧,我问这个问题的原因是我将耗尽内存,我的大多数纹理甚至不使用alpha通道。请将纹理变小。当您知道有足够的视频内存可用时,请使用较大的版本,对于较小的卡,请使用较小的版本。您可以做的另一件事是启用压缩以实现一个小的质量权衡。这不是我在这里要求的。。。如果我可以直接删除alpha通道,为什么要使纹理质量更差?所以我问如果我使用RGB而不是ARGB,我会不会遇到性能问题。。。阅读我的编辑如果你有内存问题,我建议使用RGB格式。正如greyfade在上面所写的那样,OpenGL将进行必要的优化。实际上,通常有一种特定的纹理格式,根据驱动程序/卡的不同,它的执行速度要比其他格式快得多,因为驱动程序不需要滑动。至少在我的NVIDIA GT240和Windows 7中,GL_RGBA8的内部格式、GL_RGBA的纹理格式和GL_UNSIGNED_INT_8_8_8_8_8_REV的类型是最快的。使用Linux上的NVIDIA NVS300,我发现GL_BGRA是更快的纹理格式。这是一个人的基准,如果你到处搜索,还有其他的。同样值得注意的是,压缩的纹理会消耗更少的上传带宽到卡上,然后在用于渲染时消耗更少的带宽。总的来说,如果它们不会把图像弄得太乱的话,它们是比ARGB或RGB更好的选择!嗯,我的图像分辨率已经很低了,我根本不想把它们弄得一团糟。如果硬件擅长解压,它们就不太可能产生显著的变化。