У меня есть два таймера для перерисовки QGLWidget и определения FPS
QObject::connect(&fpsTimer, SIGNAL(timeout()), this, SLOT(updateFps()));
fpsTimer.start(1000);
QObject::connect(&updateTimer, SIGNAL(timeout()), this, SLOT(updatePanel()));
updateTimer.start(0);void GLPanel::updatePanel()
{
updateBuffers();
updateGL();
frameCount++;
}
Я также обновляю vbos новыми данными каждый кадр.
На моей машине с установленным Qt я получаю согласованные 60 FPS, так как таймер обновления будет запускаться на основе потока GUI. Я попытался установить его для обновления каждые 15 мс, а не полагаться на поток графического интерфейса без удачи. На других машинах он развивает скорость до 1000 FPS.
Другая проблема, с которой я сталкиваюсь, заключается в том, что мои точки на других машинах отображаются неправильно. Они нарисованы не в том месте и цветах. Относится ли это к Qt или OpenGL …?
Любые идеи о том, что может вызвать это?
Другие машины после нажатия в середине экрана
Другие машины
Рабочая Dev Machine после нажатия на точку
Рабочая Dev Machine
Они оба должны выглядеть одинаково.
Ваш таймер рисования использует интервал 0 мс. Так что программа старается рисовать максимально быстро. Вот почему другие компьютеры имеют очень высокую частоту кадров. Ваш компьютер, скорее всего, использует драйвер дисплея VSync установка. Vsync синхронизирует рисунок с частотой обновления монитора, поэтому частота кадров 60 Гц. Таким образом, вы можете ограничить частоту кадров других компьютеров до 60 с помощью параметра vsync.
Однако некоторые старые и дешевые видеокарты вообще не поддерживают vsync. Затем вам нужно изменить интервал таймера, например, до 15 мс. Он не даст столь же хороших результатов, как vsync, но это намного лучше, чем рисование при 1000 Гц.
Других решений пока нет …