1#ifndef _BBM_BSDFMODEL_CONCEPT_H_
2#define _BBM_BSDFMODEL_CONCEPT_H_
32 template<
typename BSDFMODEL>
33 concept bsdfmodel =
requires(
const BSDFMODEL& model)
54 { model.eval(std::declval<Vec3d_t<BSDFMODEL>>(), std::declval<Vec3d_t<BSDFMODEL>>(), std::declval<BsdfFlag_t<BSDFMODEL>>(), std::declval<unit_t>(), std::declval<Mask_t<BSDFMODEL>>()) } -> std::same_as<Spectrum_t<BSDFMODEL>>;
57 { model.eval(std::declval<Vec3d_t<BSDFMODEL>>(), std::declval<Vec3d_t<BSDFMODEL>>(), std::declval<BsdfFlag_t<BSDFMODEL>>(), std::declval<unit_t>())} -> std::same_as<Spectrum_t<BSDFMODEL>>;
60 { model.eval(std::declval<Vec3d_t<BSDFMODEL>>(), std::declval<Vec3d_t<BSDFMODEL>>(), std::declval<BsdfFlag_t<BSDFMODEL>>())} -> std::same_as<Spectrum_t<BSDFMODEL>>;
63 { model.eval(std::declval<Vec3d_t<BSDFMODEL>>(), std::declval<Vec3d_t<BSDFMODEL>>()) } -> std::same_as<Spectrum_t<BSDFMODEL>>;
82 { model.sample(std::declval<Vec3d_t<BSDFMODEL>>(), std::declval<Vec2d_t<BSDFMODEL>>(), std::declval<BsdfFlag_t<BSDFMODEL>>(), std::declval<unit_t>(), std::declval<Mask_t<BSDFMODEL>>()) } -> std::same_as<BsdfSample_t<BSDFMODEL>>;
85 { model.sample(std::declval<Vec3d_t<BSDFMODEL>>(), std::declval<Vec2d_t<BSDFMODEL>>(), std::declval<BsdfFlag_t<BSDFMODEL>>(), std::declval<unit_t>()) } -> std::same_as<BsdfSample_t<BSDFMODEL>>;
88 { model.sample(std::declval<Vec3d_t<BSDFMODEL>>(), std::declval<Vec2d_t<BSDFMODEL>>(), std::declval<BsdfFlag_t<BSDFMODEL>>()) } -> std::same_as<BsdfSample_t<BSDFMODEL>>;
91 { model.sample(std::declval<Vec3d_t<BSDFMODEL>>(), std::declval<Vec2d_t<BSDFMODEL>>()) } -> std::same_as<BsdfSample_t<BSDFMODEL>>;
108 { model.pdf(std::declval<Vec3d_t<BSDFMODEL>>(), std::declval<Vec3d_t<BSDFMODEL>>(), std::declval<BsdfFlag_t<BSDFMODEL>>(), std::declval<unit_t>(), std::declval<Mask_t<BSDFMODEL>>()) } -> std::same_as<Value_t<BSDFMODEL>>;
111 { model.pdf(std::declval<Vec3d_t<BSDFMODEL>>(), std::declval<Vec3d_t<BSDFMODEL>>(), std::declval<BsdfFlag_t<BSDFMODEL>>(), std::declval<unit_t>()) } -> std::same_as<Value_t<BSDFMODEL>>;
114 { model.pdf(std::declval<Vec3d_t<BSDFMODEL>>(), std::declval<Vec3d_t<BSDFMODEL>>(), std::declval<BsdfFlag_t<BSDFMODEL>>()) } -> std::same_as<Value_t<BSDFMODEL>>;
117 { model.pdf(std::declval<Vec3d_t<BSDFMODEL>>(), std::declval<Vec3d_t<BSDFMODEL>>()) } -> std::same_as<Value_t<BSDFMODEL>>;
135 { model.reflectance(std::declval<Vec3d_t<BSDFMODEL>>(), std::declval<BsdfFlag_t<BSDFMODEL>>(), std::declval<unit_t>(), std::declval<Mask_t<BSDFMODEL>>()) } -> std::same_as<Spectrum_t<BSDFMODEL>>;
138 { model.reflectance(std::declval<Vec3d_t<BSDFMODEL>>(), std::declval<BsdfFlag_t<BSDFMODEL>>(), std::declval<unit_t>()) } -> std::same_as<Spectrum_t<BSDFMODEL>>;
141 { model.reflectance(std::declval<Vec3d_t<BSDFMODEL>>(), std::declval<BsdfFlag_t<BSDFMODEL>>()) } -> std::same_as<Spectrum_t<BSDFMODEL>>;
144 { model.reflectance(std::declval<Vec3d_t<BSDFMODEL>>()) } -> std::same_as<Spectrum_t<BSDFMODEL>>;
154 namespace archetype {
All BBM methods are defined to operate on a variety of value types and spectrum types....
bsdfmodel concept
Definition: bsdfmodel.h:33
config concept
Definition: config.h:31
has_config
Definition: config.h:53
A named class is a class that contains a static constexpr string_literal name.
Definition: named.h:19
#define BBM_CHECK_CONCEPT(CONCEPTNAME, CLASSNAME,...)
Check a class for a concept with bbm::concepts::archetypes in the namespace.
Definition: macro.h:35
Definition: aggregatebsdf.h:29
typename get_config< T >::Value Value_t
Definition: config.h:67
typename get_config< T >::Spectrum Spectrum_t
Definition: config.h:68
unit_t
Light Unit.
Definition: unit.h:21
Definition: bsdfmodel.h:157
Value_t< Config > pdf(Vec3d_t< Config >, Vec3d_t< Config >, BsdfFlag_t< Config >=bsdf_flag::All, unit_t=unit_t::Radiance, Mask_t< Config >=true) const
Spectrum_t< Config > eval(Vec3d_t< Config >, Vec3d_t< Config >, BsdfFlag_t< Config >=bsdf_flag::All, unit_t=unit_t::Radiance, Mask_t< Config >=true) const
BsdfSample_t< Config > sample(Vec3d_t< Config >, Vec2d_t< Config >, BsdfFlag_t< Config >=bsdf_flag::All, unit_t=unit_t::Radiance, Mask_t< Config >=true) const
static constexpr string_literal name
Definition: bsdfmodel.h:159
CONF Config
Definition: bsdfmodel.h:158
Spectrum_t< Config > reflectance(Vec3d_t< Config >, BsdfFlag_t< Config >=bsdf_flag::All, unit_t=unit_t::Radiance, Mask_t< Config >=true) const
Definition: string_literal.h:16
Light unit: Radiance or Importance.