如何在Qt 5.4中使用原生OpenGL?

时间:2015-06-30 13:12:50

标签: qt opengl

我想使用Qt 5.4来创建一个窗口,并使用普通的OpenGL函数在该窗口中渲染一些东西。在过去的几天里,我读了很多关于Qt类以及如何初始化OpenGL等等。我认为,我必须处理的主要类是QOpenGLWindow或QOpenGLWidget,但也有QSurface和其他一些类。现在我非常不确定接下来要做什么以及我应该使用哪个类来使用普通的OpenGL函数。有人可以更清楚地向我解释我要设置Qt GUI我可以使用普通的OpenGL做什么吗?

我提出的其他一些问题是:

  • Qt在哪一点创建一个简单的OpenGL上下文?我是否必须使用QOpenGLContext?
  • QSurface和QOpenGLWindow之间究竟有什么区别?在QOpenGLWindow示例中,使用了两个类。
  • 除了这个qt之外,是否可以使用glew?这里有一些问题,涉及用qt设置glew,但我认为我没有明白为什么需要glew。

编辑:我和一位同事讨论了这个问题,我们唯一的结论是使用Offscreen-Rendering。有谁知道另一种解决方案?

1 个答案:

答案 0 :(得分:1)

  

Qt在哪一点创建一个简单的OpenGL上下文?我必须使用QOpenGLContext吗?

在其记录的位置(例如,创建QOpenGLWidgetQOpenGLWindow将自动创建上下文),或者您可以随时通过创建{手动创建上下文{1}}对象。

  

QSurface和QOpenGLWindow之间究竟有什么区别?在QOpenGLWindow示例中,使用了两个类。

QOpenGLContext是表示"可绘制表面的基类" (屏幕上或屏幕外)。 QSurface是其屏幕实现(代表顶级窗口),因此它继承自QWindow。您可以使用OpenGL或使用基于CPU的光栅化器绘制QSurface

最后,QWindow是一个QOpenGLWindow子类,通过自动创建和管理OpenGL上下文(通过QWindow)提供一些额外的功能和便利,具有可选的部分更新策略(通过使用FBO)等。

  

除了这个qt之外,是否可以使用glew?这里有一些问题,涉及用qt设置glew,但我认为我没有明白为什么需要glew。

Qt不合适。并且它不会以任何方式改变您对OpenGL的使用。只需使用Qt创建窗口和上下文(以完全跨平台的方式),然后您就可以自由使用GLEW(解析OpenGL函数指针,扩展等)或任何第三方OpenGL抽象。