1#ifndef _BBM_NDF_CONCEPT_H_
2#define _BBM_NDF_CONCEPT_H_
28 template<
typename NDF>
29 concept ndf =
requires(
const NDF&
ndf)
63 {
ndf.sample(std::declval<Vec3d_t<NDF>>(), std::declval<Vec2d_t<NDF>>(), std::declval<Mask_t<NDF>>()) } -> std::same_as<Vec3d_t<NDF>>;
66 {
ndf.sample(std::declval<Vec3d_t<NDF>>(), std::declval<Vec2d_t<NDF>>()) } -> std::same_as<Vec3d_t<NDF>>;
80 {
ndf.pdf(std::declval<Vec3d_t<NDF>>(), std::declval<Vec3d_t<NDF>>(), std::declval<Mask_t<NDF>>()) } -> std::same_as<Value_t<NDF>>;
83 {
ndf.pdf(std::declval<Vec3d_t<NDF>>(), std::declval<Vec3d_t<NDF>>()) } -> std::same_as<Value_t<NDF>>;
109 namespace archetype {
116 Vec3d_t<Config>
sample(Vec3d_t<Config>, Vec2d_t<Config>, Mask_t<Config> =
true)
const;
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
ndf concept
Definition: ndf.h:29
true if type is the same as any of the listed types
Definition: util.h:31
#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
Value_t< Config > G1(Vec3d_t< Config >, Vec3d_t< Config >, Mask_t< Config >=true) const
Value_t< Config > eval(Vec3d_t< Config >, Mask_t< Config >=true) const
Value_t< Config > pdf(Vec3d_t< Config >, Vec3d_t< Config >, Mask_t< Config >=true) const
Vec3d_t< Config > sample(Vec3d_t< Config >, Vec2d_t< Config >, Mask_t< Config >=true) const
static constexpr string_literal name
Definition: ndf.h:114
CONF Config
Definition: ndf.h:113
Definition: string_literal.h:16
Additional basic helper concepts.