diff options
author | Paul Lemire <paul.lemire@kdab.com> | 2019-02-19 13:34:13 +0100 |
---|---|---|
committer | Paul Lemire <paul.lemire@kdab.com> | 2019-03-04 14:52:38 +0000 |
commit | 0a8742532fb1697203dd3d7d9c1c28b4cb052e2d (patch) | |
tree | e417fec5065df3d7e8d66f237ba56fb39435185d /src/render/frontend | |
parent | 299c0bc6d2ea5817ba32b3724290c349789be11b (diff) |
Rework internal Texture Handling
- Remove internal GLTexture sharing
- Remove dataFunctor data sharing
- Simplify the overall texture process:
1) Look for dirty textures
(either a property on QTexture or a referenced QTextureImage
has changed)
2) Update GL Resources
- Create a GLTexture for a given Texture if it doesn't exist
- Update GLTexture to reflect Texture state
- Perform actual GL texture creation and or upload
(call functors at this point)
- Cleanup GLTextures when matching Texture node has been
destroyed
This will provide an easier maintenance over time as it drastically
simplifies the handling of textures and removes most of the coupling.
Furthermore this will make it possible to send texture updates on
a QTexture node to update texture content without having to declare
QTextureImages which would not have been (or would have been a lot
harder) to do. In practice, I doubt most people were even aware of
the internal texture sharing in the first place.
[ChangeLog][Qt3DRender] Textures: internal data sharing removed
Change-Id: I02867c8105e29eb1e193884e3899062f795f32f4
Reviewed-by: Sean Harmer <sean.harmer@kdab.com>
Diffstat (limited to 'src/render/frontend')
-rw-r--r-- | src/render/frontend/qrenderaspect.cpp | 31 |
1 files changed, 5 insertions, 26 deletions
diff --git a/src/render/frontend/qrenderaspect.cpp b/src/render/frontend/qrenderaspect.cpp index 65906f1ae..f8add3500 100644 --- a/src/render/frontend/qrenderaspect.cpp +++ b/src/render/frontend/qrenderaspect.cpp @@ -41,7 +41,6 @@ #include "qrenderaspect_p.h" #include <Qt3DRender/private/nodemanagers_p.h> -#include <Qt3DRender/private/texturedatamanager_p.h> #include <Qt3DRender/private/renderer_p.h> #include <Qt3DRender/private/scenemanager_p.h> #include <Qt3DRender/private/geometryrenderermanager_p.h> @@ -113,7 +112,6 @@ #include <Qt3DRender/private/renderlogging_p.h> #include <Qt3DRender/private/nodefunctor_p.h> #include <Qt3DRender/private/framegraphnode_p.h> -#include <Qt3DRender/private/loadtexturedatajob_p.h> #include <Qt3DRender/private/textureimage_p.h> #include <Qt3DRender/private/statesetnode_p.h> #include <Qt3DRender/private/nodraw_p.h> @@ -269,8 +267,7 @@ void QRenderAspectPrivate::registerBackendTypes() // Textures q->registerBackendType<QAbstractTexture>(QSharedPointer<Render::TextureFunctor>::create(m_renderer, m_nodeManagers->textureManager())); q->registerBackendType<QAbstractTextureImage>(QSharedPointer<Render::TextureImageFunctor>::create(m_renderer, - m_nodeManagers->textureImageManager(), - m_nodeManagers->textureImageDataManager())); + m_nodeManagers->textureImageManager())); // Material system q->registerBackendType<QEffect>(QSharedPointer<Render::NodeFunctor<Render::Effect, Render::EffectManager> >::create(m_renderer)); @@ -477,34 +474,16 @@ QVector<Qt3DCore::QAspectJobPtr> QRenderAspect::jobsToExecute(qint64 time) if (d->m_renderer->isRunning() && d->m_renderer->settings()) { Render::NodeManagers *manager = d->m_renderer->nodeManagers(); - QAspectJobPtr textureLoadingSync = d->m_renderer->syncTextureLoadingJob(); - textureLoadingSync->removeDependency(QWeakPointer<QAspectJob>()); - - // Launch texture generator jobs - const QVector<QTextureImageDataGeneratorPtr> pendingImgGen = manager->textureImageDataManager()->pendingGenerators(); - for (const QTextureImageDataGeneratorPtr &imgGen : pendingImgGen) { - auto loadTextureJob = Render::LoadTextureDataJobPtr::create(imgGen); - textureLoadingSync->addDependency(loadTextureJob); - loadTextureJob->setNodeManagers(manager); - jobs.append(loadTextureJob); - } - const QVector<QTextureGeneratorPtr> pendingTexGen = manager->textureDataManager()->pendingGenerators(); - for (const QTextureGeneratorPtr &texGen : pendingTexGen) { - auto loadTextureJob = Render::LoadTextureDataJobPtr::create(texGen); - textureLoadingSync->addDependency(loadTextureJob); - loadTextureJob->setNodeManagers(manager); - jobs.append(loadTextureJob); - } + QAspectJobPtr loadingJobSync = d->m_renderer->syncLoadingJobs(); + loadingJobSync->removeDependency(QWeakPointer<QAspectJob>()); - // Launch skeleton loader jobs. We join on the syncTextureLoadingJob for now - // which should likely be renamed to something more generic or we introduce - // another synchronizing job for skeleton loading + // Launch skeleton loader jobs once all loading jobs have completed. const QVector<Render::HSkeleton> skeletonsToLoad = manager->skeletonManager()->takeDirtySkeletons(Render::SkeletonManager::SkeletonDataDirty); for (const auto &skeletonHandle : skeletonsToLoad) { auto loadSkeletonJob = Render::LoadSkeletonJobPtr::create(skeletonHandle); loadSkeletonJob->setNodeManagers(manager); - textureLoadingSync->addDependency(loadSkeletonJob); + loadingJobSync->addDependency(loadSkeletonJob); jobs.append(loadSkeletonJob); } |