是否可以使用OpenGL在RGB888中渲染?

oli*_*erg 3 android opengl-es

我在各种设备上使用Android上的OpenGL玩了一段时间.除非我错了,否则默认渲染始终使用RGB565像素格式.

但是,我想使用RGB888渲染​​更准确的颜色.

所述GLSurfaceView文档中提到的两种方法,其涉及像素格式:

除非我错了,我想我只需要使用后者.或者SurfaceHolder.setFormat()在这里使用相关?

EGLConfigChooser类的文档提到了EGL10.eglChooseConfig(),以发现可用的配置.

在我的情况下,如果RGB888不可用,可以回退到RGB565,但我更喜欢这种情况.

那么,是否可以在大多数设备上使用RGB888?

这有什么兼容性问题或奇怪的错误吗?

您是否有正确可靠的方法来设置GLSurfaceView以渲染RGB888?

小智 11

在较新的设备上,大多数设备应支持RGBA8888作为原生格式.强制RGBA颜色格式的一种方法是设置曲面的半透明度,除了深度和模板缓冲区之外,您仍然希望选择EGLConfig来最好地猜测通道的配置.

setEGLConfigChooser(8, 8, 8, 8, 0, 0);
getHolder().setFormat(PixelFormat.RGBA_8888); 
Run Code Online (Sandbox Code Playgroud)

但是,如果我正确地阅读了您的问题,那么就要求RGB888支持(alpha不关心),RGBX8888可能不受所有设备支持(驱动程序供应商限制).

关于性能需要注意的事项,因为RGBA8888是大多数GPU硬件本身支持的颜色格式,最好避免使用任何其他颜色格式(非原生支持),因为这通常转换为颜色转换,在下面添加非必要的工作负载GPU.

  • 对于@olivierg的记录,我想提一下_alpha blending_,这是在OpenGL中模拟对象透明度的过程,与你绘制的Surface的alpha通道的可用性无关.除非你没有呈现完全不透明的场景,否则你甚至不会注意到任何差异; 换句话说,如果您渲染应该显示桌面部分的透明或半透明场景,您将只会注意到缺少表面Alpha通道. (5认同)