changeset 764:987d4cced279

merge
author hiroki@henri.cr.ie.u-ryukyu.ac.jp
date Sun, 07 Feb 2010 17:52:52 +0900
parents 87390c99c900 (diff) 10a8a80c2ea7 (current diff)
children dc26593f8c40 e4d635b1f018
files Renderer/Engine/SceneGraphRoot.cc
diffstat 4 files changed, 15 insertions(+), 61 deletions(-) [+]
line wrap: on
line diff
--- a/Renderer/Engine/SceneGraphRoot.cc	Sat Feb 06 03:02:48 2010 +0900
+++ b/Renderer/Engine/SceneGraphRoot.cc	Sun Feb 07 17:52:52 2010 +0900
@@ -330,61 +330,6 @@
     sg_exec_tree = camera->children;
 }
 
-void
-SceneGraphRoot::speExecute(int screen_w, int screen_h, Application *app)
-{
-    // SceneGraphPtr t = sg_exec_tree;
-    // SceneGraphPtr cur_parent = camera;
-
-    // 前フレームで描画した SceneGraph は削除
-    allRemove(sg_remove_list);
-
-    // 前フレームに作られた SceneGraph は描画用に移行
-    // 現フレームでの操作は以下の tree,list には適用されない
-    sg_draw_tree = sg_exec_tree;
-    sg_remove_list = sg_available_list;
-
-    // 現フレームで新しく SceneGraph がコピーされるので初期化
-    sg_exec_tree = NULL;
-    sg_available_list = NULL;
-
-    camera->move_execute(screen_w, screen_h);
-    camera->update(screen_w, screen_h);
-
-    camera->children = NULL;
-    camera->lastChild = NULL;
-    
-
-    if(sg_exec_tree != NULL) {
-	return;
-    }
-
-    /*removeのflagをもとにtreeを形成*/
-    /* spe から送り返されてきた property の配列を見て生成する for()*/
-    /* Application内に移動 */
-
-    // app->property_ope(sg_available_list);
-
-    /* 
-    for (Property *t = (Property *)properties[0]; is_end(t); t++){
-	SceneGraphPtr s = app->scenegraph_factory(t); // SceneGraphNode を作る
-	t->scenegraph = s; // property list には SceneGraphへのポインタが入っている
-	app->scenegraph_connector(property[0], s); // add する
-    }  
-    */
-    
-    
-
-    // 現在、allExecute が終わった時点では
-    // camera->children が User SceneGraph の root になる
-
-    /**
-     * NULL じゃなかったら、setSceneData が呼ばれてるから
-     * そっちを次の Scene にする
-     */
-
-    sg_exec_tree = camera->children;
-}
 
 
 void
--- a/Renderer/Engine/SgChange.cc	Sat Feb 06 03:02:48 2010 +0900
+++ b/Renderer/Engine/SgChange.cc	Sun Feb 07 17:52:52 2010 +0900
@@ -26,7 +26,7 @@
 
 /* Data Pack sent to Other CPUs (ex. SPE) */
 extern SceneGraphPack *sgpack;
-extern PolygonPack *ppack;
+//extern PolygonPack *ppack;
 extern SpanPackPtr spackList;
 extern SpanPackPtr *spackList_ptr;
 
@@ -123,6 +123,7 @@
     /*
       application 側で sgroot に task を生成登録する
       引数を渡したりは後でやる。
+      登録された関数を実行して task を生成登録する。
     */
     sgroot_A->regist_execute();
 
@@ -135,12 +136,14 @@
     /*
       TTaskPtr move_finish = manager->create_task(Dummy);
       loop_task->wait_for(move_finish);
-
       move_finish は app の move_task の post_func で実行させてやる
     */
 
+    /*
+      描画終了確認用のダミータスク
+      描画の最後で spwan させる
+    */
     HTaskPtr dummy_task = manager->create_task(Dummy);
-
     draw_finish = dummy_task;
 
     loop_task->wait_for(draw_finish);
--- a/Renderer/Engine/spe/Property.cc	Sat Feb 06 03:02:48 2010 +0900
+++ b/Renderer/Engine/spe/Property.cc	Sun Feb 07 17:52:52 2010 +0900
@@ -18,13 +18,12 @@
 {
     PropertyPtr	property	= (PropertyPtr)s->get_input(rbuf, 0);
     PropertyPtr	update_property = (PropertyPtr)s->get_output(wbuf, 0);
-    int *move_finish_flag = (int *)s->get_param(0);
 
     property->xyz[0] += 1.0f;
     property->xyz[1] += 1.0f;
     property->xyz[2] += 1.0f;
 
     memcpy((void*)update_property, (void*)property, sizeof(Property));
-    *move_finish_flag = 1;
+
     return 0;
 }
--- a/Renderer/Test/create_task.cc	Sat Feb 06 03:02:48 2010 +0900
+++ b/Renderer/Test/create_task.cc	Sun Feb 07 17:52:52 2010 +0900
@@ -5,6 +5,7 @@
 #include "create_task.h"
 #include "types.h"
 #include "Func.h"
+#include "sys.h"
 #include "SgChange.h"
 
 Property *property, *update_property;
@@ -30,7 +31,6 @@
 
     //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);
@@ -50,12 +50,18 @@
     SceneGraphRoot *sgroot = (SceneGraphRoot *)sgroot_;
     SceneGraphPtr node;
 
+    // ここが allExecute の tree をたどって clone して行くところに相当する
     node = sgroot->createSceneGraph(update_property->name);
     //node = sgroot->createSceneGraph("Ball");
     node->set_move_collision(move, collision);
     node->xyz[0] = update_property->xyz[0];
     node->xyz[1] = update_property->xyz[1];
     node->xyz[2] = update_property->xyz[2];
+
+    // get matrix
+    get_matrix(node->matrix, node->angle, node->xyz, sgroot->camera->matrix);
+    get_matrix(node->real_matrix, node->angle, node->xyz, sgroot->camera->real_matrix);
+
     sgroot->setSceneData(node);
 
     Property *tmp = property;
@@ -115,6 +121,7 @@
     // SgChange を使うための2行
     SgChange *sgroot = new SgChange(viewer);
     sgroot->run_init();
+    // 上で書いた regist_task() を登録
     sgroot->sgroot_A->appTaskRegist(regist_task);
 
     property        = (Property *)sgroot->manager->allocate(sizeof(Property));