PySide6.QtOpenGL.QOpenGLVertexArrayObject¶
- class QOpenGLVertexArrayObject¶
QOpenGLVertexArrayObject
类封装了一个 OpenGL 顶点数组对象。More_…概要¶
方法¶
def
__init__()
def
bind()
def
create()
def
destroy()
def
isCreated()
def
objectId()
def
release()
注意
本文档可能包含从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的行为具有恢复初始化阶段设置的所有顶点数据状态的效果。通过这种方式,我们可以在设置VAO时设置大量状态,并有效地在要渲染的对象的状态集之间切换。使用VAO还允许OpenGL驱动程序分摊顶点数据的验证检查。
创建一个带有给定
parent
的QOpenGLVertexArrayObject
。在使用之前,您必须使用有效的OpenGL上下文调用create()
。- bind()¶
将此顶点数组对象绑定到OpenGL绑定点。从此时起,直到调用
release()
或绑定另一个顶点数组对象,对顶点数据状态的任何修改都将存储在此顶点数组对象中。如果随后绑定了另一个顶点数组对象,您可以通过再次调用此对象上的bind()来恢复与此对象关联的状态集。这允许在渲染函数中高效地更改顶点数据状态。
- create()¶
- Return type:
布尔
创建底层的OpenGL顶点数组对象。必须有一个支持顶点数组对象的有效OpenGL上下文,此函数才能成功。
如果OpenGL顶点数组对象成功创建,则返回
true
。当返回值为
false
时,顶点数组对象支持不可用。这不是一个错误:在具有OpenGL 2.x或OpenGL ES 2.0的系统上,顶点数组对象可能不受支持。在这种情况下,应用程序可以自由继续执行,但必须准备好以无VAO的方式操作。这意味着,除了调用bind()
之外,还必须检查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_…概要¶
方法¶
def
__init__()
def
__enter__()
def
__exit__()
def
rebind()
def
release()
注意
本文档可能包含从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:
创建一个
Binder
对象,并通过调用bind()
绑定v
。如果需要,它首先调用create()
。- __exit__(arg__1, arg__2, arg__3)¶
- Parameters:
arg__1 – 对象
arg__2 – 对象
arg__3 – 对象
- rebind()¶
可用于重新绑定关联的顶点数组对象。
另请参阅
- release()¶
可用于临时释放关联的顶点数组对象。
另请参阅