view TaskManager/Test/test_render/ChangeLog @ 201:b257e27d995c

add SceneGraphIterator
author gongo@gendarme.cr.ie.u-ryukyu.ac.jp
date Mon, 26 Jan 2009 16:46:59 +0900
parents 10ad99550ee8
children 3f4c6a75d7e0
line wrap: on
line source

2009-01-26  Wataru MIYAGUNI  <gongo@cr.ie.u-ryukyu.ac.jp>

	* SceneGraphIterator.cpp : add file
	SceneGraph を走査する用。
	基本、Java の Iterator を参考にしてます。
	追加機能としては

	- hasNext(const char* name);
	名前が name の SceneGraph があるかどうか

	- next(const char* name);
	名前が name の SceneGraph まで進ませる

	* SceneGraphIterator.cpp : TODO
	hasNext とかは名前じゃなくて ID が良いかなーとも思うけどね。
	てかその方がいいな。あとで直します
	
	* ieshoot.cpp (ieboss_move): add
	(ieboss_collision): add
	BOSSの動きを追加。
	IETAMA が数回衝突したら BOSS を消すって処理。

	* SceneGraphIterator.cpp (SceneGraphIterator::next): fix
	break してなかった。そりゃ取れないわ

	* SceneGraph.cpp (SceneGraph::realRemoveFromTree): fix

	< p1 = p1->next;
	< p = p->next;
	=====
	> p1 = p1->brother;
	> p = p->brother;
	

	* viewer.cpp (Viewer::run_draw): fix
	Spanの無い部分を塗りつぶす処理はタスクを走らせず、
	そのまま memset とかの方が早い。
	まとめてするタスクを立ち上げるってのもいいかもしれない。
	あと、memsetで指定する値が、0xFF と 0x00 とで速度が違う。
	universe だと、

	0xFF 24fps
	0x00 30fps

	なんだろう。0x00 だと、ただのクリアになるから速いってことかな。

	* Camera.h (class Camera): add
	とりあえず Camera を作って、これを SceneGraph の Top にした。

	* SceneGraph.cpp (SceneGraph::realRemoveFromTree): add
	realRemove() の Tree構造用。削除後の tree top を返す様にしている。
	まあ top が消えなければ返す必要も無いし、top が消えるってことは
	SceneGraph そのものが消えるってことでそうは無い・・はずだけどね。
	(SceneGraph::realRemoveFromList): add
	realRemove() の list用。削除後の list top を返す様にしている。
	(SceneGraph::realRemoveFromTree): fix
	< p->next = p1->next;
	===
	> p->brother = p1->brother;

2009-01-25  Wataru MIYAGUNI  <gongo@cr.ie.u-ryukyu.ac.jp>

	* add (tools/create_sglist): new
	必要な SceneGraph xml file から SceneGraph を抽出し、
	名前と対応する ID を SGList.h に出力する。
	また、名前から ID を求める sglist_table を SGList.cpp に出力する。
	
	* SceneGraph.cpp (SceneGraph::remove): add
	User API。ここで削除するのではなく、まずはフラグを立てるだけ
	ここですぐに消すと、allExecute() の走査で何気に困る

	(SceneGraph::isRemoved): add
	この SceneGraph 削除フラグが立っているかどうか
	
	(SceneGraph::realRemove): TODO
	子を持つ SceneGraph が消された場合、
	その子孫を全て削除するかどうか。まあ削除するのかな。

	(SceneGraph::realRemove): add
	Cerium System で呼ばれる。
	remove flag の立った SceneGraph を削除する。
	parentやbrother、next は繋ぎ直す。

	* SceneGraphRoot.cpp (SceneGraphRoot::addNext): add
	sg_available_list に追加していく
	木の操作が要らないアクセスの際にはこっちの方がいい。

	(SceneGraphRoot::setSceneData): add
	Cerium に SceneGraph の tree を渡す。Cerium はこの tree を辿って
	処理を行う
	
	(SceneGraphRoot::createFromXMLfile): add
	xml file を指定して、そこから SceneGraph を生成し、
	sg_src に格納する。ユーザはこの SceneGraph を直接は扱えない。
	以下に示す createSceneGraph の、読み込み元データとして保存しておく。
	
	(SceneGraphRoot::createSceneGraph): add
	オリジナルの SceneGraph を clone してユーザに返す。
	この SceneGraph をユーザが操作する。
	
	* SceneGraphRoot.h (class SceneGraphRoot): new variables
	sg_src, sg_exec_list, sg_draw_list, sg_available_list

	* addfile (SceneGraphRoot.cpp)
	SceneGraph を管理するクラス、ってところか。
	Root ってのは SceneGraph という名前からすると
	一番親と思われそうで微妙です。変えるかも。

