Skip to content

Files

Latest commit

bc929ef · May 25, 2018

History

History
117 lines (106 loc) · 2.3 KB

panda3d_pipeline.md

File metadata and controls

117 lines (106 loc) · 2.3 KB

Panda3D 파이프라인

Languages: English

참고 사항:

Call Tree

main_loop

PandaFramework::main_loop()
{
    while (do_frame()) {}
}

PandaFramework::do_frame()
{
    AsyncTaskManager::poll()
    {
        for_each(AsyncTaskChain)
        {
            AsyncTaskChain::poll()
            {
                for_each(AsyncTask) {}
            }
        }
    }
}

for_each(AsyncTask)

// Task "data_loop" has -50 sorts.
PandaFramework::task_data_loop()

// Task "event"
PandaFramework::task_event()

// Task "igloop" has 50 sorts.
PandaFramework::task_igloop()

task_data_loop

PandaFramework::task_data_loop()
{
    DataGraphTraverser::traverse()
    {
        if (is_of_type(DataNode::get_class_type())
        {
            DataGraphTraverser::r_transmit()
            {
                DataNode::transmit_data()
                DataGraphTraverser::traverse_below()
            }
        }
        else
        {
            DataGraphTraverser::traverse_below()
        }
    }
}

task_event

// Task "event"
PandaFramework::task_event()
{
}

task_igloop

PandaFramework::task_igloop()
{
    GraphicsEngine::render_frame()
    {
        GraphicsEngine::do_flip_frame()
        {
            GraphicsEngine::WindowRenderer::do_flip()
            {
                GraphicsEngine::flip_windows()
                {
                    for_each(WINDOWS)
                    {
                        GraphicsOutput::begin_flip()
                        {
                        }
                    }

                    for_each(WINDOWS)
                    {
                        GraphicsOutput::end_flip()
                        {
                            // swap buffer
                        }
                    }
                }
            }
        }

        GraphicsEngine::WindowRenderer::do_frame()
        {
            GraphicsEngine::cull_to_bins();
            GraphicsEngine::cull_and_draw_together();
            GraphicsEngine::draw_bins();
            GraphicsEngine::process_events()
            {
                for_each(WINDOWS)
                {
                    GraphicsOutput::process_events();
                }
            }
        }
    }
}