comparison Renderer/Engine/ChangeLog @ 0:04e28d8d3c6f

first commit
author Daiki KINJYO <e085722@ie.u-ryukyu.ac.jp>
date Mon, 08 Nov 2010 01:23:25 +0900
parents
children
comparison
equal deleted inserted replaced
-1:000000000000 0:04e28d8d3c6f
1 2010-8-6 Shinji Kono <kono@ie.u-ryukyu.ac.jp>
2
3 Renderer Engine の task の下に user task を置くのは反則だろ?
4 問題は、User program の方で、どうやって、task_init するかだが、
5 PPE側は自分でやって問題ない。SPE側が困る。
6
7 やはり、main memory 上のtask listをSPEが自分で読み出すと言う
8 方式が合理的だと思われる。get_segment で良いしね。ただ、可変長
9 にしないとダメだが... 2^n allocator with compaction が必要か?
10
11 必ず ppe/spe task があるわけだから、task_list はppe/speで一つ
12 でも良い。少なくとも設定は一ヶ所が望ましい。object search path
13 があれば良い。
14
15 task_list を main memory に置くのは良いが、spe task のentry point
16 が決まらないと言う問題がある。
17
18 2009-12-19 Shinji Kono <kono@ie.u-ryukyu.ac.jp>
19
20 SgChange/viewer は大域変数使いすぎ。禁止って言ったのに。
21 linda api は、federated linda 対応でないものが使われている。
22 対応したものは、どこにあるんだろう?
23
24 他の例題いじるのは、自分の例題を動かしてからにして欲しい。
25
26 まぁねぇ。Pipeline execution するのに、sgpack とかも Pipeline buffer
27 にするのは気づかないものなんだろうな... なくても、動かないことは
28 ないのか。
29
30 viewer.cc の大域変数を落すところから始めるべきか?
31
32 2009-11-15 Shinji Kono <kono@ie.u-ryukyu.ac.jp>
33
34 DrawSpan は,
35 Start DrawSpan region (allocate Z buffer)
36 DrawSpan / for each SpanPack
37 add_inData
38 End DrawSpan region (Write frame buffer,free Z buffer)
39 add_outData
40 みたいにしたい.
41
42 CreateSpan は,SpanPack を入れ換えているようだが,
43 SpanPack は,ランダムに書きだし,
44 PPU 側で,それをsortする.
45 と言う方がよい? ほぼ毎回入れ換えているんじゃないの?
46
47 2009-11-14 Shinji Kono <kono@ie.u-ryukyu.ac.jp>
48
49 DrawSpan の dma_write を追放。なんでこんなになっていたかは謎。
50 これで、renew Task を落とせます。
51
52 2009-08-06 Shinji Kono <kono@ie.u-ryukyu.ac.jp>
53
54 DrawSpan の reboot/ TASK_DRAW_SPAN2 は、使ってないのね。
55
56 2009-03-29 Wataru MIYAGUNI <gongo@cr.ie.u-ryukyu.ac.jp>
57
58 * Makefile
59 SGlist.{cpp,h} を make clean で消去し、
60 make で自動生成するようにしました。
61 けどなんか他のファイルと同じ書きかたしても
62 上手く行かなかった。何か見落としてるかもしれない。誰か直(ry
63
64 2009-02-12 Wataru MIYAGUNI <gongo@cr.ie.u-ryukyu.ac.jp>
65
66 * task/CreatePolygonFromSceneGraph.cpp (CreatePolygonFromSceneGraph::run): fix
67 下にあわせる様に
68
69 * SceneGraph.cpp (SceneGraph::SceneGraph, SceneGraph::init)
70 (SceneGraph::finalize_original): fix
71 今まで、Polygon が持つ vertex, normal, texture coordinate ってのが
72
73 ---------------------------------------
74 data = | vertex | normal | texture | sizeof(data) = size*3
75 ---------------------------------------
76 \ size / \ size / \ size /
77
78 てな感じで、SceneGraph->data の中に 3 つ入ってたわけです。
79 これだと、アクセスする時にどれがどれかわからんくなるし、
80 ソース読む時に迷う(経験談)ので、data を消して、代わりに
81 coord_xyz, normal, coord_tex を作りました。
82
83 * polygon.cpp (Polygon::pickup_coordinate)
84 (Polygon::pickup_normal, Polygon::pickup_texture):
85
86 2009-02-10 Wataru MIYAGUNI <gongo@cr.ie.u-ryukyu.ac.jp>
87
88 * Makefile.macosx (depend): fix
89 depend.inc とかを吐き出す様にしました
90
91 * Camera.cpp (Camera::Camera, Camera::updateView)
92 (Camera::updatePerspective, Camera::updateScreen)
93 (Camera::update): fix
94 なんとかカメラできてるっぽいです。
95 Perspective とかも聞いてるし、中心に向かって遠くなってる。
96 あとは行列演算をもうちょいこぎれいにすればいい感じかなー。
97
98 残りは、ユーザ側からの設定。例えば
99 1. 車の運転席目線(FPS)
100 2. 車の後ろから(TPS)
101 3. 車の前から(SPS)
102
103 的なのを、ユーザが CameraData みたいな構造体に
104 zd とか yd とかを設定して camera->set(data) とかやれば
105 反映するみたいな!みたいな!
106
107 2009-02-09 Wataru MIYAGUNI <gongo@cr.ie.u-ryukyu.ac.jp>
108
109 * SceneGraphRoot.cpp (SceneGraphRoot::allExecute)
110 (SceneGraphRoot): fix
111 SceneGraph を root から走査していきながら
112 その都度コピーしていき、最終的に全体の新しい SceneGraph ができる。
113 削除されていればコピーしない、っていうのは簡単だけど
114 追加された場合、コピー元に追加されるのは困るので
115 コピーしたやつに追加って形にしたら今のコードになった。
116 めんどくさいっちゃめんどくさい。もっと綺麗な書き方あるかね
117
118
119 2009-02-01 Wataru MIYAGUNI <gongo@cr.ie.u-ryukyu.ac.jp>
120
121 * SceneGraph.cpp (SceneGraph::SceneGraph)
122 (SceneGraph::SceneGraph, SceneGraph::SceneGraph)
123 (SceneGraph::finalize_original, SceneGraph)
124 (SceneGraph::finalize_copy): add, fix
125 今のところ、SceneGraph の作られ方は
126
127 a1. xml ファイルから生成 (sgid 毎、sg_src[] に格納)
128 a2. ID を指定し、sg_src[id] の SceneGraph を複製
129 a3. xml も ID も指定しない、何も表示しない SceneGraph
130
131 a1 の時はポリゴンデータ(data[])を生成するわけだけど、
132 a2 でも、オリジナルと同じ data[] を持つ必要は(今は)ない。
133 なので、a2 の場合、data[] は a1 と同じ場所を指せば良い。
134 しかし、今までは、SceneGraph::~SceneGraph では
135 どんな SceneGraph でも
136
137 delete [] data;
138
139 とかやってたので、それならということで
140
141 b1. a1 用の、Desturctor で data[] を delete する finalize_original()
142 b2. a2,a3 用の、data[] を削除しない finalize_copy()
143
144 を用意し、a1,a2,a3 の Consturoctor で、どっちかを設定する。
145
146 2009-01-30 Wataru MIYAGUNI <gongo@cr.ie.u-ryukyu.ac.jp>
147
148 * spe/DrawSpan.cpp (DrawSpan::drawDot1): add
149 span->length_x == 1 の処理。
150
151 (DrawSpan::drawDot2): add
152 Dot1 の続き。要は Dot1 で load して、Dot2 で wait->書き込みって感じ
153 しかし、1ドットだとそこまで待つ必要もないかなって感じなので
154 今は Dot 2には何も書いてない。ちゃんとしらべて、必要そうだったら
155 ここで書き込みを行う
156
157 (DrawSpan::drawLine1): add
158 span->length_x > 1 の処理。
159 いくつか Load パターンを考えてる途中
160
161 1. 全部 load
162 1. z buf で描きこむと判断したとき、その pixel の texture tile を
163 load する。(すでにある、ないに関わらず。ある場合は、実際には
164 Load の処理は行われないが)
165 2. Line2 で描画する(ここで使う tile はすでに全部読み込まれてるとする
166
167 2. 無い物だけload
168 1. 書き込むと判断したとき、tile があるかどうかを調べ
169 あればそのまま linebuf に、無ければ load を掛けて continue;
170 このとき、load した(つまりまだ書き込まれてない) 場所を覚えておく
171 2. Line2 で、1. で覚えた場所から再び計算して描画する。
172 tile はすでに全部読み込まれているとする
173
174 まだあったけど忘れた。
175 今のところ描画領域が 256x8、もしくは512x8 で、
176 単純に考えて、領域pixel と texture pixel が一緒だと考えると
177 一個の Span で最大 64 (512/8) 個の tile があればいいと考えられる。
178 一個の SPE には Tile を 128 個持っておけるし、
179 今は Span を二つ平行して処理しているので、
180 途中で Tile が足りなくなる!ってことはないはず。
181 とまあ、いろいろ考えてたんだけど、何書けばいいのか忘れた。。
182 思い出したらまた書きます。
183
184 2009-01-26 Wataru MIYAGUNI <gongo@cr.ie.u-ryukyu.ac.jp>
185
186 * spe/CreateSpan.cpp (CreateSpan::run): fix
187 ポリゴンをx軸に水平に分割し、その二つを計算するってのが
188 half_triangelで、上としたで、何故か渡すテクスチャの情報が違う。
189 なんでだろうと思いつつも、今まで特に問題が出なかったから無視してたが、
190 今回、三つのSceneGraph を動かしてる時に問題発生。
191 それぞれ違うテクスチャを貼ってるのに、なぜかそれらのうちの半分が
192 別のテクスチャが貼られていた。簡単に言うと、A,B,C の SG があった。
193
194 A: 正常
195 B: 右上だけ A のテクスチャ
196 C: 右上だけ A のテクスチャ
197
198 といった具合。わけがわからなかったんだが、
199 half_triangle に渡すやつの所為だと気づきました
200 なんでここだけ pp->tri[0].tex_info.addr とか渡してんのか未だに謎。
201 単なる書き間違いか直し間違いか。微妙なところ。
202 これ書いた後輩はもう居ない
203
204
205 * SceneGraphIterator.cpp (SceneGraphIterator::hasNext)
206 (SceneGraphIterator::next): fix
207 検索する引数を int id に変更。
208
209 * SceneGraph.h (class SceneGraph): add variable
210 int flag_drawbale : この SceneGraph は描画する物かどうか
211 int sgid : SceneGraph の ID 。ID は SGList.h にあるものを使う
212
213 * SceneGraphIterator.cpp : add file
214 SceneGraph を走査する用。
215 基本、Java の Iterator を参考にしてます。
216 追加機能としては
217
218 - hasNext(const char* name);
219 名前が name の SceneGraph があるかどうか
220
221 - next(const char* name);
222 名前が name の SceneGraph まで進ませる
223
224 * SceneGraphIterator.cpp : TODO
225 hasNext とかは名前じゃなくて ID が良いかなーとも思うけどね。
226 てかその方がいいな。あとで直します
227
228 * ieshoot.cpp (ieboss_move): add
229 (ieboss_collision): add
230 BOSSの動きを追加。
231 IETAMA が数回衝突したら BOSS を消すって処理。
232
233 * SceneGraphIterator.cpp (SceneGraphIterator::next): fix
234 break してなかった。そりゃ取れないわ
235
236 * SceneGraph.cpp (SceneGraph::realRemoveFromTree): fix
237
238 < p1 = p1->next;
239 < p = p->next;
240 =====
241 > p1 = p1->brother;
242 > p = p->brother;
243
244
245 * viewer.cpp (Viewer::run_draw): fix
246 Spanの無い部分を塗りつぶす処理はタスクを走らせず、
247 そのまま memset とかの方が早い。
248 まとめてするタスクを立ち上げるってのもいいかもしれない。
249 あと、memsetで指定する値が、0xFF と 0x00 とで速度が違う。
250 universe だと、
251
252 0xFF 24fps
253 0x00 30fps
254
255 なんだろう。0x00 だと、ただのクリアになるから速いってことかな。
256
257 * Camera.h (class Camera): add
258 とりあえず Camera を作って、これを SceneGraph の Top にした。
259
260 * SceneGraph.cpp (SceneGraph::realRemoveFromTree): add
261 realRemove() の Tree構造用。削除後の tree top を返す様にしている。
262 まあ top が消えなければ返す必要も無いし、top が消えるってことは
263 SceneGraph そのものが消えるってことでそうは無い・・はずだけどね。
264 (SceneGraph::realRemoveFromList): add
265 realRemove() の list用。削除後の list top を返す様にしている。
266 (SceneGraph::realRemoveFromTree): fix
267 < p->next = p1->next;
268 ===
269 > p->brother = p1->brother;
270
271 2009-01-25 Wataru MIYAGUNI <gongo@cr.ie.u-ryukyu.ac.jp>
272
273 * add (tools/create_sglist): new
274 必要な SceneGraph xml file から SceneGraph を抽出し、
275 名前と対応する ID を SGList.h に出力する。
276 また、名前から ID を求める sglist_table を SGList.cpp に出力する。
277
278 * SceneGraph.cpp (SceneGraph::remove): add
279 User API。ここで削除するのではなく、まずはフラグを立てるだけ
280 ここですぐに消すと、allExecute() の走査で何気に困る
281
282 (SceneGraph::isRemoved): add
283 この SceneGraph 削除フラグが立っているかどうか
284
285 (SceneGraph::realRemove): TODO
286 子を持つ SceneGraph が消された場合、
287 その子孫を全て削除するかどうか。まあ削除するのかな。
288
289 (SceneGraph::realRemove): add
290 Cerium System で呼ばれる。
291 remove flag の立った SceneGraph を削除する。
292 parentやbrother、next は繋ぎ直す。
293
294 * SceneGraphRoot.cpp (SceneGraphRoot::addNext): add
295 sg_available_list に追加していく
296 木の操作が要らないアクセスの際にはこっちの方がいい。
297
298 (SceneGraphRoot::setSceneData): add
299 Cerium に SceneGraph の tree を渡す。Cerium はこの tree を辿って
300 処理を行う
301
302 (SceneGraphRoot::createFromXMLfile): add
303 xml file を指定して、そこから SceneGraph を生成し、
304 sg_src に格納する。ユーザはこの SceneGraph を直接は扱えない。
305 以下に示す createSceneGraph の、読み込み元データとして保存しておく。
306
307 (SceneGraphRoot::createSceneGraph): add
308 オリジナルの SceneGraph を clone してユーザに返す。
309 この SceneGraph をユーザが操作する。
310
311 * SceneGraphRoot.h (class SceneGraphRoot): new variables
312 sg_src, sg_exec_list, sg_draw_list, sg_available_list
313
314 * addfile (SceneGraphRoot.cpp)
315 SceneGraph を管理するクラス、ってところか。
316 Root ってのは SceneGraph という名前からすると
317 一番親と思われそうで微妙です。変えるかも。
318
319 2009-01-12 Wataru MIYAGUNI <gongo@cr.ie.u-ryukyu.ac.jp>
320
321 * Joystick.cpp: TODO
322 使用している Joystick が
323
324 1. PS3 コントローラ
325 2. PS2 コントローラにUSB変換をかましたやつ
326
327 によってボタンの番号配置が違うので
328 そこを自動的に取得して割り振りたい
329
330 SDL_JoystickName() で名前取れるんだけど
331 全部共通なのかなー。「PS3って文字列があるか否か」でわけてもいいけど
332
333 * Joystick.cpp: fix
334 コントローラボタンの番号を PS3 コントローラに合わせました。
335
336 - 参考
337 PS3 Linux SDLでプログラミング -コントローラを使う-
338 http://yun.cup.com/ps3sdl007.html
339
340 アナログスティックの方はまだです
341
342 2009-01-08 Wataru MIYAGUNI <gongo@cr.ie.u-ryukyu.ac.jp>
343
344 * spe/DrawSpanRenew.cpp (DrawSpanRenew::run): fix
345 next_spack を free() していたが、do-while の最初で
346 next_spack = NULL とかやっている。
347 DrawSpan だと、free するのは free_spack ってやつなので
348 問題なかったが、なぜここは free(next_spack) とかやってるのか。
349 というわけで、next_spack,spack 両方用の
350 free_spack1, free_spack2 を生成して、これを free させることに。
351 これで、ようやくまともに動くようになった。けど微妙です。
352 遅いですね。
353
354 * addFile : DrawSpanRenew.cpp
355 DrawSpan の再起動 ver。
356
357 2008-12-22 Wataru MIYAGUNI <gongo@cr.ie.u-ryukyu.ac.jp>
358
359 * fix
360 charles を Fedora 10 に上げて、コンパイラが新しくなったせいか、
361 以下のような warning が出始めた
362
363 warning: deprecated conversion from string constant to 'char *'
364
365 まあよくわからんが、例えば
366
367 char *str = "hoge";
368
369 みたいな所だとこの warning が出る。これを
370
371 const char *str = "hoge";
372
373 にすると消えた。
374 以後こういう形に統一しろよ的なやつなのかな。
375
376 2008-12-19 Wataru MIYAGUNI <gongo@cr.ie.u-ryukyu.ac.jp>
377
378 * viewer.cpp (Viewer::run_draw): fix
379 startx, endx に対して、start_y, end_y って名前は統一されてなくて
380 わかりづらいので、starty, endy に変更
381
382 * main.cpp (init): fix
383 bpp (BitsPerPixel) の値がデフォルトで 0 になっていた。
384 今のレンダリング方式では 32 がデフォルトなので、間違ってた。
385 今まで気づかなかったのは
386
387 1. SDL_SetVideoMode に bpp = 0 で渡される
388 2. SDL が開発・実行環境に合わせて bpp を設定
389 3. 今までそれが 32 になってた
390
391 しかし、ゲーム班の環境では bpp = 16 になってしまったため、
392 その次の bitmap の allocate の時に
393 screen->pitch*height = 16*width*height となり、
394 DrawSpan では 32 のつもりで書き込んでいたため領域外への
395 メモリ書き込み->エラー
396
397 ゲーム班ありがとう
398
399 2008-12-16 Wataru MIYAGUNI <gongo@cr.ie.u-ryukyu.ac.jp>
400
401 * SceneGraph.cpp (makeTapestry): add
402 SceneGraph::get_data にあったけど、ごちゃごちゃしてたので
403 関数として生成
404
405 * viewer.cpp (Viewer::run_init, Viewer::run_draw): fix
406 * spe/DrawSpan.cpp (DrawSpan::zRow_init): delete
407
408 Z Buffering に使う zRow は DrawSpan で毎回生成、初期化するのではなく、
409 PPE で生成、初期化を行っておき、DrawSpan に add_inData で
410 DMA で渡すという方法に変更。速度的にはほんのちょっとしか(ry
411
412 * spe/CreateSpan.cpp (CreateSpan::half_triangle): fix
413 getScale に渡す tex_width,tex_height を修正。
414 比較にそのまま tex_width, tex_height を使うと、
415 Span が持つテクスチャが全体の一部分だったとしても
416 比較結果で縮小が行われてしまうため。
417
418 - 例
419 span->length_x = 32;
420 tex_width = 128;
421 tex_x_len = (span->tex_x2 - span->tex_x1) = (0.5 - 0.3) = 0.2;
422
423 今までの処理だと、span->length_x < tex_width の結果により
424 縮小されたテクスチャを使うことになる。
425 しかし、実際に Span が使う Texture の長さは
426
427 tex_width*tex_x_len = 24
428
429 なので、縮小を行う必要は無い
430
431
432 2008-12-12 Wataru MIYAGUNI <gongo@cr.ie.u-ryukyu.ac.jp>
433
434 * SceneGraph.cpp (SceneGraph::get_data): Todo
435 テクスチャの縦横が 8 の倍数でなければ弾く処理を入れる。
436
437 * spe/DrawSpan.cpp (DrawSpan::run): Todo
438 テクスチャの座標計算と、そこから取得できる Tile の DMA を
439 一スレッドで処理しているのでそれを分けないといけない
440
441 * spe/CreateSpan.cpp (getTapestry): Add
442 (getScale): Add
443
444 * memo: 雑記
445 ようやくこいつに ChangeLog を加えました。
446 なんか emacs で「C-x 4 a」とかすると、ChangeLog の entry が
447 加えれられるんだけど、上の階層のを探しにいくので、TaskManager/ のに
448 加えようとしてたわけさ。まあそういう仕様なんだけど。
449 で、だからといって不可能ってわけじゃないから書けばよかったんだが。
450
451 要するに、これからはちゃんと書いていこうと思います。