locked
オンボードでは3Dプリミティブが作成できない? RRS feed

  • 質問

  • 3Dモデルを表示するプログラムを組んだところ、グラフィックカードを挿したPCでは正常に動作するのですが、

    グラフィックカードを抜くとエラーがでるという状況になっています。描画部分のプログラムの概要を示します。

     

    protected override void Draw()

    {

    if (this.device= null)

    return;

     

    this.device.Clear(Color.CornflowerBlue);

     

    // ポリゴンを描画する

    world = Matrix.Identity;

    this.device.VertexDeclaration = vertexDeclaration;

     

    // effect設定(コードは省略します)

     

    effect.Begin();

    this.device.RenderState.CullMode = CullMode.None;
    effect.CurrentTechnique.Passes[0].Begin();

     

    this.device.DrawIndexedPrimitives(
                    PrimitiveType.TriangleList, 0, 0, vertices.Length, 0, indices.Length / 3);

     

     effect.CurrentTechnique.Passes[0].End();
     effect.End();

    }


    上記の青色の箇所で、

     

    System.InvalidOperationException' のハンドルされていない例外が Microsoft.Xna.Framework.dll で発生しました。

    追加情報:An unexpected error has occurred.


    が発生します。詳細ステップを実行しても上記の部分から進むとエラーが発生します。

     

    vertices,indicesはそれぞれ、

    private VertexPositionNormalTexture[] vertices;

    private int[] indices;

    のように定義し、前処理で計算を行っています。

    オンボードでも動くようにしたいため、インデックスバッファは16bitを超えないようにしています。

     

    実行環境は以下のようになっております。

    OS : Windows XP SP2

    開発環境 : Visual Studio 2008

                    .NET Framework 3.5 SP1

                    XNA Game Studio 3.0 CTP

    オンボード : Intel(R) Q965/Q963Express Chipset Family

    グラフィックボード:RADEON X1300 

     

    情報をお持ちの方いらっしゃいましたら、よろしくお願いします。
    2008年11月7日 11:41

回答

  • 追加情報の無い例外が発生するのは殆どの場合、DirectX、というよりもドライバ側が正しくエラーハンドリングできなかった時に発生します。

    Q965/Q963というとGMA 3000になりますが、
    VertexDeclaratioの内容とシェーダー内で参照しているパラメーターが違うと同じ問題が発生した経験があります。私の場合はシェーダー内でColorを参照しているのに、VertexDeclarationにColor宣言が無かったというケースでした。

    Direct Xのランタイムをデバッグモードにすると、このパラメーターチェックをするのでリリースで動作していたものがデバッグでは上記と同じ現象になります。
    2008年11月7日 15:24

すべての返信

  • 追加情報の無い例外が発生するのは殆どの場合、DirectX、というよりもドライバ側が正しくエラーハンドリングできなかった時に発生します。

    Q965/Q963というとGMA 3000になりますが、
    VertexDeclaratioの内容とシェーダー内で参照しているパラメーターが違うと同じ問題が発生した経験があります。私の場合はシェーダー内でColorを参照しているのに、VertexDeclarationにColor宣言が無かったというケースでした。

    Direct Xのランタイムをデバッグモードにすると、このパラメーターチェックをするのでリリースで動作していたものがデバッグでは上記と同じ現象になります。
    2008年11月7日 15:24
  •  Yuichi Ito - MSFT さんからの引用

    Q965/Q963というとGMA 3000になりますが、
    VertexDeclaratioの内容とシェーダー内で参照しているパラメーターが違うと同じ問題が発生した経験があります。私の場合はシェーダー内でColorを参照しているのに、VertexDeclarationにColor宣言が無かったというケースでした。

     

    まさに、そのケースでした。

     

    Initializeメソッドの中で

     

    effect.VertexColorEnabled = true;

     

    と記述していたところを false にすると表示できるようになりました。

    ありがとうございました。

    2008年11月11日 5:51