Sir*_*sar 16
我不想开始使用QOpenGL包装器,并发现我无法使用OpenGL API的全部功能
好吧,Qt 5.0的OpenGL包装器建立在OpenGL ES(嵌入式系统)2.0规范之上,该规范本质上是桌面OpenGL 3.0规范的简化版本.Qt之所以选择此规范是为了便于移植,因为它几乎被所有现代PC都支持,因此受到移动平台的广泛支持.如果您选择使用Qt包装器,则必须解决OpenGL ES 2.0规范的缺点,该规范在很大程度上属于以下类别:
glBegin,glEnd,glLightf等.)highp,lowp声明等)glBlitFramebuffer,glMultiDrawArrays,glDrawRangeElements等.)有关OpenGL ES 2.0规范的完整说明,请参见此处.
但是,缺少这些功能并不意味着Qt包装器无法满足您的需求.虽然OpenGL ES 2.0缺少许多有用的功能,但您仍然可以完成整个桌面OpenGL规范允许的99%.如果您决定通过自定义包装器使用桌面OpenGL规范,Qt仍然可以通过使用QGLFormat该类来管理桌面OpenGL上下文的创建和窗口化.
请记住,如果您决定使用桌面OpenGL包装器,并在Qt应用程序中使用它们,Qt提供的某些类可能会干扰自定义包装器的操作.例如,QGLWidget上的QPainter操作可能会利用OpenGL ES规范的功能,并可能会干扰包装器对象的操作.
就个人而言,我更喜欢使用自定义OpenGL包装器,因为我更喜欢桌面OpenGL规范,因为功能集更好地定义,并且它们提供了更多选项来解决问题.另一方面,Qt 5提供了一些绝对出色的架构,可以使用OpenGL ES创建快速,强大的动态用户界面.(通过QtQuick 2和QML)
哪种API最适合您的需求主要取决于您是否针对嵌入式或移动平台(在这种情况下您被迫使用OpenGL ES),以及您是否愿意牺牲额外的开发时间来编写和维护自定义OpenGL 3+包装器.