使用 OpenGL v1.4 进行硬件加速的 Qt 2D 绘图?

Posted

技术标签:

【中文标题】使用 OpenGL v1.4 进行硬件加速的 Qt 2D 绘图?【英文标题】:Qt 2D plotting with hardware acceleration using OpenGL v1.4? 【发布时间】:2013-08-28 18:06:53 【问题描述】:

我们的目标系统具有仅支持 OpenGL 1.4 的旧图形芯片。但是,对于高扫描速率 32K 点示波器类型的绘图,我们确实需要硬件加速。 QCustomPlot 和 QWT 都使用需要 OpenGL ES 2.0 或更高版本的 QPainter 类。有没有简单的方法解决这个问题?或者,有谁知道我们可以使用的另一个绘图工具可以在 OpenGL 1.4 上加速?我们的目标是在 Windows XP SP3 上运行 QT 5.0。

for (int i=0; i<SCAN_SIZE; i++)
    m_plotQmap->insert(i,QCPData(i,lScanData[scan_dataset][i]));
ui->myPlot->graph(0)->setData(m_plotQmap,true);
ui->myPlot->replot();

【问题讨论】:

我现在希望能够绘制所有 32K 点。使用 QCustomPlot,这需要 75 毫秒。我们需要它可能快十倍。 再一次,地块面积有多大?宽x高?你如何绘制“点”?每个点是否有符号(如形状或点)?是否有连接点的线? 最简单的方法是在辅助类中直接使用良好的旧 OpenGL。就个人而言,我可能会将 QtQuick Scene Graph 移植回 OpenGL 1.4 并使用它——它仍然方式比一次性解决方案更灵活,你仍然可以有一个体面的,除了你的情节之外,还有流畅的用户界面。 绘图区域为750x450,是一个带有一些符号的线图。我们需要一个功能齐全的绘图实用程序。感谢您的有趣想法,但我正在寻找更简单的东西。我们的设备运行 Windows XP,因此 DirectX 插件也可以工作。 你的芯片可能只支持 OpenGL 1.4,但如果它支持 DirectX 9.0c,它可能会运行 ANGLE,并且你会通过 Qt 5 获得 OpenGL ES 2 的翻译。你试过 Qt 5 和 ANGLE ? 【参考方案1】:

对于使用 OpenGL 1.4 的目标系统,我建议使用 Qt4。当不满足最低要求时,使用 Qt5 没有任何意义。但是使用 Qt4,您的平台应该一切正常。

除了 OpenGL,Qt4/X11 的组合提供了硬件加速图形(Qt5/X11 不是!),但就像您在 Windows 上一样...

Qwt 6.1 引入了 QwtPlotGLCanvas,您可以在其中使用 OpenGL 绘制引擎之一进行渲染。在 refreshtest 示例中,您可以检查 OpenGL 的效果并将其与软件渲染器进行比较(将 Updates 设置为 0 )。

还可以查看 Qwt 的示波器示例,该示例显示了增量绘制曲线的实现。如果可以以这种方式实现您的绘图,您可以获得非常高的刷新率 - 即使使用软件渲染器也是如此。

【讨论】:

以上是关于使用 OpenGL v1.4 进行硬件加速的 Qt 2D 绘图?的主要内容,如果未能解决你的问题,请参考以下文章

什么时候使用 Qt 在 opengl 中创建渲染上下文?

基于Qt的Opencv代码加速

有没有办法在无头机器上使用使用硬件加速 OpenGL 的应用程序?

如何判断 OpenGL 上下文是不是是硬件加速的?

树莓派3B——打开硬件加速OpenGL

如何在 SDL 中进行硬件加速 Alpha 混合?