diff --git a/filament/src/Engine.cpp b/filament/src/Engine.cpp index 42cfbdbcb3..ce9c41c9fb 100644 --- a/filament/src/Engine.cpp +++ b/filament/src/Engine.cpp @@ -237,7 +237,6 @@ void FEngine::init() { // 3 bands = 9 float3 const float sh[9 * 3] = { 0.0f }; mDefaultIbl = upcast(IndirectLight::Builder() - .reflections(mDefaultIblTexture) .irradiance(3, reinterpret_cast(sh)) .build(*this)); diff --git a/filament/src/View.cpp b/filament/src/View.cpp index cbcf7b23bf..88332faa43 100644 --- a/filament/src/View.cpp +++ b/filament/src/View.cpp @@ -301,13 +301,16 @@ void FView::prepareLighting(FEngine& engine, FEngine::DriverApi& driver, ArenaSc u.setUniform(offsetof(PerViewUib, iblRoughnessOneLevel), iblRoughnessOneLevel); u.setUniform(offsetof(PerViewUib, iblLuminance), intensity * exposure); u.setUniformArray(offsetof(PerViewUib, iblSH), ibl->getSH(), 9); - if (ibl->getReflectionHwHandle()) { - mPerViewSb.setSampler(PerViewSib::IBL_SPECULAR, { - ibl->getReflectionHwHandle(), { - .filterMag = SamplerMagFilter::LINEAR, - .filterMin = SamplerMinFilter::LINEAR_MIPMAP_LINEAR - }}); + + // We always sample from the reflection texture, so provide a dummy texture if necessary. + backend::Handle reflection = ibl->getReflectionHwHandle(); + if (!reflection) { + reflection = engine.getDummyCubemap()->getHwHandle(); } + mPerViewSb.setSampler(PerViewSib::IBL_SPECULAR, { reflection, { + .filterMag = SamplerMagFilter::LINEAR, + .filterMin = SamplerMinFilter::LINEAR_MIPMAP_LINEAR + }}); // Directional light (always at index 0) auto& lcm = engine.getLightManager();