Skip to content

Commit c3bfff9

Browse files
Merge branch 'master' of github.com:Devsh-Graphics-Programming/Nabla
2 parents 63cc269 + ab6668a commit c3bfff9

22 files changed

Lines changed: 1432 additions & 127 deletions

examples_tests

Submodule examples_tests updated 39 files

include/nbl/builtin/hlsl/bxdf/base/cook_torrance_base.hlsl

Lines changed: 12 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -50,7 +50,7 @@ struct quant_query_helper<N, F, true>
5050
using quant_query_type = typename N::quant_query_type;
5151

5252
template<class I, class C>
53-
static quant_query_type __call(NBL_REF_ARG(N) ndf, NBL_CONST_REF_ARG(F) fresnel, NBL_CONST_REF_ARG(I) interaction, NBL_CONST_REF_ARG(C) cache)
53+
static quant_query_type __call(NBL_CONST_REF_ARG(N) ndf, NBL_CONST_REF_ARG(F) fresnel, NBL_CONST_REF_ARG(I) interaction, NBL_CONST_REF_ARG(C) cache)
5454
{
5555
return ndf.template createQuantQuery<I,C>(interaction, cache, fresnel.getRefractionOrientedEta());
5656
}
@@ -62,7 +62,7 @@ struct quant_query_helper<N, F, false>
6262
using quant_query_type = typename N::quant_query_type;
6363

6464
template<class I, class C>
65-
static quant_query_type __call(NBL_REF_ARG(N) ndf, NBL_CONST_REF_ARG(F) fresnel, NBL_CONST_REF_ARG(I) interaction, NBL_CONST_REF_ARG(C) cache)
65+
static quant_query_type __call(NBL_CONST_REF_ARG(N) ndf, NBL_CONST_REF_ARG(F) fresnel, NBL_CONST_REF_ARG(I) interaction, NBL_CONST_REF_ARG(C) cache)
6666
{
6767
typename N::scalar_type dummy;
6868
return ndf.template createQuantQuery<I,C>(interaction, cache, dummy);
@@ -146,7 +146,7 @@ struct SCookTorrance
146146
return hlsl::mix(reflectance, scalar_type(1.0)-reflectance, transmitted);
147147
}
148148

