Hi, On Friday 11 August 2017 14:34:34 Andy wrote: > Goal: With Qt3D (C++), render my scene offscreen, use render capture on it, > and save image to disk. > > With my Qt3DWindow-based solution the scene looks fine and I can do the > render capture part (on macOS anyways - Windows doesn't work for me - > https://bugreports.qt.io/browse/QTBUG-61223 ). > > Now I need to be able to do it offscreen (without the window open). > > I thought this was going to be as simple as setting a QOffscreenSurface as > my forward renderer surface - something like: > > QOffscreenSurface *surface = new QOffscreenSurface; > > surface->create(); > > Qt3DExtras::QForwardRenderer *forwardRenderer = new > Qt3DExtras::QForwardRenderer; > > forwardRenderer->setSurface( surface ); > forwardRenderer->setExternalRenderTargetSize( QSize( 800, 600 ) ); > > qDebug() << surface->format() << surface->size() << surface->isValid(); > > While this gives me a valid surface and the format is correct, its size is > always (1,1) and the render capture gives me images of that size. > > How do I set the size of the QOffscreenSurface?
You don't :) An offscreen surface is only good for making a GL context current. It is not suitable as a render target. If you want to do offscreen rendering with QOffscreenSurface, you will need to provide your own render target in the form of a framebuffer object. You will need to create an FBO by way of a QRenderTarget with a 2D texture of the desired size attached to the color0 attachment point, and a depth format texture of the same size attached to the depth attachment point. Select this with a QRenderTargetSelector in a custom framegraph to direct rendering into the attached textures. You can then do a pixel read back operation with the QRenderCapure and save the resulting image. I suppose this could be wrapped in a convenience that allows the rest of the framegraph beyond the render target selector and render capture to be set. Cheers, Sean > > Or am I going about this the wrong way? > > (It would be nice to have a class like the Qt3DWindow one specifically for > offscreen rendering.) > > --- > Andy Maloney // https://asmaloney.com > twitter ~ @asmaloney <https://twitter.com/asmaloney> -- Dr Sean Harmer | [email protected] | Managing Director UK Klarälvdalens Datakonsult AB, a KDAB Group company Tel. UK +44 (0)1625 809908, Sweden (HQ) +46-563-540090 KDAB - Qt Experts - Platform-independent software solutions _______________________________________________ Interest mailing list [email protected] http://lists.qt-project.org/mailman/listinfo/interest
