2010-10-24 3 views
1

Nous faisons un jeu en utilisant cocos2d mais nous avons des problèmes avec le tampon de profondeur. J'essaye de mettre en place un tampon de profondeur de 16 bits sur l'iPhone mais jusqu'ici je n'ai qu'une profondeur de 24 bits.Est-il possible d'obtenir un tampon de profondeur de 16 bits sur l'iPhone?

La raison pour laquelle je veux tampon de profondeur 16 bits est:

  • A: Je ne pas besoin de la précision de 24 bits. B12: J'espère que ce sera plus rapide.

Voilà comment je définir le format de profondeur cocos2d:

[[CCDirector sharedDirector] setDepthBufferFormat:kDepthBuffer16]; 

qui, à un moment donné se termine dans 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 est GL_DEPTH_COMPONENT16_OES (Verified pendant le débogage)

Et voici comment je vérifie le nombre de bits:

GLint depthBufferBits; 
glGetIntegerv(GL_DEPTH_BITS, &depthBufferBits); 
NSLog(@"Depth buffer bits: %d", depthBufferBits); 

Et la sortie est:

Depth buffer bits: 24 

Qu'est-ce que je manque? J'ai essayé le même code sur iPod Touch (2ème génération) et iPhone 3GS, revient toujours en 24 bits.

Mise à jour:

J'ai maintenant mis à jour cocos2d à la dernière version du git. Voici comment j'initialiser le directeur et la fenêtre:

- (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]]; 
} 

toujours d'obtenir un tampon de profondeur 24 bits selon glGetIntegerv(GL_DEPTH_BITS, &depthBufferBits);

Répondre

0

Je ne suis pas sûr, mais les entrailles setDepthBufferFormat est dépréciée. Je peux aussi imaginer qu'il n'est simplement (plus) possible de changer le tampon de profondeur après que la vue GL a été créée. Avec Cocos2D v0.99.5 beta 3, l'initialisation a beaucoup changé. Je vous suggère de mettre à jour la dernière version, même si c'est une version bêta.

Alors jetez un oeil ici: http://www.cocos2d-iphone.org/wiki/doku.php/prog_guide:setup_buffers

La partie importante est l'initialisation du EAGLView, où vous pouvez définir la mémoire tampon de profondeur:

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

J'ai mis à jour cocos2d à la dernière version (droite du dépôt GIT). Toujours obtenir un tampon de profondeur de 24 bits si. Je vais mettre à jour la question avec plus de détails. – aegzorz

Questions connexes