32 enum class Private { Initialize };
35 using UserPassSet = QList<QSSGRenderUserPass *>;
37 explicit QSSGUserRenderPassManager(Private);
38 ~QSSGUserRenderPassManager();
40 [[nodiscard]]
static std::shared_ptr<QSSGUserRenderPassManager> create()
42 return std::make_shared<QSSGUserRenderPassManager>(Private::Initialize);
48 void setScheduledPasses(
const UserPassSet &topLevelPasses);
54 void scheduleUserPass(QSSGRenderUserPass *userPasses);
55 void unscheduleUserPass(
const QSSGRenderUserPass *userPasses);
57 QSSGRhiRenderableTextureV2Ptr getOrCreateRenderableTexture(
const QSSGRenderUserPass &userPass);
58 QSSGRhiRenderableTextureV2Ptr getUserPassTexureResult(
const QSSGRenderUserPass &userPass)
const;
61 void updateUserPassOrder(
bool forceUpdate =
false);
63 const UserPassSet &scheduledUserPasses()
const {
return m_scheduledUserPasses; }
67 void unregisterManagedTexture(QSSGManagedRhiTexture *textureWrapper);
68 void registerManagedTexture(QSSGManagedRhiTexture *textureWrapper);
70 static constexpr size_t maxUserPassSlots() {
return 16; }
71 qsizetype acquireUserPassSlot();
76 Q_DISABLE_COPY_MOVE(QSSGUserRenderPassManager)
78 friend class QSSGBufferManager;
80 using TextureWrappers = std::vector<QSSGManagedRhiTexture *>;
81 using DeferredReleaseTextures = QSet<QRhiTexture *>;
84 [[nodiscard]]
bool derefTexture(QRhiTexture *texture);
85 void refTexture(QRhiTexture *texture);
87 [[nodiscard]]
bool derefTexture(
const std::unique_ptr<QRhiTexture> &texture);
88 void refTexture(
const std::unique_ptr<QRhiTexture> &texture);
90 QHash<
const QSSGRenderUserPass *, QSSGRhiRenderableTextureV2Ptr> m_renderPassRenderTargets;
91 UserPassSet m_scheduledUserPasses;
95 QSet<
const QSSGRenderUserPass *> m_subPassScheduleWarned;
97 QHash<QRhiTexture *, size_t> m_trackedTextures;
101 TextureWrappers m_trackedTextureWrappers;
103 DeferredReleaseTextures m_deferredReleaseTextures;
105 size_t m_userPassSlotsUsed = 0;
107 bool m_passlistDirty =
false;