diff --git a/src/services/impl/materialx_shader_generator.cpp b/src/services/impl/materialx_shader_generator.cpp index b8948d2..62ef60e 100644 --- a/src/services/impl/materialx_shader_generator.cpp +++ b/src/services/impl/materialx_shader_generator.cpp @@ -18,6 +18,7 @@ #include #include #include +#include #include #include @@ -126,6 +127,11 @@ std::string JoinTokens(const std::vector& tokens, size_t limit) { return result; } +template +constexpr bool HasHwAiryFresnelIterations = requires(const T& options) { + options.hwAiryFresnelIterations; +}; + void ApplyTokenSubstitutions(const mx::ShaderGenerator& generator, std::string& source, const std::string& stageLabel, @@ -171,9 +177,14 @@ unsigned int ResolveAiryFresnelIterations(const mx::GenContext& context, constexpr unsigned int kDefaultAiryFresnelIterations = 4; unsigned int iterations = kDefaultAiryFresnelIterations; bool fromOptions = false; - if constexpr (requires { context.getOptions().hwAiryFresnelIterations; }) { + using OptionsType = std::remove_reference_t; + constexpr bool kHasHwAiryFresnelIterations = HasHwAiryFresnelIterations; + if constexpr (kHasHwAiryFresnelIterations) { iterations = context.getOptions().hwAiryFresnelIterations; fromOptions = true; + } else if (logger) { + logger->Trace("MaterialXShaderGenerator", "Generate", + "airyFresnelIterationsOption=unavailable"); } if (logger) { logger->Trace("MaterialXShaderGenerator", "Generate",