annotate TaskManager/Test/simple_render/main.cpp @ 85:9b96b190cb73

*** empty log message ***
author gongo
date Wed, 27 Feb 2008 04:25:04 +0900
parents 83b57e03d3ef
children 588ab5f0e659
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 {
49
64ef030deb22 *** empty log message ***
gongo
parents: 48
diff changeset
87 __debug("[%s]\n", __FUNCTION__);
48
70a0ac46133e *** empty log message ***
gongo
parents: 42
diff changeset
88 screen->run_loop();
26
3f68b2ef4fb0 *** empty log message ***
gongo
parents:
diff changeset
89 return 0;
3f68b2ef4fb0 *** empty log message ***
gongo
parents:
diff changeset
90 }
3f68b2ef4fb0 *** empty log message ***
gongo
parents:
diff changeset
91
48
70a0ac46133e *** empty log message ***
gongo
parents: 42
diff changeset
92 int run_draw(void *r, void *w)
70a0ac46133e *** empty log message ***
gongo
parents: 42
diff changeset
93 {
49
64ef030deb22 *** empty log message ***
gongo
parents: 48
diff changeset
94 __debug("[%s]\n", __FUNCTION__);
48
70a0ac46133e *** empty log message ***
gongo
parents: 42
diff changeset
95 screen->run_draw();
70a0ac46133e *** empty log message ***
gongo
parents: 42
diff changeset
96 return 0;
70a0ac46133e *** empty log message ***
gongo
parents: 42
diff changeset
97 }
70a0ac46133e *** empty log message ***
gongo
parents: 42
diff changeset
98
70a0ac46133e *** empty log message ***
gongo
parents: 42
diff changeset
99 int run_finish(void *r, void *w)
70a0ac46133e *** empty log message ***
gongo
parents: 42
diff changeset
100 {
49
64ef030deb22 *** empty log message ***
gongo
parents: 48
diff changeset
101 __debug("[%s]\n", __FUNCTION__);
85
9b96b190cb73 *** empty log message ***
gongo
parents: 79
diff changeset
102 screen->run_finish();
48
70a0ac46133e *** empty log message ***
gongo
parents: 42
diff changeset
103 return 0;
70a0ac46133e *** empty log message ***
gongo
parents: 42
diff changeset
104 }
70a0ac46133e *** empty log message ***
gongo
parents: 42
diff changeset
105
26
3f68b2ef4fb0 *** empty log message ***
gongo
parents:
diff changeset
106 int finish(void *w, void *r)
3f68b2ef4fb0 *** empty log message ***
gongo
parents:
diff changeset
107 {
49
64ef030deb22 *** empty log message ***
gongo
parents: 48
diff changeset
108 __debug("[%s]\n", __FUNCTION__);
26
3f68b2ef4fb0 *** empty log message ***
gongo
parents:
diff changeset
109 delete screen;
50
7927e00fb8e2 *** empty log message ***
gongo
parents: 49
diff changeset
110 delete manager;
26
3f68b2ef4fb0 *** empty log message ***
gongo
parents:
diff changeset
111 return 0;
3f68b2ef4fb0 *** empty log message ***
gongo
parents:
diff changeset
112 }
3f68b2ef4fb0 *** empty log message ***
gongo
parents:
diff changeset
113
49
64ef030deb22 *** empty log message ***
gongo
parents: 48
diff changeset
114 int
64ef030deb22 *** empty log message ***
gongo
parents: 48
diff changeset
115 main(int argc, char *argv[])
26
3f68b2ef4fb0 *** empty log message ***
gongo
parents:
diff changeset
116 {
85
9b96b190cb73 *** empty log message ***
gongo
parents: 79
diff changeset
117 manager = new TaskManager(1);
26
3f68b2ef4fb0 *** empty log message ***
gongo
parents:
diff changeset
118 manager->init();
3f68b2ef4fb0 *** empty log message ***
gongo
parents:
diff changeset
119
35
1e17e0b441a7 *** empty log message ***
gongo
parents: 31
diff changeset
120 task_initialize();
1e17e0b441a7 *** empty log message ***
gongo
parents: 31
diff changeset
121
26
3f68b2ef4fb0 *** empty log message ***
gongo
parents:
diff changeset
122 // 本当は、dlsym みたいなものを使いたいんだけど
3f68b2ef4fb0 *** empty log message ***
gongo
parents:
diff changeset
123 // 静的なやつはできないん?
3f68b2ef4fb0 *** empty log message ***
gongo
parents:
diff changeset
124 manager->set_symbol("init", (void*)init);
3f68b2ef4fb0 *** empty log message ***
gongo
parents:
diff changeset
125 manager->set_symbol("sdl_init", (void*)sdl_init);
3f68b2ef4fb0 *** empty log message ***
gongo
parents:
diff changeset
126 manager->set_symbol("zRow_init", (void*)zRow_init);
3f68b2ef4fb0 *** empty log message ***
gongo
parents:
diff changeset
127 manager->set_symbol("run", (void*)run);
3f68b2ef4fb0 *** empty log message ***
gongo
parents:
diff changeset
128 manager->set_symbol("finish", (void*)finish);
48
70a0ac46133e *** empty log message ***
gongo
parents: 42
diff changeset
129 manager->set_symbol("ViewerRunLoop", (void*)run_loop);
70a0ac46133e *** empty log message ***
gongo
parents: 42
diff changeset
130 manager->set_symbol("ViewerRunDraw", (void*)run_draw);
70a0ac46133e *** empty log message ***
gongo
parents: 42
diff changeset
131 manager->set_symbol("ViewerRunFinish", (void*)run_finish);
26
3f68b2ef4fb0 *** empty log message ***
gongo
parents:
diff changeset
132
3f68b2ef4fb0 *** empty log message ***
gongo
parents:
diff changeset
133 int bpp = 0;
3f68b2ef4fb0 *** empty log message ***
gongo
parents:
diff changeset
134 int width = 640;
3f68b2ef4fb0 *** empty log message ***
gongo
parents:
diff changeset
135 int height = 480;
3f68b2ef4fb0 *** empty log message ***
gongo
parents:
diff changeset
136
3f68b2ef4fb0 *** empty log message ***
gongo
parents:
diff changeset
137 for(int i = 1; argv[i]; ++i)
3f68b2ef4fb0 *** empty log message ***
gongo
parents:
diff changeset
138 {
3f68b2ef4fb0 *** empty log message ***
gongo
parents:
diff changeset
139 if (strcmp(argv[i], "-bpp") == 0)
3f68b2ef4fb0 *** empty log message ***
gongo
parents:
diff changeset
140 {
31
6a77b5e755ab *** empty log message ***
gongo
parents: 28
diff changeset
141 bpp = atoi(argv[++i]);
26
3f68b2ef4fb0 *** empty log message ***
gongo
parents:
diff changeset
142 }
3f68b2ef4fb0 *** empty log message ***
gongo
parents:
diff changeset
143 if (strcmp(argv[i], "-width") == 0)
3f68b2ef4fb0 *** empty log message ***
gongo
parents:
diff changeset
144 {
31
6a77b5e755ab *** empty log message ***
gongo
parents: 28
diff changeset
145 width = atoi(argv[++i]);
26
3f68b2ef4fb0 *** empty log message ***
gongo
parents:
diff changeset
146 }
3f68b2ef4fb0 *** empty log message ***
gongo
parents:
diff changeset
147 if (strcmp(argv[i], "-height") == 0)
3f68b2ef4fb0 *** empty log message ***
gongo
parents:
diff changeset
148 {
31
6a77b5e755ab *** empty log message ***
gongo
parents: 28
diff changeset
149 height = atoi(argv[++i]);
26
3f68b2ef4fb0 *** empty log message ***
gongo
parents:
diff changeset
150 }
3f68b2ef4fb0 *** empty log message ***
gongo
parents:
diff changeset
151 }
3f68b2ef4fb0 *** empty log message ***
gongo
parents:
diff changeset
152
3f68b2ef4fb0 *** empty log message ***
gongo
parents:
diff changeset
153 // 一番最初に行われる init 専用の task_run があってもいいけど。。
3f68b2ef4fb0 *** empty log message ***
gongo
parents:
diff changeset
154 // その場合は引数とか固定か。まあ引数は argc, argv を持つ
3f68b2ef4fb0 *** empty log message ***
gongo
parents:
diff changeset
155 // 構造体で固定しても問題はない・・・か?
3f68b2ef4fb0 *** empty log message ***
gongo
parents:
diff changeset
156 HTaskPtr task_init;
3f68b2ef4fb0 *** empty log message ***
gongo
parents:
diff changeset
157 int fd_init;
49
64ef030deb22 *** empty log message ***
gongo
parents: 48
diff changeset
158 initArg = new struct init_arg;
64ef030deb22 *** empty log message ***
gongo
parents: 48
diff changeset
159 initArg->bpp = bpp;
64ef030deb22 *** empty log message ***
gongo
parents: 48
diff changeset
160 initArg->w = width;
64ef030deb22 *** empty log message ***
gongo
parents: 48
diff changeset
161 initArg->h = height;
31
6a77b5e755ab *** empty log message ***
gongo
parents: 28
diff changeset
162
26
3f68b2ef4fb0 *** empty log message ***
gongo
parents:
diff changeset
163 fd_init = manager->open("init");
49
64ef030deb22 *** empty log message ***
gongo
parents: 48
diff changeset
164 task_init = manager->create_task(fd_init, 0, 0, 0, NULL);
85
9b96b190cb73 *** empty log message ***
gongo
parents: 79
diff changeset
165 //manager->spawn_task(task_init);
63
54355e641172 *** empty log message ***
gongo
parents: 50
diff changeset
166 task_init->spawn();
50
7927e00fb8e2 *** empty log message ***
gongo
parents: 49
diff changeset
167
26
3f68b2ef4fb0 *** empty log message ***
gongo
parents:
diff changeset
168 manager->run();
48
70a0ac46133e *** empty log message ***
gongo
parents: 42
diff changeset
169
70a0ac46133e *** empty log message ***
gongo
parents: 42
diff changeset
170 finish(NULL, NULL);
26
3f68b2ef4fb0 *** empty log message ***
gongo
parents:
diff changeset
171 return 0;
3f68b2ef4fb0 *** empty log message ***
gongo
parents:
diff changeset
172 }