最終更新: 1999/7/26
奥井さんから Glide 3.x + Voodoo 3 の件について詳細なレポートを頂きました。その中で次のようにするとアプリケーションごとに Glide の環境変数の設定がうまく行く、ということを教えて頂きました_o_。putenv("FX_GLIDE_NO_SPLASH=1");これを参考に次のようにしてみたところ、ばっちり画面のリフレッシュレートで SwapBuffer するようになりました(^^)。さっそく以前使用していたタイマー(16666 msec. で回してほぼ 60 Hz にするもの)を削除して見ましたが、ばっちり動いているようです。まだ LCD でみるとたまに tearing が確認できますが、以前と比較すると格段に改善されました。putenv("FX_GLIDE_SWAPINTERVAL=1");もしかすると Glide 2.x + Voodoo 2 でも同じようにすると設定できるのかも知れませんが、こちらについてはまだ検証できていません。近々 R4.5 の OpenGL まわりの known bug を整理したページを作成してみたいと思います。(予定ですあくまでも^^;)奥井さんからはこの他にも何点か有用な情報を頂きました。どうもありがとうございました。例のモノを楽しみにしております(^^)。
先日の Glide 3.x + Voodoo 3 での問題ですが、DTS に確認したところ known bug であることがわかりました。具体的には次のような症状が確認されているようです。最初の問題を回避するためには GL の Window を開く時点で何が何でも SetFullScreen(true) にしてしまう方法があります。これにより、画面にゴミが残ることはなくなるようです。が、こうすると今度は texture がまもとに表示できなくなります。まあ、さすがは experimental というところでしょうか(^^;)。
- OpenGL を使用するアプリを修了した後に画面にゴミが残る(多くの場合は画面の上部に数ピクセル分)
- texture の表示がおかしくなる
原因は 2D 用のフレームバッファと 3D の texture 用メモリが干渉していることのようです。この他、GLView のサイズをどのように設定しているかに関わらずアプリを起動した workspace の画面サイズの設定が採用されてしまうという問題もあるようです。
ということで Glide 3.x + Voodoo 3 問題はいったん追及をあきらめ、BMIdiStore と BMidiSynth を接続した時に音が鳴らないという問題をもう少し追及してみました。こちらも今一つ不可解なのですが BMidiStore->Connect(BMidiSynth) だけでなく同時に BMidiStore->Connect(BMidiText) すると正常に再生されるということが分かりました。こうしないと何も再生されない、というわけではないですが最後の Note だけ再生されるようです(^^;)。
じゃあ同じ BMidi 系(?)ということで BMidiPort では?と試してみましたが、これは全然駄目みたいです。どうも再生開始と同時に全てのイベントを出力してしまうようです。タイムスタンプはきちんと設定されているようなのですが、なんでこういうことになってしまうのでしょうか?まあ、さしあたってこのトリックを採用することで簡単な SMF 再生機能としては使えそうな雰囲気ですのでいいんですけど(^^;)。
どうも Voodoo 3 で texture を使う GL アプリがおかしい、ということで簡単なテストプログラムを用意してみました。結果、このアプリを起動して修了すると 2D 画面(という言い方はしないんでしょうか Voodoo 3 の場合?)がこんなことになってしまうようです(^^;)。どうやらテクスチャメモリを使用した時に 2D 画面用のフレームバッファを利用していて、その後処理をしてくれていない様ですね。このせいか、Display List を利用して文字などを表示するとおかしくなってしまうようです。うーん、これはいくらなんでも Glide 3.x for Voodoo 3 のバグなんじゃないかと思いますが、何かお気付きの方がいらっしゃいましたら御一報ください_o_。
ということでのんびり起きてコーディング再開。まずは BMidiStore と BMidiSynth を接続する実験。R4 の BMidiStore にはいろいろと問題があり、BMidiPort に接続して外部の MIDI 音源をドライブすると大変なことになっていました。おまけに R4.5 の BeBook には「BMidiStore と BMidiSynth を接続するのはだめだ(意訳)」と書かれていたので、どんなもんかと思いましたが、まあまあまともに動くことが分かりました。まあまあというのは「正しく再生された状態を正確に知らなければ大丈夫」という意味です。R4 の時は「いくらなんでもこりゃだめでしょ」というくらいひどい再生だったのですが、R4.5 になって改良されたのでしょうか?たまたまぱっと接続できる外部 MIDI 音源がなかったので同一条件でのテストはできませんでしたが、このレベルであればとりあえずの MIDI 再生機能としては使えそうです。SMF 再生を全部自分でやるとこれだけで時間がなくなってしまいますのでとりあえずこれで進めることにします:-P。
が、BeUtena の現在の構造そのままではこの方法は使えないことが分かりました。今の実装では mMidiMain というオブジェクトに MIDI 関係を全部押し込めているのですが、ここに↑の仕組みを入れようとするとタイミングが無茶苦茶になってしまうようです。現在の mMidiMain の MIDI →制御コードの変換部分を別のオブジェクトに切り分けて上位で BMIdiStore や BMidiPort と接続する必要がありそうです。
また、ここ数日間の調査で Glide 3.x と Voodoo 3 には結構問題があることが分かってきました。一番の問題は何が何でも Full Screen Mode になってしまうことです。たちが悪いことに SetFullScreen(true) されていない状態ではカーソルやキー操作が普通にできてしまうので、気がつくとファイルがゴミ箱に入っていたりなんてことがおきるわけです。とりあえずは Window を開く時点で SetFullScreen(true) しておく必要があるのですが、これだと何も設定ができなくなるため、次のような操作に変更してみようと思います。
- 起動すると各種設定用の Window と MIDI ファイル用の Window が開く
- MIDI ファイルを開くと OpenGL 用の Window を開き、この時点から Full Screen Mode に移行する
直前までいろいろと予定の変更が続いてどうしようかと思っていましたが、結局東京まで行って来ました。見て来たのは新宿梁山泊という劇団の「千年の孤独」という演目で、場所は新宿東口近くの紀伊国屋ホールでした。この劇団は今まで二回見たことがあるのですが、いずれもテント公演で、ホールでの公演は今回が初めてでした。やはりテントとはだいぶ雰囲気がちがったのですが、やはり気合の入った舞台で大変楽しめました。また、終演後にロビーで主演の近藤さんがいらっしゃったので簡単に挨拶させて頂きました(^^)。いや、舞台上だと役者は大きく見えるといいますがほんとなんですね。意外に小柄な方でちょっと驚きました。その後今度は西新宿のオペラシティに移動して御手洗さんとミーティング(?)。御手洗さんには先日の Geek Piano へのアドバイスやその他 BeOS 関連の件についていろいろと貴重な情報を頂きました。どうもありがとうございました_o_。
帰って来てから久し振りに IRC #Be日本に参加。いやいや、皆さんホンとタフですね。一番驚いたのが奥井さんで、完徹状態で複数 OS のインストールをしていらっしゃったとか(^^;)。
とりあえず(こればっかり)一部のコードを整理しました。今後やらなければならない作業はまだまだありますが、とりあえず現状についてまとめてみます。α段階の BeUtena を使ってみたいという方は私宛てにメールにて御連絡頂ければとおもいます。実際にライブで使用するとこんな感じになります(R4.5 の MediaPlayer で再生すると音が出ませんので Win か MacOS で再生してください^^;)。操作方法
KNOWN BUGS
- BeUtena-alpha1 は Roland MCR-8 にしか対応していません。また、MCR-8 以外になんらかの MIDI 鍵盤などが必要です。鍵盤からの MIDI を Mode 4 に設定した MCR-8 の MIDI In・MCR-8 の MIDI Out(MIDI Thru ではないことに注意)をサウンド・カードの MIDI In に接続してください。
- 1 - 8 の LED が点灯している状態で MCR-8 の SW1 で MIDI からオブジェクトへのパターンの切り替えを行います
- 1 - 8 の LED が点灯している状態で MCR-8 の SW2 で視点の切り替えを行います
- 9 - 16 の LED が点灯している状態で MCR-8 の SW2 でテロップの切り替えを行います
- MCR-8 のスライダーは 1 - 5 がライブ・ビデオの調整・6 が画面中央付近で回転するテキストのα・8 がテロップのαのコントロールになります
- MIDI 鍵盤からの Note On でアニメーション・オブジェクトが表示されます
- MIDI 鍵盤からの Hold Pedal で光る波紋が表示されます
TO DO
- R4.5 の Glide 3.x はさすが experimantal だけあって Voodoo 3 では起動時に勝手に full screen になってしまうようです。しかし、この状態でもマウスやキーボードは有効になっているため、あわててあれこれ操作すると大変なことになってしまう場合があります。しかし、最初から SetFullScreen(true) にしてしまうと各種コントロール用 window が表示できないため、とりあえずそのままにしてあります。
- Control Window はとりあえず視点を変えるためのスライダーしか動作しません。本当はこの画面で細かいシーン設定ができるようになるはずです(^^;)。
- MIDI から GL の thread へは Kernel Kit の send_data() でデータを送信しています。このため、60 fps で描画している状態で他の data が届いている状態ではそれ以上の data を送信することができません。優先順位を付けるか MIDI の thread の方でまとめて送信する必要があるのだと思いますが、これまた検討中です。
- Control Window の本格的な実装
- MIDI データがある密度を超えた状態での取り扱い方法の改良
- GL 描画部分の高速化(せめて Celeron 300 x 2 で処理が溢れないように)
- Animation Engine のより一層の改良(線形補間そのままではあまりにも動きがかっこわるいので...世界最強のアニメーション大国に生まれたものとしては^^)
なんだかよくわからないうちにライブの本番となってしまいました。最後の方でやった変更はコントロール関係やシーン関係の整理だったような気がしますが、良く覚えていません(^^;)。ほんとうはこの後コントロール関係の整理や MIDI まわりのカスタマイズに対応した物を用意する予定なのですが、さしあたってのバージョンをα版として公開できるように準備したいと思います。