Рендерер opengl не работает Intel HD Graphics 2500

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

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

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


person christophocles    schedule 14.10.2013    source источник
comment
Известно, что видеокарты Intel имеют проблемы со многими вещами. Лучше возьми другую карту.   -  person user1306322    schedule 18.10.2013


Ответы (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
person Decatf    schedule 17.10.2013
comment
Decatf, это очень интересно! Это может помочь сузить ошибку. Я все еще думаю, что это проблема с драйвером, а не с ILNumerics. Но мы посмотрим и, возможно, предложим обходной путь для этой проблемы. Спасибо - person Haymo Kutschbach; 21.10.2013
comment
Потратив на это некоторое время, я не могу рекомендовать этот метод. Действительно, кажется, что это работает (также на моем HD 2500), но просто слишком хакерское, чтобы служить «решением». На моей машине даже достаточно включить шкалу логарифмической оси только на каком-то графике. Нет необходимости в дополнительной форме точек. Но все, что это делает, это изменение порядка рендеринга (случайным) образом, чтобы драйвер Intel не зависал. Тем не менее, драйвер по-прежнему возится с юниформ-блоками OpenGL, и вместо этого он может дать сбой в какой-то другой момент. Итак: нет, к сожалению, это не решение :/ - person Haymo Kutschbach; 21.10.2013
comment
если это глупо, но работает, то это не глупо! Я не могу заставить всех своих пользователей покупать нормальную видеокарту. мой выбор - использовать только рендеринг GDI и сделать всю графику мучительно медленной, или, по крайней мере, попробовать этот хак. и если взлом не удался, а графический драйвер все еще дает сбой, это не похоже на то, что был нанесен какой-либо вред. он вернется к рендерингу GDI, и я вернусь к тому, с чего начал. спасибо, @Decatf! - person christophocles; 08.01.2014
comment
Я должен согласиться с Хаймо. Со временем я заметил, что в разных версиях драйверов также возникают проблемы с рендерингом. Например, в некоторых версиях драйверов осевые линии не отображаются или мерцают при изменении вида камеры. Просто имейте в виду, что хотя это позволяет обойти первоначальный сбой, на самом деле это не очень хорошее решение, поскольку пользователи будут запускать его на самых разных конфигурациях драйверов. - person Decatf; 14.01.2014

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

person Haymo Kutschbach    schedule 16.10.2013
comment
конечно, я могу получить дискретную видеокарту для своей рабочей станции, но приложение, которое я разрабатываю, будет использоваться другими, у которых, скорее всего, есть графика Intel. как я могу получить больше информации, чтобы прикрепить к этому сообщению об ошибке? например, какое конкретное расширение opengl не работает? - person christophocles; 16.10.2013