- В моем приложении я рисую карту улицы, используя
QPainter
наwidget
- сделанный
QPainterPaths
, который содержит предварительно просчитанные пути, которые нужно нарисовать -
widget
в настоящее время являетсяQWidget
, а неQGLWidget
, но это может измениться.
- сделанный
- Я пытаюсь переместить картину за пределы экрана и разделить ее на отдельные задания
- Я хочу нарисовать каждый кусок на
QImage
и, наконец, нарисую все изображения наwidget
-
QPainterPaths
уже помечены, поэтому это не проблема. - проблема заключается в том, что рисунок
QImages
примерно в 5 раз медленнее, чем рисование наQWidget
- Я хочу нарисовать каждый кусок на
- Некоторое тестовое тестирование, которое я сделал
- значения времени представляют собой округленные средние значения по нескольким прогонам
- тестовый фрагмент содержит 100
QPainterPaths
, которые имеют около 150 линейных сегментов линии - грубые 15k пути рисуются с помощью
QPainter::Antialiasing
подсказки рендеринга,QPen
использует круглую кепку и круглое соединение
- Помните, что мой источник
QPainterPaths
(и ширина строки + цвет, некоторые отрисованные, некоторые заполнены)- Мне не нужны все остальные типы чертежей
QPainter
поддерживает - Может
QPainterPaths
быть преобразован в нечто другое, которое можно нарисовать наOpenGL buffer
, это было бы хорошим решением. - Я не знаком с рендерингом
OpenGL
, и я знаю, что существуют разные типы буферов OpenGL, большинство из которых не предназначены для рендеринга 2D-изображений, а для данных вершин.
- Мне не нужны все остальные типы чертежей
Paint Device for chunk | Rendering the chunk itself | Painting chunk on QWidget
-----------------------+----------------------------+--------------------------
QImage | 2000 ms | < 10 ms
QPixmap (*) | 250 ms | < 10 ms
QGLFramebufferObj. (*) | 50 ms | < 10 ms
QPicture | 50 ms | 400 ms
-----------------------+----------------------------+--------------------------
none (directly on a QWidget in paintEvent) | 400 ms
----------------------------------------------------+--------------------------
(*) These 2 lines have been added afterwards and are solutions to the problem!
Было бы неплохо, если бы вы могли сказать мне решение, отличное от OpenGL, так как я хочу скомпилировать свое приложение в двух версиях: OpenGL
и non-OpenGL
version. < ш > Кроме того, я хочу, чтобы решение могло отображаться в потоке без GUI.
Есть ли хороший способ эффективно вырезать куски за пределами экрана?
Есть ли внеэкранная счетная часть QGLWidget
(OpenGL
за пределами экрана), который может использоваться как устройство рисования для QPainter
?