Skip to content

Commit e371b74

Browse files
committed
Unified environment light texture handling in MslPipelineStateObject
Seeks to address #2851
1 parent d69fcb1 commit e371b74

1 file changed

Lines changed: 19 additions & 39 deletions

File tree

source/MaterialXRenderMsl/MslPipelineStateObject.mm

Lines changed: 19 additions & 39 deletions
Original file line numberDiff line numberDiff line change
@@ -590,32 +590,6 @@ int GetStrideOfMetalType(MTLDataType type)
590590
{
591591
bool found = false;
592592

593-
if (lightHandler)
594-
{
595-
// Bind environment lights.
596-
ImageMap envLights =
597-
{
598-
{ HW::ENV_RADIANCE, lightHandler->getUsePrefilteredMap() ? lightHandler->getEnvPrefilteredMap() : lightHandler->getEnvRadianceMap() },
599-
{ HW::ENV_IRRADIANCE, lightHandler->getEnvIrradianceMap() }
600-
};
601-
for (const auto& env : envLights)
602-
{
603-
std::string str(arg.name.UTF8String);
604-
size_t loc = str.find(env.first);
605-
if (loc != std::string::npos && env.second)
606-
{
607-
ImageSamplingProperties samplingProperties;
608-
samplingProperties.uaddressMode = ImageSamplingProperties::AddressMode::PERIODIC;
609-
samplingProperties.vaddressMode = ImageSamplingProperties::AddressMode::CLAMP;
610-
samplingProperties.filterType = ImageSamplingProperties::FilterType::LINEAR;
611-
612-
static_cast<MaterialX::MetalTextureHandler*>(imageHandler.get())->bindImage(env.second, samplingProperties);
613-
bindTexture(renderCmdEncoder, (unsigned int) arg.index, env.second, imageHandler);
614-
found = true;
615-
}
616-
}
617-
}
618-
619593
if (!found)
620594
{
621595
ImagePtr image = nullptr;
@@ -705,14 +679,23 @@ int GetStrideOfMetalType(MTLDataType type)
705679
bindUniform(HW::ENV_MATRIX, Value::createValue(envRotation), false);
706680
bindUniform(HW::ENV_RADIANCE_SAMPLES, Value::createValue(lightHandler->getEnvSampleCount()), false);
707681
bindUniform(HW::ENV_LIGHT_INTENSITY, Value::createValue(lightHandler->getEnvLightIntensity()), false);
708-
ImageMap envLights =
682+
ImageMap envLights;
683+
if (lightHandler->getIndirectLighting())
709684
{
710-
{ HW::ENV_RADIANCE, lightHandler->getEnvRadianceMap() },
711-
{ HW::ENV_IRRADIANCE, lightHandler->getEnvIrradianceMap() }
712-
};
713-
for (const auto& env : envLights)
685+
envLights[HW::ENV_RADIANCE] = lightHandler->getUsePrefilteredMap() ?
686+
lightHandler->getEnvPrefilteredMap() :
687+
lightHandler->getEnvRadianceMap();
688+
envLights[HW::ENV_IRRADIANCE] = lightHandler->getEnvIrradianceMap();
689+
}
690+
else
714691
{
715-
auto iblUniform = uniformList.find(TEXTURE_NAME(env.first));
692+
envLights[HW::ENV_RADIANCE] = imageHandler->getZeroImage();
693+
envLights[HW::ENV_IRRADIANCE] = imageHandler->getZeroImage();
694+
}
695+
for (const auto& env : envLights) {
696+
const auto uniformName = TEXTURE_NAME(env.first);
697+
698+
auto iblUniform = uniformList.find(uniformName);
716699
MslProgram::InputPtr inputPtr = iblUniform != uniformList.end() ? iblUniform->second : nullptr;
717700
if (inputPtr)
718701
{
@@ -736,7 +719,7 @@ int GetStrideOfMetalType(MTLDataType type)
736719
samplingProperties.uaddressMode = ImageSamplingProperties::AddressMode::PERIODIC;
737720
samplingProperties.vaddressMode = ImageSamplingProperties::AddressMode::CLAMP;
738721
samplingProperties.filterType = ImageSamplingProperties::FilterType::LINEAR;
739-
imageHandler->bindImage(image, samplingProperties);
722+
bindTexture(imageHandler, uniformName, image, samplingProperties);
740723
}
741724
}
742725
}
@@ -976,12 +959,9 @@ int GetStrideOfMetalType(MTLDataType type)
976959

977960
if (arg.type == MTLArgumentTypeTexture)
978961
{
979-
if (HW::ENV_RADIANCE != arg.name.UTF8String && HW::ENV_IRRADIANCE != arg.name.UTF8String)
980-
{
981-
std::string texture_name = arg.name.UTF8String;
982-
InputPtr inputPtr = std::make_shared<Input>(arg.index, MTLDataTypeTexture, -1, EMPTY_STRING);
983-
_uniformList[texture_name] = inputPtr;
984-
}
962+
std::string texture_name = arg.name.UTF8String;
963+
InputPtr inputPtr = std::make_shared<Input>(arg.index, MTLDataTypeTexture, -1, EMPTY_STRING);
964+
_uniformList[texture_name] = inputPtr;
985965
}
986966
}
987967

0 commit comments

Comments
 (0)