# HG changeset patch # User game@henri.cr.ie.u-ryukyu.ac.jp # Date 1253831195 -32400 # Node ID 579d71efbd709d97aad7688f73a49bafc489d782 # Parent bd81b461d2fcafa4c34d7c2ddbf0f4cc1cc89815 test_render error fixed diff -r bd81b461d2fc -r 579d71efbd70 TaskManager/Test/test_render/Application.cc --- 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) // { diff -r bd81b461d2fc -r 579d71efbd70 TaskManager/Test/test_render/Application.h --- 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 diff -r bd81b461d2fc -r 579d71efbd70 TaskManager/Test/test_render/Application/chain.cc --- 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); diff -r bd81b461d2fc -r 579d71efbd70 TaskManager/Test/test_render/SceneGraph.h --- 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 #include "polygon.h" #include "Pad.h" #include "TaskManager.h" diff -r bd81b461d2fc -r 579d71efbd70 TaskManager/Test/test_render/polygon.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 #include "polygon_pack.h" #include "SpanPack.h" diff -r bd81b461d2fc -r 579d71efbd70 TaskManager/Test/test_render/viewer.cc --- 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 #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(); }