我在各种设备上使用Android上的OpenGL玩了一段时间。除非我错了,否则默认渲染始终使用RGB565像素格式执行。
但我想使用RGB888渲染更准确的颜色。
GLSurfaceView文档提到了两种与像素格式相关的方法:
除非我错了,我想我只需要使用后者。或者在这里使用SurfaceHolder.setFormat()
相关吗?
EGLConfigChooser类的文档提及EGL10.eglChooseConfig(),以了解哪些配置可用。
在我的情况下,如果RGB888不可用,可以回退到RGB565,但我更喜欢这种情况。
那么,是否可以在大多数设备上使用RGB888?
是否有任何兼容性问题或奇怪的错误?
您是否有正确可靠的方法来设置GLSurfaceView以渲染RGB888?
答案 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]];
}
我希望有所帮助!