ものがたり(旧)

atsushieno.hatenablog.com に続く

おもしろいMoonlightのレンダリング議論

最初は、cairoベースで遅いMoonlightのレンダリングエンジンを置き換えてみたらどうよ、というmoonlight-listでのMax Kosenkoのひと声から始まった。立ち上げ当初、Moonlightではagg (AntiGrain)とか使えたらいいよね(だけど2.5がGPLだから困るじゃん)などと言っていたのだけど、どうやら最近agg-sharpなるライブラリが登場したらしい。これを強力にプッシュする話がしばらく続いた。

agg-sharpはaggのラッパーというわけではなく(aggはC++なのでラッパーは難しい)、aggのAPIC#で実装し直したというものらしい。そしてagg-sharpで使われているBCLのAPIはCoreCLRレベルのものにおさえる事もできるので、agg-sharpSilverlightでも利用可能なのだそうだ(実際の描画にはSystem.WindowsないしSystem.Drawingの呼び出しが必要になるだろうけど)。

managed codeで置き換えるということになると、SL 1.0のサポートはどうなるのだろう?と思ったが、Monoと違い、Moonlight自体はもう1.0互換はさっさと捨てて2.0互換に集中するようだ。

しかし開発当初ならともかく、今さらレンダリングのレイヤを少なからず書き換えるなどというのは、よほどのパフォーマンス向上が見られるのでもなければやりたくない。agg-sharpではハードウェア アクセラレーションが受けられるというのは大きなメリットだそうだ。ただ、それはSilverlightAPIでは不可能なはずではないかと指摘したら、それはその通りだと返されてしまった(Moonlight.Gtkなどのデスクトップでないと恩恵を受けられない)。cairoでもハードウェア アクセラレーションを受けられるコードは書けるらしいが、moonlightで何度もトライした痕跡があるもののまだ成功していないらしい。

彼はOpenTKのフォーラムにも、MoonlightサポートまわりでOpenVGのサポートを追加するのはどうよ?と精力的に投稿(粘着?w)していた。で、うちの一人が、それならむしろOpenVGを(直接)使った方が話が早いんじゃないか?みたいなことを口にしたらしく、そのやりとりを見ていたひとりが、Moonlightで使っているcairoをOpenVGバックエンドをサポートする亜流のバージョンに置き換えるというやり方でハードウェア アクセラレーションを実現してしまった。素晴らしい。実にハッカーらしい。

そんなわけでagg-sharpを使おうという最初の提案はお蔵入りになりそうだけど、全体を追いかけていくとなかなか興味深い話と参考になる情報がいくつも出てきたので、ざっくり紹介してみますた。