@@ -1625,47 +1625,51 @@ void CGLView::RenderScene(GLRenderEngine& re)
16251625
16261626 RenderDecorations (re);
16271627
1628- RenderOverlay (re, rc);
1629-
1630- if (m_recorder.IsRecording () && !m_stopRequested)
1628+ if (m_recorder.IsRecording ())
16311629 {
1632- rhiRenderer* rhiRender = dynamic_cast <rhiRenderer*>(&re);
1633- if (rhiRender)
1630+ if (!m_stopRequested)
16341631 {
1635- frameCapturesRequested++;
1636- rhiRender->setCaptureNextFrame (true );
1632+ rhiRenderer* rhiRender = dynamic_cast <rhiRenderer*>(&re);
1633+ if (rhiRender)
1634+ {
1635+ frameCapturesRequested++;
1636+ rhiRender->setCaptureNextFrame (true );
1637+ }
1638+ }
1639+ else if (frameCapturesRequested <= 0 )
1640+ {
1641+ m_recorder.Stop ();
1642+ m_stopRequested = false ;
1643+ UnlockSafeFrame ();
1644+ m_pWnd->UpdateTitle ();
16371645 }
16381646 }
1639- }
16401647
1641- void CGLView::RenderOverlay (GLRenderEngine& re, GLContext& rc)
1642- {
16431648 rhiRenderer* rhiRender = dynamic_cast <rhiRenderer*>(&re);
16441649 if (rhiRender == nullptr ) return ;
16451650 rhiRender->useOverlayImage (renderOverlay);
1646- if (!renderOverlay) return ;
1647-
1648- // Create the overlay image that we'll paint in
1649- QImage img (rhiRender->pixelSize (), QImage::Format_RGBA8888);
1650- img.fill (QColor (255 , 255 , 255 , 0 ));
1651- QPainter painter (&img);
1652- painter.setRenderHints (QPainter::Antialiasing | QPainter::TextAntialiasing);
1651+ }
16531652
1653+ void CGLView::RenderOverlay (GLRenderEngine& re, QPainter& painter)
1654+ {
16541655 // compose the overlay image
16551656 RenderOverlayComponents (painter);
16561657
1657- // all done with drawing
1658- painter.end ();
1659-
16601658 // the triad requires a bit of special handling
1661- QRhiViewport vp = { (float )m_ptriad->x (), (float )m_ptriad->y (), (float )m_ptriad->w (), (float )m_ptriad->h () };
1662- quatd q = rc.m_cam ->GetOrientation ();
1663- QMatrix4x4 Q; Q.rotate (QQuaternion (q.w , q.x , q.y , q.z ));
1664- m_ptriad->setOrientation (q);
1665- rhiRender->setTriadInfo (Q, vp);
1666-
1667- // all done, send it to the renderer
1668- rhiRender->setOverlayImage (img);
1659+ rhiRenderer* rhiRender = dynamic_cast <rhiRenderer*>(&re);
1660+ if (rhiRender)
1661+ {
1662+ GLScene* scene = GetActiveScene ();
1663+ if (scene == nullptr ) return ;
1664+
1665+ GLCamera& cam = scene->GetCamera ();
1666+
1667+ QRhiViewport vp = { (float )m_ptriad->x (), (float )m_ptriad->y (), (float )m_ptriad->w (), (float )m_ptriad->h () };
1668+ quatd q = cam.GetOrientation ();
1669+ QMatrix4x4 Q; Q.rotate (QQuaternion (q.w , q.x , q.y , q.z ));
1670+ m_ptriad->setOrientation (q);
1671+ rhiRender->setTriadInfo (Q, vp);
1672+ }
16691673}
16701674
16711675void CGLView::RenderOverlayComponents (QPainter& painter)
0 commit comments