Skip to content

Commit b8f43e4

Browse files
pixelflingerpoweifeng
authored andcommitted
fix shadow multiplier mode
when shadow multiplier was used, the material used the wrong variant (unlit).
1 parent 9bd994e commit b8f43e4

File tree

4 files changed

+10
-5
lines changed

4 files changed

+10
-5
lines changed

libs/filamat/src/GLSLPostProcessor.cpp

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -157,7 +157,9 @@ static void collectDescriptorsForSet(filament::DescriptorSetBindingPoints set,
157157
return descriptor_sets::getSsrVariantLayout();
158158
}
159159
return descriptor_sets::getPerViewDescriptorSetLayout(config.domain,
160-
config.variantFilter, material.isLit, material.reflectionMode,
160+
config.variantFilter,
161+
material.isLit || material.hasShadowMultiplier,
162+
material.reflectionMode,
161163
material.refractionMode);
162164
}
163165
case DescriptorSetBindingPoints::PER_RENDERABLE:

libs/filamat/src/MaterialBuilder.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1551,7 +1551,7 @@ void MaterialBuilder::writeCommonChunks(ChunkContainer& container, MaterialInfo&
15511551
backend::DescriptorSetLayout const perViewDescriptorSetLayout =
15521552
descriptor_sets::getPerViewDescriptorSetLayout(
15531553
mMaterialDomain, mVariantFilter,
1554-
info.isLit, info.reflectionMode, info.refractionMode);
1554+
info.isLit || info.hasShadowMultiplier, info.reflectionMode, info.refractionMode);
15551555

15561556
// Descriptor layout and descriptor name/binding mapping
15571557
container.push<MaterialDescriptorBindingsChuck>(info.sib, perViewDescriptorSetLayout);

libs/filamat/src/MaterialVariants.cpp

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -86,9 +86,11 @@ std::vector<Variant> determineSurfaceVariants(
8686
RefractionMode::CUBEMAP,
8787
RefractionMode::NONE }) {
8888
auto const vdsl = ShaderGenerator::getPerViewDescriptorSetLayoutWithVariant(
89-
vertexVariant, userVariantFilter, isLit, reflection, refraction);
89+
vertexVariant, userVariantFilter, isLit || shadowMultiplier,
90+
reflection, refraction);
9091
auto const fdsl = ShaderGenerator::getPerViewDescriptorSetLayoutWithVariant(
91-
fragmentVariant, userVariantFilter, isLit, reflection, refraction);
92+
fragmentVariant, userVariantFilter, isLit || shadowMultiplier,
93+
reflection, refraction);
9294
// Check that all bindings present in the vertex shader DescriptorSetLayout
9395
// are also present in the fragment shader DescriptorSetLayout.
9496
for (auto const& r: vdsl.bindings) {

libs/filamat/src/shaders/ShaderGenerator.cpp

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -608,7 +608,8 @@ std::string ShaderGenerator::createFragmentProgram(ShaderModel shaderModel,
608608

609609
auto const perViewDescriptorSetLayout = getPerViewDescriptorSetLayoutWithVariant(
610610
variant, variantFilter,
611-
material.isLit, material.reflectionMode, material.refractionMode);
611+
material.isLit || material.hasShadowMultiplier,
612+
material.reflectionMode, material.refractionMode);
612613

613614
// this is the list of samplers we need to filter
614615
auto list = SibGenerator::getPerViewSib(variant).getSamplerInfoList();

0 commit comments

Comments
 (0)