[Interest] Qt3D Rendering offscreen
Andy
asmaloney at gmail.com
Sat Aug 12 14:58:52 CEST 2017
On Sat, Aug 12, 2017 at 8:40 AM, Sean Harmer <sean.harmer at kdab.com> wrote:
> 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
>
I guess I find that class name confusing then... One draws on a surface,
right? :-)
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.
>
So that's a QTexture2D for colo0 and... what for the "depth format
texture"? Another QTexture2D?
>
> 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.
>
You make it sound so easy!
> 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.
>
+1. If I ever get anything working, I'd be happy to work with someone to
get it into shape for Qt3DExtras.
Thanks Sean!
> 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 | sean.harmer at kdab.com | 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
>
---
Andy Maloney // https://asmaloney.com
twitter ~ @asmaloney <https://twitter.com/asmaloney>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.qt-project.org/pipermail/interest/attachments/20170812/02461107/attachment.html>
More information about the Interest
mailing list