ページ

2011年12月19日月曜日

[Silverlight] Silverlight 5 の 3D アクセラレーションがデフォルトで動かない件

前の記事の 「[Silverlight] Silverlight 5 の 3D アクセラレーションはデフォルトでオフ(オフと言うか拒否)」 について。
正直、自分では 「ふーん、デフォルトでは拒否なんだ」 程度にしか思ってなかったんですが、これってかなり残念な感じかも、という気がしてきました。

Silverlight 5 で 3D なゲームを作っても一般の人にはよくわからない理由で動かないわけです。
動くようにするためには以下の手順で 「許可」 してもらう必要があるわけです。

  1. Silverlight プラグインの上で右クリックして 「Silverlight(S)」 をクリック。
  2. 表示されたダイアログの 「アクセス許可」 タブをクリック。
  3. 一欄から自分のサイトを探してもらう。(URL が列挙されてるだけなのでわかりやすいとは言えないかも。frame で別サイトを組み込んでいたりする場合はどうなるんだろう?)
  4. 見つかったらそいつを選んで 「許可」 ボタンを押してもらう。

単に 「アクセス許可を与えてくれ」 だけじゃ、それなりの人にしかわからないでしょうから、この手順を書いとかなくちゃダメって感じになりますね。
先の記事にも書いたように GraphicsDeviceManager.Current.RenderMode を見ればハードウェアアクセラレーションが使えるかどうかがわかるので、それで表示・非表示してやる感じでしょうか。メッセージボックスだと OK ボタンを押して閉じないと Silverlight プラグイン上で右クリックできないので、見ながら操作できるように XAML で書いといた方がよさそうですね。
アプリにもよるでしょうが、最低限、日本語と英語くらいは用意しておいた方がいいかもしれません。

でも、一番の問題はなぜデフォルトでは拒否されているのか、それを許可するとどうなるのか、をきちんと説明しないといけないことじゃないかと思うんですよ。
HTTPS なんかでもありますよね。オレオレ証明書を使っていて 「警告メッセージが表示されるけど問題ないからそのまま OK してくれ」 なんて説明してるサイトが。問題があるから (問題がある可能性があるから) 警告メッセージがでるわけで、こんないい加減な説明をしていいはずがありません。
これと同じで 「何も考えずに 3D グラフィックスを許可してくれ」 はまずいんじゃないかと思うわけですよ。
けど、きちんとした説明を書く自信なんて無いなぁ。

■ RequestDeviceAccess() は無いの?
Silverlight 4 からはカメラやマイクが使えるようになってますが、これも知らないうちにオンにされたりしたら困るわけで、ちゃんと使う前に許可を得なくちゃいけません。
そのために CaptureDeviceConfiguration.RequestDeviceAccess() という静的メソッドが用意されています。
このメソッドを呼び出すだけで

Silverlight5_CameraAccess.png

このダイアログが表示されます。
右クリックしてどうのこうのとしなくても、このダイアログで簡単にアクセス許可の可否を選択できます。
「回答を保存する」 をオンにすれば右クリックで出るダイアログの 「アクセス許可」 のところにちゃんと記録されます。
もちろん、今の言語にあわせて日本語なり、英語なりで表示されます。
「詳細情報」 のリンクをクリックすればマイクロソフトのプライバシーポリシーの説明が表示されます。

3D グラフィックスには RequestDeviceAccess() に相当するものって無いですよね?
デフォルトで拒否でいいからこれを用意して欲しいなぁ。

0 件のコメント:

コメントを投稿