Example #1
0
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;
}
Example #2
0
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;
}