@@ -345,14 +345,16 @@ struct Schlick
345345 using vector_type = T;
346346 using eta_type = vector_type;
347347
348+ NBL_CONSTEXPR_STATIC_INLINE bool ReturnsMonochrome = vector_traits<vector_type>::Dimension == 1 ;
349+
348350 static Schlick<T> create (NBL_CONST_REF_ARG (T) F0)
349351 {
350352 Schlick<T> retval;
351353 retval.F0 = F0;
352354 return retval;
353355 }
354356
355- T operator ()(const scalar_type clampedCosTheta)
357+ T operator ()(const scalar_type clampedCosTheta) NBL_CONST_MEMBER_FUNC
356358 {
357359 assert (clampedCosTheta >= scalar_type (0.0 ));
358360 assert (hlsl::all (hlsl::promote<T>(0.02 ) < F0 && F0 <= hlsl::promote<T>(1.0 )));
@@ -379,6 +381,8 @@ struct Conductor
379381 using vector_type = T;
380382 using eta_type = vector_type;
381383
384+ NBL_CONSTEXPR_STATIC_INLINE bool ReturnsMonochrome = vector_traits<vector_type>::Dimension == 1 ;
385+
382386 static Conductor<T> create (NBL_CONST_REF_ARG (T) eta, NBL_CONST_REF_ARG (T) etak)
383387 {
384388 Conductor<T> retval;
@@ -412,7 +416,7 @@ struct Conductor
412416 Rp = (rp_common - etaCosTwice) / (rp_common + etaCosTwice);
413417 }
414418
415- T operator ()(const scalar_type clampedCosTheta)
419+ T operator ()(const scalar_type clampedCosTheta) NBL_CONST_MEMBER_FUNC
416420 {
417421 T rs2, rp2;
418422 __polarized (eta, etaLen2, hlsl::promote<T>(clampedCosTheta), rp2, rs2);
@@ -440,6 +444,8 @@ struct Dielectric
440444 using vector_type = T;
441445 using eta_type = vector_type;
442446
447+ NBL_CONSTEXPR_STATIC_INLINE bool ReturnsMonochrome = vector_traits<vector_type>::Dimension == 1 ;
448+
443449 static Dielectric<T> create (NBL_CONST_REF_ARG (OrientedEtas<T>) orientedEta)
444450 {
445451 Dielectric<T> retval;
@@ -470,7 +476,7 @@ struct Dielectric
470476 return (rs2 + rp2) * hlsl::promote<T>(0.5 );
471477 }
472478
473- T operator ()(const scalar_type clampedCosTheta)
479+ T operator ()(const scalar_type clampedCosTheta) NBL_CONST_MEMBER_FUNC
474480 {
475481 return __call (orientedEta2, clampedCosTheta);
476482 }
@@ -664,7 +670,9 @@ struct Iridescent<T, false NBL_PARTIAL_REQ_BOT(concepts::FloatingPointLikeVector
664670 using eta_type = vector_type;
665671 using base_type = impl::iridescent_base<T, false >;
666672
667- T operator ()(const scalar_type clampedCosTheta)
673+ NBL_CONSTEXPR_STATIC_INLINE bool ReturnsMonochrome = vector_traits<vector_type>::Dimension == 1 ;
674+
675+ T operator ()(const scalar_type clampedCosTheta) NBL_CONST_MEMBER_FUNC
668676 {
669677 return impl::iridescent_helper<T,false >::template __call<base_type>(__base, clampedCosTheta);
670678 }
@@ -690,7 +698,9 @@ struct Iridescent<T, true NBL_PARTIAL_REQ_BOT(concepts::FloatingPointLikeVectori
690698 using eta_type = vector <scalar_type, 1 >;
691699 using base_type = impl::iridescent_base<T, true >;
692700
693- T operator ()(const scalar_type clampedCosTheta)
701+ NBL_CONSTEXPR_STATIC_INLINE bool ReturnsMonochrome = vector_traits<vector_type>::Dimension == 1 ;
702+
703+ T operator ()(const scalar_type clampedCosTheta) NBL_CONST_MEMBER_FUNC
694704 {
695705 return impl::iridescent_helper<T,true >::template __call<base_type>(__base, clampedCosTheta);
696706 }
0 commit comments