Mercurial > hg > Members > kono > Cerium
comparison TaskManager/Test/simple_render/main.cpp @ 105:3e331f7576a1
*** empty log message ***
author | gongo |
---|---|
date | Mon, 03 Mar 2008 18:55:28 +0900 |
parents | 588ab5f0e659 |
children | 5c194c71eca8 |
comparison
equal
deleted
inserted
replaced
104:226c743d07c6 | 105:3e331f7576a1 |
---|---|
1 #include <iostream> | 1 #include <iostream> |
2 #include "viewer.h" | 2 #include "viewer.h" |
3 #include "Func.h" | |
3 #include "polygon.h" | 4 #include "polygon.h" |
4 #include "demonstration.h" | 5 #include "demonstration.h" |
5 #include "pad.h" | 6 #include "pad.h" |
6 #include "TaskManager.h" | 7 #include "TaskManager.h" |
7 using namespace std; | 8 using namespace std; |
8 | 9 |
9 #include "error.h" | 10 #include "error.h" |
10 | 11 |
11 int init(void*, void*); | 12 int init(void*, void*); |
12 int sdl_init(void*, void*); | 13 int sdl_init(void*, void*); |
13 int zrow_init(void*, void*); | 14 int run_init(void*, void*); |
14 int run(void*, void*); | |
15 int finish(void*, void*); | 15 int finish(void*, void*); |
16 | 16 |
17 extern void task_initialize(); | 17 extern void task_initialize(); |
18 | 18 |
19 TaskManager *manager; | 19 TaskManager *manager; |
27 | 27 |
28 struct init_arg *initArg; | 28 struct init_arg *initArg; |
29 | 29 |
30 int init(void *r, void *w) | 30 int init(void *r, void *w) |
31 { | 31 { |
32 int fd_sdl_init, fd_zrow_init, fd_run; | 32 HTaskPtr task_sdl_init, task_run; |
33 HTaskPtr task_sdl_init, task_zrow_init, task_run; | |
34 | 33 |
35 __debug("[%s]\n", __FUNCTION__); | 34 __debug("[%s]\n", __FUNCTION__); |
36 | 35 |
37 screen = new Viewer(initArg->bpp, initArg->w, initArg->h); | 36 screen = new Viewer(initArg->bpp, initArg->w, initArg->h); |
37 | |
38 // obsolute API | |
39 // シンボル名登録してほげほげと | |
40 // ユーザが自分で ID つけるのどっちがいいかな。 | |
41 // 現段階では、ppe と spe の func_list を共有できないので | |
42 // シンボル名よりは ID の方が楽。 | |
43 //fd_sdl_init = manager->open("sdl_init"); | |
44 //fd_zrow_init = manager->open("zRow_init"); | |
45 //fd_run = manager->open("run"); | |
46 //task_sdl_init = manager->create_task(fd_sdl_init, 0, 0, 0, NULL); | |
47 //task_zrow_init = manager->create_task(fd_zrow_init, 0, 0, 0, NULL); | |
48 //task_run = manager->create_task(fd_run, 0, 0, 0, NULL); | |
38 | 49 |
39 fd_sdl_init = manager->open("sdl_init"); | 50 task_sdl_init = manager->create_task(SDL_INIT, 0, 0, 0, NULL); |
40 fd_zrow_init = manager->open("zRow_init"); | 51 task_run = manager->create_task(VIEWER_RUN_INIT, 0, 0, 0, NULL); |
41 fd_run = manager->open("run"); | |
42 | |
43 task_sdl_init = manager->create_task(fd_sdl_init, 0, 0, 0, NULL); | |
44 task_zrow_init = manager->create_task(fd_zrow_init, 0, 0, 0, NULL); | |
45 task_run = manager->create_task(fd_run, 0, 0, 0, NULL); | |
46 | |
47 //manager->set_task_depend(task_sdl_init, task_run); | |
48 //manager->set_task_depend(task_zrow_init, task_run); | |
49 | |
50 task_run->set_depend(task_sdl_init); | 52 task_run->set_depend(task_sdl_init); |
51 task_run->set_depend(task_zrow_init); | |
52 | 53 |
53 task_sdl_init->spawn(); | 54 task_sdl_init->spawn(); |
54 task_zrow_init->spawn(); | |
55 task_run->spawn(); | 55 task_run->spawn(); |
56 | 56 |
57 free(initArg); | 57 free(initArg); |
58 return 0; | 58 return 0; |
59 } | 59 } |
66 __debug("[%s]\n", __FUNCTION__); | 66 __debug("[%s]\n", __FUNCTION__); |
67 screen->sdl_init(); | 67 screen->sdl_init(); |
68 return 0; | 68 return 0; |
69 } | 69 } |
70 | 70 |
71 int zRow_init(void *r, void *w) | 71 int run_init(void *r, void *w) |
72 { | |
73 __debug("[%s]\n", __FUNCTION__); | |
74 screen->zRow_init(); | |
75 return 0; | |
76 } | |
77 | |
78 int run(void *r, void *w) | |
79 { | 72 { |
80 __debug("[%s]\n", __FUNCTION__); | 73 __debug("[%s]\n", __FUNCTION__); |
81 screen->run_init(); | 74 screen->run_init(); |
82 return 0; | 75 return 0; |
83 } | 76 } |
121 | 114 |
122 task_initialize(); | 115 task_initialize(); |
123 | 116 |
124 // 本当は、dlsym みたいなものを使いたいんだけど | 117 // 本当は、dlsym みたいなものを使いたいんだけど |
125 // 静的なやつはできないん? | 118 // 静的なやつはできないん? |
119 #if 0 | |
126 manager->set_symbol("init", (void*)init); | 120 manager->set_symbol("init", (void*)init); |
127 manager->set_symbol("sdl_init", (void*)sdl_init); | 121 manager->set_symbol("sdl_init", (void*)sdl_init); |
128 manager->set_symbol("zRow_init", (void*)zRow_init); | 122 manager->set_symbol("zRow_init", (void*)zRow_init); |
129 manager->set_symbol("run", (void*)run); | 123 manager->set_symbol("run", (void*)run); |
130 manager->set_symbol("finish", (void*)finish); | 124 manager->set_symbol("finish", (void*)finish); |
131 manager->set_symbol("ViewerRunLoop", (void*)run_loop); | 125 manager->set_symbol("ViewerRunLoop", (void*)run_loop); |
132 manager->set_symbol("ViewerRunDraw", (void*)run_draw); | 126 manager->set_symbol("ViewerRunDraw", (void*)run_draw); |
133 manager->set_symbol("ViewerRunFinish", (void*)run_finish); | 127 manager->set_symbol("ViewerRunFinish", (void*)run_finish); |
128 #else | |
129 manager->set_func(INIT, init); | |
130 manager->set_func(SDL_INIT, sdl_init); | |
131 manager->set_func(FINISH, finish); | |
132 manager->set_func(VIEWER_RUN_INIT, run_init); | |
133 manager->set_func(VIEWER_RUN_LOOP, run_loop); | |
134 manager->set_func(VIEWER_RUN_DRAW, run_draw); | |
135 manager->set_func(VIEWER_RUN_FINISH, run_finish); | |
136 #endif | |
134 | 137 |
135 int bpp = 0; | 138 int bpp = 0; |
136 int width = 640; | 139 int width = 640; |
137 int height = 480; | 140 int height = 480; |
138 | 141 |
154 | 157 |
155 // 一番最初に行われる init 専用の task_run があってもいいけど。。 | 158 // 一番最初に行われる init 専用の task_run があってもいいけど。。 |
156 // その場合は引数とか固定か。まあ引数は argc, argv を持つ | 159 // その場合は引数とか固定か。まあ引数は argc, argv を持つ |
157 // 構造体で固定しても問題はない・・・か? | 160 // 構造体で固定しても問題はない・・・か? |
158 HTaskPtr task_init; | 161 HTaskPtr task_init; |
159 int fd_init; | |
160 initArg = new struct init_arg; | 162 initArg = new struct init_arg; |
161 initArg->bpp = bpp; | 163 initArg->bpp = bpp; |
162 initArg->w = width; | 164 initArg->w = width; |
163 initArg->h = height; | 165 initArg->h = height; |
164 | 166 |
165 fd_init = manager->open("init"); | 167 //fd_init = manager->open("init"); |
166 task_init = manager->create_task(fd_init, 0, 0, 0, NULL); | 168 //task_init = manager->create_task(fd_init, 0, 0, 0, NULL); |
167 //manager->spawn_task(task_init); | 169 task_init = manager->create_task(INIT, 0, 0, 0, NULL); |
168 task_init->spawn(); | 170 task_init->spawn(); |
169 | 171 |
170 manager->run(); | 172 manager->run(); |
171 | 173 |
172 finish(NULL, NULL); | 174 finish(NULL, NULL); |