57void QSGSoftwareRenderer::render()
59 if (!m_paintDevice && !m_backingStore && !m_rt.paintDevice)
62 QPaintDevice *paintDevice = m_paintDevice ? m_paintDevice : m_rt.paintDevice;
64 qreal paintDevicePixelRatio = 1.0;
67 paintSize = QSize(paintDevice->width(), paintDevice->height());
68 paintDevicePixelRatio = paintDevice->devicePixelRatio();
73 m_backingStore->beginPaint(QRegion());
75 const QPaintDevice *backingStorePaintDevice = m_backingStore->paintDevice();
76 paintSize = QSize(backingStorePaintDevice->width(), backingStorePaintDevice->height());
77 paintDevicePixelRatio = backingStorePaintDevice->devicePixelRatio();
79 m_backingStore->endPaint();
82 QElapsedTimer renderTimer;
84 setBackgroundColor(clearColor());
85 setBackgroundRect(QRect(0, 0,
86 paintSize.width() / paintDevicePixelRatio,
87 paintSize.height() / paintDevicePixelRatio),
88 paintDevicePixelRatio);
98 qint64 buildRenderListTime = renderTimer.restart();
109 const QRegion updateRegion = optimizeRenderList();
110 qint64 optimizeRenderListTime = renderTimer.restart();
113 bool usingBackingStore =
false;
115 m_backingStore->beginPaint(updateRegion);
116 paintDevice = m_backingStore->paintDevice();
117 usingBackingStore =
true;
120 QPainter painter(paintDevice);
121 painter.setRenderHint(QPainter::Antialiasing);
122 auto rc =
static_cast<QSGSoftwareRenderContext *>(context());
123 QPainter *prevPainter = rc->m_activePainter;
124 rc->m_activePainter = &painter;
127 m_flushRegion = renderNodes(&painter);
128 qint64 renderTime = renderTimer.elapsed();
131 if (usingBackingStore)
132 m_backingStore->endPaint();
134 rc->m_activePainter = prevPainter;
135 qCDebug(lcRenderer) <<
"render" << m_flushRegion << buildRenderListTime << optimizeRenderListTime << renderTime;