31 #define BBM_CHECK_CONFIG(CONF) \
32 BBM_CHECK_RAW_CONCEPT( bbm::concepts::config, CONF); \
33 BBM_VALIDATE_BACKBONE(typename CONF::Value); \
34 BBM_VALIDATE_BACKBONE(typename CONF::Spectrum); \
35 BBM_VALIDATE_BACKBONE( bbm::vec2d<typename CONF::Value> ); \
36 BBM_VALIDATE_BACKBONE( bbm::vec3d<typename CONF::Value> ); \
37 BBM_VALIDATE_BACKBONE( bbm::complex<typename CONF::Value> ); \
38 BBM_CHECK_RAW_CONCEPT( std::constructible_from, bbm::vec2d<typename CONF::Value>, typename CONF::Value, typename CONF::Value ); \
39 BBM_CHECK_RAW_CONCEPT( std::constructible_from, bbm::vec3d<typename CONF::Value>, typename CONF::Value, typename CONF::Value, typename CONF::Value ); \
40 BBM_CHECK_RAW_CONCEPT( bbm::concepts::backbone::has_complex_functions, bbm::complex<typename CONF::Value> ); \
48 template<
typename T>
requires concepts::has_config<T>
53 #define BBM_DECLARE_FORWARD_IMPORT(STRUCT) template<typename CONF> requires concepts::config<CONF> struct STRUCT;
58 #define BBM_DECLARE_CORE_TYPE(Core, Type, ...) \
60 template<typename Type> struct Core { using type = __VA_ARGS__; }; \
61 template<typename Type> requires requires { typename std::decay_t<Type>::Core; } \
62 struct Core<Type> { using type = typename std::decay_t<Type>::Core; }; \
64 template<typename T> requires bbm::concepts::has_config<T> \
65 using Core ## _t = typename bbm::detail::Core<get_config<T>>::type;\
83 #define BBM_DECLARE_SHORTHAND(SHORTHAND, TYPE) \
84 template<typename T> requires bbm::concepts::has_config<T> \
85 using SHORTHAND = TYPE<bbm::get_config<T>>; \
103#define BBM_IMPORT_CONFIG(...) \
104 using Config = bbm::get_config<__VA_ARGS__>; \
105 BBM_CHECK_CONFIG( Config ); \
106 BBM_BACKBONE_IMPORT( Config ); \
109 using Value = bbm::Value_t<Config>; \
110 using Spectrum = bbm::Spectrum_t<Config>; \
111 using Scalar = bbm::Scalar_t<Config>; \
112 using Mask = bbm::Mask_t<Config>; \
113 using Size_t = bbm::Size_t<Config>; \
114 using BsdfFlag = bbm::BsdfFlag_t<Config>; \
116 using Constants = bbm::Constants_t<Config>; \
117 using Vec2d = bbm::Vec2d_t<Config>; \
118 using Mat2d = bbm::Mat2d_t<Config>; \
119 using Vec3d = bbm::Vec3d_t<Config>; \
120 using Mat3d = bbm::Mat3d_t<Config>; \
121 using Complex = bbm::Complex_t<Config>; \
124 using BsdfSample = bbm::bsdfsample<Config>; \
125 using Vec3dPair = bbm::vec3dpair<Config>; \
#define BBM_DECLARE_SHORTHAND(SHORTHAND, TYPE)
Definition: config.h:83
#define BBM_DECLARE_CORE_TYPE(Core, Type,...)
Definition: config.h:58
#define BBM_DECLARE_FORWARD_IMPORT(STRUCT)
Definition: config.h:53
Reflectance component flags.
Structure to hold a sampled direction and corresponding pdf.
has_config
Definition: config.h:53
Defines additional helper methods for RGB colors.
Convert a string to an object and vice versa.
Defines additional helper methods for vectors.
Macros for checking if a class meets a concept.
Definition: aggregatebsdf.h:29
bbm::detail::mat< vec3d< T >, 3 > mat3d
3D matrix
Definition: mat.h:178
bbm::detail::mat< vec2d< T >, 2 > mat2d
2D matrix
Definition: mat.h:174
typename std::decay_t< T >::Config get_config
get_config type trait
Definition: config.h:49
bsdf_flag
Reflectance Component Evaluation Flags.
Definition: bsdf_flag.h:22
typename get_config< T >::Value Value_t
Definition: config.h:67
typename get_config< T >::Spectrum Spectrum_t
Definition: config.h:68
Complex numbers.
Definition: complex.h:22
Structure to hold a sample's direction and PDF.
Definition: bsdfsample.h:21
Definition: constants.h:17
Structure to hold a pair of directions.
Definition: vec3dpair.h:21
Structure to hold a pair of directions.