- class QOpenGLVertexArrayObject#
QOpenGLVertexArrayObject
类封装了一个 OpenGL 顶点数组对象。 更多…概要#
方法#
def
__init__()
def
bind()
def
create()
def
destroy()
定义
isCreated()
定义
objectId()
定义
release()
注意:
本文档可能包含从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的动作会使得初始化阶段设置的所有顶点数据状态得以恢复。通过这种方式,我们可以在设置VAO时设置大量状态,并且可以高效地在渲染对象的状态集合之间切换。使用VAO还允许OpenGL驱动程序分摊顶点数据的验证检查。
创建一个具有给定
parent
的QOpenGLVertexArrayObject
。在使用之前,必须调用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)来解绑此顶点数组对象。