2009-01-12  Wataru MIYAGUNI  <gongo@cr.ie.u-ryukyu.ac.jp>

	* Joystick.cpp: TODO
	使用している Joystick が

	1. PS3 コントローラ
	2. PS2 コントローラにUSB変換をかましたやつ

	によってボタンの番号配置が違うので
	そこを自動的に取得して割り振りたい

	SDL_JoystickName() で名前取れるんだけど
	全部共通なのかなー。「PS3って文字列があるか否か」でわけてもいいけど
	
	* Joystick.cpp: fix
	コントローラボタンの番号を PS3 コントローラに合わせました。

	- 参考
	PS3 Linux SDLでプログラミング -コントローラを使う-
	http://yun.cup.com/ps3sdl007.html

	アナログスティックの方はまだです
	
2009-01-08  Wataru MIYAGUNI  <gongo@cr.ie.u-ryukyu.ac.jp>

	* spe/DrawSpanRenew.cpp (DrawSpanRenew::run): fix
	next_spack を free() していたが、do-while の最初で
	next_spack = NULL とかやっている。
	DrawSpan だと、free するのは free_spack ってやつなので
	問題なかったが、なぜここは free(next_spack) とかやってるのか。
	というわけで、next_spack,spack 両方用の
	free_spack1, free_spack2 を生成して、これを free させることに。
	これで、ようやくまともに動くようになった。けど微妙です。
	遅いですね。

	* addFile : DrawSpanRenew.cpp
	DrawSpan の再起動 ver。

2008-12-22  Wataru MIYAGUNI  <gongo@cr.ie.u-ryukyu.ac.jp>

	* fix
	charles を Fedora 10 に上げて、コンパイラが新しくなったせいか、
	以下のような warning が出始めた

	warning: deprecated conversion from string constant to 'char *'

	まあよくわからんが、例えば

	char *str = "hoge";

	みたいな所だとこの warning が出る。これを

	const char *str = "hoge";

	にすると消えた。
	以後こういう形に統一しろよ的なやつなのかな。

2008-12-19  Wataru MIYAGUNI  <gongo@cr.ie.u-ryukyu.ac.jp>

	* viewer.cpp (Viewer::run_draw): fix
	startx, endx に対して、start_y, end_y って名前は統一されてなくて
	わかりづらいので、starty, endy に変更

	* main.cpp (init): fix
	bpp (BitsPerPixel) の値がデフォルトで 0 になっていた。
	今のレンダリング方式では 32 がデフォルトなので、間違ってた。
	今まで気づかなかったのは

	1. SDL_SetVideoMode に bpp = 0 で渡される
	2. SDL が開発・実行環境に合わせて bpp を設定
	3. 今までそれが 32 になってた

	しかし、ゲーム班の環境では bpp = 16 になってしまったため、
	その次の bitmap の allocate の時に 
	screen->pitch*height = 16*width*height となり、
	DrawSpan では 32 のつもりで書き込んでいたため領域外への
	メモリ書き込み->エラー

	ゲーム班ありがとう
	
2008-12-16  Wataru MIYAGUNI  <gongo@cr.ie.u-ryukyu.ac.jp>

	* SceneGraph.cpp (makeTapestry): add
	SceneGraph::get_data にあったけど、ごちゃごちゃしてたので
	関数として生成

	* viewer.cpp (Viewer::run_init, Viewer::run_draw): fix
	* spe/DrawSpan.cpp (DrawSpan::zRow_init): delete

	Z Buffering に使う zRow は DrawSpan で毎回生成、初期化するのではなく、
	PPE で生成、初期化を行っておき、DrawSpan に add_inData で
	DMA で渡すという方法に変更。速度的にはほんのちょっとしか(ry
	
	* spe/CreateSpan.cpp (CreateSpan::half_triangle): fix
	getScale に渡す tex_width,tex_height を修正。
	比較にそのまま tex_width, tex_height を使うと、
	Span が持つテクスチャが全体の一部分だったとしても
	比較結果で縮小が行われてしまうため。

	- 例
	span->length_x = 32;
	tex_width = 128;
	tex_x_len = (span->tex_x2 - span->tex_x1) = (0.5 - 0.3) = 0.2;

	今までの処理だと、span->length_x < tex_width の結果により
	縮小されたテクスチャを使うことになる。
	しかし、実際に Span が使う Texture の長さは

	  tex_width*tex_x_len = 24

	なので、縮小を行う必要は無い
	

2008-12-12  Wataru MIYAGUNI  <gongo@cr.ie.u-ryukyu.ac.jp>

	* SceneGraph.cpp (SceneGraph::get_data): Todo
	テクスチャの縦横が 8 の倍数でなければ弾く処理を入れる。

	* spe/DrawSpan.cpp (DrawSpan::run): Todo
	テクスチャの座標計算と、そこから取得できる Tile の DMA を
	一スレッドで処理しているのでそれを分けないといけない

	* spe/CreateSpan.cpp (getTapestry): Add
	(getScale): Add

	* memo: 雑記
	ようやくこいつに ChangeLog を加えました。
	なんか emacs で「C-x 4 a」とかすると、ChangeLog の entry が
	加えれられるんだけど、上の階層のを探しにいくので、TaskManager/ のに
	加えようとしてたわけさ。まあそういう仕様なんだけど。
	で、だからといって不可能ってわけじゃないから書けばよかったんだが。

	要するに、これからはちゃんと書いていこうと思います。