Skip to content

Commit 2a08728

Browse files
committed
templated ray_dir_info reflect/refract funcs
1 parent 58e2a0b commit 2a08728

File tree

2 files changed

+21
-17
lines changed

2 files changed

+21
-17
lines changed

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

Lines changed: 13 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -170,19 +170,19 @@ struct SCookTorrance
170170
const vector3_type localH = ndf.generateH(localV, u);
171171

172172
cache = anisocache_type::createForReflection(localV, localH);
173-
// struct reflect_wrapper
174-
// {
175-
// vector3_type operator()()
176-
// {
177-
// return r(VdotH);
178-
// }
179-
// bxdf::Reflect<scalar_type> r;
180-
// scalar_type VdotH;
181-
// };
182-
// reflect_wrapper r;
183-
bxdf::Reflect<scalar_type> r = bxdf::Reflect<scalar_type>::create(localV, localH);
184-
// r.VdotH = cache.getVdotH();
185-
ray_dir_info_type localL = localV_raydir.reflect(r);
173+
struct reflect_wrapper
174+
{
175+
vector3_type operator()() NBL_CONST_MEMBER_FUNC
176+
{
177+
return r(VdotH);
178+
}
179+
bxdf::Reflect<scalar_type> r;
180+
scalar_type VdotH;
181+
};
182+
reflect_wrapper r;
183+
r.r = bxdf::Reflect<scalar_type>::create(localV, localH);
184+
r.VdotH = cache.getVdotH();
185+
ray_dir_info_type localL = localV_raydir.template reflect<reflect_wrapper>(r);
186186

187187
return sample_type::createFromTangentSpace(localL, interaction.getFromTangentSpace());
188188
}

include/nbl/builtin/hlsl/bxdf/common.hlsl

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -88,28 +88,32 @@ struct SBasic
8888
return retval;
8989
}
9090

91-
SBasic<T> reflect(NBL_CONST_REF_ARG(Reflect<scalar_type>) r) NBL_CONST_MEMBER_FUNC
91+
template<typename R=Reflect<scalar_type> >
92+
SBasic<T> reflect(NBL_CONST_REF_ARG(R) r) NBL_CONST_MEMBER_FUNC
9293
{
9394
SBasic<T> retval;
9495
retval.direction = r();
9596
return retval;
9697
}
9798

98-
SBasic<T> refract(NBL_CONST_REF_ARG(Refract<scalar_type>) r, scalar_type rcpOrientedEta) NBL_CONST_MEMBER_FUNC
99+
template<typename R=Refract<scalar_type> >
100+
SBasic<T> refract(NBL_CONST_REF_ARG(R) r, scalar_type rcpOrientedEta) NBL_CONST_MEMBER_FUNC
99101
{
100102
SBasic<T> retval;
101103
retval.direction = r(rcpOrientedEta);
102104
return retval;
103105
}
104106

105-
SBasic<T> reflectTransmit(NBL_CONST_REF_ARG(Reflect<scalar_type>) r, bool transmitted) NBL_CONST_MEMBER_FUNC
107+
template<typename R=Reflect<scalar_type> >
108+
SBasic<T> reflectTransmit(NBL_CONST_REF_ARG(R) r, bool transmitted) NBL_CONST_MEMBER_FUNC
106109
{
107110
SBasic<T> retval;
108111
retval.direction = hlsl::mix(r(), -direction, transmitted);
109112
return retval;
110113
}
111114

112-
SBasic<T> reflectRefract(NBL_CONST_REF_ARG(ReflectRefract<scalar_type>) rr, bool transmitted, scalar_type rcpOrientedEta) NBL_CONST_MEMBER_FUNC
115+
template<typename R=ReflectRefract<scalar_type> >
116+
SBasic<T> reflectRefract(NBL_CONST_REF_ARG(R) rr, bool transmitted, scalar_type rcpOrientedEta) NBL_CONST_MEMBER_FUNC
113117
{
114118
SBasic<T> retval;
115119
retval.direction = rr(transmitted, rcpOrientedEta);

0 commit comments

Comments
 (0)