Geek Piano 開発日記

Shigeru Kobayashi

最終更新: 1999/7/26


GLTest-990625c-990726.zip / 990726
奥井さんから 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 を整理したページを作成してみたいと思います。(予定ですあくまでも^^;)

奥井さんからはこの他にも何点か有用な情報を頂きました。どうもありがとうございました。例のモノを楽しみにしております(^^)。


BeUtena-a2-990725.zip
先日の Glide 3.x + Voodoo 3 での問題ですが、DTS に確認したところ known bug であることがわかりました。具体的には次のような症状が確認されているようです。 最初の問題を回避するためには GL の Window を開く時点で何が何でも SetFullScreen(true) にしてしまう方法があります。これにより、画面にゴミが残ることはなくなるようです。が、こうすると今度は texture がまもとに表示できなくなります。まあ、さすがは experimental というところでしょうか(^^;)。

原因は 2D 用のフレームバッファと 3D の texture 用メモリが干渉していることのようです。この他、GLView のサイズをどのように設定しているかに関わらずアプリを起動した workspace の画面サイズの設定が採用されてしまうという問題もあるようです。

ということで Glide 3.x + Voodoo 3 問題はいったん追及をあきらめ、BMIdiStore と BMidiSynth を接続した時に音が鳴らないという問題をもう少し追及してみました。こちらも今一つ不可解なのですが BMidiStore->Connect(BMidiSynth) だけでなく同時に BMidiStore->Connect(BMidiText) すると正常に再生されるということが分かりました。こうしないと何も再生されない、というわけではないですが最後の Note だけ再生されるようです(^^;)。

じゃあ同じ BMidi 系(?)ということで BMidiPort では?と試してみましたが、これは全然駄目みたいです。どうも再生開始と同時に全てのイベントを出力してしまうようです。タイムスタンプはきちんと設定されているようなのですが、なんでこういうことになってしまうのでしょうか?まあ、さしあたってこのトリックを採用することで簡単な SMF 再生機能としては使えそうな雰囲気ですのでいいんですけど(^^;)。


990721
どうも Voodoo 3 で texture を使う GL アプリがおかしい、ということで簡単なテストプログラムを用意してみました。結果、このアプリを起動して修了すると 2D 画面(という言い方はしないんでしょうか Voodoo 3 の場合?)がこんなことになってしまうようです(^^;)。どうやらテクスチャメモリを使用した時に 2D 画面用のフレームバッファを利用していて、その後処理をしてくれていない様ですね。このせいか、Display List を利用して文字などを表示するとおかしくなってしまうようです。うーん、これはいくらなんでも Glide 3.x for Voodoo 3 のバグなんじゃないかと思いますが、何かお気付きの方がいらっしゃいましたら御一報ください_o_。

BeUtena-alpha2-990718
ということでのんびり起きてコーディング再開。まずは 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) しておく必要があるのですが、これだと何も設定ができなくなるため、次のような操作に変更してみようと思います。

  1. 起動すると各種設定用の Window と MIDI ファイル用の Window が開く
  2. MIDI ファイルを開くと OpenGL 用の Window を開き、この時点から Full Screen Mode に移行する

990717
直前までいろいろと予定の変更が続いてどうしようかと思っていましたが、結局東京まで行って来ました。見て来たのは新宿梁山泊という劇団の「千年の孤独」という演目で、場所は新宿東口近くの紀伊国屋ホールでした。この劇団は今まで二回見たことがあるのですが、いずれもテント公演で、ホールでの公演は今回が初めてでした。やはりテントとはだいぶ雰囲気がちがったのですが、やはり気合の入った舞台で大変楽しめました。また、終演後にロビーで主演の近藤さんがいらっしゃったので簡単に挨拶させて頂きました(^^)。いや、舞台上だと役者は大きく見えるといいますがほんとなんですね。意外に小柄な方でちょっと驚きました。

その後今度は西新宿のオペラシティに移動して御手洗さんとミーティング(?)。御手洗さんには先日の Geek Piano へのアドバイスやその他 BeOS 関連の件についていろいろと貴重な情報を頂きました。どうもありがとうございました_o_。

帰って来てから久し振りに IRC #Be日本に参加。いやいや、皆さんホンとタフですね。一番驚いたのが奥井さんで、完徹状態で複数 OS のインストールをしていらっしゃったとか(^^;)。


BeUtena-alpha1
とりあえず(こればっかり)一部のコードを整理しました。今後やらなければならない作業はまだまだありますが、とりあえず現状についてまとめてみます。α段階の BeUtena を使ってみたいという方は私宛てにメールにて御連絡頂ければとおもいます。実際にライブで使用するとこんな感じになります(R4.5 の MediaPlayer で再生すると音が出ませんので Win か MacOS で再生してください^^;)。

操作方法

KNOWN BUGS TO DO

BeUtena-GL-990701
BeUtena-GL-990703
なんだかよくわからないうちにライブの本番となってしまいました。最後の方でやった変更はコントロール関係やシーン関係の整理だったような気がしますが、良く覚えていません(^^;)。ほんとうはこの後コントロール関係の整理や MIDI まわりのカスタマイズに対応した物を用意する予定なのですが、さしあたってのバージョンをα版として公開できるように準備したいと思います。

Shigeru Kobayashi