@@ -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