diff options
author | Antti Määttä <antti.maatta@qt.io> | 2019-04-12 13:54:35 +0300 |
---|---|---|
committer | Antti Määttä <antti.maatta@qt.io> | 2019-05-03 09:34:00 +0000 |
commit | 73ebd0f9cf6376a762c96d37ab6046fefd8d4789 (patch) | |
tree | e415e2af7e30002563422ba9cbec02f3276b013e /src/Runtime/Source/runtimerender/Qt3DSRenderRenderList.cpp | |
parent | ccc70e48e576c0dffc289df4850a909fb6fef83d (diff) |
Implement dynamic loading of slide resources
Implements loading of textures and images during runtime instead of load
time.
- Images which are not part of any slide are loaded at load time
- Master slide images are always loaded at load time
- Images used in a slide are loaded when the slide is entered
- Images are unloaded when slide is exited and any other slide does not
use them
Task-number: QT3DS-3208
Change-Id: I7a827a5e828908efd2b104fe25374c66958319d2
Reviewed-by: Mahmoud Badri <mahmoud.badri@qt.io>
Reviewed-by: Miikka Heikkinen <miikka.heikkinen@qt.io>
Diffstat (limited to 'src/Runtime/Source/runtimerender/Qt3DSRenderRenderList.cpp')
-rw-r--r-- | src/Runtime/Source/runtimerender/Qt3DSRenderRenderList.cpp | 20 |
1 files changed, 17 insertions, 3 deletions
diff --git a/src/Runtime/Source/runtimerender/Qt3DSRenderRenderList.cpp b/src/Runtime/Source/runtimerender/Qt3DSRenderRenderList.cpp index 118c855d..05a7b2c4 100644 --- a/src/Runtime/Source/runtimerender/Qt3DSRenderRenderList.cpp +++ b/src/Runtime/Source/runtimerender/Qt3DSRenderRenderList.cpp @@ -45,6 +45,7 @@ struct SRenderList : public IRenderList NVFoundationBase &m_Foundation; TTaskList m_Tasks; + TTaskList m_PersistentTasks; QT3DSU32 m_NextTaskId; QT3DSI32 mRefCount; bool m_ScissorEnabled; @@ -54,6 +55,7 @@ struct SRenderList : public IRenderList SRenderList(NVFoundationBase &fnd) : m_Foundation(fnd) , m_Tasks(fnd.getAllocator(), "m_Tasks") + , m_PersistentTasks(fnd.getAllocator(), "m_PersistentTasks") , m_NextTaskId(1) , mRefCount(0) , m_ScissorEnabled(false) @@ -71,8 +73,14 @@ struct SRenderList : public IRenderList QT3DSU32 AddRenderTask(IRenderTask &inTask) override { QT3DSU32 taskId = m_NextTaskId; - ++m_NextTaskId; - m_Tasks.push_back(eastl::make_pair(taskId, &inTask)); + if (inTask.persistent()) { + m_PersistentTasks.push_back(eastl::make_pair(0, &inTask)); + taskId = 0; + } else { + QT3DSU32 taskId = m_NextTaskId; + ++m_NextTaskId; + m_Tasks.push_back(eastl::make_pair(taskId, &inTask)); + } return taskId; } @@ -89,9 +97,15 @@ struct SRenderList : public IRenderList // before rendering to the main render target. void RunRenderTasks() override { + for (TTaskList::reverse_iterator iter = m_PersistentTasks.rbegin(), + end = m_PersistentTasks.rend(); iter != end; + ++iter) { + iter->second->Run(); + } for (TTaskList::reverse_iterator iter = m_Tasks.rbegin(), end = m_Tasks.rend(); iter != end; - ++iter) + ++iter) { iter->second->Run(); + } BeginFrame(); } |