changeset 445:579d71efbd70

test_render error fixed
author game@henri.cr.ie.u-ryukyu.ac.jp
date Fri, 25 Sep 2009 07:26:35 +0900
parents bd81b461d2fc
children e1d1be9c1d75
files TaskManager/Test/test_render/Application.cc TaskManager/Test/test_render/Application.h TaskManager/Test/test_render/Application/chain.cc TaskManager/Test/test_render/SceneGraph.h TaskManager/Test/test_render/polygon.h TaskManager/Test/test_render/viewer.cc
diffstat 6 files changed, 65 insertions(+), 53 deletions(-) [+]
line wrap: on
line diff
--- a/TaskManager/Test/test_render/Application.cc	Fri Sep 25 05:54:33 2009 +0900
+++ b/TaskManager/Test/test_render/Application.cc	Fri Sep 25 07:26:35 2009 +0900
@@ -13,11 +13,8 @@
 //     this->coll = new_coll;
 // }
 
-void
-Application::set_move_taskid(int id) {
-    this->move_taskid = id;
-}
-
+Application::Application(){}
+Application::~Application(){}
 // void
 // Application::apply_property(PropertyPtr p, SceneGraphPtr sgptr)
 // {
--- a/TaskManager/Test/test_render/Application.h	Fri Sep 25 05:54:33 2009 +0900
+++ b/TaskManager/Test/test_render/Application.h	Fri Sep 25 07:26:35 2009 +0900
@@ -18,15 +18,15 @@
     int property_size;
     void set_move_func(move_func move);
     void set_coll_func(coll_func coll);
-    void set_move_taskid(int id);
-//    SceneGraphPtr scenegraph_factory(PropertyPtr p);
-//    SceneGraphPtr scenegraph_connector(PropertyPtr p,SceneGraphPtr s);
+    //void set_move_taskid(int id);
+    //SceneGraphPtr scenegraph_factory(PropertyPtr p);
+    //SceneGraphPtr scenegraph_connector(PropertyPtr p,SceneGraphPtr s);
     SceneGraphPtr scenegraph_factory(void *p, int size);
     SceneGraphPtr scenegraph_connector(void *p, int size, SceneGraphPtr s, SceneGraphPtr sg_available_list);
-    virtual void init(TaskManager *manager, int w, int h);
-    int move_taskid;
-    move_func move;
-    coll_func coll;
+    void init(TaskManager *manager, int w, int h);
+
+    virtual int move_task_id();
+
 };
 
 #endif
--- a/TaskManager/Test/test_render/Application/chain.cc	Fri Sep 25 05:54:33 2009 +0900
+++ b/TaskManager/Test/test_render/Application/chain.cc	Fri Sep 25 07:26:35 2009 +0900
@@ -5,41 +5,48 @@
 #include "SGList.h"
 #include "TaskManager.h"
 #include "Func.h"
+#include "Chain.h"
 
+using namespace std;
 #define FALSE 0
 #define TRUE !FALSE
 #define CHAIN_LEN 50
 
 static double chain_width = 10;
-
-typedef struct {
-    double x, y, next_x, next_y;
-    double vx, vy, next_vx, next_vy;
-    double angle[3];
-    int can_move;
-    SceneGraphPtr parent;
-    int id;
-    int parent_id;
-} PropertyPtr*;
+static void createSceneGraphFromProperty(void* p);
 
 /* SceneGraph の property */
-PropertyPtr properties[2];
-PropertyPtr property;
+ChainPropertyPtr properties[2];
+ChainPropertyPtr property;
 
 
+SceneGraphPtr scenegraph_factory(void *p, int size){ 
+    return 0;
+}
+SceneGraphPtr scenegraph_connector(void *p, int size, SceneGraphPtr s, SceneGraphPtr sg_available_list){
+    return 0;
+}
+void init(TaskManager *manager, int w, int h){
+    return;
+}
 
-//void createSceneGraphFromProperty(CHAIN_VARS* p) ;
+int move_task_id(){
+    return 0;
+}
+
+
+//void createSceneGraphFromProperty(ChainPropertyPtr* p) ;
 void createSceneGraphFromProperty(void* p) ;
 
 void
