PySide6.QtOpenGL.QOpenGLVertexArrayObject

class QOpenGLVertexArrayObject

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

PySide6.QtOpenGL.QOpenGLVertexArrayObject 的继承图

概要

方法

注意

本文档可能包含从C++自动翻译到Python的代码片段。我们始终欢迎对代码片段翻译的贡献。如果您发现翻译问题,您也可以通过在我们的https:/bugreports.qt.io/projects/PYSIDE上创建工单来告知我们。

详细描述

顶点数组对象(VAO)是一个OpenGL容器对象,它封装了将逐顶点属性数据指定到OpenGL管线所需的状态。换句话说,VAO记住了缓冲对象的状态(参见QOpenGLBuffer)及其关联状态(例如顶点属性除数)。这提供了一种非常简便且高效的方法,用于在渲染场景中不同“对象”时切换OpenGL缓冲状态。QOpenGLVertexArrayObject类是OpenGL VAO的一个轻量级封装。

对于桌面设备,VAOs作为核心功能在OpenGL 3.0或更高版本中支持,对于旧版本则通过GL_ARB_vertex_array_object支持。在OpenGL ES 2上,VAOs由可选的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容器对象一样,是特定于它们被创建的上下文,并且不能在上下文组之间共享。

另请参阅

Binder QOpenGLBuffer

__init__([parent=None])
Parameters:

父对象QObject

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

bind()

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

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

create()
Return type:

布尔

创建底层的OpenGL顶点数组对象。必须有一个支持顶点数组对象的有效OpenGL上下文,此函数才能成功。

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

当返回值为false时,顶点数组对象支持不可用。这不是一个错误:在具有OpenGL 2.x或OpenGL ES 2.0的系统上,顶点数组对象可能不受支持。在这种情况下,应用程序可以自由继续执行,但必须准备好以无VAO的方式操作。这意味着,除了调用bind()之外,还必须检查isCreated()的值,并且在不存在顶点数组对象时,必须以传统方式初始化顶点数组。

另请参阅

isCreated()

destroy()

销毁底层的OpenGL顶点数组对象。必须有一个支持顶点数组对象的有效OpenGL上下文,此函数才能成功。

isCreated()
Return type:

布尔

如果底层的OpenGL顶点数组对象已创建,则返回true。如果返回true并且关联的OpenGL上下文是当前的,那么你可以bind()这个对象。

objectId()
Return type:

整数

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

release()

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

class Binder

Binder 类是一个便利类,用于帮助绑定和释放 OpenGL 顶点数组对象。More_

概要

方法

注意

本文档可能包含从C++自动翻译到Python的代码片段。我们始终欢迎对代码片段翻译的贡献。如果您发现翻译问题,您也可以通过在我们的https:/bugreports.qt.io/projects/PYSIDE上创建工单来告知我们。

详细描述

Binder 是一个简单的便利类,可用于帮助绑定和释放 QOpenGLVertexArrayObject 实例。这个类对于 QOpenGLVertexArrayObject 就像 QMutexLocker 对于 QMutex 一样。

该类实现了RAII原则,有助于确保在复杂代码或存在异常情况下的行为。

此类的构造函数接受一个QOpenGLVertexArrayObject(VAO)作为参数,并尝试绑定VAO,必要时调用create()。此类的析构函数调用release(),这将解除VAO的绑定。

如果需要,可以使用release()函数暂时解绑VAO,并再次使用rebind()进行绑定。

__init__(v)
Parameters:

vQOpenGLVertexArrayObject

创建一个Binder对象,并通过调用bind()绑定v。如果需要,它首先调用create()

__enter__()
Return type:

Binder

__exit__(arg__1, arg__2, arg__3)
Parameters:
  • arg__1 – 对象

  • arg__2 – 对象

  • arg__3 – 对象

rebind()

可用于重新绑定关联的顶点数组对象。

另请参阅

release()

release()

可用于临时释放关联的顶点数组对象。

另请参阅

rebind()