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);
Où _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);
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