Qt5中的OpenGL与QOpenGL/QtOpenGL:差异和局限性?
由于有两种方法可以将OpenGL与(/wrapper和常规API)结合使用,我想知道每种方法的局限性是什么。有人能告诉我QOpenGL包装是否有我应该注意的限制吗 我问这个问题的原因是因为我不想开始使用QOPENGLWrapper并发现我不能使用OpenGLAPI的全部功能。是否有人对这两方面都有经验,并能在功能、性能和易用性方面提供一些提示 我不想开始使用QOPENGLWrapper,然后发现我不能使用OpenGLAPI的全部功能 好的,Qt5.0的OpenGL包装器是建立在OpenGL ES(嵌入式系统)2.0规范之上的,该规范本质上是桌面OpenGL 3.0规范的简化版本。Qt选择此规范是为了便于移植,因为它除了在几乎所有现代PC上都受支持外,还受到移动平台的广泛支持。如果您选择使用Qt包装器,您必须克服OpenGL ES 2.0规范的缺点,该规范在很大程度上分为以下几类:Qt5中的OpenGL与QOpenGL/QtOpenGL:差异和局限性?,qt,opengl,qt5,Qt,Opengl,Qt5,由于有两种方法可以将OpenGL与(/wrapper和常规API)结合使用,我想知道每种方法的局限性是什么。有人能告诉我QOpenGL包装是否有我应该注意的限制吗 我问这个问题的原因是因为我不想开始使用QOPENGLWrapper并发现我不能使用OpenGLAPI的全部功能。是否有人对这两方面都有经验,并能在功能、性能和易用性方面提供一些提示 我不想开始使用QOPENGLWrapper,然后发现我不能使用OpenGLAPI的全部功能 好的,Qt5.0的OpenGL包装器是建立在OpenGL ES
glBegin
、glEnd
、glLightf
等)highp
、lowp
声明的数据精度要求等)glBlitFramebuffer
,glMultiDrawArrays
,glDrawRangeElements
等)QGLFormat
类来管理桌面OpenGL上下文的创建和窗口化
请记住,如果您决定使用桌面OpenGL包装,并在Qt应用程序中使用这些包装,Qt提供的某些类可能会干扰自定义包装的操作。例如,QGLWidget上的QPaint操作可能利用OpenGL ES规范的功能,并可能干扰包装器对象的操作
就个人而言,我更喜欢使用自定义OpenGL包装器,因为我更喜欢桌面OpenGL规范,因为功能集定义得更好,并且它们提供了更多选项来解决问题。另一方面,Qt5提供了一些绝对奇妙的体系结构,用于使用OpenGL ES创建快速、强大的动态用户界面。(通过QtQuick 2和QML)
哪种API最适合您的需求基本上取决于您是否针对嵌入式或移动平台(在这种情况下,您被迫使用OpenGL ES),以及您是否愿意牺牲额外的开发时间来编写和维护自定义OpenGL 3+包装 如果我同时使用OpenGL4.1,答案是否相同?我相信您可以通过设置上下文版本(即QGLFormat::setVersion(4,1))并调用OpenGL 4.1类来使用具有4.1功能的QOpenGL包装器。您可以使用Qt创建OpenGL 4.1上下文,但您会发现一些Qt包装器是为OpenGL ES规范设计的,不支持某些功能。例如,
QOpenGLFramebufferObject
类不支持多目标渲染。速度有差异吗?如果使用opengl api,函数会比使用Qopengl更快吗?还是相同?这取决于您将使用的opengl标准的版本。如果您使用的是桌面OpenGL 3+,那么在渲染复杂场景时,您肯定会看到使用QOpenGL的性能有所提高。渲染简单场景时,与使用OpenGL 3+和OpenGL ES 2.0相比,性能上的差异可以忽略不计。这个问题与任何试图使用Qt和OpenGL的人都非常相关。因此,是的,这是建设性的。