function create_loading_graph(stages, wait_complete_loading, do_not_load_resources, loaded_cb) { var graph = m_graph.create(); for (var stage_name in stages) { var stage = init_stage(stages[stage_name]); if (do_not_load_resources && stage.is_resource) skip_stage(stage); m_graph.append_node_attr(graph, stage); } for (var stage_name in stages) { var stage = stages[stage_name]; stage.name = stage_name; for (var i = 0; i < stage.inputs.length; i++) m_graph.append_edge_attr(graph, stages[stage.inputs[i]], stage, null); } // add finishing node var loaded_cb_wrapper = function(bpy_data, scheduler, stage, cb_param, cb_finish, cb_set_rate) { cb_finish(scheduler, stage); scheduler.is_loaded = true; loaded_cb(bpy_data); m_print.log("%cLOADED CALLBACK", DEBUG_COLOR); } var finish_node = init_stage({ name: "out", priority: exports.FINISH_PRIORITY, cb_before: loaded_cb_wrapper }); var prefinish_nodes = []; if (wait_complete_loading) { var ids = m_graph.get_sink_nodes(graph); for (var i = 0; i < ids.length; i++) prefinish_nodes.push(m_graph.get_node_attr(graph, ids[i])); } else m_graph.traverse(graph, function(id, attr) { if (!attr.background_loading) prefinish_nodes.push(attr); }); m_graph.append_node_attr(graph, finish_node); for (var i = 0; i < prefinish_nodes.length; i++) { finish_node.inputs.push(prefinish_nodes[i].name); m_graph.append_edge_attr(graph, prefinish_nodes[i], finish_node, null); } return graph; }
function create_loading_graph(is_primary, stages, wait_complete_loading, do_not_load_resources, loaded_cb) { var scheduler = get_scheduler(); var graph = m_graph.create(); for (var stage_name in stages) { var stage = init_stage(stages[stage_name]); // skip "resource" or "primary_only" threads if necessary if (do_not_load_resources && stage.is_resource || !is_primary && stage.primary_only) skip_stage(stage); m_graph.append_node_attr(graph, stage); } for (var stage_name in stages) { var stage = stages[stage_name]; stage.name = stage_name; for (var i = 0; i < stage.inputs.length; i++) m_graph.append_edge_attr(graph, stages[stage.inputs[i]], stage, null); } // add finishing node (may be performed before resource nodes // if "do_not_load_resources" is true) var loaded_cb_wrapper = function(bpy_data, thread, stage, cb_param, cb_finish, cb_set_rate) { // primary thread loaded, allow to load secondary threads if (thread.id === 0) scheduler.primary_loaded = true; if (thread.status != THREAD_FINISHED) thread.status = THREAD_FINISHED_NO_RESOURCES; loaded_cb(thread.id); cb_finish(thread, stage); m_print.log("%cTHREAD " + thread.id + ": LOADED CALLBACK", DEBUG_COLOR); } var finish_node = init_stage({ name: "out", priority: exports.FINISH_PRIORITY, cb_before: loaded_cb_wrapper }); var prefinish_nodes = []; if (wait_complete_loading) { var ids = m_graph.get_sink_nodes(graph); for (var i = 0; i < ids.length; i++) prefinish_nodes.push(m_graph.get_node_attr(graph, ids[i])); } else m_graph.traverse(graph, function(id, attr) { if (!attr.background_loading) prefinish_nodes.push(attr); }); m_graph.append_node_attr(graph, finish_node); for (var i = 0; i < prefinish_nodes.length; i++) { finish_node.inputs.push(prefinish_nodes[i].name); m_graph.append_edge_attr(graph, prefinish_nodes[i], finish_node, null); } return graph; }