-Chain::init_chain_vars(CHAIN_VARS *cv) {
+Chain::init_chain_vars(ChainPropertyPtr cv) {
     cv->x = 0, cv->y = 0, cv->next_x = 0, cv->next_y = 0;
     cv->vx = 0, cv->vy = 0, cv->next_vx = 0, cv->next_vy = 0;
     cv->can_move = TRUE;
 }
 
 void
-set_vector(CHAIN_VARS *p, SceneGraphPtr sg) {
+set_vector(ChainPropertyPtr p, SceneGraphPtr sg) {
     sg->xyz[0] = p->next_x;
     sg->xyz[1] = p->next_y;
     sg->xyz[2] = 0.0f;
@@ -79,7 +86,7 @@
     int id = sg->id;
     //PropertyPtr p = (PropertyPtr)sg->propertyptr;
     HTaskPtr chain_cal;
-    PropertyPtr output;
+    ChainPropertyPtr output;
 
     // SceneGraph の切り替えもここでやる
     if (property == properties[0]) {
@@ -90,9 +97,9 @@
       output   = properties[1];
     }
     chain_cal = manager->create_task(CHAINCAL_TASK);
-    chain_cal->add_inData(property, sizeof(CHAIN_VARS)*CHAIN_LEN);
+    chain_cal->add_inData(property, sizeof(ChainPropertyPtr)*CHAIN_LEN);
     chain_cal->add_param(id);
-    chain_cal->add_outData(output, sizeof(CHAIN_VARS)*CHAIN_LEN);
+    chain_cal->add_outData(output, sizeof(ChainPropertyPtr)*CHAIN_LEN);
     chain_cal->set_post(createSceneGraphFromProperty, (void*)id);	
     chain_cal->spawn();
 
@@ -106,10 +113,10 @@
 void 
 createSceneGraphFromProperty(void* p) 
 {
-    PropertyPtr chain_p = (PropertyPtr)p;
+    ChainPropertyPtr chain_p = (ChainPropertyPtr)p;
     SceneGraphPtr chain_copy = sgroot->createSceneGraph(CHAIN);
     chain_copy->propertyptr = (void*)chain_p;
-    chain_copy->property_size = sizeof(CHAIN_VARS);
+    chain_copy->property_size = sizeof(ChainPropertyPtr);
     set_vector(chain_p, chain_copy);
     chain_p->parent->addChild(chain_copy);
 }
@@ -118,29 +125,30 @@
 Chain::init(TaskManager *manager, int w, int h)
 {
     SceneGraphPtr root_chain, chain;
-    CHAIN_VARS rcv;
+    ChainProperty r;
+    ChainPropertyPtr rcv = &r;
 
     HTaskPtr chain_init;
     
-    set_move_taskid(CHAIN_CAL);
+    move_task_id_ = CHAINCAL_TASK;
     sgroot->createFromXMLfile(manager, "xml_file/chain.xml");
 
     /* SPE に送る property の配列の領域確保 */
-    properties[0] = (PropertyPtr)manager->allocate(sizeof(CHAIN_VARS)*CHAIN_LEN);
-    properties[1] = (PropertyPtr)manager->allocate(sizeof(CHAIN_VARS)*CHAIN_LEN);
+    properties[0] = (ChainPropertyPtr)manager->allocate(sizeof(ChainPropertyPtr)*CHAIN_LEN);
+    properties[1] = (ChainPropertyPtr)manager->allocate(sizeof(ChainPropertyPtr)*CHAIN_LEN);
     property = properties[0];
 
     root_chain = sgroot->createSceneGraph(CHAIN);
     // set_move_collision()ではだめ
-    root_chain->set_move_collision(chain_move_ope, chain_collision);
-    init_chain_vars(&rcv);
-    rcv.next_x = w / 2;
-    rcv.next_y = 0.0;
-    rcv.angle[0] = 0;
-    rcv.angle[1] = 0;
-    rcv.angle[2] = 0;
+    //root_chain->set_move_collision(chain_move_ope, chain_collision);
+    init_chain_vars(rcv);
+    rcv->next_x = w / 2;
+    rcv->next_y = 0.0;
+    rcv->angle[0] = 0;
+    rcv->angle[1] = 0;
+    rcv->angle[2] = 0;
 
-    set_vector(&rcv, root_chain);
+    set_vector(rcv, root_chain);
 
     for(int i = 0; i < CHAIN_LEN; i++) {
         chain = sgroot->createSceneGraph(CHAIN);
@@ -152,7 +160,7 @@
         property->angle[1] = -90 * (i % 2);
         //chain->set_move_collision(chain_move, chain_collision);
 	chain->propertyptr = &property[i];
-	chain->property_size = sizeof(CHAIN_VARS);
+	chain->property_size = sizeof(ChainPropertyPtr);
         root_chain->addChild(chain);
 	property[i].parent = root_chain;
     }
@@ -160,7 +168,7 @@
 
     // property を SPU の共有領域へコピーする
     chain_init = manager->create_task(CHAININIT_TASK);
-    chain_init->add_inData(property, sizeof(CHAIN_VARS)*CHAIN_LEN);
+    chain_init->add_inData(property, sizeof(ChainPropertyPtr)*CHAIN_LEN);
     chain_init->add_param(CHAIN_LEN);
     chain_init->set_cpu(SPE_0);
     chain_init->set_post(createSceneGraphFromProperty, (void*)property);
--- a/TaskManager/Test/test_render/SceneGraph.h	Fri Sep 25 05:54:33 2009 +0900
+++ b/TaskManager/Test/test_render/SceneGraph.h	Fri Sep 25 07:26:35 2009 +0900
@@ -2,6 +2,7 @@
 #ifndef INCLUDED_SCENE_GRAPH
 #define INCLUDED_SCENE_GRAPH
 
+#include <SDL.h>
 #include "polygon.h"
 #include "Pad.h"
 #include "TaskManager.h"
--- a/TaskManager/Test/test_render/polygon.h	Fri Sep 25 05:54:33 2009 +0900
+++ b/TaskManager/Test/test_render/polygon.h	Fri Sep 25 07:26:35 2009 +0900
@@ -1,7 +1,6 @@
 #ifndef INCLUDED_POLYGON
 #define INCLUDED_POLYGON
 
-#include "viewer.h"
 #include <libxml/parser.h>
 #include "polygon_pack.h"
 #include "SpanPack.h"
--- a/TaskManager/Test/test_render/viewer.cc	Fri Sep 25 05:54:33 2009 +0900
+++ b/TaskManager/Test/test_render/viewer.cc	Fri Sep 25 07:26:35 2009 +0900
@@ -11,6 +11,7 @@
 #include <wchar.h>
 #include "Pad.h"
 #include "Application.h"
+#include "Application/Chain.h"
 
 static void post2runLoop(void *viewer);
 static void post2runDraw(void *viewer);
@@ -19,6 +20,8 @@
 //static void post2exchange_sgroot(void *viewer);
 static void post2speRunLoop(void *viewer);
 static void post2runMoveDrawLoop(void *viewer);
+static void post2runMove(void *viewer_);
+
 
 /* measure for FPS (Frame Per Second) */
 int start_time;
@@ -295,11 +298,14 @@
     }
 }
 
+
 static void
 post2runMoveDrawLoop(void *viewer_)
 {
+
     Viewer *viewer = (Viewer*)viewer_;
-    
+    Application *application = viewer->application;
+
     // 同じ PPE 上なので sgroot(ポインタ) を add_param で送る。 
     //HTaskPtr send_key_task = viewer->manager->create_task(SEND_KEY);
     //send_key_task->add_param((int)sgroot);
@@ -311,16 +317,15 @@
 
     /* TASK_MOVE は外から引数で取ってくるべき */
     //HTaskPtr move_task = viewer->manager->create_task(viewer->move_taskid);
-    HTaskPtr move_task = viewer->manager->create_task(application->move_taskid);
+    HTaskPtr move_task = viewer->manager->create_task(application->move_task_id());
     move_task->add_inData(application->propertyPtr, application->property_size);
     move_task->add_outData(application->propertyPtr, application->property_size);
 
     HTaskPtr sg_update_task = viewer->manager->create_task(TASK_SG_UPDATE);
-
+    sg_update_task->spawn();
     HTaskPtr draw_task = viewer->manager->create_task(TASK_DRAW);
-    move_task->add_param(sgroot);
 
-    HTaskPtr switch_task = viewer->manager->create_task(                                TASK_SWITCH);
+    HTaskPtr switch_task = viewer->manager->create_task(TASK_SWITCH);
 
     switch_task->wait_for(move_task);
     switch_task->wait_for(draw_task);
@@ -328,6 +333,7 @@
     draw_task->spawn();
 
     switch_task->set_post(post2runMoveDrawLoop, (void*)viewer);
+    switch_task->set_post(post2speRunLoop, (void*)viewer);
     switch_task->spawn();
     
 }
@@ -345,7 +351,8 @@
 {
     HTaskPtr task_next = initLoop();
 
-    task_next->set_post(&post2runLoop, (void *)this); // set_post(function(this->run_loop()), NULL)
+    task_next->set_post(post2runLoop, (void *)this); // set_post(function(this->run_loop()), NULL)
+    task_next->set_post(post2runMove, (void *)this); // set_post(function(this->run_loop()), NULL)
     task_next->spawn();
 }