Мы создаем игру, используя cocos2d
, но у нас проблемы с буфером глубины.
Я пытаюсь настроить 16-битный буфер глубины на iPhone, но пока получаю только 24-битную глубину.
Причина, по которой мне нужен 16-битный буфер глубины:
- A: Мне не нужна точность 24 бит.
- Б: Я надеюсь, что это будет быстрее.
Вот как я устанавливаю формат глубины в 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 (2-го поколения) и 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 );