Qt5中的OpenGl实例化渲染

时间:2016-08-12 11:53:38

标签: c++ qt opengl

我试图通过实例化渲染许多对象。但是功能

glDrawArraysInstanced()

似乎已在Qt5中删除。它存在于Qt4的QOpenGLFunctions类中,但不存在于Qt5中。

在Qt5中使用实例化的正确方法是什么?

1 个答案:

答案 0 :(得分:2)

Qt 4中没有QOpenGLFunctions(Qtpen中已经引入了QOpenGL *类)。

您的两个链接确实指向了两个不同的 Qt 5 类:  QOpenGLFunctions_4_2_CoreQOpenGLFunctions

这两个类都是OpenGL函数解析器,所以你可以编写类似的东西:

// get the object from somewhere (usually, a QOpenGLContext)
QOpenGLFunctions *functions = ...
functions->glCreateShader(...);
functions->glDrawArrays(...);

它们之间的区别是:

  • QOpenGLFunctions的目标是"公共子集"在OpenGL ES 2和OpenGL 2.1 + FBO之间。因此它可以在"桌面"和#34;嵌入",只要您对该子集不满意;您可以在台式计算机上进行开发,然后部署到嵌入式计算机,您不需要更改GL代码。 (理论上。)
  • QOpenGLExtraFunctions的目标是"公共子集"在OpenGL ES 3.1和OpenGL 4.3(?)之间。同样的事情,但更大的版本,所以更多的功能:计算着色器,绘制间接,采样器,不可变纹理,转换反馈等。如果您只有OpenGL 2或3,只要您拥有正确的扩展名,它的一部分仍然可以使用。
  • QOpenGLFunctions_4_2_Core和所有其他类似的_X_Y_Profile类只能在与类名兼容的Desktop OpenGL上下文中工作(例如,4_2_Core将适用于版本相同或更大的任何OpenGL上下文超过4.2,核心或兼容性配置文件)。

如果您想使用实例化,如果您只针对桌面(因此您至少需要3.1版)或QOpenGLFUnctions_X_Y_Profile,您可以选择合适的QOpenGLExtraFunctions。两者都有glDrawArraysInstanced