presentRenderbuffer: GL_RENDERBUFFER_OES занимает много времени - PullRequest
3 голосов
/ 27 февраля 2011

Я добавил в свою игру профилировщик и изолировал эту функцию.Это, иногда, вызывает падение FPS.Это мой результат:

Present buffer time: 22
Present buffer time: 1
Present buffer time: 9
Present buffer time: 1
Present buffer time: 20
Present buffer time: 6
Present buffer time: 4
Present buffer time: 4
Present buffer time: 22
Present buffer time: 4
Present buffer time: 8
Present buffer time: 4
Present buffer time: 4
Present buffer time: 15
Present buffer time: 1
Present buffer time: 1
Present buffer time: 1
Present buffer time: 11
Present buffer time: 1
Present buffer time: 6
Present buffer time: 1
Present buffer time: 1
Present buffer time: 25
Present buffer time: 6
Present buffer time: 7
Present buffer time: 1
Present buffer time: 10
Present buffer time: 7
Present buffer time: 3
Present buffer time: 1
Present buffer time: 12
Present buffer time: 9
Present buffer time: 6
Present buffer time: 9

Знаете ли вы, почему каждые несколько кадров эта функция занимает больше времени?

Это мой код:


    f64 time = -System::GetTime();      
    [m_context presentRenderbuffer:GL_RENDERBUFFER_OES];
    Log("Present buffer time: %d\n", u32((System::GetTime() + time) * 1000.));

Ответы [ 2 ]

3 голосов
/ 28 февраля 2011

Если вы не вызываете glFlush() явно, драйвер вынужден делать это при представлении буфера, потому что в момент вызова presentRenderbuffer операции рендеринга в буфере могут быть еще не завершены.

Попробуйте вызвать glFlush, прежде чем представлять буфер и измерять его время отдельно.

0 голосов
/ 27 февраля 2011

Представления буфера рендеринга, которые фактически отправляются на дисплей, могут быть квантованы до частоты обновления 30 Гц или 60 Гц.Быстрые рендеры могут на самом деле просто отбрасывать предыдущий рендер до того, как завершится предыдущий.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...