Nominate our 2022 Qt Champions!

Synchronous update of Qt3D texture data

  • Use case

    I have a QImage which needs to be drawn synchronously in 2D (QQuickPaintedItem) and 3D (rendered as texture on a quad). The contents of the QImage changes rapidly (like playing a movie).

    Current solution

    Following the Qt3D examples and source code, I'm currently doing the following:

    1. Subclass Qt3DRender::QAbstractTextureImage to represent my texture. My subclass has a Qt3DRender::TexImageDataPtr member that I update with the data from my QImage. So far so good.
    2. Implement Qt3DRender::QAbstractTextureImage::dataFunctor(), which (through a functor) returns my Qt3DRender::TexImageDataPtr member. This works.


    The problem is that the texture loading is asynchronous, and the 3D version of the QImage lags significantly behind the 2D version. There seem to be two asynchronous parts contributing to this

    1. The Qt3DRender::Render::LoadTextureDataJob, running in a separate thread, checks for updates in my functor, and calls Qt3DRender::Render::Texture::requestTextureDataUpdate, which just marks it as requiring data upload
    2. The Qt3DRender::QRenderAspect then comes a long (in the next frame, presumably), and uploads the new data to the GPU texture.


    Is there a way for me to synchronously upload data to a Qt3D texture?

  • Lifetime Qt Champion

    Hi and welcome to devnet,

    Since Qt3D (2.0) is pretty new, I'd recommend asking this question on the interest mailing list. You'll find there Qt3D's developers/maintainers (this forum is more user oriented)

  • Thanks, I'll do that!