2013-10-14 4 views
4

Я неудачно пытался использовать драйвер OpenGL с визуализацией ILNumerics. Я пытаюсь просто сделать базовую визуализацию после краткого руководства по началу работы - каждый раз, когда я запускаю приложение, я получаю сообщение об ошибке «Не удалось найти или активировать совместимый аппаратный ускоритель» с сообщением об ошибке «Попытка чтения или записи защищенной памяти. часто свидетельствует о том, что другая память повреждена ». Графический драйвер возвращается к GDI, который очень медленный.Оператор рендеринга opengl не работает. Графика Intel HD 2500

Я пробовал все предлагаемые исправления для этой проблемы. Я установил новейший графический драйвер Intel HD, и я запустил средство просмотра OpenGL Extensions, которое указывает, что OpenGL 4.0 поддерживается. Документация ILNumerics указывает, что требуется 3,1+, которое, как мне кажется, поддерживает моя система.

Итак, я затрудняюсь здесь. Есть ли способ использовать аппаратное рендеринг с этой карточкой Intel или нет?

+0

У графических карт Intel, как известно, есть проблемы со множеством вещей. Лучше получите другую карту. – user1306322

ответ

2

Я также пытался использовать драйвер ILNumerics OpenGL, но с Intel HD4000. Я получаю ту же ошибку, и журнал отладки показывает, что ILNumerics вылетает с вызовом glDrawElements.

Я нашел работу при инициализации ilPlotCube, чтобы драйвер OpenGL не разбился. Я использую элемент управления ilPanel Window Forms и ilNumerics 3.2.2.0 от NuGet.

  • В событии ilPanel_load создайте ilPlotCube и установите масштаб оси x в логарифмический. Добавьте сюжетный куб на сцену.
  • Добавьте элемент ilPoint в plotcube. Я заполняю его случайными данными.
  • Для меня это выполняется, и управление графиком загружается с использованием драйвера 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 
+0

Decatf, это очень интересно! Это может помочь сузить ошибку. Я все еще думаю, что это проблема с драйвером, а не с ILNumerics. Но мы рассмотрим и, возможно, обеспечим обход проблемы. Спасибо –

+1

Потратив некоторое время на это, я не могу рекомендовать этот метод. Действительно, похоже, что это работает (также на моем HD 2500), но просто слишком хаки, чтобы служить «решением». На моей машине достаточно даже включить только масштабы осей журнала на каком-либо участке. Нет необходимости в форме дополнительных точек. Но все, что это делает, чтобы изменить порядок рендеринга (случайным образом), что драйвер Intel не сбой. Тем не менее, драйвер все еще запутывается с едиными блоками OpenGL, и вместо этого может произойти сбой в какой-то другой точке. Итак: нет, к сожалению, это не решение:/ –

+0

если он немой, но он работает, это не глупо! я не могу заставить всех своих пользователей покупать подходящую графическую карту.мой выбор состоит в том, чтобы использовать только GDI-рендеринг, и все графики будут очень медленными или, по крайней мере, попытаться взломать. и если хак завершится неудачей, и графический драйвер все еще терпит крах, это не значит, что был нанесен какой-либо вред. он вернется к рендерингу GDI, и я вернусь туда, где я начал. Спасибо, @Decatf! – christophocles

1

Графика Intel HD часто вызывает проблемы с OpenGL. Вы должны подать bugreport на Intel bugtracker и прибегнуть к графической карте, которая действительно поддерживает OpenGL 3.1.

+2

уверен, что я могу получить дискретную графическую карту для своей рабочей станции, но приложение, которое я разрабатываю, будет использоваться другими, у которых, скорее всего, есть интеллектуальная графика. как я могу получить дополнительную информацию для прикрепления к этому отчету об ошибке? как то, какое конкретное расширение расширения не работает? – christophocles

Смежные вопросы