void ShaderGroup::get_shadergroup_globals_info(OSL::ShadingSystem& shading_system) { // Assume the shader group uses all globals. m_flags |= UsesAllGlobals; int num_globals = 0; if (!shading_system.getattribute( impl->m_shader_group_ref.get(), "num_globals_needed", num_globals)) { RENDERER_LOG_WARNING( "getattribute: num_globals_needed call failed for shader group \"%s\"; " "assuming shader group uses all globals.", get_path().c_str()); return; } if (num_globals != 0) { OIIO::ustring* globals = 0; if (!shading_system.getattribute( impl->m_shader_group_ref.get(), "globals_needed", OIIO::TypeDesc::PTR, &globals)) { RENDERER_LOG_WARNING( "getattribute: globals_needed call failed for shader group \"%s\"; " "assuming shader group uses all globals.", get_path().c_str()); return; } // Clear all globals flags. m_flags &= ~UsesAllGlobals; // Set the globals flags. for (int i = 0; i < num_globals; ++i) { if (globals[i] == g_dPdtime_str) m_flags |= UsesdPdTime; } } else { // The shader group uses no globals. m_flags &= ~UsesAllGlobals; } }
void ShaderGroup::get_shadergroup_globals_info(OSL::ShadingSystem& shading_system) { m_uses_dPdtime = true; int num_globals = 0; if (!shading_system.getattribute( impl->m_shader_group_ref.get(), "num_globals_needed", num_globals)) { RENDERER_LOG_WARNING( "getattribute: num_globals_needed call failed for shader group %s; " "assuming shader group uses all globals.", get_name()); return; } if (num_globals != 0) { OIIO::ustring* globals = 0; if (!shading_system.getattribute( impl->m_shader_group_ref.get(), "globals_needed", OIIO::TypeDesc::PTR, &globals)) { RENDERER_LOG_WARNING( "getattribute: globals_needed call failed for shader group %s; " "assuming shader group uses all globals.", get_name()); return; } m_uses_dPdtime = false; for (int i = 0; i < num_globals; ++i) { if (globals[i] == g_dPdtime_str) m_uses_dPdtime = true; } } }
void ShaderGroup::get_shadergroup_closures_info(OSL::ShadingSystem& shading_system) { m_has_emission = true; m_has_transparency = true; m_has_subsurface = true; m_has_holdout = true; m_has_debug = true; int num_unknown_closures = 0; if (!shading_system.getattribute( impl->m_shader_group_ref.get(), "unknown_closures_needed", num_unknown_closures)) { RENDERER_LOG_WARNING( "getattribute: unknown_closures_needed call failed for shader group %s; " "assuming shader group has all kinds of closures.", get_name()); return; } if (num_unknown_closures != 0) { RENDERER_LOG_WARNING( "shader group %s has unknown closures; " "assuming shader group has all kinds of closures.", get_name()); return; } int num_closures = 0; if (!shading_system.getattribute( impl->m_shader_group_ref.get(), "num_closures_needed", num_closures)) { RENDERER_LOG_WARNING( "getattribute: num_closures_needed call failed for shader group %s; " "assuming shader group has all kinds of closures.", get_name()); } if (num_closures != 0) { OIIO::ustring* closures = 0; if (!shading_system.getattribute( impl->m_shader_group_ref.get(), "closures_needed", OIIO::TypeDesc::PTR, &closures)) { RENDERER_LOG_WARNING( "getattribute: closures_needed call failed for shader group %s; " "assuming shader group has all kinds of closures.", get_name()); return; } m_has_emission = false; m_has_transparency = false; m_has_subsurface = false; m_has_holdout = false; m_has_debug = false; for (int i = 0; i < num_closures; ++i) { if (closures[i] == g_emission_str) m_has_emission = true; if (closures[i] == g_transparent_str) m_has_transparency = true; if (closures[i] == g_subsurface_str) m_has_subsurface = true; if (closures[i] == g_holdout_str) m_has_holdout = true; if (closures[i] == g_debug_str) m_has_debug = true; } } }
void ShaderGroup::get_shadergroup_closures_info(OSL::ShadingSystem& shading_system) { // Assume the shader group has all closure types. m_flags |= HasAllClosures; int num_unknown_closures = 0; if (!shading_system.getattribute( impl->m_shader_group_ref.get(), "unknown_closures_needed", num_unknown_closures)) { RENDERER_LOG_WARNING( "getattribute: unknown_closures_needed call failed for shader group \"%s\"; " "assuming shader group has all kinds of closures.", get_path().c_str()); return; } if (num_unknown_closures != 0) { RENDERER_LOG_WARNING( "shader group \"%s\" has unknown closures; " "assuming shader group has all kinds of closures.", get_path().c_str()); return; } int num_closures = 0; if (!shading_system.getattribute( impl->m_shader_group_ref.get(), "num_closures_needed", num_closures)) { RENDERER_LOG_WARNING( "getattribute: num_closures_needed call failed for shader group \"%s\"; " "assuming shader group has all kinds of closures.", get_path().c_str()); } if (num_closures != 0) { OIIO::ustring* closures = 0; if (!shading_system.getattribute( impl->m_shader_group_ref.get(), "closures_needed", OIIO::TypeDesc::PTR, &closures)) { RENDERER_LOG_WARNING( "getattribute: closures_needed call failed for shader group \"%s\"; " "assuming shader group has all kinds of closures.", get_path().c_str()); return; } // Clear all closure flags. m_flags &= ~HasAllClosures; // Set the closure flags. for (int i = 0; i < num_closures; ++i) { if (closures[i] == g_emission_str) m_flags |= HasEmission; else if (closures[i] == g_transparent_str) m_flags |= HasTransparency; else if (closures[i] == g_subsurface_str) m_flags |= HasSubsurface; else if (closures[i] == g_holdout_str) m_flags |= HasHoldout; else if (closures[i] == g_debug_str) m_flags |= HasDebug; else m_flags |= HasBSDFs; } } else { // Shader group uses no closures. m_flags &= ~HasAllClosures; } }