迁移基于 Qt QGL 的项目以使用 OpenGL 4.3

Posted

技术标签:

【中文标题】迁移基于 Qt QGL 的项目以使用 OpenGL 4.3【英文标题】:Migrating a Qt QGL based project to use OpenGL 4.3 【发布时间】:2015-06-03 05:28:57 【问题描述】:

自从大约 6 个月前我第一次开始我当前的 Qt 项目以来,它一直在使用我认为 1.3 版的 OpenGL。然而,最近,我一直渴望真正开始改进我渲染事物的方式,而且我似乎遗漏了许多似乎在更高版本的 OpenGL 中使用的功能。

由于 Qt 显然支持 OpenGL 4.3,出于多种原因我想切换到它,但我听说很多功能也不再支持。

迁移到 4.3 版的最佳做法是什么?

例如,我的引擎中所有可渲染对象的网格组件通过setAttributeArray();处理绑定顶点,然后通过使用glDrawArrays(mode,start,range);进行渲染

我只是担心我最终可能会出现数百个错误并从根本上改变许多事情的工作方式,这就是为什么我很好奇是否有人对做出改变有任何建议。

我想要这样做的原因是因为我希望实现更多的图形效果,例如 SMAA 或 FXAA、阴影,甚至只是 mipmap,而且我为每个类别找到的所有教程都使用了 OpenGL 1.3 以上的功能

【问题讨论】:

这听起来更像是一个更通用的“如何从 Legacy OpenGL (OpenGL 1.x) 移植到现代 OpenGL” 【参考方案1】:

我不知道 QOpenGLFunctions 和 QOpenGLWidget 类的存在,我都将它们扩展为我自己的新类以获得我想要的新功能。

我过去只扩展 QGLWidget,但通过执行我刚才提到的操作,我能够维护我之前的大部分工作,并且大部分只更改声明。

【讨论】:

以上是关于迁移基于 Qt QGL 的项目以使用 OpenGL 4.3的主要内容,如果未能解决你的问题,请参考以下文章

Qt 5.2 和 5.10 上 OpenGL 的差异

使用 QOpenGLContext 在小部件中进行渲染

Qt + OpenGL 入门

在没有 openGL 的情况下使用 Qt

带有 OpenGL 上下文的基于 Qt 的命令行工具

基于Qt的OpenGL可编程管线学习- 使用Instanced方式绘制