我们正在使用cocos2d
制作游戏,但深度缓冲存在问题。 我想在iPhone上设置一个16位深度缓冲区,但到目前为止我只能获得24位深度。是否有可能在iPhone上获得16位深度缓冲区?
的原因我想16位深度缓冲是:
- 答:我不需要24位的精度。 B:我希望它会更快。
这是我的设置在cocos2d深度格式:
[[CCDirector sharedDirector] setDepthBufferFormat:kDepthBuffer16];
这在某些时候在EAGLView
(V1.3)结束
glGenRenderbuffersOES(1, &_depthBuffer);
glBindRenderbufferOES(GL_RENDERBUFFER_OES, _depthBuffer);
glRenderbufferStorageOES(GL_RENDERBUFFER_OES, _depthFormat, newSize.width, newSize.height);
glFramebufferRenderbufferOES(GL_FRAMEBUFFER_OES, GL_DEPTH_ATTACHMENT_OES, GL_RENDERBUFFER_OES, _depthBuffer);
凡_depthFormat
是GL_DEPTH_COMPONENT16_OES
(验证同时调试)
这里是我如何检查位数:
GLint depthBufferBits;
glGetIntegerv(GL_DEPTH_BITS, &depthBufferBits);
NSLog(@"Depth buffer bits: %d", depthBufferBits);
,输出是:
Depth buffer bits: 24
我缺少什么?我已经尝试了iPod Touch(第二代)和iPhone 3GS上的相同代码,总是以24位的形式返回。
更新:
我现在已经更新了cocos2d从GIT回购的最新版本。 下面是如何初始化导演和窗口:
- (void) applicationDidFinishLaunching:(UIApplication*)application
{
// Init the window
window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
[[UIApplication sharedApplication] setIdleTimerDisabled:YES];
// cocos2d will inherit these values
[window setUserInteractionEnabled:YES];
[window setMultipleTouchEnabled:YES];
[CCDirector setDirectorType:CCDirectorTypeDisplayLink];
CCDirector* director = [CCDirector sharedDirector];
[director setAnimationInterval:1.0/60];
[director setDisplayFPS:YES];
EAGLView *glView = [EAGLView viewWithFrame:[window bounds]
pixelFormat:kEAGLColorFormatRGBA8 // RGBA8 color buffer
depthFormat:GL_DEPTH_COMPONENT16_OES // 16-bit depth buffer
preserveBackbuffer:NO];
[director setOpenGLView:glView];
[director setProjection:kCCDirectorProjection2D];
[window addSubview:glView];
[window makeKeyAndVisible];
[CCTexture2D setDefaultAlphaPixelFormat:kTexture2DPixelFormat_RGBA8888];
[director runWithScene:[LevelScene scene]];
}
仍然得到一个24位的深度缓冲根据glGetIntegerv(GL_DEPTH_BITS, &depthBufferBits);
我已经更新了cocos2d到最新版本(直从GIT回购)。尽管如此,仍然获得了24位深度缓冲区。我会更详细地更新这个问题。 – aegzorz 2010-10-24 19:54:16