diff options
author | Paul Lemire <paul.lemire@kdab.com> | 2015-01-30 11:28:20 +0100 |
---|---|---|
committer | Sean Harmer <sean.harmer@kdab.com> | 2015-02-08 15:02:28 +0000 |
commit | 4b22aa1904337e595cca0b6f46b445d555db7d6b (patch) | |
tree | a8c9f26628c41dae1ae48ba6853b07d50f96a3f8 /src/render/backend/qrenderaspect.cpp | |
parent | 782907f3f15def5f050bb69f95575d5e3f40b61d (diff) |
Texture API refactoring
* Added LoadTextureDataJob
* QAbstractTextureProvider: maximum layers property
* Automatic QAbstractTextureProvider::TextureFormat added
* material-qml should work perfectly with that patch.
Change-Id: I3f92f13b783155798772086304a30126a4fc687d
Reviewed-by: Sean Harmer <sean.harmer@kdab.com>
Diffstat (limited to 'src/render/backend/qrenderaspect.cpp')
-rw-r--r-- | src/render/backend/qrenderaspect.cpp | 12 |
1 files changed, 10 insertions, 2 deletions
diff --git a/src/render/backend/qrenderaspect.cpp b/src/render/backend/qrenderaspect.cpp index 7e1ce5e53..f61d3e2b7 100644 --- a/src/render/backend/qrenderaspect.cpp +++ b/src/render/backend/qrenderaspect.cpp @@ -44,6 +44,7 @@ #include <Qt3DRenderer/private/rendermesh_p.h> #include <Qt3DRenderer/private/meshdatamanager_p.h> +#include <Qt3DRenderer/private/texturedatamanager_p.h> #include <Qt3DRenderer/private/renderer_p.h> #include <Qt3DRenderer/private/scenemanager_p.h> @@ -88,6 +89,7 @@ #include <Qt3DRenderer/private/rendernodefunctor_p.h> #include <Qt3DRenderer/private/framegraphnode_p.h> #include <Qt3DRenderer/private/loadmeshdatajob_p.h> +#include <Qt3DRenderer/private/loadtexturedatajob_p.h> #include <Qt3DRenderer/private/updateboundingvolumejob_p.h> #include <Qt3DRenderer/private/updateworldtransformjob_p.h> #include <Qt3DRenderer/private/framecleanupjob_p.h> @@ -191,7 +193,7 @@ void QRenderAspect::registerBackendTypes() registerBackendType<QTransform>(QBackendNodeFunctorPtr(new Render::RenderNodeFunctor<Render::RenderTransform, Render::TransformManager>(d->m_renderer->transformManager()))); registerBackendType<QMaterial>(QBackendNodeFunctorPtr(new Render::RenderNodeFunctor<Render::RenderMaterial, Render::MaterialManager>(d->m_renderer->materialManager()))); registerBackendType<QTechnique>(QBackendNodeFunctorPtr(new Render::RenderNodeFunctor<Render::RenderTechnique, Render::TechniqueManager>(d->m_renderer->techniqueManager()))); - registerBackendType<QAbstractTextureProvider>(QBackendNodeFunctorPtr(new Render::RenderTextureFunctor(d->m_renderer->textureManager(), d->m_renderer->textureImageManager()))); + registerBackendType<QAbstractTextureProvider>(QBackendNodeFunctorPtr(new Render::RenderTextureFunctor(d->m_renderer->textureManager(), d->m_renderer->textureImageManager(), d->m_renderer->textureDataManager()))); registerBackendType<QShaderProgram>(QBackendNodeFunctorPtr(new Render::RenderNodeFunctor<Render::RenderShader, Render::ShaderManager>(d->m_renderer->shaderManager()))); registerBackendType<QEffect>(QBackendNodeFunctorPtr(new Render::RenderNodeFunctor<Render::RenderEffect, Render::EffectManager>(d->m_renderer->effectManager()))); registerBackendType<QAnnotation>(QBackendNodeFunctorPtr(new Render::RenderNodeFunctor<Render::RenderAnnotation, Render::CriterionManager>(d->m_renderer->criterionManager()))); @@ -215,7 +217,7 @@ void QRenderAspect::registerBackendTypes() registerBackendType<QFrameGraph>(QBackendNodeFunctorPtr(new Render::FrameGraphComponentFunctor(d->m_renderer))); registerBackendType<QParameter>(QBackendNodeFunctorPtr(new Render::RenderNodeFunctor<Render::RenderParameter, Render::ParameterManager>(d->m_renderer->parameterManager()))); registerBackendType<QShaderData>(QBackendNodeFunctorPtr(new Render::RenderShaderDataFunctor(d->m_renderer->shaderDataManager()))); - registerBackendType<QAbstractTextureImage>(QBackendNodeFunctorPtr(new Render::RenderNodeFunctor<Render::RenderTextureImage, Render::TextureImageManager>(d->m_renderer->textureImageManager()))); + registerBackendType<QAbstractTextureImage>(QBackendNodeFunctorPtr(new Render::RenderTextureImageFunctor(d->m_renderer->textureManager(), d->m_renderer->textureImageManager(), d->m_renderer->textureDataManager()))); } void QRenderAspect::renderInitialize(QOpenGLContext *context) @@ -259,6 +261,12 @@ QVector<QAspectJobPtr> QRenderAspect::jobsToExecute(qint64 time) jobs.append(loadMeshJob); } + QVector<QNodeId> texturesPending = d->m_renderer->textureDataManager()->texturesPending(); + Q_FOREACH (const QNodeId &textureId, texturesPending) { + Render::LoadTextureDataJobPtr loadTextureJob(new Render::LoadTextureDataJob(textureId)); + loadTextureJob->setRenderer(d->m_renderer); + jobs.append(loadTextureJob); + } // TO DO: Have 2 jobs queue // One for urgent jobs that are mandatory for the rendering of a frame // Another for jobs that can span across multiple frames (Scene/Mesh loading) |