QSGGeometry: быстро ли загружать тонны вершин в каждом кадре?
Я разрабатываю построитель логов в реальном времени, используя Qt Quick 2. Он получает данные журнала каждую миллисекунду, и я хотел бы построить их постепенно (до параметрической кривой), используя пользовательский QQuickItem.
В настоящее время я планирую использовать QSGGeometry и отправлять данные вершин в GPU. Однако, поскольку QSGGeometry не поддерживает добавочную загрузку вершин, мне придется отправлять все вершины в каждом кадре. Поскольку длина журнала может составлять около ста секунд, я буду отправлять сотни тысяч вершин в каждом кадре. Я чувствую себя глупо делать это каждую шестидесятую секунду.
Конечно, я мог бы удалить ненужные вершины (те, которые слишком близки к другим) и сделать размер буфера вершин, возможно, 1/30, но я заметил, что это просто переносит задачу GPU в CPU. (или я мог бы просто взять все 30 данных и отправить их, но пользователь может увеличить график, и это будет ужасно.)
Вместо этого я мог бы использовать QQuickPaintedItem и рисовать на FrameBufferObject постепенно, но когда пользователь перетаскивает график и перерисовывает график, он будет отправлять сто тысяч вызовов gl в одном кадре (или делать это в CPU, но в любом случае он будет медленным).
Какой из них быстрее? или есть лучший способ сделать это?
РЕДАКТИРОВАТЬ: Я думаю, что нашел гораздо лучшее решение. Я мог бы разделить данные рекурсивно и адаптивно добавить точки, пока они не станут достаточно гладкими. Таким образом, я смогу сократить данные примерно до 500 точек, что достаточно дешево, чтобы отправлять в GPU каждый кадр, при этом получая доступ только к точкам, необходимым для CPU. Единственная проблема заключается в том, может ли g++ оптимизировать рекурсивный вызов для снижения накладных расходов.