Silverlight5 Beta来てた。見た。
IronRubyな人に嬉しいのはついに動的オブジェクトのプロパティにバインディングできるようになったこと。やったよ!あとマークアップエクステンションとかいうのもあるようだ。上手く使えればXAMLとIronRubyの仲をもっとよくするのに使えるかもしれない。
あとはまあ待望の3D。XNAが入ったよと書いてあるのでやっぱりなと思ったが、俺の思ってたXNAと全然違うよこれ…。つかドキュメントのリンクが切れまくりでこまるよ。
XNAっぽいアセンブリが全然無いので本当に実装されてるのか不安になったんだけどSystem.Windows.dllに入ってた。
まずはオーディオなんだけど、SoundEffectクラスが追加されててStreamから読んでおいたサウンドを低レイテンシで再生できる。従来はメディアプレイヤーみたいなコントロールしか無くてURI指定しておいていつか再生が始まるてな物だったのでこれは重要だ。しかし読めるフォーマットが不明?新機能紹介ではwavを読んでたので少なくともwavは読めるんだろうけども…。名前の通り効果音用でBGMは従来通りの方法で鳴らせばよさそうだ。
肝心の3D描画なんだけども、中身見たらGraphicsDeviceとVertex/IndexBufferとVertex/PixelShaderとTextureくらいしかない。おおお?俺の知ってるXNAはMeshとかBasicEffectとか居たもんでしたがどこ行っちゃったん?探したけどみつからないのでこれだけらしい。XNAって言うのかこれ…。MS版のWebGLじゃないですかー。
ちょっと意外だったのがVertexShaderとPixelShaderが使える点。WindowsPhone7用のXNAは既製のBasicEffectしか使えなかったので驚きである。読み込めるのはfxcでコンパイルしたShaderModel2.0までのバイナリシェーダ。当然そうだとは思ったがランタイムにコンパイラ持たないのが残念。
Texture2DにはFromStreamが無かった。フォーマットとサイズと値の配列を渡して作れってことのようだ。と思ったがBitmapSourceからテクスチャにコピーする拡張メソッドがあるんで、直接ではないにしろいろいろ読み込めるわけか。
そういやFramebufferObject的なものがないな?RenderTargetはベータには入ってないよ的なことが書いてあるけどこれだったっけかな。入る予定があるなら安心だ。
どうもEffectも今後SilverlightSDKに入るらしい。Mathもないけどこれは既に別途ダウンロードできるようになってる。SDKってなんだっけ?ランタイムに最初っからは入ってないけどコピれば使えるコンポーネントか。
DrawingSurfaceってコントロールが追加されてるんだけど、これが描画先のようだ。定期的に発行されるDrawイベントの中でGraphicsDeviceManagerからDeviceをもらってきて描画すればいいみたい。Shaderなんかのリソースのロードはいつでもやっていいのかな?
動作させるのは結構めんどくさそう。GPUアクセラレーションを有効設定にしないといけないのは当然として、既定ではXNAの描画がセキュリティ的に無効にされてるとのこと!なんで描画するのにセキュリティが関係あるんですかね…。
Vista以降だと権限たらねーよメッセージを勝手に出すけどXPでは何も出せないから自前で描画しろとな。そのくらいなんとかしてくれよ…。3D描画を許可するのは簡単で、Silverlightのプラグイン上で右クリックして出てくる設定ウィンドウから3D描画の許可を選んでやるだけ。操作は簡単なんだけどそれがSilverlightだと分かってる人でないと説明するのはちょっと難しくねこれ…?
困ったことにデバイスロスト的なものあるらしい。たまにGraphicsDeviceManagerのRenderModeが使えません状態になるから再度使えるようになった後はシェーダ以外のリソースを作りなおせとか。そのくらいなんとかしてくれよ…。
あとMacについてはまだ試してないんだけど、言及されてるところも全くないんですけど動くんですかね。なんか対応プラットフォームにWindowsしか書いてなかったような気がするけど気のせいですよね。ね。せめてMac対応してないとゴミクズなんですが。
仕様的にはデバイスロストと権限辺りのそのくらいなんとかしろよな辺りがうざいけど、他はまあ普通。つかMS版WebGL。世の中こんな低レベルAPI求めてないよ!とは思うもののC#とか諸々の高レベルな言語を使えるのはJavaScriptに縛られるWebGLより使えそうだし、ライブラリとか結構作られそうだ。IronRubyから触れる幸せ。
あとはゲームパッド使えるとか無茶できればいいなーと思ったが、権限さえ貰えればCOMとかP/Invokeが使えるようになるんだっけ。P/Invokeが出来るならジョイスティック系関数呼んで使えないこともないな。Windows限定だけどそこはまあ。
…お、Macで試したら3Dはバッチリ動いてませんね!これベータだから動いてないんだよね?ねぇベータだからでしょ?正式版では動くんでしょ、ねえってば!!
OpenGL Extension Registry見たら微妙にベンダー拡張が増えてる気がするんだけど前からあったっけ?
気になったのはWGL_NV_DX_interop。Direct3D9とか9ExのデバイスやらサーフェスやらテクスチャをOpenGLから使っちゃお!という無茶な拡張。何に使うんだこれ…。
何っつーかWPFのイメージか何かにDirect3Dで描画できるてのがあったわ。それ使ってOpenGLで直接描画できるか。いらn…いや意外と欲しい気がする。
GeForceドライバのRelease 265以降に入ってるらしいですわよ。AMDとかIntelにもあると嬉しいなぁ。まあドライバの作りによるから無理だろうけど。