4

ILNumerics ビジュアライゼーションで OpenGL ドライバーを使用しようとして失敗しました。クイック スタート ガイドに従って基本的なビジュアライゼーションを実行しようとしています。アプリケーションを起動するたびに、「互換性のあるハードウェア アクセラレーション ドライバーが見つからないか、アクティブ化できませんでした」というエラー メッセージが表示され、「保護されたメモリを読み書きしようとしました。この多くの場合、他のメモリが破損していることを示しています。」グラフィックス ドライバーは、非常に遅い GDI にフォールバックします。

この問題に対して提案されたすべての修正を試しました。最新の Intel HD グラフィックス ドライバーをインストールし、OpenGL 4.0 がサポートされていることを示す OpenGL Extensions ビューアーを実行しました。ILNumerics のドキュメントには、私のシステムがサポートしているように見える 3.1+ が必要であることが示されています。

だから私はここで途方に暮れています。この Intel カードでハードウェア レンダリングを使用する方法はありますか?

4

2 に答える 2

2

また、ILNumerics OpenGL ドライバーを使用しようとしましたが、Intel HD4000 を使用しています。同じエラーが発生し、デバッグ ログには、glDrawElements 呼び出しで ILNumerics がクラッシュしたことが示されます。

OpenGL ドライバーがクラッシュしないように、ilPlotCube を初期化するときに回避策を見つけました。NuGet の Window Forms ilPanel コントロールと ilNumerics 3.2.2.0 を使用しています。

  • ilPanel_load イベントで ilPlotCube を作成し、x 軸のスケールを対数に設定します。プロットキューブをシーンに追加します。
  • ilPoint 要素をプロットキューブに追加します。ランダムなデータで埋めます。
  • 私にとっては、これが実行され、クラッシュすることなく OpenGL ドライバーを使用してプロット コントロールが読み込まれます。

    void ilPanel1_Load(object sender, EventArgs e)
    {                     
        var pc = new ILPlotCube(twoDMode: false);
        // Set an axis scale to logarithmic so the GL driver will not crash
        pc.ScaleModes.XAxisScale = AxisScale.Logarithmic;
    
        // Create a new scene
        var scene = new ILScene();  
        scene.Add(pc);            
        this.ilPanel1.Scene = scene;
    
        // Add points to the scene so the GL driver will not crash
        this.AddPoints();
    }
    
    /// <summary>
    /// Add an ILPoints object so GL driver will not crash
    /// </summary>
    private void AddPoints()
    {
        var pc = ilPanel1.Scene.First<ILPlotCube>();
    
        ILArray<float> A = ILMath.tosingle(ILMath.rand(3, 1000));
        var points = new ILPoints
        {
            Positions = A,
            Colors = A,
            Size = 2,
        };
    
        pc.Add(points);
        this.points = points;
    }
    

コントロールが OpenGL ドライバーで正常に読み込まれる場合は、ポイント要素をシーンから削除します。必要に応じて軸スケールを設定します。プロットしたい実際のものをプロットする別のチャート要素を追加します。

        // Remove the ILPoints shape
        if (this.points != null && ilPanel1.Scene.Contains(points))
        {
            ilPanel1.Scene.Remove(this.points);
            this.points = null;
        }

        // Set the axis scale back to linear
        var pcsm = ilPanel1.Scene.First<ILPlotCube>().ScaleModes;
        pcsm.XAxisScale = AxisScale.Linear;

        // Add actual plots here
于 2013-10-17T20:51:37.843 に答える