annotate TaskManager/Test/simple_render/main.cpp @ 94:588ab5f0e659

*** empty log message ***
author gongo
date Thu, 28 Feb 2008 17:41:08 +0900
parents 9b96b190cb73
children 3e331f7576a1
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
26
3f68b2ef4fb0 *** empty log message ***
gongo
parents:
diff changeset
1 #include <iostream>
3f68b2ef4fb0 *** empty log message ***
gongo
parents:
diff changeset
2 #include "viewer.h"
3f68b2ef4fb0 *** empty log message ***
gongo
parents:
diff changeset
3 #include "polygon.h"
3f68b2ef4fb0 *** empty log message ***
gongo
parents:
diff changeset
4 #include "demonstration.h"
3f68b2ef4fb0 *** empty log message ***
gongo
parents:
diff changeset
5 #include "pad.h"
3f68b2ef4fb0 *** empty log message ***
gongo
parents:
diff changeset
6 #include "TaskManager.h"
3f68b2ef4fb0 *** empty log message ***
gongo
parents:
diff changeset
7 using namespace std;
3f68b2ef4fb0 *** empty log message ***
gongo
parents:
diff changeset
8
49
64ef030deb22 *** empty log message ***
gongo
parents: 48
diff changeset
9 #include "error.h"
64ef030deb22 *** empty log message ***
gongo
parents: 48
diff changeset
10
26
3f68b2ef4fb0 *** empty log message ***
gongo
parents:
diff changeset
11 int init(void*, void*);
3f68b2ef4fb0 *** empty log message ***
gongo
parents:
diff changeset
12 int sdl_init(void*, void*);
3f68b2ef4fb0 *** empty log message ***
gongo
parents:
diff changeset
13 int zrow_init(void*, void*);
3f68b2ef4fb0 *** empty log message ***
gongo
parents:
diff changeset
14 int run(void*, void*);
3f68b2ef4fb0 *** empty log message ***
gongo
parents:
diff changeset
15 int finish(void*, void*);
3f68b2ef4fb0 *** empty log message ***
gongo
parents:
diff changeset
16
48
70a0ac46133e *** empty log message ***
gongo
parents: 42
diff changeset
17 extern void task_initialize();
42
aa11038dbdc1 *** empty log message ***
gongo
parents: 35
diff changeset
18
26
3f68b2ef4fb0 *** empty log message ***
gongo
parents:
diff changeset
19 TaskManager *manager;
3f68b2ef4fb0 *** empty log message ***
gongo
parents:
diff changeset
20 Viewer *screen;
3f68b2ef4fb0 *** empty log message ***
gongo
parents:
diff changeset
21
3f68b2ef4fb0 *** empty log message ***
gongo
parents:
diff changeset
22 struct init_arg {
3f68b2ef4fb0 *** empty log message ***
gongo
parents:
diff changeset
23 int bpp;
3f68b2ef4fb0 *** empty log message ***
gongo
parents:
diff changeset
24 int w;
3f68b2ef4fb0 *** empty log message ***
gongo
parents:
diff changeset
25 int h;
3f68b2ef4fb0 *** empty log message ***
gongo
parents:
diff changeset
26 };
3f68b2ef4fb0 *** empty log message ***
gongo
parents:
diff changeset
27
49
64ef030deb22 *** empty log message ***
gongo
parents: 48
diff changeset
28 struct init_arg *initArg;
64ef030deb22 *** empty log message ***
gongo
parents: 48
diff changeset
29
64ef030deb22 *** empty log message ***
gongo
parents: 48
diff changeset
30 int init(void *r, void *w)
26
3f68b2ef4fb0 *** empty log message ***
gongo
parents:
diff changeset
31 {
48
70a0ac46133e *** empty log message ***
gongo
parents: 42
diff changeset
32 int fd_sdl_init, fd_zrow_init, fd_run;
70a0ac46133e *** empty log message ***
gongo
parents: 42
diff changeset
33 HTaskPtr task_sdl_init, task_zrow_init, task_run;
26
3f68b2ef4fb0 *** empty log message ***
gongo
parents:
diff changeset
34
49
64ef030deb22 *** empty log message ***
gongo
parents: 48
diff changeset
35 __debug("[%s]\n", __FUNCTION__);
26
3f68b2ef4fb0 *** empty log message ***
gongo
parents:
diff changeset
36
49
64ef030deb22 *** empty log message ***
gongo
parents: 48
diff changeset
37 screen = new Viewer(initArg->bpp, initArg->w, initArg->h);
26
3f68b2ef4fb0 *** empty log message ***
gongo
parents:
diff changeset
38
3f68b2ef4fb0 *** empty log message ***
gongo
parents:
diff changeset
39 fd_sdl_init = manager->open("sdl_init");
3f68b2ef4fb0 *** empty log message ***
gongo
parents:
diff changeset
40 fd_zrow_init = manager->open("zRow_init");
3f68b2ef4fb0 *** empty log message ***
gongo
parents:
diff changeset
41 fd_run = manager->open("run");
3f68b2ef4fb0 *** empty log message ***
gongo
parents:
diff changeset
42
3f68b2ef4fb0 *** empty log message ***
gongo
parents:
diff changeset
43 task_sdl_init = manager->create_task(fd_sdl_init, 0, 0, 0, NULL);
3f68b2ef4fb0 *** empty log message ***
gongo
parents:
diff changeset
44 task_zrow_init = manager->create_task(fd_zrow_init, 0, 0, 0, NULL);
3f68b2ef4fb0 *** empty log message ***
gongo
parents:
diff changeset
45 task_run = manager->create_task(fd_run, 0, 0, 0, NULL);
3f68b2ef4fb0 *** empty log message ***
gongo
parents:
diff changeset
46
85
9b96b190cb73 *** empty log message ***
gongo
parents: 79
diff changeset
47 //manager->set_task_depend(task_sdl_init, task_run);
9b96b190cb73 *** empty log message ***
gongo
parents: 79
diff changeset
48 //manager->set_task_depend(task_zrow_init, task_run);
9b96b190cb73 *** empty log message ***
gongo
parents: 79
diff changeset
49
63
54355e641172 *** empty log message ***
gongo
parents: 50
diff changeset
50 task_run->set_depend(task_sdl_init);
54355e641172 *** empty log message ***
gongo
parents: 50
diff changeset
51 task_run->set_depend(task_zrow_init);
26
3f68b2ef4fb0 *** empty log message ***
gongo
parents:
diff changeset
52
63
54355e641172 *** empty log message ***
gongo
parents: 50
diff changeset
53 task_sdl_init->spawn();
54355e641172 *** empty log message ***
gongo
parents: 50
diff changeset
54 task_zrow_init->spawn();
54355e641172 *** empty log message ***
gongo
parents: 50
diff changeset
55 task_run->spawn();
26
3f68b2ef4fb0 *** empty log message ***
gongo
parents:
diff changeset
56
49
64ef030deb22 *** empty log message ***
gongo
parents: 48
diff changeset
57 free(initArg);
26
3f68b2ef4fb0 *** empty log message ***
gongo
parents:
diff changeset
58 return 0;
3f68b2ef4fb0 *** empty log message ***
gongo
parents:
diff changeset
59 }
3f68b2ef4fb0 *** empty log message ***
gongo
parents:
diff changeset
60
3f68b2ef4fb0 *** empty log message ***
gongo
parents:
diff changeset
61
3f68b2ef4fb0 *** empty log message ***
gongo
parents:
diff changeset
62 // クラス関数は単純にポインタで扱えないので
3f68b2ef4fb0 *** empty log message ***
gongo
parents:
diff changeset
63 // 現状は間接的に呼ぶことに
48
70a0ac46133e *** empty log message ***
gongo
parents: 42
diff changeset
64 int sdl_init(void *r, void *w)
26
3f68b2ef4fb0 *** empty log message ***
gongo
parents:
diff changeset
65 {
49
64ef030deb22 *** empty log message ***
gongo
parents: 48
diff changeset
66 __debug("[%s]\n", __FUNCTION__);
26
3f68b2ef4fb0 *** empty log message ***
gongo
parents:
diff changeset
67 screen->sdl_init();
3f68b2ef4fb0 *** empty log message ***
gongo
parents:
diff changeset
68 return 0;
3f68b2ef4fb0 *** empty log message ***
gongo
parents:
diff changeset
69 }
3f68b2ef4fb0 *** empty log message ***
gongo
parents:
diff changeset
70
48
70a0ac46133e *** empty log message ***
gongo
parents: 42
diff changeset
71 int zRow_init(void *r, void *w)
26
3f68b2ef4fb0 *** empty log message ***
gongo
parents:
diff changeset
72 {
49
64ef030deb22 *** empty log message ***
gongo
parents: 48
diff changeset
73 __debug("[%s]\n", __FUNCTION__);
26
3f68b2ef4fb0 *** empty log message ***
gongo
parents:
diff changeset
74 screen->zRow_init();
3f68b2ef4fb0 *** empty log message ***
gongo
parents:
diff changeset
75 return 0;
3f68b2ef4fb0 *** empty log message ***
gongo
parents:
diff changeset
76 }
3f68b2ef4fb0 *** empty log message ***
gongo
parents:
diff changeset
77
48
70a0ac46133e *** empty log message ***
gongo
parents: 42
diff changeset
78 int run(void *r, void *w)
26
3f68b2ef4fb0 *** empty log message ***
gongo
parents:
diff changeset
79 {
49
64ef030deb22 *** empty log message ***
gongo
parents: 48
diff changeset
80 __debug("[%s]\n", __FUNCTION__);
48
70a0ac46133e *** empty log message ***
gongo
parents: 42
diff changeset
81 screen->run_init();
70a0ac46133e *** empty log message ***
gongo
parents: 42
diff changeset
82 return 0;
70a0ac46133e *** empty log message ***
gongo
parents: 42
diff changeset
83 }
70a0ac46133e *** empty log message ***
gongo
parents: 42
diff changeset
84
70a0ac46133e *** empty log message ***
gongo
parents: 42
diff changeset
85 int run_loop(void *r, void *w)
70a0ac46133e *** empty log message ***
gongo
parents: 42
diff changeset
86 {
94
588ab5f0e659 *** empty log message ***
gongo
parents: 85
diff changeset
87 __debug("[%s] start\n", __FUNCTION__);
48
70a0ac46133e *** empty log message ***
gongo
parents: 42
diff changeset
88 screen->run_loop();
94
588ab5f0e659 *** empty log message ***
gongo
parents: 85
diff changeset
89 __debug("[%s] end\n", __FUNCTION__);
26
3f68b2ef4fb0 *** empty log message ***
gongo
parents:
diff changeset
90 return 0;
3f68b2ef4fb0 *** empty log message ***
gongo
parents:
diff changeset
91 }
3f68b2ef4fb0 *** empty log message ***
gongo
parents:
diff changeset
92
48
70a0ac46133e *** empty log message ***
gongo
parents: 42
diff changeset
93 int run_draw(void *r, void *w)
70a0ac46133e *** empty log message ***
gongo
parents: 42
diff changeset
94 {
94
588ab5f0e659 *** empty log message ***
gongo
parents: 85
diff changeset
95 __debug("[%s] start\n", __FUNCTION__);
48
70a0ac46133e *** empty log message ***
gongo
parents: 42
diff changeset
96 screen->run_draw();
94
588ab5f0e659 *** empty log message ***
gongo
parents: 85
diff changeset
97 __debug("[%s] end\n", __FUNCTION__);
48
70a0ac46133e *** empty log message ***
gongo
parents: 42
diff changeset
98 return 0;
70a0ac46133e *** empty log message ***
gongo
parents: 42
diff changeset
99 }
70a0ac46133e *** empty log message ***
gongo
parents: 42
diff changeset
100
70a0ac46133e *** empty log message ***
gongo
parents: 42
diff changeset
101 int run_finish(void *r, void *w)
70a0ac46133e *** empty log message ***
gongo
parents: 42
diff changeset
102 {
49
64ef030deb22 *** empty log message ***
gongo
parents: 48
diff changeset
103 __debug("[%s]\n", __FUNCTION__);
85
9b96b190cb73 *** empty log message ***
gongo
parents: 79
diff changeset
104 screen->run_finish();
48
70a0ac46133e *** empty log message ***
gongo
parents: 42
diff changeset
105 return 0;
70a0ac46133e *** empty log message ***
gongo
parents: 42
diff changeset
106 }
70a0ac46133e *** empty log message ***
gongo
parents: 42
diff changeset
107
26
3f68b2ef4fb0 *** empty log message ***
gongo
parents:
diff changeset
108 int finish(void *w, void *r)
3f68b2ef4fb0 *** empty log message ***
gongo
parents:
diff changeset
109 {
49
64ef030deb22 *** empty log message ***
gongo
parents: 48
diff changeset
110 __debug("[%s]\n", __FUNCTION__);
26
3f68b2ef4fb0 *** empty log message ***
gongo
parents:
diff changeset
111 delete screen;
50
7927e00fb8e2 *** empty log message ***
gongo
parents: 49
diff changeset
112 delete manager;
26
3f68b2ef4fb0 *** empty log message ***
gongo
parents:
diff changeset
113 return 0;
3f68b2ef4fb0 *** empty log message ***
gongo
parents:
diff changeset
114 }
3f68b2ef4fb0 *** empty log message ***
gongo
parents:
diff changeset
115
49
64ef030deb22 *** empty log message ***
gongo
parents: 48
diff changeset
116 int
64ef030deb22 *** empty log message ***
gongo
parents: 48
diff changeset
117 main(int argc, char *argv[])
26
3f68b2ef4fb0 *** empty log message ***
gongo
parents:
diff changeset
118 {
85
9b96b190cb73 *** empty log message ***
gongo
parents: 79
diff changeset
119 manager = new TaskManager(1);
26
3f68b2ef4fb0 *** empty log message ***
gongo
parents:
diff changeset
120 manager->init();
3f68b2ef4fb0 *** empty log message ***
gongo
parents:
diff changeset
121
35
1e17e0b441a7 *** empty log message ***
gongo
parents: 31
diff changeset
122 task_initialize();
1e17e0b441a7 *** empty log message ***
gongo
parents: 31
diff changeset
123
26
3f68b2ef4fb0 *** empty log message ***
gongo
parents:
diff changeset
124 // 本当は、dlsym みたいなものを使いたいんだけど
3f68b2ef4fb0 *** empty log message ***
gongo
parents:
diff changeset
125 // 静的なやつはできないん?
3f68b2ef4fb0 *** empty log message ***
gongo
parents:
diff changeset
126 manager->set_symbol("init", (void*)init);
3f68b2ef4fb0 *** empty log message ***
gongo
parents:
diff changeset
127 manager->set_symbol("sdl_init", (void*)sdl_init);
3f68b2ef4fb0 *** empty log message ***
gongo
parents:
diff changeset
128 manager->set_symbol("zRow_init", (void*)zRow_init);
3f68b2ef4fb0 *** empty log message ***
gongo
parents:
diff changeset
129 manager->set_symbol("run", (void*)run);
3f68b2ef4fb0 *** empty log message ***
gongo
parents:
diff changeset
130 manager->set_symbol("finish", (void*)finish);
48
70a0ac46133e *** empty log message ***
gongo
parents: 42
diff changeset
131 manager->set_symbol("ViewerRunLoop", (void*)run_loop);
70a0ac46133e *** empty log message ***
gongo
parents: 42
diff changeset
132 manager->set_symbol("ViewerRunDraw", (void*)run_draw);
70a0ac46133e *** empty log message ***
gongo
parents: 42
diff changeset
133 manager->set_symbol("ViewerRunFinish", (void*)run_finish);
26
3f68b2ef4fb0 *** empty log message ***
gongo
parents:
diff changeset
134
3f68b2ef4fb0 *** empty log message ***
gongo
parents:
diff changeset
135 int bpp = 0;
3f68b2ef4fb0 *** empty log message ***
gongo
parents:
diff changeset
136 int width = 640;
3f68b2ef4fb0 *** empty log message ***
gongo
parents:
diff changeset
137 int height = 480;
3f68b2ef4fb0 *** empty log message ***
gongo
parents:
diff changeset
138
3f68b2ef4fb0 *** empty log message ***
gongo
parents:
diff changeset
139 for(int i = 1; argv[i]; ++i)
3f68b2ef4fb0 *** empty log message ***
gongo
parents:
diff changeset
140 {
3f68b2ef4fb0 *** empty log message ***
gongo
parents:
diff changeset
141 if (strcmp(argv[i], "-bpp") == 0)
3f68b2ef4fb0 *** empty log message ***
gongo
parents:
diff changeset
142 {
31
6a77b5e755ab *** empty log message ***
gongo
parents: 28
diff changeset
143 bpp = atoi(argv[++i]);
26
3f68b2ef4fb0 *** empty log message ***
gongo
parents:
diff changeset
144 }
3f68b2ef4fb0 *** empty log message ***
gongo
parents:
diff changeset
145 if (strcmp(argv[i], "-width") == 0)
3f68b2ef4fb0 *** empty log message ***
gongo
parents:
diff changeset
146 {
31
6a77b5e755ab *** empty log message ***
gongo
parents: 28
diff changeset
147 width = atoi(argv[++i]);
26
3f68b2ef4fb0 *** empty log message ***
gongo
parents:
diff changeset
148 }
3f68b2ef4fb0 *** empty log message ***
gongo
parents:
diff changeset
149 if (strcmp(argv[i], "-height") == 0)
3f68b2ef4fb0 *** empty log message ***
gongo
parents:
diff changeset
150 {
31
6a77b5e755ab *** empty log message ***
gongo
parents: 28
diff changeset
151 height = atoi(argv[++i]);
26
3f68b2ef4fb0 *** empty log message ***
gongo
parents:
diff changeset
152 }
3f68b2ef4fb0 *** empty log message ***
gongo
parents:
diff changeset
153 }
3f68b2ef4fb0 *** empty log message ***
gongo
parents:
diff changeset
154
3f68b2ef4fb0 *** empty log message ***
gongo
parents:
diff changeset
155 // 一番最初に行われる init 専用の task_run があってもいいけど。。
3f68b2ef4fb0 *** empty log message ***
gongo
parents:
diff changeset
156 // その場合は引数とか固定か。まあ引数は argc, argv を持つ
3f68b2ef4fb0 *** empty log message ***
gongo
parents:
diff changeset
157 // 構造体で固定しても問題はない・・・か?
3f68b2ef4fb0 *** empty log message ***
gongo
parents:
diff changeset
158 HTaskPtr task_init;
3f68b2ef4fb0 *** empty log message ***
gongo
parents:
diff changeset
159 int fd_init;
49
64ef030deb22 *** empty log message ***
gongo
parents: 48
diff changeset
160 initArg = new struct init_arg;
64ef030deb22 *** empty log message ***
gongo
parents: 48
diff changeset
161 initArg->bpp = bpp;
64ef030deb22 *** empty log message ***
gongo
parents: 48
diff changeset
162 initArg->w = width;
64ef030deb22 *** empty log message ***
gongo
parents: 48
diff changeset
163 initArg->h = height;
31
6a77b5e755ab *** empty log message ***
gongo
parents: 28
diff changeset
164
26
3f68b2ef4fb0 *** empty log message ***
gongo
parents:
diff changeset
165 fd_init = manager->open("init");
49
64ef030deb22 *** empty log message ***
gongo
parents: 48
diff changeset
166 task_init = manager->create_task(fd_init, 0, 0, 0, NULL);
85
9b96b190cb73 *** empty log message ***
gongo
parents: 79
diff changeset
167 //manager->spawn_task(task_init);
63
54355e641172 *** empty log message ***
gongo
parents: 50
diff changeset
168 task_init->spawn();
50
7927e00fb8e2 *** empty log message ***
gongo
parents: 49
diff changeset
169
26
3f68b2ef4fb0 *** empty log message ***
gongo
parents:
diff changeset
170 manager->run();
48
70a0ac46133e *** empty log message ***
gongo
parents: 42
diff changeset
171
70a0ac46133e *** empty log message ***
gongo
parents: 42
diff changeset
172 finish(NULL, NULL);
26
3f68b2ef4fb0 *** empty log message ***
gongo
parents:
diff changeset
173 return 0;
3f68b2ef4fb0 *** empty log message ***
gongo
parents:
diff changeset
174 }