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);
45 void scheduleUserPass(QSSGRenderUserPass *userPasses);
46 void unscheduleUserPass(
const QSSGRenderUserPass *userPasses);
48 QSSGRhiRenderableTextureV2Ptr getOrCreateRenderableTexture(
const QSSGRenderUserPass &userPass);
49 QSSGRhiRenderableTextureV2Ptr getUserPassTexureResult(
const QSSGRenderUserPass &userPass)
const;
52 void updateUserPassOrder(
bool forceUpdate =
false);
54 const UserPassSet &scheduledUserPasses()
const {
return m_scheduledUserPasses; }
58 void unregisterManagedTexture(QSSGManagedRhiTexture *textureWrapper);
59 void registerManagedTexture(QSSGManagedRhiTexture *textureWrapper);
61 static constexpr size_t maxUserPassSlots() {
return 16; }
62 qsizetype acquireUserPassSlot();
67 Q_DISABLE_COPY_MOVE(QSSGUserRenderPassManager)
69 friend class QSSGBufferManager;
71 using TextureWrappers = std::vector<QSSGManagedRhiTexture *>;
72 using DeferredReleaseTextures = QSet<QRhiTexture *>;
75 [[nodiscard]]
bool derefTexture(QRhiTexture *texture);
76 void refTexture(QRhiTexture *texture);
78 [[nodiscard]]
bool derefTexture(
const std::unique_ptr<QRhiTexture> &texture);
79 void refTexture(
const std::unique_ptr<QRhiTexture> &texture);
81 QHash<
const QSSGRenderUserPass *, QSSGRhiRenderableTextureV2Ptr> m_renderPassRenderTargets;
82 UserPassSet m_scheduledUserPasses;
84 QHash<QRhiTexture *, size_t> m_trackedTextures;
88 TextureWrappers m_trackedTextureWrappers;
90 DeferredReleaseTextures m_deferredReleaseTextures;
92 size_t m_userPassSlotsUsed = 0;
94 bool m_passlistDirty =
false;