149-
bool __dotIsValue(const vector3_type a, const vector3_type b, const scalar_type value)
149+
bool __dotIsValue(const vector3_type a, const vector3_type b, const scalar_type value) NBL_CONST_MEMBER_FUNC
150150
{
151151
const scalar_type ab = hlsl::dot(a, b);
152152
return hlsl::max(ab, value / ab) <= scalar_type(value + 1e-3);
@@ -156,7 +156,7 @@ struct SCookTorrance
156156
template<class Interaction=conditional_t<IsAnisotropic,anisotropic_interaction_type,isotropic_interaction_type>,
157157
class MicrofacetCache=conditional_t<IsAnisotropic,anisocache_type,isocache_type>
158158
NBL_FUNC_REQUIRES(RequiredInteraction<Interaction> && RequiredMicrofacetCache<MicrofacetCache>)
159-
spectral_type eval(NBL_CONST_REF_ARG(sample_type) _sample, NBL_CONST_REF_ARG(Interaction) interaction, NBL_CONST_REF_ARG(MicrofacetCache) cache)
159+
spectral_type eval(NBL_CONST_REF_ARG(sample_type) _sample, NBL_CONST_REF_ARG(Interaction) interaction, NBL_CONST_REF_ARG(MicrofacetCache) cache) NBL_CONST_MEMBER_FUNC
160160
{
161161
fresnel_type _f = __getOrientedFresnel(fresnel, interaction.getNdotV());
162162
if (!__checkValid<Interaction, MicrofacetCache>(_f, _sample, interaction, cache))
@@ -197,14 +197,14 @@ struct SCookTorrance
197197
sample_type __generate_common(NBL_CONST_REF_ARG(anisotropic_interaction_type) interaction, const vector3_type localH,
198198
const scalar_type NdotV, const scalar_type VdotH, const scalar_type LdotH, bool transmitted,
199199
NBL_CONST_REF_ARG(fresnel::OrientedEtaRcps<monochrome_type>) rcpEta,
200-
NBL_REF_ARG(bool) valid)
200+
NBL_REF_ARG(bool) valid) NBL_CONST_MEMBER_FUNC
201201
{
202202
// fail if samples have invalid paths
203203
const scalar_type NdotL = hlsl::mix(scalar_type(2.0) * VdotH * localH.z - NdotV,
204204
localH.z * (VdotH * rcpEta.value[0] + LdotH) - NdotV * rcpEta.value[0], transmitted);
205205
// VNDF sampling guarantees that `VdotH` has same sign as `NdotV`
206206
// and `transmitted` controls the sign of `LdotH` relative to `VdotH` by construction (reflect -> same sign, or refract -> opposite sign)
207-
if (ComputeMicrofacetNormal<scalar_type>::isTransmissionPath(NdotV, NdotL) != transmitted)
207+
if (hlsl::isnan(NdotL) || ComputeMicrofacetNormal<scalar_type>::isTransmissionPath(NdotV, NdotL) != transmitted)
208208
{
209209
valid = false;
210210
return sample_type::createInvalid(); // should check if sample direction is invalid
@@ -244,7 +244,7 @@ struct SCookTorrance
244244
return sample_type::create(L, T, B, NdotL);
245245
}
246246
template<typename C=bool_constant<!IsBSDF> NBL_FUNC_REQUIRES(C::value && !IsBSDF)
247-
sample_type generate(NBL_CONST_REF_ARG(anisotropic_interaction_type) interaction, const vector2_type u, NBL_REF_ARG(anisocache_type) cache)
247+
sample_type generate(NBL_CONST_REF_ARG(anisotropic_interaction_type) interaction, const vector2_type u, NBL_REF_ARG(anisocache_type) cache) NBL_CONST_MEMBER_FUNC
248248
{
249249
const scalar_type NdotV = interaction.getNdotV();
250250
if (NdotV < numeric_limits<scalar_type>::min)
@@ -274,7 +274,7 @@ struct SCookTorrance
274274
return s;
275275
}
276276
template<typename C=bool_constant<IsBSDF> NBL_FUNC_REQUIRES(C::value && IsBSDF)
277-
sample_type generate(NBL_CONST_REF_ARG(anisotropic_interaction_type) interaction, const vector3_type u, NBL_REF_ARG(anisocache_type) cache)
277+
sample_type generate(NBL_CONST_REF_ARG(anisotropic_interaction_type) interaction, const vector3_type u, NBL_REF_ARG(anisocache_type) cache) NBL_CONST_MEMBER_FUNC
278278
{
279279
const vector3_type localV = interaction.getTangentSpaceV();
280280
const scalar_type NdotV = localV.z;
@@ -322,7 +322,7 @@ struct SCookTorrance
322322
return s;
323323
}
324324
template<typename C=bool_constant<!IsAnisotropic> NBL_FUNC_REQUIRES(C::value && !IsAnisotropic)
325-
sample_type generate(NBL_CONST_REF_ARG(isotropic_interaction_type) interaction, const conditional_t<IsBSDF, vector3_type, vector2_type> u, NBL_REF_ARG(isocache_type) cache)
325+
sample_type generate(NBL_CONST_REF_ARG(isotropic_interaction_type) interaction, const conditional_t<IsBSDF, vector3_type, vector2_type> u, NBL_REF_ARG(isocache_type) cache) NBL_CONST_MEMBER_FUNC
326326
{
327327
anisocache_type aniso_cache;
328328
sample_type s = generate(anisotropic_interaction_type::create(interaction), u, aniso_cache);
@@ -331,7 +331,7 @@ struct SCookTorrance
331331
}
332332

333333
template<class Interaction, class MicrofacetCache>
334-
scalar_type __pdf(NBL_CONST_REF_ARG(sample_type) _sample, NBL_CONST_REF_ARG(Interaction) interaction, NBL_CONST_REF_ARG(MicrofacetCache) cache, NBL_REF_ARG(bool) isInfinity)
334+
scalar_type __pdf(NBL_CONST_REF_ARG(sample_type) _sample, NBL_CONST_REF_ARG(Interaction) interaction, NBL_CONST_REF_ARG(MicrofacetCache) cache, NBL_REF_ARG(bool) isInfinity) NBL_CONST_MEMBER_FUNC
335335
{
336336
using quant_query_type = typename ndf_type::quant_query_type;
337337
using dg1_query_type = typename ndf_type::dg1_query_type;
@@ -356,7 +356,7 @@ struct SCookTorrance
356356
template<class Interaction=conditional_t<IsAnisotropic,anisotropic_interaction_type,isotropic_interaction_type>,
357357
class MicrofacetCache=conditional_t<IsAnisotropic,anisocache_type,isocache_type>
358358
NBL_FUNC_REQUIRES(RequiredInteraction<Interaction> && RequiredMicrofacetCache<MicrofacetCache>)
359-
scalar_type pdf(NBL_CONST_REF_ARG(sample_type) _sample, NBL_CONST_REF_ARG(Interaction) interaction, NBL_CONST_REF_ARG(MicrofacetCache) cache)
359+
scalar_type pdf(NBL_CONST_REF_ARG(sample_type) _sample, NBL_CONST_REF_ARG(Interaction) interaction, NBL_CONST_REF_ARG(MicrofacetCache) cache) NBL_CONST_MEMBER_FUNC
360360
{
361361
fresnel_type _f = __getOrientedFresnel(fresnel, interaction.getNdotV());
362362
if (!__checkValid<Interaction, MicrofacetCache>(_f, _sample, interaction, cache))
@@ -370,7 +370,7 @@ struct SCookTorrance
370370
template<class Interaction=conditional_t<IsAnisotropic,anisotropic_interaction_type,isotropic_interaction_type>,
371371
class MicrofacetCache=conditional_t<IsAnisotropic,anisocache_type,isocache_type>
372372
NBL_FUNC_REQUIRES(RequiredInteraction<Interaction> && RequiredMicrofacetCache<MicrofacetCache>)
373-
quotient_pdf_type quotient_and_pdf(NBL_CONST_REF_ARG(sample_type) _sample, NBL_CONST_REF_ARG(Interaction) interaction, NBL_CONST_REF_ARG(MicrofacetCache) cache)
373+
quotient_pdf_type quotient_and_pdf(NBL_CONST_REF_ARG(sample_type) _sample, NBL_CONST_REF_ARG(Interaction) interaction, NBL_CONST_REF_ARG(MicrofacetCache) cache) NBL_CONST_MEMBER_FUNC
374374
{
375375
if (!_sample.isValid())
376376
return quotient_pdf_type::create(scalar_type(0.0), scalar_type(0.0)); // set pdf=0 when quo=0 because we don't want to give high weight to sampling strategy that yields 0 contribution

include/nbl/builtin/hlsl/bxdf/base/lambertian.hlsl

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -25,54 +25,54 @@ struct SLambertianBase
2525

2626
NBL_CONSTEXPR_STATIC_INLINE BxDFClampMode _clamp = conditional_value<IsBSDF, BxDFClampMode, BxDFClampMode::BCM_ABS, BxDFClampMode::BCM_MAX>::value;
2727

28-
spectral_type eval(NBL_CONST_REF_ARG(sample_type) _sample, NBL_CONST_REF_ARG(isotropic_interaction_type) interaction)
28+
spectral_type eval(NBL_CONST_REF_ARG(sample_type) _sample, NBL_CONST_REF_ARG(isotropic_interaction_type) interaction) NBL_CONST_MEMBER_FUNC
2929
{
3030
return hlsl::promote<spectral_type>(_sample.getNdotL(_clamp) * numbers::inv_pi<scalar_type> * hlsl::mix(1.0, 0.5, IsBSDF));
3131
}
32-
spectral_type eval(NBL_CONST_REF_ARG(sample_type) _sample, NBL_CONST_REF_ARG(anisotropic_interaction_type) interaction)
32+
spectral_type eval(NBL_CONST_REF_ARG(sample_type) _sample, NBL_CONST_REF_ARG(anisotropic_interaction_type) interaction) NBL_CONST_MEMBER_FUNC
3333
{
3434
return eval(_sample, interaction.isotropic);
3535
}
3636

3737
template<typename C=bool_constant<!IsBSDF> >
38-
enable_if_t<C::value && !IsBSDF, sample_type> generate(NBL_CONST_REF_ARG(anisotropic_interaction_type) interaction, const vector2_type u)
38+
enable_if_t<C::value && !IsBSDF, sample_type> generate(NBL_CONST_REF_ARG(anisotropic_interaction_type) interaction, const vector2_type u) NBL_CONST_MEMBER_FUNC
3939
{
4040
ray_dir_info_type L;
4141
L.setDirection(sampling::ProjectedHemisphere<scalar_type>::generate(u));
4242
return sample_type::createFromTangentSpace(L, interaction.getFromTangentSpace());
4343
}
4444
template<typename C=bool_constant<IsBSDF> >
45-
enable_if_t<C::value && IsBSDF, sample_type> generate(NBL_CONST_REF_ARG(anisotropic_interaction_type) interaction, const vector3_type u)
45+
enable_if_t<C::value && IsBSDF, sample_type> generate(NBL_CONST_REF_ARG(anisotropic_interaction_type) interaction, const vector3_type u) NBL_CONST_MEMBER_FUNC
4646
{
4747
vector3_type _u = u;
4848
ray_dir_info_type L;
4949
L.setDirection(sampling::ProjectedSphere<scalar_type>::generate(_u));
5050
return sample_type::createFromTangentSpace(L, interaction.getFromTangentSpace());
5151
}
5252
template<typename C=bool_constant<!IsBSDF> >
53-
enable_if_t<C::value && !IsBSDF, sample_type> generate(NBL_CONST_REF_ARG(isotropic_interaction_type) interaction, const vector2_type u)
53+
enable_if_t<C::value && !IsBSDF, sample_type> generate(NBL_CONST_REF_ARG(isotropic_interaction_type) interaction, const vector2_type u) NBL_CONST_MEMBER_FUNC
5454
{
5555
return generate(anisotropic_interaction_type::create(interaction), u);
5656
}
5757
template<typename C=bool_constant<IsBSDF> >
58-
enable_if_t<C::value && IsBSDF, sample_type> generate(NBL_CONST_REF_ARG(isotropic_interaction_type) interaction, const vector3_type u)
58+
enable_if_t<C::value && IsBSDF, sample_type> generate(NBL_CONST_REF_ARG(isotropic_interaction_type) interaction, const vector3_type u) NBL_CONST_MEMBER_FUNC
5959
{
6060
return generate(anisotropic_interaction_type::create(interaction), u);
6161
}
6262

63-
scalar_type pdf(NBL_CONST_REF_ARG(sample_type) _sample, NBL_CONST_REF_ARG(isotropic_interaction_type) interaction)
63+
scalar_type pdf(NBL_CONST_REF_ARG(sample_type) _sample, NBL_CONST_REF_ARG(isotropic_interaction_type) interaction) NBL_CONST_MEMBER_FUNC
6464
{
6565
NBL_IF_CONSTEXPR (IsBSDF)
6666
return sampling::ProjectedSphere<scalar_type>::pdf(_sample.getNdotL(_clamp));
6767
else
6868
return sampling::ProjectedHemisphere<scalar_type>::pdf(_sample.getNdotL(_clamp));
6969
}
70-
scalar_type pdf(NBL_CONST_REF_ARG(sample_type) _sample, NBL_CONST_REF_ARG(anisotropic_interaction_type) interaction)
70+
scalar_type pdf(NBL_CONST_REF_ARG(sample_type) _sample, NBL_CONST_REF_ARG(anisotropic_interaction_type) interaction) NBL_CONST_MEMBER_FUNC
7171
{
7272
return pdf(_sample, interaction.isotropic);
7373
}
7474

75-
quotient_pdf_type quotient_and_pdf(NBL_CONST_REF_ARG(sample_type) _sample, NBL_CONST_REF_ARG(isotropic_interaction_type) interaction)
75+
quotient_pdf_type quotient_and_pdf(NBL_CONST_REF_ARG(sample_type) _sample, NBL_CONST_REF_ARG(isotropic_interaction_type) interaction) NBL_CONST_MEMBER_FUNC
7676
{
7777
sampling::quotient_and_pdf<monochrome_type, scalar_type> qp;
7878
NBL_IF_CONSTEXPR (IsBSDF)
@@ -81,7 +81,7 @@ struct SLambertianBase
8181
qp = sampling::ProjectedHemisphere<scalar_type>::template quotient_and_pdf(_sample.getNdotL(_clamp));
8282
return quotient_pdf_type::create(qp.quotient[0], qp.pdf);
8383
}
84-
quotient_pdf_type quotient_and_pdf(NBL_CONST_REF_ARG(sample_type) _sample, NBL_CONST_REF_ARG(anisotropic_interaction_type) interaction)
84+
quotient_pdf_type quotient_and_pdf(NBL_CONST_REF_ARG(sample_type) _sample, NBL_CONST_REF_ARG(anisotropic_interaction_type) interaction) NBL_CONST_MEMBER_FUNC
8585
{
8686
return quotient_and_pdf(_sample, interaction.isotropic);
8787
}

include/nbl/builtin/hlsl/bxdf/base/oren_nayar.hlsl

Lines changed: 13 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -45,82 +45,82 @@ struct SOrenNayarBase
4545
return retval;
4646
}
4747

48-
scalar_type __rec_pi_factored_out_wo_clamps(scalar_type VdotL, scalar_type clampedNdotL, scalar_type clampedNdotV)
48+
scalar_type __rec_pi_factored_out_wo_clamps(scalar_type VdotL, scalar_type clampedNdotL, scalar_type clampedNdotV) NBL_CONST_MEMBER_FUNC
4949
{
5050
scalar_type C = 1.0 / max<scalar_type>(clampedNdotL, clampedNdotV);
5151
scalar_type cos_phi_sin_theta = max<scalar_type>(VdotL - clampedNdotL * clampedNdotV, 0.0);
5252
return (AB.x + AB.y * cos_phi_sin_theta * C);
5353
}
5454
template<typename Query>
55-
spectral_type __eval(NBL_CONST_REF_ARG(Query) query, NBL_CONST_REF_ARG(sample_type) _sample, NBL_CONST_REF_ARG(isotropic_interaction_type) interaction)
55+
spectral_type __eval(NBL_CONST_REF_ARG(Query) query, NBL_CONST_REF_ARG(sample_type) _sample, NBL_CONST_REF_ARG(isotropic_interaction_type) interaction) NBL_CONST_MEMBER_FUNC
5656
{
5757
scalar_type NdotL = _sample.getNdotL(_clamp);
5858
return hlsl::promote<spectral_type>(NdotL * numbers::inv_pi<scalar_type> * hlsl::mix(1.0, 0.5, IsBSDF) * __rec_pi_factored_out_wo_clamps(query.getVdotL(), NdotL, interaction.getNdotV(_clamp)));
5959
}
6060

61-
spectral_type eval(NBL_CONST_REF_ARG(sample_type) _sample, NBL_CONST_REF_ARG(isotropic_interaction_type) interaction)
61+
spectral_type eval(NBL_CONST_REF_ARG(sample_type) _sample, NBL_CONST_REF_ARG(isotropic_interaction_type) interaction) NBL_CONST_MEMBER_FUNC
6262
{
6363
SQuery query;
6464
query.VdotL = hlsl::dot(interaction.getV().getDirection(), _sample.getL().getDirection());
6565
return __eval<SQuery>(query, _sample, interaction);
6666
}
67-
spectral_type eval(NBL_CONST_REF_ARG(sample_type) _sample, NBL_CONST_REF_ARG(anisotropic_interaction_type) interaction)
67+
spectral_type eval(NBL_CONST_REF_ARG(sample_type) _sample, NBL_CONST_REF_ARG(anisotropic_interaction_type) interaction) NBL_CONST_MEMBER_FUNC
6868
{
6969
return eval(_sample, interaction.isotropic);
7070
}
7171

7272
template<typename C=bool_constant<!IsBSDF> >
73-
enable_if_t<C::value && !IsBSDF, sample_type> generate(NBL_CONST_REF_ARG(anisotropic_interaction_type) interaction, const vector2_type u)
73+
enable_if_t<C::value && !IsBSDF, sample_type> generate(NBL_CONST_REF_ARG(anisotropic_interaction_type) interaction, const vector2_type u) NBL_CONST_MEMBER_FUNC
7474
{
7575
ray_dir_info_type L;
7676
L.setDirection(sampling::ProjectedHemisphere<scalar_type>::generate(u));
7777
return sample_type::createFromTangentSpace(L, interaction.getFromTangentSpace());
7878
}
7979
template<typename C=bool_constant<IsBSDF> >
80-
enable_if_t<C::value && IsBSDF, sample_type> generate(NBL_CONST_REF_ARG(anisotropic_interaction_type) interaction, const vector3_type u)
80+
enable_if_t<C::value && IsBSDF, sample_type> generate(NBL_CONST_REF_ARG(anisotropic_interaction_type) interaction, const vector3_type u) NBL_CONST_MEMBER_FUNC
8181
{
8282
vector3_type _u = u;
8383
ray_dir_info_type L;
8484
L.setDirection(sampling::ProjectedSphere<scalar_type>::generate(_u));
8585
return sample_type::createFromTangentSpace(L, interaction.getFromTangentSpace());
8686
}
8787
template<typename C=bool_constant<!IsBSDF> >
88-
enable_if_t<C::value && !IsBSDF, sample_type> generate(NBL_CONST_REF_ARG(isotropic_interaction_type) interaction, const vector2_type u)
88+
enable_if_t<C::value && !IsBSDF, sample_type> generate(NBL_CONST_REF_ARG(isotropic_interaction_type) interaction, const vector2_type u) NBL_CONST_MEMBER_FUNC
8989
{
9090
return generate(anisotropic_interaction_type::create(interaction), u);
9191
}
9292
template<typename C=bool_constant<IsBSDF> >
93-
enable_if_t<C::value && IsBSDF, sample_type> generate(NBL_CONST_REF_ARG(isotropic_interaction_type) interaction, const vector3_type u)
93+
enable_if_t<C::value && IsBSDF, sample_type> generate(NBL_CONST_REF_ARG(isotropic_interaction_type) interaction, const vector3_type u) NBL_CONST_MEMBER_FUNC
9494
{
9595
return generate(anisotropic_interaction_type::create(interaction), u);
9696
}
9797

98-
scalar_type pdf(NBL_CONST_REF_ARG(sample_type) _sample, NBL_CONST_REF_ARG(isotropic_interaction_type) interaction)
98+
scalar_type pdf(NBL_CONST_REF_ARG(sample_type) _sample, NBL_CONST_REF_ARG(isotropic_interaction_type) interaction) NBL_CONST_MEMBER_FUNC
9999
{
100100
if (IsBSDF)
101101
return sampling::ProjectedSphere<scalar_type>::pdf(_sample.getNdotL(_clamp));
102102
else
103103
return sampling::ProjectedHemisphere<scalar_type>::pdf(_sample.getNdotL(_clamp));
104104
}
105-
scalar_type pdf(NBL_CONST_REF_ARG(sample_type) _sample, NBL_CONST_REF_ARG(anisotropic_interaction_type) interaction)
105+
scalar_type pdf(NBL_CONST_REF_ARG(sample_type) _sample, NBL_CONST_REF_ARG(anisotropic_interaction_type) interaction) NBL_CONST_MEMBER_FUNC
106106
{
107107
return pdf(_sample, interaction.isotropic);
108108
}
109109

110110
template<typename Query>
111-
quotient_pdf_type __quotient_and_pdf(NBL_CONST_REF_ARG(Query) query, NBL_CONST_REF_ARG(sample_type) _sample, NBL_CONST_REF_ARG(isotropic_interaction_type) interaction)
111+
quotient_pdf_type __quotient_and_pdf(NBL_CONST_REF_ARG(Query) query, NBL_CONST_REF_ARG(sample_type) _sample, NBL_CONST_REF_ARG(isotropic_interaction_type) interaction) NBL_CONST_MEMBER_FUNC
112112
{
113113
scalar_type _pdf = pdf(_sample, interaction);
114114
scalar_type q = __rec_pi_factored_out_wo_clamps(query.getVdotL(), _sample.getNdotL(_clamp), interaction.getNdotV(_clamp));
115115
return quotient_pdf_type::create(q, _pdf);
116116
}
117-
quotient_pdf_type quotient_and_pdf(NBL_CONST_REF_ARG(sample_type) _sample, NBL_CONST_REF_ARG(isotropic_interaction_type) interaction)
117+
quotient_pdf_type quotient_and_pdf(NBL_CONST_REF_ARG(sample_type) _sample, NBL_CONST_REF_ARG(isotropic_interaction_type) interaction) NBL_CONST_MEMBER_FUNC
118118
{
119119
SQuery query;
120120
query.VdotL = hlsl::dot(interaction.getV().getDirection(), _sample.getL().getDirection());
121121
return __quotient_and_pdf<SQuery>(query, _sample, interaction);
122122
}
123-
quotient_pdf_type quotient_and_pdf(NBL_CONST_REF_ARG(sample_type) _sample, NBL_CONST_REF_ARG(anisotropic_interaction_type) interaction)
123+
quotient_pdf_type quotient_and_pdf(NBL_CONST_REF_ARG(sample_type) _sample, NBL_CONST_REF_ARG(anisotropic_interaction_type) interaction) NBL_CONST_MEMBER_FUNC
124124
{
125125
return quotient_and_pdf(_sample, interaction.isotropic);
126126
}

0 commit comments

Comments
 (0)