class QOpenGLVertexArrayObject#

QOpenGLVertexArrayObject 类封装了一个 OpenGL 顶点数组对象。 更多

Inheritance diagram of PySide6.QtOpenGL.QOpenGLVertexArrayObject

概要#

方法#

注意:

本文档可能包含从C++自动翻译到Python的代码片段。我们始终欢迎向片段翻译做出贡献。如果您发现翻译中存在问题,您也可以在https:/bugreports.qt.io/projects/PYSIDE上创建工单与我们联系。

详细描述#

顶点数组对象(VAO)是一个OpenGL容器对象,它封装了用于向OpenGL管线指定每顶点属性数据的所需状态。换句话说,VAO会记住缓冲区对象(参见 QOpenGLBuffer )及其相关状态(例如顶点属性除数)。这使得在场景中渲染不同的“对象”之间切换OpenGL缓冲区状态变得非常简单且高效。QOpenGLVertexArrayObject类是一个围绕OpenGL VAO的薄包装。

对于桌面,VAO在OpenGL 3.0或更高版本以及老版本的GL_ARB_vertex_array_object中作为核心功能支持。在OpenGL ES 2中,VAO由可选的GL_OES_vertex_array_object扩展提供。您可以使用QOpenGLContext::surfaceFormat()检查OpenGL版本,并使用QOpenGLContext::hasExtension()检查扩展是否存在。

与其他Qt OpenGL类一样,QOpenGLVertexArrayObject有一个create()函数来创建底层的OpenGL对象。这是为了让开发者能确保在适当的时刻有一个有效的当前OpenGL上下文。

一旦成功创建一个VAO,典型的使用模式是:

  • 在场景初始化函数中,对于每个视觉对象

    • 绑定VAO

    • 设置此视觉对象的顶点数据状态(顶点、法线、纹理坐标等)

    • 解绑(release())VAO

  • 在渲染函数中,对于每个视觉对象

    • 绑定VAO(如果需要,则绑定着色器程序)

    • 调用一个glDraw*()函数

    • 解绑(release())VAO

在渲染函数中绑定VAO的动作会使得初始化阶段设置的所有顶点数据状态得以恢复。通过这种方式,我们可以在设置VAO时设置大量状态,并且可以高效地在渲染对象的状态集合之间切换。使用VAO还允许OpenGL驱动程序分摊顶点数据的验证检查。

注意:

顶点数组对象,类似于所有其他OpenGL容器对象,对于创建它们的上下文是特定的,并且不能在上下文组之间共享。

参见:

绑定器 QOpenGLBuffer

__init__([parent=None])#
参数

parentQObject

创建一个具有给定parentQOpenGLVertexArrayObject。在使用之前,必须调用create(),并且有一个有效的OpenGL上下文。

bind()#

将此顶点数组对象绑定到OpenGL绑定点。从这一点开始,直到调用release()或将另一个顶点数组对象绑定,对顶点数据状态的任何修改都将存储在此顶点数组对象中。

如果随后绑定了另一个顶点数组对象,可以通过再次调用这个对象的bind()来之后恢复与此对象关联的状态集。这允许在渲染函数之间有效地更改顶点数据状态。

create()#
返回类型

bool

创建底层OpenGL顶点数组对象。对于这个函数成功执行,必须有一个支持顶点数组对象的当前有效OpenGL上下文。

如果OpenGL顶点数组对象成功创建,则返回true

如果返回值为false,则顶点数组对象支持不可用。这并不错误:在高端OpenGL 2.x或OpenGL ES 2.0的系统中,可能不支持顶点数组对象。在这种情况下,应用程序可以继续执行,但必须准备以无VAO的方式操作。这意味着,在不存在顶点数组对象的情况下,不仅要调用bind(),还要检查isCreated()的值,并使用传统方式初始化顶点数组。

destroy()#

销毁底层OpenGL顶点数组对象。必须有一个支持顶点数组对象的当前有效OpenGL上下文,以便这个函数成功执行。

isCreated()#
返回类型

bool

如果底层的OpenGL顶点数组对象已经创建,则返回 true。如果此函数返回 true 并且相关的OpenGL上下文是当前的,那么你能够使用以下方法bind() 此对象。

objectId()#
返回类型

int

返回底层OpenGL顶点数组对象的ID。

release()#

通过绑定默认顶点数组对象(ID = 0)来解绑此顶点数组对象。