LINUX.ORG.RU

Qt 60 FPS, плавность и прочее красивости.


0

2

Рисую с помощью QPainter. С конструкторе виджета есть такой код

 QTimer *timer = new QTimer(this);
connect(timer, SIGNAL(timeout()), this, SLOT(update()));
timer->start(16);

Это правильное решение? П.С. под 60 ФПС я имел в виду родную для монитора частоту.

Ответ на: комментарий от yakunprufovnebudet

А даже не знаю.. У меня DE всинк не поддерживает. Но если это не трудно то хотелось что бы был.

knotri ()

будет приближенно 60 фпс, да. а что смущает?

если по таймеру апдейтишь, то норм. если есть безконечный цикл перерисовки, то max fps ограничивается sleep'ом на разницу между 1/max_fps и времененем прошлого фрейма.

x0r ★★★★★ ()
Ответ на: комментарий от x0r

Смущает то что приближенно. Должен же быть способ рисовать именно как нужно монитору.

knotri ()
Ответ на: комментарий от knotri

если нужен vsync то попробуй загнать QGLWidget через QPainter::QPainter(QPaintDevice *device);

x0r ★★★★★ ()

А что ты собственно таким образом перерисовываешь?

KblCb ★★★★★ ()
Ответ на: комментарий от KblCb

Да полностью все. Рисование весьма простое. Например 10 шариков, и 10 букв. (С поддержкой сглаживания)

knotri ()
Ответ на: комментарий от x0r

QGLWidget

Та ну, а те у кого 3Д не поддерживается? (Ну мало ли, таких хоть и мало но хватает)

knotri ()
Ответ на: комментарий от knotri

Я в том плане что может быть animation framework тебя спасёт.

KblCb ★★★★★ ()
Ответ на: комментарий от knotri

не думаю, что vsync возможен на софтварной рисовалке. нужны костыли.

x0r ★★★★★ ()
Ответ на: комментарий от knotri

Он ортогонален QPainter'у. По сути это таймер для анимации который умеет интерполировать значение изменяемого параметра. То есть по сути для плавности анимации не так важно когда произошло обновление. Важно насколько должна измениться картинка именно в этот момент. В общем почитай.

KblCb ★★★★★ ()
Последнее исправление: KblCb (всего исправлений: 1)

Не вижу смысла вызывать update по времени. Можел лучше вызывать update в момент, когда приложение готово отобразить что-то новое? Изменилось что-то, что должно повлиять на гуй, вызвали update().

pathfinder ★★★ ()
Ответ на: комментарий от pathfinder

update в момент, когда приложение готово отобразить что-то новое

Хм... а это идея, нужно будет попробовать.

Насколько я помню много update будут собираться в один если их часто( более 60 ФПС) вызывать?

knotri ()
Ответ на: комментарий от x0r

не думаю, что vsync возможен на софтварной рисовалке. нужны костыли.

эти костыли называются софтварной эмуляцией vsync'а, и делаются с помощью таймера

jtootf ★★★★★ ()
Ответ на: комментарий от pathfinder

Не вижу смысла вызывать update по времени. Можел лучше вызывать update в момент, когда приложение готово отобразить что-то новое?

а можно совместить: менеджер композиций всё равно не заберёт твой буфер быстрее, чем за период отрисовки, потому слишком частые апдейты стоит игнорировать

jtootf ★★★★★ ()
Ответ на: комментарий от jtootf

потому слишком частые апдейты стоит игнорировать

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

knotri ()
Ответ на: комментарий от knotri

менеджер композиции всё равно не заберёт?

именно потому. ресурсы на рендеринг ты потратишь, а эффекта не будет никакого

jtootf ★★★★★ ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.