2009-01-26 Wataru MIYAGUNI * 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 * 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 * 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 * 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 * 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 * 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 * 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 * 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/ のに 加えようとしてたわけさ。まあそういう仕様なんだけど。 で、だからといって不可能ってわけじゃないから書けばよかったんだが。 要するに、これからはちゃんと書いていこうと思います。