我试图将OpenGL驱动程序与ILNumerics可视化一起使用是不成功的。我正在尝试按照快速入门指南进行基本可视化 - 每次启动应用程序时,我都会收到错误消息“找不到或未激活兼容的硬件加速驱动程序”,并显示错误报告“尝试读取或写入受保护的内存。”通常表明其他记忆是腐败的“。图形驱动程序回退到GDI,这非常慢。
我已针对此问题尝试了所有建议的修复程序。我安装了最新的Intel HD图形驱动程序,并运行了OpenGL Extensions查看器,表明支持OpenGL 4.0。 ILNumerics文档表明需要3.1+,我的系统似乎支持。
所以我在这里不知所措。有没有办法在这块英特尔卡上使用硬件渲染?
答案 0 :(得分:2)
我一直在尝试使用ILNumerics OpenGL驱动程序,但使用的是Intel HD4000。我得到相同的错误,调试日志显示ILNumerics在glDrawElements调用时崩溃。
我在初始化ilPlotCube时找到了解决方法,以便OpenGL驱动程序不会崩溃。我正在使用NuGet的Window Forms ilPanel控件和ilNumerics 3.2.2.0。
对我来说,这运行并且使用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驱动程序成功加载,则从场景中删除points元素。根据需要设置轴刻度。添加另一个图表元素,用于绘制您想要绘制的实际内容。
// 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
答案 1 :(得分:1)
英特尔高清显卡经常会导致OpenGL出现问题。你应该在英特尔bugtracker上提交一个bug报告,并使用支持OpenGL 3.1的显卡 - 真的。