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

时间:2011-04-14 16:16:04

标签: android opengl-es

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

但我想使用RGB888渲染​​更准确的颜色。

GLSurfaceView文档提到了两种与像素格式相关的方法:

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

EGLConfigChooser类的文档提及EGL10.eglChooseConfig(),以了解哪些配置可用。

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

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

是否有任何兼容性问题或奇怪的错误?

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

2 个答案:

答案 0 :(得分:10)

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

setEGLConfigChooser(8, 8, 8, 8, 0, 0);
getHolder().setFormat(PixelFormat.RGBA_8888); 

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

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

答案 1 :(得分:-2)

我就是这样做的;

{
window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];

// cocos2d will inherit these values
[window setUserInteractionEnabled:YES]; 
[window setMultipleTouchEnabled:NO];

// must be called before any othe call to the director
[Director useFastDirector];
[[Director sharedDirector] setDisplayFPS:YES];

// create an openGL view inside a window
[[Director sharedDirector] attachInView:window];

// Default texture format for PNG/BMP/TIFF/JPEG/GIF images
// It can be RGBA8888, RGBA4444, RGB5_A1, RGB565
// You can change anytime.
[Texture2D setDefaultAlphaPixelFormat:kTexture2DPixelFormat_];  

glClearColor(0.7f,0.7f,0.6f,1.0f);
//glClearColor(1.0f,1.0f,1.0f,1.0f);

[window makeKeyAndVisible];

[[Director sharedDirector] runWithScene:[GameLayer node]];

}

我希望有所帮助!