2010-10-24 18 views
1

我们正在使用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); 

_depthFormatGL_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);

回答

0

我不知道的内部,但setDepthBufferFormat已被弃用。我也可以想象,在创建GL视图之后,它可以简单地(不再可能)更改深度缓冲区。随着Cocos2D v0.99.5 beta 3的初始化已经发生了很大的变化。我建议你更新到最新版本,即使它是测试版。

然后看看这里:http://www.cocos2d-iphone.org/wiki/doku.php/prog_guide:setup_buffers

的重要组成部分,是EAGLView,在这里可以设置深度缓存的初始化:

EAGLView *glView = [EAGLView viewWithFrame:[window bounds] 
           pixelFormat:kEAGLColorFormatRGBA8 
           depthFormat:GL_DEPTH_COMPONENT16_OES 
         preserveBackbuffer:NO]; 
+0

我已经更新了cocos2d到最新版本(直从GIT回购)。尽管如此,仍然获得了24位深度缓冲区。我会更详细地更新这个问题。 – aegzorz 2010-10-24 19:54:16