【发布时间】:2016-04-08 15:32:25
【问题描述】:
在 OS X 上运行,我使用 SDL_Image 库在 OpenGL 中加载了纹理(使用返回 SDL_Surface* 的 IMG_LOAD())。似乎颜色通道已被交换,即我必须将GL_BGRA 设置为glTexImage2D() 中的像素格式参数。
有没有一种方法可以确定正确的数据格式(BGRA 或 RGBA 等),而无需简单地编译和检查纹理? SDL 交换这些颜色通道的原因是什么?
【问题讨论】:
-
我打算发布一个答案,但我意识到我错过了解决方案的很大一部分。基本上,对于许多系统上的无符号 8 位归一化纹理,BGRA 是首选,而其他类型则倾向于使用 RGBA。但是,我无法找到一种方法来询问 SDL_Image 它输出什么格式,这是确保它与您告诉 OpenGL 的内容相匹配的关键。但是,现在,您在任何合理的系统上加载的任何图像都可能会被 BGRA 订购。 HDR 文件可能会弹出 RGBA 或 ARGB。
标签: opengl colors textures sdl