// We probably want to reuse OSL macros to declare closure params // and register the closures. We can use them only inside the OSL namespace. OSL_NAMESPACE_ENTER void register_appleseed_closures(OSL::ShadingSystem& shading_system) { // Describe the memory layout of each closure type to the OSL runtime. const size_t MaxParams = 32; struct BuiltinClosures { const char* name; int id; ClosureParam params[MaxParams]; }; static const BuiltinClosures builtins[] = { { "as_ashikhmin_shirley", AshikhminShirleyID, { CLOSURE_VECTOR_PARAM(AshikhminShirleyClosureParams, N), CLOSURE_VECTOR_PARAM(AshikhminShirleyClosureParams, T), CLOSURE_FLOAT_PARAM(AshikhminShirleyClosureParams, kd), CLOSURE_COLOR_PARAM(AshikhminShirleyClosureParams, Cd), CLOSURE_FLOAT_PARAM(AshikhminShirleyClosureParams, ks), CLOSURE_COLOR_PARAM(AshikhminShirleyClosureParams, Cs), CLOSURE_FLOAT_PARAM(AshikhminShirleyClosureParams, nu), CLOSURE_FLOAT_PARAM(AshikhminShirleyClosureParams, nv), CLOSURE_FINISH_PARAM(AshikhminShirleyClosureParams) } }, { "as_microfacet_blinn", MicrofacetBlinnID, { CLOSURE_VECTOR_PARAM(MicrofacetBRDFClosureParams, N), CLOSURE_FLOAT_PARAM(MicrofacetBRDFClosureParams, glossiness), CLOSURE_FINISH_PARAM(MicrofacetBRDFClosureParams) } }, { "as_microfacet_ward", MicrofacetWardID, { CLOSURE_VECTOR_PARAM(MicrofacetBRDFClosureParams, N), CLOSURE_FLOAT_PARAM(MicrofacetBRDFClosureParams, glossiness), CLOSURE_FINISH_PARAM(MicrofacetBRDFClosureParams) } }, { "background", BackgroundID, { CLOSURE_FINISH_PARAM(EmptyClosureParams) } }, { "debug", DebugID, { CLOSURE_STRING_PARAM(DebugClosureParams, tag), CLOSURE_FINISH_PARAM(DebugClosureParams) } }, { "diffuse", LambertID, { CLOSURE_VECTOR_PARAM(LambertClosureParams, N), CLOSURE_FINISH_PARAM(LambertClosureParams) } }, { "emission", EmissionID, { CLOSURE_FLOAT_PARAM(EmissionClosureParams, inner_angle), CLOSURE_FLOAT_PARAM(EmissionClosureParams, outer_angle), CLOSURE_FINISH_PARAM(EmissionClosureParams) } }, { "holdout", HoldoutID, { CLOSURE_FINISH_PARAM(EmptyClosureParams) } }, { "microfacet_beckmann", MicrofacetBeckmannID, { CLOSURE_VECTOR_PARAM(MicrofacetBRDFClosureParams, N), CLOSURE_FLOAT_PARAM(MicrofacetBRDFClosureParams, glossiness), CLOSURE_FINISH_PARAM(MicrofacetBRDFClosureParams) } }, { "microfacet_ggx", MicrofacetGGXID, { CLOSURE_VECTOR_PARAM(MicrofacetBRDFClosureParams, N), CLOSURE_FLOAT_PARAM(MicrofacetBRDFClosureParams, glossiness), CLOSURE_FINISH_PARAM(MicrofacetBRDFClosureParams) } }, { "reflection", ReflectionID, { CLOSURE_VECTOR_PARAM(ReflectionClosureParams, N), CLOSURE_FINISH_PARAM(ReflectionClosureParams) } }, { "refraction", RefractionID, { CLOSURE_VECTOR_PARAM(RefractionClosureParams, N), CLOSURE_FLOAT_PARAM(RefractionClosureParams, from_ior), CLOSURE_FLOAT_PARAM(RefractionClosureParams, to_ior), CLOSURE_FINISH_PARAM(RefractionClosureParams) } }, { "translucent", TranslucentID, { CLOSURE_VECTOR_PARAM(LambertClosureParams, N), CLOSURE_FINISH_PARAM(LambertClosureParams) } }, { "transparency", TransparentID, { CLOSURE_FINISH_PARAM(EmptyClosureParams) } }, { 0, 0, {} } // mark end of the array }; for (size_t i = 0; builtins[i].name != 0; ++i) { shading_system.register_closure( builtins[i].name, builtins[i].id, builtins[i].params, 0, 0); RENDERER_LOG_INFO("registered OSL closure %s.", builtins[i].name); } }
// We probably want to reuse OSL macros to declare closure params // and register the closures. We can use them only inside the OSL namespace. OSL_NAMESPACE_ENTER void register_appleseed_closures(OSL::ShadingSystem& shading_system) { // Describe the memory layout of each closure type to the OSL runtime. const size_t MaxParams = 32; struct BuiltinClosures { const char* name; int id; ClosureParam params[MaxParams]; }; static const BuiltinClosures builtins[] = { { "as_ashikhmin_shirley", AshikhminShirleyID, { CLOSURE_VECTOR_PARAM(AshikhminShirleyBRDFClosureParams, N), CLOSURE_VECTOR_PARAM(AshikhminShirleyBRDFClosureParams, T), CLOSURE_FLOAT_PARAM(AshikhminShirleyBRDFClosureParams, kd), CLOSURE_COLOR_PARAM(AshikhminShirleyBRDFClosureParams, Cd), CLOSURE_FLOAT_PARAM(AshikhminShirleyBRDFClosureParams, ks), CLOSURE_COLOR_PARAM(AshikhminShirleyBRDFClosureParams, Cs), CLOSURE_FLOAT_PARAM(AshikhminShirleyBRDFClosureParams, nu), CLOSURE_FLOAT_PARAM(AshikhminShirleyBRDFClosureParams, nv), CLOSURE_FINISH_PARAM(AshikhminShirleyBRDFClosureParams) } }, { "as_disney", DisneyID, { CLOSURE_VECTOR_PARAM(DisneyBRDFClosureParams, N), CLOSURE_VECTOR_PARAM(DisneyBRDFClosureParams, T), CLOSURE_COLOR_PARAM(DisneyBRDFClosureParams, base_color), CLOSURE_FLOAT_PARAM(DisneyBRDFClosureParams, subsurface), CLOSURE_FLOAT_PARAM(DisneyBRDFClosureParams, metallic), CLOSURE_FLOAT_PARAM(DisneyBRDFClosureParams, specular), CLOSURE_FLOAT_PARAM(DisneyBRDFClosureParams, specular_tint), CLOSURE_FLOAT_PARAM(DisneyBRDFClosureParams, anisotropic), CLOSURE_FLOAT_PARAM(DisneyBRDFClosureParams, roughness), CLOSURE_FLOAT_PARAM(DisneyBRDFClosureParams, sheen), CLOSURE_FLOAT_PARAM(DisneyBRDFClosureParams, sheen_tint), CLOSURE_FLOAT_PARAM(DisneyBRDFClosureParams, clearcoat), CLOSURE_FLOAT_PARAM(DisneyBRDFClosureParams, clearcoat_gloss), CLOSURE_FINISH_PARAM(DisneyBRDFClosureParams) } }, { "as_oren_nayar", OrenNayarID, { CLOSURE_VECTOR_PARAM(OrenNayarBRDFClosureParams, N), CLOSURE_FLOAT_PARAM(OrenNayarBRDFClosureParams, roughness), CLOSURE_FINISH_PARAM(OrenNayarBRDFClosureParams) } }, { "background", BackgroundID, { CLOSURE_FINISH_PARAM(EmptyClosureParams) } }, { "debug", DebugID, { CLOSURE_STRING_PARAM(DebugClosureParams, tag), CLOSURE_FINISH_PARAM(DebugClosureParams) } }, { "diffuse", LambertID, { CLOSURE_VECTOR_PARAM(DiffuseBSDFClosureParams, N), CLOSURE_FINISH_PARAM(DiffuseBSDFClosureParams) } }, { "emission", EmissionID, { CLOSURE_FLOAT_PARAM(EmissionClosureParams, inner_angle), CLOSURE_FLOAT_PARAM(EmissionClosureParams, outer_angle), CLOSURE_FINISH_PARAM(EmissionClosureParams) } }, { "holdout", HoldoutID, { CLOSURE_FINISH_PARAM(EmptyClosureParams) } }, { "microfacet", MicrofacetID, { CLOSURE_STRING_PARAM(MicrofacetClosureParams, dist), CLOSURE_VECTOR_PARAM(MicrofacetClosureParams, N), CLOSURE_VECTOR_PARAM(MicrofacetClosureParams, T), CLOSURE_FLOAT_PARAM(MicrofacetClosureParams, xalpha), CLOSURE_FLOAT_PARAM(MicrofacetClosureParams, yalpha), CLOSURE_FLOAT_PARAM(MicrofacetClosureParams, eta), CLOSURE_INT_PARAM(MicrofacetClosureParams, refract), CLOSURE_FINISH_PARAM(MicrofacetClosureParams) } }, { "reflection", ReflectionID, { CLOSURE_VECTOR_PARAM(ReflectionBRDFClosureParams, N), CLOSURE_FINISH_PARAM(ReflectionBRDFClosureParams) } }, { "refraction", RefractionID, { CLOSURE_VECTOR_PARAM(RefractionBTDFClosureParams, N), CLOSURE_FLOAT_PARAM(RefractionBTDFClosureParams, eta), CLOSURE_FINISH_PARAM(RefractionBTDFClosureParams) } }, { "translucent", TranslucentID, { CLOSURE_VECTOR_PARAM(DiffuseBSDFClosureParams, N), CLOSURE_FINISH_PARAM(DiffuseBSDFClosureParams) } }, { "transparent", TransparentID, { CLOSURE_FINISH_PARAM(EmptyClosureParams) } }, { 0, 0, {} } // mark end of the array }; for (size_t i = 0; builtins[i].name != 0; ++i) { shading_system.register_closure( builtins[i].name, builtins[i].id, builtins[i].params, 0, 0); RENDERER_LOG_INFO("registered OSL closure %s.", builtins[i].name); } }