@@ -14,20 +14,27 @@ namespace ext
1414namespace MaterialSystem
1515{
1616
17- struct Material
18- {
19- enum Type : uint32_t // enum class?
20- {
21- DIFFUSE,
22- CONDUCTOR,
23- DIELECTRIC
24- };
17+ // struct Material
18+ // {
19+ // enum Type : uint32_t // enum class?
20+ // {
21+ // DIFFUSE,
22+ // CONDUCTOR,
23+ // DIELECTRIC
24+ // };
2525
26- NBL_CONSTEXPR_STATIC_INLINE uint32_t DataSize = 1 ;
26+ // NBL_CONSTEXPR_STATIC_INLINE uint32_t DataSize = 1;
2727
28- uint32_t type : 2 ;
29- uint32_t unused : 30 ; // possible space for flags
30- uint32_t data[DataSize];
28+ // uint32_t type : 2;
29+ // uint32_t unused : 30; // possible space for flags
30+ // uint32_t data[DataSize];
31+ // };
32+
33+ enum MaterialType : uint32_t // enum class?
34+ {
35+ DIFFUSE,
36+ CONDUCTOR,
37+ DIELECTRIC
3138};
3239
3340template<class DiffuseBxDF, class ConductorBxDF, class DielectricBxDF> // NOTE: these bxdfs should match the ones in Scene BxDFNode
@@ -59,23 +66,23 @@ struct System
5966 return retval;
6067 }
6168
62- measure_type eval (NBL_CONST_REF_ARG (Material) material, NBL_CONST_REF_ARG (create_params_t) cparams, NBL_CONST_REF_ARG (params_t) params)
69+ measure_type eval (uint32_t material, NBL_CONST_REF_ARG (create_params_t) cparams, NBL_CONST_REF_ARG (params_t) params)
6370 {
64- switch (material.type )
71+ switch (material)
6572 {
66- case Material::Type ::DIFFUSE:
73+ case MaterialType ::DIFFUSE:
6774 {
6875 diffuseBxDF.init (cparams);
6976 return (measure_type)diffuseBxDF.eval (params);
7077 }
7178 break ;
72- case Material::Type ::CONDUCTOR:
79+ case MaterialType ::CONDUCTOR:
7380 {
7481 conductorBxDF.init (cparams);
7582 return conductorBxDF.eval (params);
7683 }
7784 break ;
78- case Material::Type ::DIELECTRIC:
85+ case MaterialType ::DIELECTRIC:
7986 {
8087 dielectricBxDF.init (cparams);
8188 return dielectricBxDF.eval (params);
@@ -86,23 +93,23 @@ struct System
8693 }
8794 }
8895
89- sample_type generate (NBL_CONST_REF_ARG (Material) material, NBL_CONST_REF_ARG (create_params_t) cparams, NBL_CONST_REF_ARG (anisotropic_type) interaction, NBL_CONST_REF_ARG (vector3_type) u, NBL_REF_ARG (anisocache_type) _cache)
96+ sample_type generate (uint32_t material, NBL_CONST_REF_ARG (create_params_t) cparams, NBL_CONST_REF_ARG (anisotropic_type) interaction, NBL_CONST_REF_ARG (vector3_type) u, NBL_REF_ARG (anisocache_type) _cache)
9097 {
91- switch (material.type )
98+ switch (material)
9299 {
93- case Material::Type ::DIFFUSE:
100+ case MaterialType ::DIFFUSE:
94101 {
95102 diffuseBxDF.init (cparams);
96103 return diffuseBxDF.generate (interaction, u.xy);
97104 }
98105 break ;
99- case Material::Type ::CONDUCTOR:
106+ case MaterialType ::CONDUCTOR:
100107 {
101108 conductorBxDF.init (cparams);
102109 return conductorBxDF.generate (interaction, u.xy, _cache);
103110 }
104111 break ;
105- case Material::Type ::DIELECTRIC:
112+ case MaterialType ::DIELECTRIC:
106113 {
107114 dielectricBxDF.init (cparams);
108115 return dielectricBxDF.generate (interaction, u, _cache);
@@ -121,26 +128,26 @@ struct System
121128 return sample_type::create (L, 0 , (vector3_type)0 );
122129 }
123130
124- quotient_pdf_type quotient_and_pdf (NBL_CONST_REF_ARG (Material) material, NBL_CONST_REF_ARG (create_params_t) cparams, NBL_CONST_REF_ARG (params_t) params)
131+ quotient_pdf_type quotient_and_pdf (uint32_t material, NBL_CONST_REF_ARG (create_params_t) cparams, NBL_CONST_REF_ARG (params_t) params)
125132 {
126133 const float minimumProjVectorLen = 0.00000001 ;
127134 if (params.NdotV > minimumProjVectorLen && params.NdotL > minimumProjVectorLen)
128135 {
129- switch (material.type )
136+ switch (material)
130137 {
131- case Material::Type ::DIFFUSE:
138+ case MaterialType ::DIFFUSE:
132139 {
133140 diffuseBxDF.init (cparams);
134141 return diffuseBxDF.quotient_and_pdf (params);
135142 }
136143 break ;
137- case Material::Type ::CONDUCTOR:
144+ case MaterialType ::CONDUCTOR:
138145 {
139146 conductorBxDF.init (cparams);
140147 return conductorBxDF.quotient_and_pdf (params);
141148 }
142149 break ;
143- case Material::Type ::DIELECTRIC:
150+ case MaterialType ::DIELECTRIC:
144151 {
145152 dielectricBxDF.init (cparams);
146153 return dielectricBxDF.quotient_and_pdf (params);
0 commit comments