У меня были очень глючные тайминги в моем цикле рендеринга, из-за чего рендеринг заикался. Я установил время вокруг моего glXSwapBuffersзвонка следующим образом:
Timer timer;
glXSwapBuffers(display, window);
timer();
if (timer.elapsed_seconds > 0.1)
printf("stutter(%f)\n\r", timer.elapsed_seconds);
И я получаю такие результаты, как:
stutter(0.109081)
stutter(0.108956)
stutter(0.662115)
stutter(0.759556)
stutter(0.657789)
stutter(0.283185)
stutter(0.105581)
stutter(0.106285)
stutter(0.572289)
stutter(0.199908)
stutter(0.218540)
stutter(0.752033)
stutter(0.148225)
Что может быть причиной того, что вызов glXSwapBuffers занимает так много времени? Как я могу исправить заикание?
Решение проблемы
Согласно документации:
glXSwapBuffers выполняет неявный glFlush перед возвратом.
Если вы сделаете glFlushи glFinishсначала, вы, вероятно, обнаружите, что время берется там, а не в буферной подкачке. Если да, то это потому, что вы отправляете слишком много команд GL, и вам нужно оптимизировать свой код.
Комментариев нет:
Отправить комментарий