diff --git a/filament/src/Renderer.cpp b/filament/src/Renderer.cpp index 062312ffc5..67fdc561b3 100644 --- a/filament/src/Renderer.cpp +++ b/filament/src/Renderer.cpp @@ -229,9 +229,9 @@ void FRenderer::renderJob(ArenaScope& arena, FView& view) { } FRenderTarget* currentRenderTarget = upcast(view.getRenderTarget()); - if (mPreviousRenderTarget != currentRenderTarget) { + if (mPreviousRenderTargets.find(currentRenderTarget) == mPreviousRenderTargets.end()) { + mPreviousRenderTargets.insert(currentRenderTarget); initializeClearFlags(); - mPreviousRenderTarget = currentRenderTarget; } view.prepare(engine, driver, arena, svp, getShaderUserTime()); @@ -906,7 +906,7 @@ bool FRenderer::beginFrame(FSwapChain* swapChain, uint64_t vsyncSteadyClockTimeN mShaderUserTime = { h, l, 0, 0 }; initializeClearFlags(); - mPreviousRenderTarget = nullptr; + mPreviousRenderTargets.clear(); mBeginFrameInternal = {}; diff --git a/filament/src/details/Renderer.h b/filament/src/details/Renderer.h index 8c2de657d8..35aba44c36 100644 --- a/filament/src/details/Renderer.h +++ b/filament/src/details/Renderer.h @@ -40,6 +40,8 @@ #include #include +#include + namespace filament { namespace backend { @@ -192,7 +194,7 @@ private: ClearOptions mClearOptions; backend::TargetBufferFlags mDiscardedFlags{}; backend::TargetBufferFlags mClearFlags{}; - FRenderTarget* mPreviousRenderTarget = nullptr; + tsl::robin_set mPreviousRenderTargets; std::function mBeginFrameInternal; // per-frame arena for this Renderer