Mercurial > hg > Members > kono > Cerium
diff Renderer/Test/create_task.cc @ 760:24a37fe8419a
first of all commit, not work Rendering/Test/create_task
author | hiroki |
---|---|
date | Thu, 04 Feb 2010 14:46:09 +0900 |
parents | bb47827c04c1 |
children | 87390c99c900 |
line wrap: on
line diff
--- a/Renderer/Test/create_task.cc Mon Feb 01 17:08:36 2010 +0900 +++ b/Renderer/Test/create_task.cc Thu Feb 04 14:46:09 2010 +0900 @@ -10,21 +10,29 @@ Property *property, *update_property; // prototype +static void collision(SceneGraphPtr node, void *sgroot_, int screen_w, int screen_h, SceneGraphPtr tree); static void move(SceneGraphPtr node, void *sgroot_, int screen_w, int screen_h); -static void collision(SceneGraphPtr node, void *sgroot_, int screen_w, int screen_h, SceneGraphPtr tree); static void createSceneGraphFromProperty(SchedTask *s, void *sgroot, void *arg1); +//static void createSceneGraphFromProperty(void *sgroot, void *property_, void *update_property_); +static void set_property(Property *p, SceneGraphPtr sg); +static void regist_task(SceneGraphRoot *sgroot); static void move(SceneGraphPtr node, void *sgroot_, int screen_w, int screen_h) { SceneGraphRoot *sgroot = (SceneGraphRoot *)sgroot_; - TaskManager *manager = sgroot->tmanager; - HTaskPtr property_task = manager->create_task(PropertyTask); + //TaskManager *manager = sgroot->tmanager; + //HTaskPtr property_task = manager->create_task(PropertyTask); + HTaskPtr property_task = sgroot->move_exec_task; property_task->add_inData(property, sizeof(Property)); property_task->add_outData(update_property, sizeof(Property)); + + //property_task->add_inData((Property *)node->property, sizeof(Property)); + //property_task->add_outData((Property *)node->update_property, sizeof(Property)); + //property_task->set_param(0, (memaddr)sgroot->move_finish_flag); property_task->set_cpu(SPE_ANY); - + property_task->set_post(createSceneGraphFromProperty, (void *)sgroot, 0); property_task->spawn(); } @@ -35,6 +43,7 @@ { } +#if 1 static void createSceneGraphFromProperty(SchedTask *s, void *sgroot_, void *arg1) { @@ -52,8 +61,44 @@ Property *tmp = property; property = update_property; update_property = tmp; - + + sgroot->move_finish(); } +#else +static void +createSceneGraphFromProperty(void *sgroot_, void *property_, void *update_property_) +{ + SceneGraphPtr node; + SceneGraphRoot *sgroot = (SceneGraphRoot *)sgroot_; + Property *property = (Property *)property_; + Property *update_property = (Property *)update_property_; + + node = sgroot->createSceneGraph(update_property->name); + //node = sgroot->createSceneGraph("Ball"); + //node->set_move_collision(move, collision); + node->set_move_collision(move, collision, createSceneGraphFromProperty); + node->xyz[0] = update_property->xyz[0]; + node->xyz[1] = update_property->xyz[1]; + node->xyz[2] = update_property->xyz[2]; + sgroot->setSceneData(node); + + Property *tmp = property; + property = update_property; + update_property = tmp; +} +#endif + + +static void +regist_task(SceneGraphRoot *sgroot) +{ + TaskManager *manager = sgroot->tmanager; + HTaskPtr property_task = manager->create_task(PropertyTask); + sgroot->move_exec_task = property_task; +} + + + static void set_property(Property *p, SceneGraphPtr sg) @@ -70,9 +115,14 @@ // SgChange を使うための2行 SgChange *sgroot = new SgChange(viewer); sgroot->run_init(); + sgroot->sgroot_A->appTaskRegist(regist_task); property = (Property *)sgroot->manager->allocate(sizeof(Property)); update_property = (Property *)sgroot->manager->allocate(sizeof(Property)); + /* + Property *property = (Property *)sgroot->manager->allocate(sizeof(Property)); + Property *update_property = (Property *)sgroot->manager->allocate(sizeof(Property)); + */ SceneGraphPtr ball; @@ -80,11 +130,16 @@ ball = sgroot->createSceneGraph("Ball"); ball->set_move_collision(move, collision); + //ball->set_move_collision(move, collision, createSceneGraphFromProperty); ball->xyz[0] = screen_w/2; ball->xyz[1] = screen_h/2; ball->xyz[2] = 30.0f; + //SceneGraph に property を持たせておく + ball->property = (void *)property; + ball->update_property = (void *)update_property; + set_property(property, ball); sgroot->setSceneData(ball);