diff --git a/filament/src/details/Renderer.cpp b/filament/src/details/Renderer.cpp index e9963a17a38..13d3138bf96 100644 --- a/filament/src/details/Renderer.cpp +++ b/filament/src/details/Renderer.cpp @@ -638,6 +638,9 @@ void FRenderer::renderJob(RootArenaScope& rootArenaScope, FView& view) { if (isRenderingMultiview) { hasPostProcess = false; msaaOptions.enabled = false; + + // Picking is not supported for multiview rendering. Clear any pending picking queries. + view.clearPickingQueries(); } const uint8_t msaaSampleCount = msaaOptions.enabled ? msaaOptions.sampleCount : 1u; diff --git a/filament/src/details/View.cpp b/filament/src/details/View.cpp index c06e1667ef1..48644370c91 100644 --- a/filament/src/details/View.cpp +++ b/filament/src/details/View.cpp @@ -137,12 +137,7 @@ FView::~FView() noexcept = default; void FView::terminate(FEngine& engine) { // Here we would cleanly free resources we've allocated, or we own (currently none). - while (mActivePickingQueriesList) { - FPickingQuery* const pQuery = mActivePickingQueriesList; - mActivePickingQueriesList = pQuery->next; - pQuery->callback(pQuery->result, pQuery); - FPickingQuery::put(pQuery); - } + clearPickingQueries(); DriverApi& driver = engine.getDriverApi(); driver.destroyBufferObject(mLightUbh); @@ -1178,6 +1173,15 @@ void FView::executePickingQueries(DriverApi& driver, } } +void FView::clearPickingQueries() noexcept { + while (mActivePickingQueriesList) { + FPickingQuery* const pQuery = mActivePickingQueriesList; + mActivePickingQueriesList = pQuery->next; + pQuery->callback(pQuery->result, pQuery); + FPickingQuery::put(pQuery); + } +} + void FView::setTemporalAntiAliasingOptions(TemporalAntiAliasingOptions options) noexcept { options.feedback = clamp(options.feedback, 0.0f, 1.0f); options.filterWidth = std::max(0.2f, options.filterWidth); // below 0.2 causes issues diff --git a/filament/src/details/View.h b/filament/src/details/View.h index 054aa8e11c6..13bdf9e5034 100644 --- a/filament/src/details/View.h +++ b/filament/src/details/View.h @@ -463,6 +463,8 @@ class FView : public View { void executePickingQueries(backend::DriverApi& driver, backend::RenderTargetHandle handle, math::float2 scale) noexcept; + void clearPickingQueries() noexcept; + void setMaterialGlobal(uint32_t index, math::float4 const& value); math::float4 getMaterialGlobal(uint32_t index) const;