QTimer для QGLWidget, некорректное рисование и синхронизация на других машинах

У меня есть два таймера для перерисовки 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

Решение

Ваш таймер рисования использует интервал 0 мс. Так что программа старается рисовать максимально быстро. Вот почему другие компьютеры имеют очень высокую частоту кадров. Ваш компьютер, скорее всего, использует драйвер дисплея VSync установка. Vsync синхронизирует рисунок с частотой обновления монитора, поэтому частота кадров 60 Гц. Таким образом, вы можете ограничить частоту кадров других компьютеров до 60 с помощью параметра vsync.

Однако некоторые старые и дешевые видеокарты вообще не поддерживают vsync. Затем вам нужно изменить интервал таймера, например, до 15 мс. Он не даст столь же хороших результатов, как vsync, но это намного лучше, чем рисование при 1000 Гц.

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]