書き忘れです。
* 演算子 (プロパティオブジェクトの取り出しや設定) が & 演算子になります。たとえば、いままで var a = *obj.prop; と書けば、オブジェクト obj にある prop という名前のプロパティオブジェクトが変数 a に入っていましたが、これからは var a = &obj.prop; になります。
では * 演算子は一体何になるのかというと、プロパティアクセスを強制する演算子になります。たとえば、先ほど変数 a にとったプロパティに値を代入したいならば、*a = 40; などとします。
var a = *obj.prop; &a = 40; よりも var a = &obj.prop; *a = 40; のほうが方がしっくりくるので、演算子の役割を変えさせて頂きます。
下位互換性のためのオプションを作るので、どうしても過去のアプリケーションを動かしたい場合はオプションを指定してください。
またまたやりたいこといっぱいです。
2.25 beta 1 でプラグインのバイナリ インターフェースが変わります。将来的な拡張に、より対応しやすくするためです。
以前までのプラグインはそのままでは使えなくなります (Plugins.link で接続しようとするとクラッシュします)。ソースレベルでの互換性は保たれているので、最新の tp_stub.cpp と tp_stub.h を使って再コンパイルすれば使えるようになると思います。
ポップアップメニューをうまく実装できるようなウィンドウモードがなかったのでつけようかと思います。今まででもWindow.showModalなどを使ってポップアップメニューのような物を作ることができましたが、親ウィンドウが非アクティブになってしまうので見栄えがよくありませんでした。
音声の再生位置を、現状の左右だけでなく上下や前後も指定できるようにします。DirectSound の 3D サウンド機能に依存します。まあ、上下の別を表現できるスピーカーシステムって持ってる人はまずいないと思いますので、上下の指定はあんまり意味ないかもしれません。 3Dといってもせいぜい平面空間上です。
それにしてもその前に自分が再生環境を整えなければ。
吉里吉里のレイヤ表示機構を、よりダイナミックな演出に耐えうる物にします。
これは表現能力と簡便性とパフォーマンスを全部実現しようとするもので、非常に重たい課題をいくつも含んでいて、長期化するかもしれません。
いままでのレイヤは、「傾きのない矩形で、ラスタ画像を何らかの演算方法で親レイヤに重ね合わされる」ぐらいの意味合いしか持っていませんでしたが、新しいフレームワークでは、まずレイヤが傾きのない矩形であるという前提がそもそもありませんし、演算方法の規定もありません。たとえばラスタ画像を傾けた画像は、当然、傾いた矩形になりますが、新しいフレームワークではこういった傾いた状態のレイヤや、不定形のレイヤを効率よく扱える方法を採用します。傾けや回転、ぼかしなどの、画像に対するフィルタをかける機能もフレームワークに持たせます。
将来的には、ラスタ画像だけでなくベクトル画像も扱えるぐらいのフレームワークをここで作っておきたいと考えています。
そうなると、今の、傾きのない矩形の集合で領域(更新領域など)を表す、という方法では演算量が多くなるので、2004年12月2日の日記で書いたMicroTile Arrays を参考にしてやりたいと思います。
画面への反映は、画面のどの領域を反映させればよいか、の要求から始まる、demand-pull パイプラインで処理します。普通に考えれば、レイヤは、子レイヤから順に重ね合わせていき、最終的に親レイヤに重ね合わされてから画面に転送される、という、ソースからディスティネーションへの流れをとりますが、吉里吉里の場合は、画面のどこを転送すればよいか、が最初にあって、それを合成するために必要なデータを親レイヤに判断させ、親レイヤはその領域を合成するために必要なデータはなにかを判断するために子レイヤに処理を渡し、というように、ディスティネーションからソースへの処理の受け渡しをやっていきます。まあ方向や考え方が逆なだけでやってることはたぶん一緒だったりします。
現状の吉里吉里でも描画パイプラインの概念はあって、パイプラインをつなぎ変えることで出力先を画面にしたりメモリにしたり、トランジションでは二つのパイプラインからの入力が一つになって、とかやってるのですが、あまり構造化されてるとは言えず、新しくやろうとしていることができるだけの機能もありませんので、ここで作り直します。
描画の最適化はいくつかやりたいことがあって、たとえば完全に不透明なレイヤの奥にあるレイヤは描画しないくてよいとか、CPUキャッシュを効率的に使用するために画像をキャッシュに収まるぐらいの分量で演算して順次画面に転送したりとか、変更のない領域は演算しないとか、いろいろあります。実際、現状の吉里吉里でもこれぐらいの演算の最適化はやっているのですが、新しい機構となると相当ここも複雑化しそうです。
とりあえず、大改修です。下位互換性はなるべく保つ方向で行きます。それにしても、昨今の主流であるハードウェアアクセラレーションに任せて力ずくで表現する方法とは逆行してますね。むしろ忘れ去られた部分に立ち止まるような。
2.25の開発を開始しました。
あれ、まだ 2.24 も出てないのに 2.25 とは、ということですが、2.24は安定版ということで、2.25の開発と平行してメンテナンスを続けます。
これは、ちょうど今、2.24 のブランチがトランクから分岐したということになります。
トランク(trunk)とかブランチ(branch)とか何?ということですが、これは、バージョンがいくつにも分岐していく様子を、植物の「木」にたとえたものです。トランク(幹)は開発のもっとも基幹となる系で、基本的に変更はここに加えていきます。ブランチ(枝)は、トランクのある時点から分岐した系で、トランクの変更の影響を受けたくない場合に作ります。たとえば 2.24stable のブランチは、トランクへの変更の影響を受けずに、安定版としての安定度を高めるために使う系です。もちろん、バグのような、全ての系に影響する変更は、他の系にも反映させる場合があります。
とりあえず、現状、吉里吉里は2.25として開発中のトランクと、2.24stableとして開発中のブランチの2つの系が同時に存在している事になります(実際は2.22stableの系もありますが、ある時点でメンテナンスを打ち切ると思います)。こんな事をやっているため、2.25 beta 1が、2.24stableのRC版より先に公開される可能性があります。
2.25は、よりダイナミックな演出が可能になるように、吉里吉里の更新描画系の大改修をやる予定です。これがもしかしたらかなり長期化するかも知れないので、不安定な状態がトランクに長期間存在することを避けるため、この改修自体もブランチとして立ち上げ、別系列で開発を進めるようになるかも知れません。このような場合は、ブランチでの開発が終わった時点で、トランクにブランチでの変更点を反映させる作業である「マージ」が開始されます。
先ほど本家に取り込ませて頂いたムービー拡張機能も、しばらくの間ブランチとして開発が続いていた物を、トランクにマージした形になっています。
なんかごちゃごちゃしてますが、こういった複数の系の同時開発が可能になったのもバージョン管理システム導入のおかげです。使い始めて良かった。というか使わないとヤバい。
吉里吉里を使用した、簡単なムービープレーヤを作成しました。ここからダウンロードできます [1.32MB] 。
オーバーレイ再生とレイヤ再生をメニューから切り替えられるようになっています。
よろしければ、お手持ちの MPEG I ファイルで是非、試してみてください。不具合があれば、ご連絡頂ければ幸いです。お願い致します。
beagleワーム(メール拡散型ワーム)が最近よく来ます。
その中のヘッダを見ていたら、
From: \\\"IE\\\" <IE4.DLL@v6.0.2800.1106>
IEとは。自動収集による無作為なメールアドレスとはいえ、皮肉が効いててちょっと笑った。
libart(ベクトル画像描画ライブラリ) の画面更新管理に使われている MicroTile Arrays が面白そうです。
画像をブロックごとに分ける所までは普通に思いつくのですが、そのブロック内でさらに小さな矩形を定義できるところがなかなか。
2004年10月1日の日記 でも書きましたが、この機能を現在吉里吉里本体にマージ中です。
これをマージして、全体的にいろいろ細かいところを直してから、2.24 stable のブランチを立ち上げることになりそうです。
ムービーは DirectShow を使って再生をするのですが、DirectX のご多分に漏れず、不具合の発生しやすい場所ですので、皆様にテストにご協力して頂くかも知れません。そのときはよろしくお願い致します。
今回の楓 softwareの井元氏のご尽力による改良により、レイヤでの再生でも、従来からあるオーバーレイによる再生でも、\\\"MPEG I\\\" のコーデックを OS 標準のものをプログラム側で指定して使用するようになります。サードパーティ製のコーデック(ffdshowやDVDプレーヤ付属のものなど)を使わないようにしたことにより、いままでサードパーティ製コーデックが使われていたのが原因で発生していた不具合が解消されるようになると思います。
従来からあるオーバーレイによる再生もレイヤでの再生も、\\\"MPEG I\\\" が、現状正式にサポートしている唯一の形式になります。AVIはサポート外にするかも知れません。AVIで現状、画質/圧縮率ともにまともに使えるコーデックというとDivXかXviD、あるいはそのようなサードパーティ製コーデックだと思うのですが、このような物はインストールされている環境によっては不具合がおきやすく、トラブルの元になると思います。コーデックごと配布すればいいのかも知れませんが、吉里吉里本家側でサポートできる物ではありません。
できればコーデックを積んでしまいたいのですが、ライセンスとか特許とか圧縮率などを総じて考えると、選択肢としては Theora しかないかなという感じです。ただ、すぐに組み込めるという訳ではないです。現状ではデコード時の負荷がかなり大きいので、気合い入れて最適化しないとならない感じです。それに、まだαバージョンの段階なのでコードが安定していなさそうだってのもあります。
sugi氏による 吉里吉里情報局 内 に コミックマーケット67吉里吉里関連作品サークル が開設されました。
吉里吉里で作品を出展される方は、是非ご登録ください。