繁体   English   中英

Qt5中的OpenGl实例渲染

[英]OpenGl instanced rendering in Qt5

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

glDrawArraysInstanced()

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

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

Qt 4中没有QOpenGLFunctions这样的东西(QOpenGL 5中已经引入了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之间的“公共子集”。 因此,只要您对该子集满意,它就可以在“桌面”和“嵌入式”环境下工作。 您可以在台式计算机上进行开发,然后部署到嵌入式系统,而无需更改GL代码。 (理论上。)
  • QOpenGLExtraFunctions针对OpenGL ES 3.1和OpenGL 4.3(?)之间的“公共子集”。 同样的东西,但是版本更大,所以功能更多:计算着色器,间接绘制,采样器,不变纹理,变换反馈等。 如果您只有OpenGL 2或3,只要拥有正确的扩展名,它的一部分仍然可以使用。
  • QOpenGLFunctions_4_2_Core和所有其他类似的_X_Y_Profile类仅在与类名兼容的Desktop OpenGL上下文中工作(例如, 4_2_Core将在版本等于或大于4.2的任何OpenGL上下文以及Core或Compatibility概要文件中使用)。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM