# HG changeset patch # User game@henri.cr.ie.u-ryukyu.ac.jp # Date 1253440526 -32400 # Node ID a4f690f448426618cbf92df207d4a7177df8adc2 # Parent d1f1e27d0a1202e96047b4410408b4ef30ba02eb delete manager (in kernel/ppe/TaskManager.h) don't move. diff -r d1f1e27d0a12 -r a4f690f44842 TaskManager/Test/test_render/Camera.cpp --- a/TaskManager/Test/test_render/Camera.cpp Fri Sep 18 18:28:56 2009 +0900 +++ b/TaskManager/Test/test_render/Camera.cpp Sun Sep 20 18:55:26 2009 +0900 @@ -4,6 +4,7 @@ #include "sys.h" #include "Scheduler.h" #include "show_time.h" +#include "TaskManager.h" static void camera_move(SceneGraphPtr _node, int screen_w, int screen_h) @@ -29,9 +30,11 @@ * ここに show_dma_wait 表示をいれようか */ + /* if (pad->r1.isPush()) { - show_time(); + show_time(manager); } + */ if (pad->r1.isPush() || pad->r1.isHold()) { node->xyz[2] += 10.0f; diff -r d1f1e27d0a12 -r a4f690f44842 TaskManager/Test/test_render/Func.h --- a/TaskManager/Test/test_render/Func.h Fri Sep 18 18:28:56 2009 +0900 +++ b/TaskManager/Test/test_render/Func.h Sun Sep 20 18:55:26 2009 +0900 @@ -19,6 +19,8 @@ // TASK_DRAW_SPAN2, TASK_DRAW_BACK, TASK_SET_TEXTURE, + TASK_MOVE, + TASK_DRAW, TASK_DUMMY, CHAINCAL_TASK, diff -r d1f1e27d0a12 -r a4f690f44842 TaskManager/Test/test_render/SceneGraph.cpp --- a/TaskManager/Test/test_render/SceneGraph.cpp Fri Sep 18 18:28:56 2009 +0900 +++ b/TaskManager/Test/test_render/SceneGraph.cpp Sun Sep 20 18:55:26 2009 +0900 @@ -60,16 +60,15 @@ * @return (1) のアドレス */ static uint32* -makeTapestry(int tex_w, int tex_h, uint32 *tex_src, +makeTapestry(TaskManager *manager, int tex_w, int tex_h, uint32 *tex_src, int all_pixel_num, int scale_cnt) { - uint32 *tex_dest; int t = 0; int diff = TEXTURE_SPLIT_PIXEL; int p_diff = 1; - tex_dest = (uint32*)manager->allocate(sizeof(int)*all_pixel_num); + uint32 *tex_dest = (uint32*)manager->allocate(sizeof(int)*all_pixel_num); while (scale_cnt) { for (int y = 0; y < tex_h; y += diff) { @@ -132,7 +131,7 @@ /* construct polygon from xmlNode. */ -SceneGraph::SceneGraph(xmlNodePtr surface) +SceneGraph::SceneGraph(TaskManager *manager, xmlNodePtr surface) { init(); @@ -145,7 +144,7 @@ coord_tex = (float*)manager->allocate(sizeof(float)*size*3); normal = (float*)manager->allocate(sizeof(float)*size*3); - get_data(surface->children); + get_data(manager, surface->children); finalize = &SceneGraph::finalize_original; } @@ -344,7 +343,7 @@ * surface nodeからポリゴンの情報を読み出す 再帰しない */ void -SceneGraph::get_data(xmlNodePtr cur) +SceneGraph::get_data(TaskManager *manager, xmlNodePtr cur) { //char *image_name; @@ -378,7 +377,7 @@ } else if(!xmlStrcmp(cur->name,(xmlChar*)"image")) { - get_image(cur); + get_image(manager, cur); } } } @@ -420,7 +419,7 @@ } int -SceneGraph::makeTapestries(SDL_Surface *texture_image, int id) { +SceneGraph::makeTapestries(TaskManager *manager, SDL_Surface *texture_image, int id) { uint32 *tapestry; int scale = 1; int tex_w = texture_image->w; @@ -448,7 +447,7 @@ scale >>= 1; - tapestry = makeTapestry(texture_image->w, texture_image->h, + tapestry = makeTapestry(manager, texture_image->w, texture_image->h, (uint32*)texture_image->pixels, all_pixel_num, scale); @@ -462,7 +461,7 @@ } void -SceneGraph::get_image(xmlNodePtr cur) +SceneGraph::get_image(TaskManager *manager, xmlNodePtr cur) { char image_name[20] = "/tmp/image_XXXXXX"; char *filename = (char *)xmlGetProp(cur, (xmlChar *)"name"); @@ -479,7 +478,7 @@ SDL_Surface *texture_image = load_decode_image(image_name, cur); - texture_id = makeTapestries(texture_image, tex_id); + texture_id = makeTapestries(manager, texture_image, tex_id); if (unlink(image_name)) { cout << "unlink error\n"; diff -r d1f1e27d0a12 -r a4f690f44842 TaskManager/Test/test_render/SceneGraph.h --- a/TaskManager/Test/test_render/SceneGraph.h Fri Sep 18 18:28:56 2009 +0900 +++ b/TaskManager/Test/test_render/SceneGraph.h Sun Sep 20 18:55:26 2009 +0900 @@ -3,7 +3,7 @@ #include "polygon.h" #include "Pad.h" - +#include "TaskManager.h" class SceneGraph; typedef void (*move_func)(SceneGraph* node, int screen_w, int screen_h); @@ -14,7 +14,7 @@ class SceneGraph : public Polygon { public: SceneGraph(void); - SceneGraph(xmlNodePtr surface); + SceneGraph(TaskManager *manager, xmlNodePtr surface); SceneGraph(SceneGraphPtr orig); ~SceneGraph(void); @@ -91,16 +91,17 @@ void tree_check(void); void print_member(void); - void get_data(xmlNodePtr cur); + void get_data(TaskManager *manager, xmlNodePtr cur); void delete_data(void); SDL_Surface* load_decode_image(char *image_name, xmlNodePtr cur); - int makeTapestries(SDL_Surface *texture_image, int id); - void get_image(xmlNodePtr cur); + int makeTapestries(TaskManager *manager, SDL_Surface *texture_image, int id); + void get_image(TaskManager *manager, xmlNodePtr cur); }; #endif +// 帯域変数を使うのは禁止なので削除すること // オリジナル (Linked List) extern SceneGraphPtr scene_graph; diff -r d1f1e27d0a12 -r a4f690f44842 TaskManager/Test/test_render/SceneGraphRoot.cpp --- a/TaskManager/Test/test_render/SceneGraphRoot.cpp Fri Sep 18 18:28:56 2009 +0900 +++ b/TaskManager/Test/test_render/SceneGraphRoot.cpp Sun Sep 20 18:55:26 2009 +0900 @@ -94,7 +94,7 @@ /* XMLファイルからポリゴンを作成 */ void -SceneGraphRoot::createFromXMLfile(const char *xmlfile) +SceneGraphRoot::createFromXMLfile(TaskManager *manager, const char *xmlfile) { xmlDocPtr doc; xmlNodePtr cur; @@ -115,7 +115,7 @@ } /* ポリゴン(SceneGraph)生成 */ - tmp = new SceneGraph(cur); + tmp = new SceneGraph(manager, cur); registSceneGraph(tmp); } diff -r d1f1e27d0a12 -r a4f690f44842 TaskManager/Test/test_render/SceneGraphRoot.h --- a/TaskManager/Test/test_render/SceneGraphRoot.h Fri Sep 18 18:28:56 2009 +0900 +++ b/TaskManager/Test/test_render/SceneGraphRoot.h Sun Sep 20 18:55:26 2009 +0900 @@ -46,7 +46,7 @@ * Functions */ /* User API */ - void createFromXMLfile(const char *); + void createFromXMLfile(TaskManager *manager, const char *); SceneGraphPtr createSceneGraph(int id); SceneGraphPtr createSceneGraph(void); void setSceneData(SceneGraphPtr sg); diff -r d1f1e27d0a12 -r a4f690f44842 TaskManager/Test/test_render/ball_bound.cpp --- a/TaskManager/Test/test_render/ball_bound.cpp Fri Sep 18 18:28:56 2009 +0900 +++ b/TaskManager/Test/test_render/ball_bound.cpp Sun Sep 20 18:55:26 2009 +0900 @@ -104,7 +104,7 @@ void -ball_bound_init(int screen_w, int screen_h) +ball_bound_init(TaskManager *manager, int screen_w, int screen_h) { SceneGraphPtr ball; @@ -112,7 +112,7 @@ // random な値が欲しいなら、man random に方法が書いてあります。 srandom(100); - sgroot->createFromXMLfile("xml_file/Ball.xml"); + sgroot->createFromXMLfile(manager, "xml_file/Ball.xml"); ball = sgroot->createSceneGraph(Ball); ball->set_move_collision(ball_move, ball_collision); diff -r d1f1e27d0a12 -r a4f690f44842 TaskManager/Test/test_render/boss1_action.cpp --- a/TaskManager/Test/test_render/boss1_action.cpp Fri Sep 18 18:28:56 2009 +0900 +++ b/TaskManager/Test/test_render/boss1_action.cpp Sun Sep 20 18:55:26 2009 +0900 @@ -224,7 +224,7 @@ } void -boss1_init(int screen_w, int screen_h) +boss1_init(TaskManager *manager, int screen_w, int screen_h) { SceneGraphPtr root; SceneGraphPtr player; @@ -232,10 +232,10 @@ SceneGraphPtr left_parts; SceneGraphPtr right_parts; - sgroot->createFromXMLfile("xml_file/boss1.xml"); - sgroot->createFromXMLfile("xml_file/player1.xml"); - sgroot->createFromXMLfile("xml_file/p_shot.xml"); - sgroot->createFromXMLfile("xml_file/blast.xml"); + sgroot->createFromXMLfile(manager, "xml_file/boss1.xml"); + sgroot->createFromXMLfile(manager, "xml_file/player1.xml"); + sgroot->createFromXMLfile(manager, "xml_file/p_shot.xml"); + sgroot->createFromXMLfile(manager, "xml_file/blast.xml"); //rootとなるSceneGraphを生成 root = sgroot->createSceneGraph(); diff -r d1f1e27d0a12 -r a4f690f44842 TaskManager/Test/test_render/chain.cpp --- a/TaskManager/Test/test_render/chain.cpp Fri Sep 18 18:28:56 2009 +0900 +++ b/TaskManager/Test/test_render/chain.cpp Sun Sep 20 18:55:26 2009 +0900 @@ -72,7 +72,7 @@ } void -chain_move(SceneGraphPtr sg, int w, int h) +chain_move(TaskManager *manager, SceneGraphPtr sg, int w, int h) { int id = sg->id; //CHAIN_VARS* p = (CHAIN_VARS*)sg->propertyptr; @@ -114,7 +114,7 @@ } void -chain_init(int w, int h) +chain_init(TaskManager *manager, int w, int h) { SceneGraphPtr root_chain, chain; CHAIN_VARS rcv; @@ -122,7 +122,7 @@ HTaskPtr chain_init; - sgroot->createFromXMLfile("xml_file/chain.xml"); + sgroot->createFromXMLfile(manager, "xml_file/chain.xml"); /* SPE に送る property の配列の領域確保 */ properties[0] = (CHAIN_VARS*)manager->allocate(sizeof(CHAIN_VARS)*CHAIN_LEN); diff -r d1f1e27d0a12 -r a4f690f44842 TaskManager/Test/test_render/cube_action.cpp --- a/TaskManager/Test/test_render/cube_action.cpp Fri Sep 18 18:28:56 2009 +0900 +++ b/TaskManager/Test/test_render/cube_action.cpp Sun Sep 20 18:55:26 2009 +0900 @@ -109,12 +109,12 @@ } void -create_cube_split(int number) +create_cube_split(TaskManager *manager, int number) { SceneGraphPtr cube; SceneGraphPtr back; - sgroot->createFromXMLfile("xml_file/cube.xml"); + sgroot->createFromXMLfile(manager, "xml_file/cube.xml"); // 何もしない親 // cube は brother として繋がっていくので diff -r d1f1e27d0a12 -r a4f690f44842 TaskManager/Test/test_render/direction.cpp --- a/TaskManager/Test/test_render/direction.cpp Fri Sep 18 18:28:56 2009 +0900 +++ b/TaskManager/Test/test_render/direction.cpp Sun Sep 20 18:55:26 2009 +0900 @@ -62,14 +62,14 @@ } void -direction_init(void) +direction_init(TaskManager *manager) { SceneGraphPtr dx; SceneGraphPtr dy; SceneGraphPtr dz; SceneGraphPtr back; - sgroot->createFromXMLfile("xml_file/direction.xml"); + sgroot->createFromXMLfile(manager, "xml_file/direction.xml"); dx = sgroot->createSceneGraph(Dirx); dy = sgroot->createSceneGraph(Diry); diff -r d1f1e27d0a12 -r a4f690f44842 TaskManager/Test/test_render/gaplant.cpp --- a/TaskManager/Test/test_render/gaplant.cpp Fri Sep 18 18:28:56 2009 +0900 +++ b/TaskManager/Test/test_render/gaplant.cpp Sun Sep 20 18:55:26 2009 +0900 @@ -4,12 +4,12 @@ #include "back_action.h" void -init_gaplant(int w, int h) +init_gaplant(TaskManager *manager, int w, int h) { SceneGraphPtr back; SceneGraphPtr gaplant; - sgroot->createFromXMLfile("xml_file/gap_plane_test.xml"); - sgroot->createFromXMLfile("xml_file/Ball.xml"); + sgroot->createFromXMLfile(manager, "xml_file/gap_plane_test.xml"); + sgroot->createFromXMLfile(manager, "xml_file/Ball.xml"); back = sgroot->createSceneGraph(); back->set_move_collision(back_move, back_coll); diff -r d1f1e27d0a12 -r a4f690f44842 TaskManager/Test/test_render/ieshoot.cpp --- a/TaskManager/Test/test_render/ieshoot.cpp Fri Sep 18 18:28:56 2009 +0900 +++ b/TaskManager/Test/test_render/ieshoot.cpp Sun Sep 20 18:55:26 2009 +0900 @@ -189,16 +189,16 @@ void -ieshoot_init(void) +ieshoot_init(TaskManager *manager) { SceneGraphPtr iejiki; SceneGraphPtr enemy; SceneGraphPtr back; - sgroot->createFromXMLfile("xml_file/ietama.xml"); - sgroot->createFromXMLfile("xml_file/ieboss.xml"); - sgroot->createFromXMLfile("xml_file/iejiki.xml"); - sgroot->createFromXMLfile("xml_file/universe.xml"); + sgroot->createFromXMLfile(manager, "xml_file/ietama.xml"); + sgroot->createFromXMLfile(manager, "xml_file/ieboss.xml"); + sgroot->createFromXMLfile(manager, "xml_file/iejiki.xml"); + sgroot->createFromXMLfile(manager, "xml_file/universe.xml"); back = sgroot->createSceneGraph(); diff -r d1f1e27d0a12 -r a4f690f44842 TaskManager/Test/test_render/init_position.cpp --- a/TaskManager/Test/test_render/init_position.cpp Fri Sep 18 18:28:56 2009 +0900 +++ b/TaskManager/Test/test_render/init_position.cpp Sun Sep 20 18:55:26 2009 +0900 @@ -5,14 +5,14 @@ #include "camera_action.h" void -init_position(int w, int h) +init_position(TaskManager *manager, int w, int h) { SceneGraphPtr back; SceneGraphPtr player; SceneGraphPtr enemy; //SceneGraphPtr bullet; - sgroot->createFromXMLfile("xml_file/player.xml"); + sgroot->createFromXMLfile(manager, "xml_file/player.xml"); back = sgroot->createSceneGraph(BACK); //back = sgroot->createSceneGraph(); player = sgroot->createSceneGraph(IDLE); diff -r d1f1e27d0a12 -r a4f690f44842 TaskManager/Test/test_render/long_cube.cpp --- a/TaskManager/Test/test_render/long_cube.cpp Fri Sep 18 18:28:56 2009 +0900 +++ b/TaskManager/Test/test_render/long_cube.cpp Sun Sep 20 18:55:26 2009 +0900 @@ -19,11 +19,11 @@ void -lcube_init(int screen_w, int screen_h) +lcube_init(TaskManager *manager, int screen_w, int screen_h) { SceneGraphPtr lcube; - sgroot->createFromXMLfile("xml_file/LongCube.xml"); + sgroot->createFromXMLfile(manager, "xml_file/LongCube.xml"); lcube = sgroot->createSceneGraph(LongCube); lcube->set_move_collision(lcube_move, lcube_collision); diff -r d1f1e27d0a12 -r a4f690f44842 TaskManager/Test/test_render/main.cpp --- a/TaskManager/Test/test_render/main.cpp Fri Sep 18 18:28:56 2009 +0900 +++ b/TaskManager/Test/test_render/main.cpp Sun Sep 20 18:55:26 2009 +0900 @@ -5,14 +5,15 @@ #include "Func.h" /* prototype */ -static int init(int argc, char *argv[]); -static void TMend(void); +static int init(TaskManager *manager, int argc, char *argv[]); +static void TMend(TaskManager *manager); extern void task_initialize(); -Viewer *screen; +// 帯域変数は禁止 +//static Viewer *screen; +static int sg_number = 0; -static int sg_number = 0; const char *usr_help_str = "Usage: ./test_nogl [OPTION]\n\ -cpu Number of SPE (default 1)\n\ @@ -27,7 +28,7 @@ 6 以降: キューブが跳ね返りながら、勝手にキューブが増えて行く\n"; int -init(int argc, char *argv[]) +init(TaskManager *manager, int argc, char *argv[]) { int bpp = 32; int width = 640; @@ -66,14 +67,17 @@ } } + Viewer *screen; if (vtype == VTYPE_SDL) { - screen = new ViewerSDL(bpp, width, height, spenum); + screen = new ViewerSDL(manager, bpp, width, height, spenum); } else if (vtype == VTYPE_FB) { - screen = new ViewerFB(bpp, width, height, spenum); + screen = new ViewerFB(manager, bpp, width, height, spenum); + }else{ + screen = new ViewerSDL(manager, bpp, width, height, spenum); } - screen->video_init(); - screen->run_init(xml, sg_number); + screen->video_init(manager); + screen->run_init(manager, xml, sg_number); manager->set_TMend(TMend); @@ -81,17 +85,16 @@ } int -TMmain(int argc, char *argv[]) +TMmain(TaskManager *manager, int argc, char *argv[]) { task_initialize(); - - return init(argc, argv); + return init(manager, argc, argv); //return 0; } void -TMend(void) +TMend(TaskManager *manager) { printf("test_nogl end\n"); } diff -r d1f1e27d0a12 -r a4f690f44842 TaskManager/Test/test_render/node.cpp --- a/TaskManager/Test/test_render/node.cpp Fri Sep 18 18:28:56 2009 +0900 +++ b/TaskManager/Test/test_render/node.cpp Sun Sep 20 18:55:26 2009 +0900 @@ -63,9 +63,9 @@ } void -node_init(void) +node_init(TaskManager *manager) { - sgroot->createFromXMLfile("xml_file/cube.xml"); + sgroot->createFromXMLfile(manager, "xml_file/cube.xml"); Cube->set_move_collision(cube_move, cube_collision); Cube->stack_xyz[0] = 2.0f; Cube->stack_xyz[1] = 2.0f; diff -r d1f1e27d0a12 -r a4f690f44842 TaskManager/Test/test_render/panel.cpp --- a/TaskManager/Test/test_render/panel.cpp Fri Sep 18 18:28:56 2009 +0900 +++ b/TaskManager/Test/test_render/panel.cpp Sun Sep 20 18:55:26 2009 +0900 @@ -17,18 +17,18 @@ } void -panel_init(int bg) +panel_init(TaskManager *manager, int bg) { SceneGraphPtr panel; if (bg == 2) { - sgroot->createFromXMLfile("xml_file/panel_512.xml"); + sgroot->createFromXMLfile(manager, "xml_file/panel_512.xml"); panel = sgroot->createSceneGraph(PANEL_512); } else if (bg == 3) { - sgroot->createFromXMLfile("xml_file/panel_1024.xml"); + sgroot->createFromXMLfile(manager, "xml_file/panel_1024.xml"); panel = sgroot->createSceneGraph(PANEL_1024); } else { - sgroot->createFromXMLfile("xml_file/panel_2048.xml"); + sgroot->createFromXMLfile(manager, "xml_file/panel_2048.xml"); panel = sgroot->createSceneGraph(PANEL_2048); } diff -r d1f1e27d0a12 -r a4f690f44842 TaskManager/Test/test_render/post.cpp --- a/TaskManager/Test/test_render/post.cpp Fri Sep 18 18:28:56 2009 +0900 +++ b/TaskManager/Test/test_render/post.cpp Sun Sep 20 18:55:26 2009 +0900 @@ -1,5 +1,7 @@ #include "viewer.h" +/* +// post.cppの中身を viewer.cpp の中に持って行く extern Viewer *screen; void @@ -25,3 +27,4 @@ { screen->exchange_sgroot(); } +*/ diff -r d1f1e27d0a12 -r a4f690f44842 TaskManager/Test/test_render/show_time.cpp --- a/TaskManager/Test/test_render/show_time.cpp Fri Sep 18 18:28:56 2009 +0900 +++ b/TaskManager/Test/test_render/show_time.cpp Sun Sep 20 18:55:26 2009 +0900 @@ -5,8 +5,10 @@ void show_time() { + /* HTaskPtr show; HTaskPtr pre_show; + */ /* show = manager->create_task(SHOW_TIME); show->set_cpu(SPE_0); @@ -14,6 +16,7 @@ printf("testですよ\n"); */ + /* pre_show = manager->create_task(SHOW_TIME); pre_show->set_cpu((CPU_TYPE)((int)SPE_0)); pre_show->spawn(); @@ -25,5 +28,5 @@ show->spawn(); pre_show = show; } - + */ } diff -r d1f1e27d0a12 -r a4f690f44842 TaskManager/Test/test_render/task/task_init.cpp --- a/TaskManager/Test/test_render/task/task_init.cpp Fri Sep 18 18:28:56 2009 +0900 +++ b/TaskManager/Test/test_render/task/task_init.cpp Sun Sep 20 18:55:26 2009 +0900 @@ -14,10 +14,14 @@ SchedExternTask(LoadTexture); SchedExternTask(SetTexture); +SchedExternTask(Move); +SchedExternTask(Draw); + SchedExternTask(Dummy); SchedExternTask(ShowTime); + /** * set_cpu(CPU_PPE) で動作する task */ @@ -37,6 +41,9 @@ SchedRegisterTask(TASK_INIT_TEXTURE, LoadTexture); SchedRegisterTask(TASK_SET_TEXTURE, SetTexture); + SchedRegisterTask(TASK_MOVE, Move); + SchedRegisterTask(TASK_DRAW, Draw); + SchedRegisterTask(TASK_DUMMY, Dummy); SchedRegisterTask(SHOW_TIME, ShowTime); } diff -r d1f1e27d0a12 -r a4f690f44842 TaskManager/Test/test_render/universe.cpp --- a/TaskManager/Test/test_render/universe.cpp Fri Sep 18 18:28:56 2009 +0900 +++ b/TaskManager/Test/test_render/universe.cpp Sun Sep 20 18:55:26 2009 +0900 @@ -41,12 +41,12 @@ } void -universe_init(void) +universe_init(TaskManager *manager) { SceneGraphPtr earth; SceneGraphPtr moon; - sgroot->createFromXMLfile("xml_file/universe.xml"); + sgroot->createFromXMLfile(manager, "xml_file/universe.xml"); // SGList.h にある SceneGraph ID から SceneGraph を生成する earth = sgroot->createSceneGraph(Earth); diff -r d1f1e27d0a12 -r a4f690f44842 TaskManager/Test/test_render/untitled.cpp --- a/TaskManager/Test/test_render/untitled.cpp Fri Sep 18 18:28:56 2009 +0900 +++ b/TaskManager/Test/test_render/untitled.cpp Sun Sep 20 18:55:26 2009 +0900 @@ -74,7 +74,7 @@ } void -untitled_init(void) +untitled_init(TaskManager *manager) { SceneGraphPtr test00; SceneGraphPtr test01; @@ -87,7 +87,7 @@ SceneGraphPtr test08; SceneGraphPtr test09; - sgroot->createFromXMLfile("xml_file/Venus.xml"); + sgroot->createFromXMLfile(manager, "xml_file/Venus.xml"); // SGList.h にある SceneGraph ID から SceneGraph を生成する /* diff -r d1f1e27d0a12 -r a4f690f44842 TaskManager/Test/test_render/vacuum.cpp --- a/TaskManager/Test/test_render/vacuum.cpp Fri Sep 18 18:28:56 2009 +0900 +++ b/TaskManager/Test/test_render/vacuum.cpp Sun Sep 20 18:55:26 2009 +0900 @@ -157,13 +157,13 @@ void -vacuum_init2(int w, int h) +vacuum_init2(TaskManager *manager, int w, int h) { SceneGraphPtr title; - sgroot->createFromXMLfile("xml_file/gamecube.xml"); - sgroot->createFromXMLfile("xml_file/title.xml"); - sgroot->createFromXMLfile("xml_file/gameover.xml"); + sgroot->createFromXMLfile(manager, "xml_file/gamecube.xml"); + sgroot->createFromXMLfile(manager, "xml_file/title.xml"); + sgroot->createFromXMLfile(manager, "xml_file/gameover.xml"); title = sgroot->createSceneGraph(TITLE); title->xyz[0] = w/2; diff -r d1f1e27d0a12 -r a4f690f44842 TaskManager/Test/test_render/viewer.cpp --- a/TaskManager/Test/test_render/viewer.cpp Fri Sep 18 18:28:56 2009 +0900 +++ b/TaskManager/Test/test_render/viewer.cpp Sun Sep 20 18:55:26 2009 +0900 @@ -11,13 +11,10 @@ #include #include "Pad.h" -HTaskPtr move_DUMMY = manager->create_task(TASK_DUMMY); -HTaskPtr draw_DUMMY = manager->create_task(TASK_DUMMY); - -extern void post2runLoop(void *); -extern void post2runDraw(void *); -extern void post2runMove(void *); -extern void post2exchange_sgroot(void *); +static void post2runLoop(void *viewer); +static void post2runDraw(void *viewer); +static void post2runMove(void *viewer); +//static void post2exchange_sgroot(void *viewer); /* measure for FPS (Frame Per Second) */ @@ -89,27 +86,28 @@ SDL_GL_SwapBuffers(); } -extern void node_init(void); -extern void create_cube_split(int); -extern void panel_init(int); -extern void universe_init(void); -extern void ieshoot_init(void); -extern void ball_bound_init(int, int); -extern void lcube_init(int, int); -extern void direction_init(void); -extern void init_position(int, int); -extern void vacuum_init(int w, int h); -extern void untitled_init(void); -extern void chain_init(int w, int h); -extern void boss1_init(int w, int h); -extern void init_gaplant(int w, int h); -extern void vacuum_init2(int w, int h); +extern void node_init(TaskManager *manager); +extern void create_cube_split(TaskManager *manager, int); +extern void panel_init(TaskManager *manager, int bg); +extern void universe_init(TaskManager *manager); +extern void ieshoot_init(TaskManager *manager); +extern void ball_bound_init(TaskManager *manager, int, int); +extern void lcube_init(TaskManager *manager, int, int); +extern void direction_init(TaskManager *manager); +extern void init_position(TaskManager *manager, int, int); +extern void vacuum_init(TaskManager *manager, int w, int h); +extern void untitled_init(TaskManager *manager); +extern void chain_init(TaskManager *manager, int w, int h); +extern void boss1_init(TaskManager *manager, int w, int h); +extern void init_gaplant(TaskManager *manager, int w, int h); +extern void vacuum_init2(TaskManager *manager, int w, int h); void -Viewer::run_init(const char *xml, int sg_number) +Viewer::run_init(TaskManager *manager, const char *xml, int sg_number) { HTaskPtr task_next; HTaskPtr task_tex; + this->manager = manager; start_time = get_ticks(); this_time = 0; @@ -122,51 +120,51 @@ switch (sg_number) { case 0: case 1: - create_cube_split(sg_number); + create_cube_split(manager, sg_number); break; case 2: case 3: case 4: - panel_init(sg_number); + panel_init(manager, sg_number); break; case 5: - universe_init(); + universe_init(manager); break; case 6: - ieshoot_init(); + ieshoot_init(manager); break; case 7: - ball_bound_init(this->width, this->height); + ball_bound_init(manager, this->width, this->height); break; case 8: - lcube_init(this->width, this->height); + lcube_init(manager, this->width, this->height); break; case 9: - direction_init(); + direction_init(manager); break; case 10: - init_position(this->width, this->height); + init_position(manager, this->width, this->height); break; case 11: - // vacuum_init(this->width, this->height); + // vacuum_init(manager, this->width, this->height); break; case 12: - untitled_init(); + untitled_init(manager); break; case 13: - boss1_init(this->width, this->height); + boss1_init(manager, this->width, this->height); break; case 14: - init_gaplant(this->width, this->height); + init_gaplant(manager, this->width, this->height); break; case 15: - vacuum_init2(this->width, this->height); + vacuum_init2(manager, this->width, this->height); break; case 16: - chain_init(this->width, this-> height); + chain_init(manager, this->width, this-> height); break; default: - node_init(); + node_init(manager); break; } @@ -224,42 +222,58 @@ task_tex->spawn(); } - task_next->set_post(&post2runLoop, NULL); // set_post(function(this->run_loop()), NULL) - task_next->set_post(&post2runMove, NULL); // set_post(function(this->run_move()), NULL) + task_next->set_post(&post2runLoop, (void *)this); // set_post(function(this->run_loop()), NULL) task_next->spawn(); // TASK_INIT_TEXTURE が全て終わったら DUMMY_TASK が Viewer::run_loop() を呼ぶ + + + /* + HTaskPtr move_task = manager->create_task(RUN_MOVE_TASK); + HTaskPtr draw_task = manager->create_task(RUN_DRAW_TASK); + move_task->spawn(); + draw_task->spawn(); + + task_next->wait_for(RUN_MOVE_TASK); + task_next->wait_for(RUN_DRAW_TASK); + task_next->set_post(&post2runExchange, (void *)this); + task_next->spawn(); + */ +} + + +/* +static void +post2exchange_sgroot(void *viewer_) +{ + Viewer *viewer = (Viewer*)viewer_; + HTaskPtr task_next = viewer->manager->create_task(TASK_DUMMY); + viewer->exchange_sgroot(task_next); } void -Viewer::exchange_sgroot() +Viewer::exchange_sgroot(TaskManager *manager) { + SceneGraphRootPtr tmp = sgroot; sgroot = sgroot_2; sgroot_2 = tmp; - HTaskPtr task_next = manager->create_task(TASK_DUMMY); - task_next->set_post(&post2runLoop, NULL); // set_post(function(this->run_loop()), NULL) - task_next->set_post(&post2runMove, NULL); // set_post(function(this->run_move()), NULL) - task_next->spawn(); } +*/ + +static void +post2runMove(void *viewer_) +{ + Viewer *viewer = (Viewer*)viewer_; + HTaskPtr task_next = viewer->manager->create_task(TASK_DUMMY); + viewer->run_move(task_next); +} void -Viewer::run_move() +Viewer::run_move(HTaskPtr task_next) { sgroot->updateControllerState(); sgroot->allExecute(width, height); - // run_loop と待ち合わせの処理 - - HTaskPtr task_next; - task_next = manager->create_task(TASK_DUMMY); - - task_next->wait_for(draw_DUMMY); - task_next->wait_for(move_DUMMY); - move_DUMMY->spawn(); - //task_next->set_post(exchange_sgroot, NULL); // set_post(function(this->run_loop()), NULL) - task_next->spawn(); - - } void @@ -268,13 +282,10 @@ } void -Viewer::rendering() +Viewer::rendering(HTaskPtr task_next) { HTaskPtr task_create_pp = NULL; HTaskPtr task_create_sp = NULL; - HTaskPtr task_next; - - task_next = manager->create_task(TASK_DUMMY); // SceneGraph(木構造) -> PolygonPack task_create_pp = manager->create_task(TASK_CREATE_PP2); @@ -323,16 +334,24 @@ // Barrier 同期 // run_draw() を呼ぶ post2runDraw - task_next->set_post(post2runDraw, NULL); // set_post(function(this->run_draw()), NULL) + task_next->set_post(post2runDraw, (void*)this); // set_post(function(this->run_draw()), NULL) task_next->spawn(); // TASK_CREATE_SPAN が全て終わったら DUMMY_TASK が Viewer::run_draw() を呼ぶ } +static void +post2runLoop(void *viewer_) +{ + Viewer *viewer = (Viewer*)viewer_; + HTaskPtr task_next = viewer->manager->create_task(TASK_DUMMY); + viewer->run_loop(task_next); + +} + void -Viewer::run_loop() +Viewer::run_loop(HTaskPtr task_next) { bool quit_flg; - quit_flg = quit_check(); if (quit_flg == true) { this_time = get_ticks(); @@ -346,23 +365,31 @@ spackList[i-1].reinit(i*split_screen_h); } - //task_next = manager->create_task(TASK_DUMMY); - + task_next = manager->create_task(TASK_DUMMY); + run_move(task_next); //sgroot->updateControllerState(); //sgroot->allExecute(width, height); //sgroot->checkRemove(); // ここから下は Rendering という関数にする - rendering(); + rendering(task_next); +} + +static void +post2runDraw(void *viewer_) +{ + Viewer *viewer = (Viewer*)viewer_; + HTaskPtr task_next = viewer->manager->create_task(TASK_DUMMY); + viewer->run_draw(task_next); + } void -Viewer::run_draw() // 引数に post2runLoop を入れるようにする +Viewer::run_draw(HTaskPtr task_next) // 引数に post2runLoop を入れるようにする { - HTaskPtr task_next; HTaskPtr task_draw; - task_next = manager->create_task(TASK_DUMMY); + //task_next = manager->create_task(TASK_DUMMY); //task_next->set_post(post2runLoop, NULL); ppack->clear(); @@ -391,6 +418,8 @@ break; } + + task_next->spawn(); task_draw->add_param(startx); task_draw->add_param(endx); task_draw->add_param(rangey); @@ -407,11 +436,9 @@ } } - task_next->wait_for(draw_DUMMY); - task_next->wait_for(move_DUMMY); - draw_DUMMY->spawn(); - task_next->set_post(post2exchange_sgroot, NULL); // set_post(function(this->run_loop()), NULL) - task_next->spawn(); + + task_next->set_post(post2runLoop, (void*)this); // set_post(function(this->run_loop()), NULL) + task_next->spawn(); // TASK_DRAW_SPAN が全て終わったら DUMMY_TASK が Viewer::run_loop() を呼ぶ frames++; diff -r d1f1e27d0a12 -r a4f690f44842 TaskManager/Test/test_render/viewer.h --- a/TaskManager/Test/test_render/viewer.h Fri Sep 18 18:28:56 2009 +0900 +++ b/TaskManager/Test/test_render/viewer.h Sun Sep 20 18:55:26 2009 +0900 @@ -4,6 +4,7 @@ #include #include "viewer_types.h" +#include "TaskManager.h" class Viewer { public: @@ -11,6 +12,8 @@ virtual ~Viewer(void) {} + TaskManager *manager; + /* screen info */ int width; int height; @@ -22,7 +25,7 @@ Uint32 video_flags; Uint32 *pixels; - virtual void video_init(void) = 0; + virtual void video_init(TaskManager *manager) = 0; void init(); int get_ticks(); @@ -32,17 +35,18 @@ virtual void swap_buffers(); virtual void clean_pixels() {} - virtual void run_init(const char *xml, int sg_number); - virtual void run_loop(void); - virtual void run_draw(void); - virtual void run_finish(void); - virtual void run_move(); + virtual void run_init(TaskManager *manager, const char *xml, int sg_number); + virtual void run_loop(HTaskPtr task_next); + virtual void run_draw(HTaskPtr task_next); + virtual void run_finish(); + virtual void run_move(HTaskPtr task_next); virtual void run_collision(); - virtual void rendering(); - virtual void exchange_sgroot(); + virtual void rendering(HTaskPtr task_next); + //virtual void exchange_sgroot(TaskManager *manager); }; #define default_sdl_flag SDL_INIT_TIMER | SDL_INIT_JOYSTICK + #endif diff -r d1f1e27d0a12 -r a4f690f44842 TaskManager/Test/test_render/viewerFB.cpp --- a/TaskManager/Test/test_render/viewerFB.cpp Fri Sep 18 18:28:56 2009 +0900 +++ b/TaskManager/Test/test_render/viewerFB.cpp Sun Sep 20 18:55:26 2009 +0900 @@ -2,10 +2,10 @@ #include "Func.h" #include "fb.h" -extern void post2runLoop(void *); +//extern void post2runLoop(void *); void -ViewerFB::video_init(void) +ViewerFB::video_init(TaskManager *manager) { Uint32 sdl_flag = default_sdl_flag | SDL_INIT_VIDEO; diff -r d1f1e27d0a12 -r a4f690f44842 TaskManager/Test/test_render/viewerFB.h --- a/TaskManager/Test/test_render/viewerFB.h Fri Sep 18 18:28:56 2009 +0900 +++ b/TaskManager/Test/test_render/viewerFB.h Sun Sep 20 18:55:26 2009 +0900 @@ -5,11 +5,11 @@ class ViewerFB : public Viewer { public: - ViewerFB(int bpp, int width, int height, int spenum) - :Viewer(bpp, width, height, spenum) {} +ViewerFB(TaskManager *manager, int bpp, int width, int height, int spenum) + :Viewer(bpp, width, height, spenum) {} /* override function */ - void video_init(void); + void video_init(TaskManager *manager); void clean_pixels(void); }; diff -r d1f1e27d0a12 -r a4f690f44842 TaskManager/Test/test_render/viewerSDL.cpp --- a/TaskManager/Test/test_render/viewerSDL.cpp Fri Sep 18 18:28:56 2009 +0900 +++ b/TaskManager/Test/test_render/viewerSDL.cpp Sun Sep 20 18:55:26 2009 +0900 @@ -7,7 +7,7 @@ extern void -ViewerSDL::video_init() +ViewerSDL::video_init(TaskManager *manager) { Uint32 sdl_flag = default_sdl_flag | SDL_INIT_VIDEO; Uint32 *p; @@ -42,16 +42,16 @@ } void -ViewerSDL::run_loop(void) +ViewerSDL::run_loop(HTaskPtr task_next) { SDL_BlitSurface(bitmap, NULL, screen, NULL); SDL_UpdateRect(screen, 0, 0, 0, 0); - Viewer::run_loop(); + Viewer::run_loop(task_next); } void -ViewerSDL::run_finish(void) +ViewerSDL::run_finish() { free(bitmap->pixels); SDL_FreeSurface(bitmap); diff -r d1f1e27d0a12 -r a4f690f44842 TaskManager/Test/test_render/viewerSDL.h --- a/TaskManager/Test/test_render/viewerSDL.h Fri Sep 18 18:28:56 2009 +0900 +++ b/TaskManager/Test/test_render/viewerSDL.h Sun Sep 20 18:55:26 2009 +0900 @@ -5,17 +5,17 @@ class ViewerSDL : public Viewer { public: - ViewerSDL(int bpp, int width, int height, int spenum) - :Viewer(bpp, width, height, spenum) {} +ViewerSDL(TaskManager *manager, int bpp, int width, int height, int spenum) + :Viewer(bpp, width, height, spenum) {} SDL_Surface *screen; SDL_Surface *bitmap; /* override function */ - void video_init(void); + void video_init(TaskManager *manager); void clean_pixels(); - void run_loop(void); - void run_finish(void); + void run_loop(HTaskPtr task_next); + void run_finish(); }; #endif diff -r d1f1e27d0a12 -r a4f690f44842 TaskManager/kernel/main.cc --- a/TaskManager/kernel/main.cc Fri Sep 18 18:28:56 2009 +0900 +++ b/TaskManager/kernel/main.cc Sun Sep 20 18:55:26 2009 +0900 @@ -8,13 +8,13 @@ */ /* User main function */ -extern int TMmain(int argc, char *argv[]); +extern int TMmain(TaskManager* manager, int argc, char *argv[]); /* Default TMend function */ static void -defaultTMend(void) {} +defaultTMend(TaskManager *manager) {} -TaskManager *manager; +//TaskManager *manager; /*! const char *usr_help_str を User 側で指定する必要がある @@ -45,18 +45,18 @@ } } - manager = new TaskManager(machineNum); + TaskManager *manager = new TaskManager(machineNum); manager->init(); manager->set_TMend(defaultTMend); - if (TMmain(argc, argv) < 0) { + if (TMmain(manager, argc, argv) < 0) { goto FINISH; } manager->run(); - (manager->tm_end)(); + (manager->tm_end)(manager); FINISH: delete manager; diff -r d1f1e27d0a12 -r a4f690f44842 TaskManager/kernel/ppe/HTask.cc --- a/TaskManager/kernel/ppe/HTask.cc Fri Sep 18 18:28:56 2009 +0900 +++ b/TaskManager/kernel/ppe/HTask.cc Sun Sep 20 18:55:26 2009 +0900 @@ -42,7 +42,7 @@ } void -HTask::set_post(void (*func)(void *), void *arg) +HTask::set_post(void (*func)(void *arg), void *arg) { this->post_func = func; this->post_arg = arg; diff -r d1f1e27d0a12 -r a4f690f44842 TaskManager/kernel/ppe/HTask.h --- a/TaskManager/kernel/ppe/HTask.h Fri Sep 18 18:28:56 2009 +0900 +++ b/TaskManager/kernel/ppe/HTask.h Sun Sep 20 18:55:26 2009 +0900 @@ -25,7 +25,7 @@ TaskQueuePtr wait_me; // List of task waiting for me TaskQueuePtr wait_i; // List of task for which I am waiting - void (*post_func)(void *); + void (*post_func)(void *arg); void *post_arg; CPU_TYPE cpu_type; HTask *next; @@ -33,7 +33,7 @@ void spawn(void); void wait_for(HTask *); - void set_cpu(CPU_TYPE type); + void set_cpu(CPU_TYPE type); void set_post(void (*func)(void *), void *arg); }; diff -r d1f1e27d0a12 -r a4f690f44842 TaskManager/kernel/ppe/TaskManager.cc --- a/TaskManager/kernel/ppe/TaskManager.cc Fri Sep 18 18:28:56 2009 +0900 +++ b/TaskManager/kernel/ppe/TaskManager.cc Sun Sep 20 18:55:26 2009 +0900 @@ -5,7 +5,7 @@ gen_random = new Random; } -TaskManager::~TaskManager(void) +TaskManager::~TaskManager() { delete m_impl; delete gen_random; @@ -30,7 +30,7 @@ extern TaskManagerImpl* create_impl(int); void -TaskManager::init(void) +TaskManager::init() { m_impl = create_impl(machineNum); m_impl->init(); @@ -38,7 +38,7 @@ } void -TaskManager::finish(void) +TaskManager::finish() { delete m_impl; } @@ -58,13 +58,13 @@ * TaskManaer 終了時に実行される関数の設定 */ void -TaskManager::set_TMend(void (*endf)(void)) +TaskManager::set_TMend(void (*endf)(TaskManager *manager)) { tm_end = endf; } void -TaskManager::run(void) +TaskManager::run() { m_impl->run(); } @@ -75,13 +75,13 @@ } int -TaskManager::get_cpuNum(void) +TaskManager::get_cpuNum() { return machineNum; } int -TaskManager::get_random(void) +TaskManager::get_random() { return gen_random->getData(); } diff -r d1f1e27d0a12 -r a4f690f44842 TaskManager/kernel/ppe/TaskManager.h --- a/TaskManager/kernel/ppe/TaskManager.h Fri Sep 18 18:28:56 2009 +0900 +++ b/TaskManager/kernel/ppe/TaskManager.h Sun Sep 20 18:55:26 2009 +0900 @@ -10,25 +10,25 @@ public: /* constructor */ TaskManager(int num = 1); // The number of threads - ~TaskManager(void); + ~TaskManager(); /* variables */ TaskManagerImpl *m_impl; - void (*tm_end)(void); + void (*tm_end)(TaskManager *manager); RandomPtr gen_random; /* user function */ HTaskPtr create_task(int cmd); - void run(void); + void run(); void *allocate(int size); - void set_TMend(void (*endf)(void)); - int get_cpuNum(void); - int get_random(void); + void set_TMend(void (*endf)(TaskManager *manager)); + int get_cpuNum(); + int get_random(); Scheduler *get_scheduler(); /* functions */ - void init(void); - void finish(void); + void init(); + void finish(); private: int machineNum; @@ -36,5 +36,5 @@ #endif -extern TaskManager *manager; +//extern TaskManager *manager;