Возможно ли получить 16-битный буфер глубины на iPhone? - PullRequest
1 голос
/ 24 октября 2010

Мы создаем игру, используя 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 );

1 Ответ

0 голосов
/ 24 октября 2010

Я не уверен насчет внутренних функций, но 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];
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...