Mercurial > hg > Game > Cerium
comparison TaskManager/Test/simple_render/main.cpp @ 109:028ffc9c0375 draft
Cerium cvs version
author | gongo@gendarme.local |
---|---|
date | Wed, 12 Nov 2008 17:39:33 +0900 |
parents | 3e331f7576a1 |
children | 768452fab95e |
comparison
equal
deleted
inserted
replaced
108:6f3b3dd3c095 | 109:028ffc9c0375 |
---|---|
7 #include "TaskManager.h" | 7 #include "TaskManager.h" |
8 using namespace std; | 8 using namespace std; |
9 | 9 |
10 #include "error.h" | 10 #include "error.h" |
11 | 11 |
12 int init(void*, void*); | 12 // あとで直す |
13 // 引数からできるように | |
14 #define SPENUM 6 | |
15 | |
16 /* prototype */ | |
17 void init(int argc, char *argc[]); | |
13 int sdl_init(void*, void*); | 18 int sdl_init(void*, void*); |
14 int run_init(void*, void*); | 19 int run_init(void*, void*); |
15 int finish(void*, void*); | 20 int finish(void*, void*); |
16 | 21 |
17 extern void task_initialize(); | 22 extern void task_initialize(); |
25 int h; | 30 int h; |
26 }; | 31 }; |
27 | 32 |
28 struct init_arg *initArg; | 33 struct init_arg *initArg; |
29 | 34 |
30 int init(void *r, void *w) | |
31 { | |
32 HTaskPtr task_sdl_init, task_run; | |
33 | |
34 __debug("[%s]\n", __FUNCTION__); | |
35 | |
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); | |
49 | |
50 task_sdl_init = manager->create_task(SDL_INIT, 0, 0, 0, NULL); | |
51 task_run = manager->create_task(VIEWER_RUN_INIT, 0, 0, 0, NULL); | |
52 task_run->set_depend(task_sdl_init); | |
53 | |
54 task_sdl_init->spawn(); | |
55 task_run->spawn(); | |
56 | |
57 free(initArg); | |
58 return 0; | |
59 } | |
60 | |
61 | 35 |
62 // クラス関数は単純にポインタで扱えないので | 36 // クラス関数は単純にポインタで扱えないので |
63 // 現状は間接的に呼ぶことに | 37 // 現状は間接的に呼ぶことに |
64 int sdl_init(void *r, void *w) | |
65 { | |
66 __debug("[%s]\n", __FUNCTION__); | |
67 screen->sdl_init(); | |
68 return 0; | |
69 } | |
70 | |
71 int run_init(void *r, void *w) | |
72 { | |
73 __debug("[%s]\n", __FUNCTION__); | |
74 screen->run_init(); | |
75 return 0; | |
76 } | |
77 | |
78 int run_loop(void *r, void *w) | 38 int run_loop(void *r, void *w) |
79 { | 39 { |
80 __debug("[%s] start\n", __FUNCTION__); | 40 __debug("[%s] start\n", __FUNCTION__); |
81 screen->run_loop(); | 41 screen->run_loop(); |
82 __debug("[%s] end\n", __FUNCTION__); | 42 __debug("[%s] end\n", __FUNCTION__); |
107 } | 67 } |
108 | 68 |
109 int | 69 int |
110 main(int argc, char *argv[]) | 70 main(int argc, char *argv[]) |
111 { | 71 { |
112 manager = new TaskManager(1); | 72 manager = new TaskManager(SPENUM); |
113 manager->init(); | 73 manager->init(); |
114 | 74 |
115 task_initialize(); | 75 task_initialize(); |
116 | 76 |
117 // 本当は、dlsym みたいなものを使いたいんだけど | |
118 // 静的なやつはできないん? | |
119 #if 0 | |
120 manager->set_symbol("init", (void*)init); | |
121 manager->set_symbol("sdl_init", (void*)sdl_init); | |
122 manager->set_symbol("zRow_init", (void*)zRow_init); | |
123 manager->set_symbol("run", (void*)run); | |
124 manager->set_symbol("finish", (void*)finish); | |
125 manager->set_symbol("ViewerRunLoop", (void*)run_loop); | |
126 manager->set_symbol("ViewerRunDraw", (void*)run_draw); | |
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); | 77 manager->set_func(FINISH, finish); |
132 manager->set_func(VIEWER_RUN_INIT, run_init); | |
133 manager->set_func(VIEWER_RUN_LOOP, run_loop); | 78 manager->set_func(VIEWER_RUN_LOOP, run_loop); |
134 manager->set_func(VIEWER_RUN_DRAW, run_draw); | 79 manager->set_func(VIEWER_RUN_DRAW, run_draw); |
135 manager->set_func(VIEWER_RUN_FINISH, run_finish); | 80 manager->set_func(VIEWER_RUN_FINISH, run_finish); |
136 #endif | |
137 | 81 |
138 int bpp = 0; | 82 init(argc, argv); |
139 int width = 640; | 83 |
140 int height = 480; | |
141 | |
142 for(int i = 1; argv[i]; ++i) | |
143 { | |
144 if (strcmp(argv[i], "-bpp") == 0) | |
145 { | |
146 bpp = atoi(argv[++i]); | |
147 } | |
148 if (strcmp(argv[i], "-width") == 0) | |
149 { | |
150 width = atoi(argv[++i]); | |
151 } | |
152 if (strcmp(argv[i], "-height") == 0) | |
153 { | |
154 height = atoi(argv[++i]); | |
155 } | |
156 } | |
157 | |
158 // 一番最初に行われる init 専用の task_run があってもいいけど。。 | |
159 // その場合は引数とか固定か。まあ引数は argc, argv を持つ | |
160 // 構造体で固定しても問題はない・・・か? | |
161 HTaskPtr task_init; | |
162 initArg = new struct init_arg; | |
163 initArg->bpp = bpp; | |
164 initArg->w = width; | |
165 initArg->h = height; | |
166 | |
167 //fd_init = manager->open("init"); | |
168 //task_init = manager->create_task(fd_init, 0, 0, 0, NULL); | |
169 task_init = manager->create_task(INIT, 0, 0, 0, NULL); | |
170 task_init->spawn(); | |
171 | |
172 manager->run(); | 84 manager->run(); |
173 | 85 |
174 finish(NULL, NULL); | 86 finish(NULL, NULL); |
175 return 0; | 87 return 0; |
176 } | 88 } |
89 | |
90 void | |
91 init(int argc, char *argv[]) | |
92 { | |
93 int bpp = 0; | |
94 int width = 640; | |
95 int height = 480; | |
96 char *xml = "cube.xml"; | |
97 | |
98 for(int i = 1; argv[i]; ++i) | |
99 { | |
100 if (strcmp(argv[i], "-bpp") == 0) { | |
101 bpp = atoi(argv[++i]); | |
102 } | |
103 if (strcmp(argv[i], "-width") == 0) { | |
104 width = atoi(argv[++i]); | |
105 } | |
106 if (strcmp(argv[i], "-height") == 0) { | |
107 height = atoi(argv[++i]); | |
108 } | |
109 if (strcmp(argv[i], "-xml") == 0) { | |
110 xml = argv[++i]; | |
111 } | |
112 } | |
113 | |
114 //screen = new Viewer(bpp, width, height); | |
115 screen = new Viewer(bpp, width, height, SPENUM); | |
116 | |
117 screen->sdl_init(); | |
118 screen->run_init(xml); | |
119 } | |
120 |