view example/scenegraph/xml/task/move.cpp @ 404:0d2dc1869cbe draft

rename cpp to cc
author Shinji KONO <kono@ie.u-ryukyu.ac.jp>
date Wed, 23 Sep 2009 12:23:01 +0900
parents 10c1f6970f6a
children
line wrap: on
line source

/**
 * SceneGraph を読み込んで
 * node の型に対応する move 関数を呼び出す
 * move 関数が無かったら load する
 * 新しい SceneGraoh を生成する
 *
 */

// #define DEBUG
#include "error.h"
#include "scene_graph_pack.h"

// 本来は tasks.xml に書く
SchedDefineTask(SceneGraphMove);

int
move::run(void *rbuf, void *wbuf)
{
    __debug_spe("SceneGraphMove\n");

    SceneGraphPackPtr cur = (SceneGraphPack*) rbuf;
    int move_task_id = cur->move_task;
    // next は Mainmemory 上のアドレス
    SceneGraphPackPtr next =
      (SceneGraphPackPtr)smanager->allocate(sizeof(SceneGraphPack));

    if (smanager->call_task(move_task_id, (void*)cur, (void*)next)) {
      // 次の状態があって、新しく node を確保してそこを確保する
      smanager->write(cur, next, sizeof(SceneGraphPack));
    } else {
      // この node は消滅
      smanager->free(next);
    }

    return 0;
}