diff --git a/source/MaterialXRenderMsl/MslPipelineStateObject.mm b/source/MaterialXRenderMsl/MslPipelineStateObject.mm index 7aa7ce3797..038bbe0a5a 100644 --- a/source/MaterialXRenderMsl/MslPipelineStateObject.mm +++ b/source/MaterialXRenderMsl/MslPipelineStateObject.mm @@ -580,7 +580,7 @@ int GetStrideOfMetalType(MTLDataType type) } void MslProgram::bindTextures(id renderCmdEncoder, - LightHandlerPtr lightHandler, + LightHandlerPtr /*lightHandler*/, ImageHandlerPtr imageHandler) { const VariableBlock& publicUniforms = _shader->getStage(Stage::PIXEL).getUniformBlock(HW::PUBLIC_UNIFORMS); @@ -590,32 +590,6 @@ int GetStrideOfMetalType(MTLDataType type) { bool found = false; - if (lightHandler) - { - // Bind environment lights. - ImageMap envLights = - { - { HW::ENV_RADIANCE, lightHandler->getUsePrefilteredMap() ? lightHandler->getEnvPrefilteredMap() : lightHandler->getEnvRadianceMap() }, - { HW::ENV_IRRADIANCE, lightHandler->getEnvIrradianceMap() } - }; - for (const auto& env : envLights) - { - std::string str(arg.name.UTF8String); - size_t loc = str.find(env.first); - if (loc != std::string::npos && env.second) - { - ImageSamplingProperties samplingProperties; - samplingProperties.uaddressMode = ImageSamplingProperties::AddressMode::PERIODIC; - samplingProperties.vaddressMode = ImageSamplingProperties::AddressMode::CLAMP; - samplingProperties.filterType = ImageSamplingProperties::FilterType::LINEAR; - - static_cast(imageHandler.get())->bindImage(env.second, samplingProperties); - bindTexture(renderCmdEncoder, (unsigned int) arg.index, env.second, imageHandler); - found = true; - } - } - } - if (!found) { ImagePtr image = nullptr; @@ -705,14 +679,23 @@ int GetStrideOfMetalType(MTLDataType type) bindUniform(HW::ENV_MATRIX, Value::createValue(envRotation), false); bindUniform(HW::ENV_RADIANCE_SAMPLES, Value::createValue(lightHandler->getEnvSampleCount()), false); bindUniform(HW::ENV_LIGHT_INTENSITY, Value::createValue(lightHandler->getEnvLightIntensity()), false); - ImageMap envLights = + ImageMap envLights; + if (lightHandler->getIndirectLighting()) { - { HW::ENV_RADIANCE, lightHandler->getEnvRadianceMap() }, - { HW::ENV_IRRADIANCE, lightHandler->getEnvIrradianceMap() } - }; - for (const auto& env : envLights) + envLights[HW::ENV_RADIANCE] = lightHandler->getUsePrefilteredMap() ? + lightHandler->getEnvPrefilteredMap() : + lightHandler->getEnvRadianceMap(); + envLights[HW::ENV_IRRADIANCE] = lightHandler->getEnvIrradianceMap(); + } + else { - auto iblUniform = uniformList.find(TEXTURE_NAME(env.first)); + envLights[HW::ENV_RADIANCE] = imageHandler->getZeroImage(); + envLights[HW::ENV_IRRADIANCE] = imageHandler->getZeroImage(); + } + for (const auto& env : envLights) { + const auto uniformName = TEXTURE_NAME(env.first); + + auto iblUniform = uniformList.find(uniformName); MslProgram::InputPtr inputPtr = iblUniform != uniformList.end() ? iblUniform->second : nullptr; if (inputPtr) { @@ -736,7 +719,7 @@ int GetStrideOfMetalType(MTLDataType type) samplingProperties.uaddressMode = ImageSamplingProperties::AddressMode::PERIODIC; samplingProperties.vaddressMode = ImageSamplingProperties::AddressMode::CLAMP; samplingProperties.filterType = ImageSamplingProperties::FilterType::LINEAR; - imageHandler->bindImage(image, samplingProperties); + bindTexture(imageHandler, uniformName, image, samplingProperties); } } } @@ -976,12 +959,9 @@ int GetStrideOfMetalType(MTLDataType type) if (arg.type == MTLArgumentTypeTexture) { - if (HW::ENV_RADIANCE != arg.name.UTF8String && HW::ENV_IRRADIANCE != arg.name.UTF8String) - { - std::string texture_name = arg.name.UTF8String; - InputPtr inputPtr = std::make_shared(arg.index, MTLDataTypeTexture, -1, EMPTY_STRING); - _uniformList[texture_name] = inputPtr; - } + std::string texture_name = arg.name.UTF8String; + InputPtr inputPtr = std::make_shared(arg.index, MTLDataTypeTexture, -1, EMPTY_STRING); + _uniformList[texture_name] = inputPtr; } }