2009/4/14 Na-7
ACLとグラボの相性問題について
注意 | この資料は、筆者が自らの経験を記録したものであり、他人に勧めるものではありません。 この資料を参考として行った行為がいかなる結果になろうとも、筆者は責任を負いませんので予めご承知おきください。 |
◎本稿の主旨
XNA用Animation Component Library(以下ACL)と一部のグラフィックボード(以下グラボ)においては、相性が悪く、エラーが発生することがある。本稿では、この問題の概要や回避方法等について解説する。
本件は、開発したゲームを不特定多数に配布する場合、全てのACL利用者(ゲーム開発者)が注意すべき問題と思われる。
◎問題の概要と回避策
開発段階と配布段階において、問題が発生する可能性がある。
開発段階 | 問題 |
下記4点の組み合わせの相性が悪く、XNAがデバッグ情報(Effect情報含?)を取得又は付加する際に、ACLのEffect設定処理とバッティングしてエラー
(注1)になる。
・一部のグラボ(注2) |
回避策 |
相性の問題であるため、条件を1つでも変更すれば回避できる。 ・Releaseモードでコンパイルする |
|
配布段階 | 問題 | ACL3.0で開発したゲームをClickOnce(注
3)で不特定多数に配布する場合、配布先ユーザが一部のグラボ(注
4)を使用していると、エラー(注5)が発生してゲームが正常に動作しない(最悪起動しない)可能性がある。 この問題は、開発者側PCが相性の良いグラボを使用していた場合でも発生する可能性がある。(「考察」参照) |
回避策 | ClickOnceを使用せずに、Releaseフォルダのモジュールを配布する。 |
注1:エラーメッセージは「Both a valid vertex shader and pixel shader (or valid effect) must be set on the device before any draw operations may be performed.」
注2:筆者サブPC(GeForceFX5200)及びNa-7掲示板で2件(GeForce6800Seriesのどれか、7600GS)、計3件報告されている(2009/4/14現在)
注3:XNA3.0で開発したゲームを配布する際に、配布先ユーザのランタイムインストール作業負荷を軽減できる。詳細はこちら。
注4:筆者サブPC(GeForceFX5200)で現象確認。他のボードでも同様の現象が発生する可能性がある。
注5:エラー内容は注1と同じだが、画面上には特にメッセージ等は表示されないため、原因がわかりにくい。
◎考察
開発段階における問題は、開発者以外の人物に影響しないため、あまり深刻に考える必要はないだろう。
|
|||
配布段階における問題は厄介である。 |
カスタムEffectを使用していても、ACLのルール(注
6)を完全遵守していない場合、この問題が生じる可能性がある(注
7)。相性の良いグラボを使用している開発者は、この問題に気付かずにClickOnceで配布してしまう
危険性が高く、その結果「やっぱXNAは動かねー!」と悪評を招く恐れがある。 |
|
ClickOnceを使用しない場合、ランタイム配布が煩わしいという問題がある。 |
注6:以下にDwarfTutorial内のコメントを転記する
//////Very important////////
//In version 1.0 of XNA the shader was hard coded during model processing.
//For whatever reason the techinque that was used doesn't work XNA 2.0
//As such you have to load a custom fx file (preferable one that has skinning
algorithm in it)
//that sets the vertex and pixel shaders
//Also very important: You should load the effect file before you
create(instanciate) a ModelAnimator
// Load your effect file that contains skinning information
注7:ClickOnceで生成した実行モジュールは、Releaseフォルダの実行モジュールと異なる。そのため、相性の悪いグラボにおいて、Releaseフォルダの実行モジュールは動作するのに、ClickOnceで生成した実行モジュールはエラーになるケースが存在する。
◎情報収集の呼びかけ
本件に関する情報がありましたら、Na-7掲示板への書き込みをお願いします。
もしよろしければ、下記の動作テストにご協力ください。
◎動作テストの説明
目的 | ・相性の良いグラボや悪いグラボの情報を収集する ・配布段階における問題が本当に発生するか確認する |
対象 | 全PC(但し、XNAランタイム をインストールできないPCは除く) |
テスト手順 | ・ClickOnce版の動作テスト
・Releace版の動作テスト
・動作テスト結果報告
|
結果報告例 |
グラボ:GeForceFX5200 (エラーメッセージが確認できた場合は、エラーメッセージも記入する) (その他、何か気付いたことがあれば何でも記入する) |
◎テスト用モジュールの詳細説明
XNA3.0ランタイム未導入PCで Setup.exe を実行すると、ランタイムインストール画面が表示されます。 | |
ランタイムインストール完了後、自動的にテストプログラムが起動されます。 | |
エラーになった場合、error.log ファイルを出力 するようプログラムしてありますが、実際に error.log ファイルの存在を確認したことはありません。(ClickOnceでは無効?) | |
スタートメニューに自動的に登録されますので、動作テスト終了後、「プログラムの追加と削除」や「プログラムと機能」などで削除(アンインストール)してください。 | |
筆者のメインPC(注 8)では正常に動作しますが、サブPC(注9)では 起動しません(ランタイムインストールのみ正常動作しました)。 |
XNA3.0ランタイム未導入PCでは動きません。先にテストAを実行してランタイムを導入してください。 | |
エラーになった場合、.exeファイルと同じフォルダに error.log ファイルを出力します。 (先頭行にエラーメッセージが記録されます) |
筆者のメインPC(注 8)、サブPC(注9)共に正常動作します。 |
テストA、Bのプログラムソースです。 | |
もしDebugモードコンパイルでエラーになる場合は、Releaseモードコンパイルでお試しください。(結果をNa-7掲示板に書いてもらえると嬉しいです) | |
筆者のメインPC(注 8)ではDebugモードコンパイルでも正常に動作します。 |
注8:グラボ:Intel G33オンボード、OS:WindowsXPSP3、XNA3.0開発環境、テストA:○、テストB:○
注9:グラボ:GeForceFX5200、OS:WindowsXPSP3、XNA未導入→ランタイム導入、テストA:×、テストB:○