class QOpenGLBuffer#

QOpenGLBuffer 提供了创建和管理 OpenGL 缓冲区对象的函数。 更多...

概要#

方法#

静态函数#

注意

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

详细描述#

警告

本节包含从 C++ 自动翻译到 Python 的代码片段,可能包含错误。

缓冲区对象在 OpenGL 服务器中创建,以便客户端应用程序可以在需要时避免上传顶点、索引、纹理图像数据等。

QOpenGLBuffer 对象可以作为底层 OpenGL 缓冲区对象的引用在各个地方进行复制

buffer1 = QOpenGLBuffer(QOpenGLBuffer.IndexBuffer)
buffer1.create()
buffer2 = buffer1

QOpenGLBuffer 在以这种方式复制对象时执行浅拷贝,但未实现写时复制语义。修改复制时,原始对象将受到影响。

类型#

此枚举定义了使用 QOpenGLBuffer 创建的 OpenGL 缓冲区对象的类型。

常量

描述

QOpenGLBuffer.VertexBuffer

用于指定顶点数组的顶点缓冲区对象。

QOpenGLBuffer.IndexBuffer

用于与 glDrawElements() 一起使用的索引缓冲区对象。

QOpenGLBuffer.PixelPackBuffer

用于从OpenGL服务器读取像素数据(例如,使用glReadPixels())的像素打包缓冲对象。在OpenGL/ES下不支持。

QOpenGLBuffer.PixelUnpackBuffer

用于将像素数据写入OpenGL服务器的像素解包缓冲对象(例如,使用glTexImage2D())。在OpenGL/ES下不支持。

class UsagePattern#

此枚举定义了QOpenGLBuffer对象的用途模式。

常量

描述

QOpenGLBuffer.StreamDraw

数据会被设置一次并在绘制操作中使用几次。在OpenGL/ES 1.1中这与StaticDraw相同。

QOpenGLBuffer.StreamRead

数据会被设置一次并在从OpenGL服务器读取数据时使用几次。在OpenGL/ES下不支持。

QOpenGLBuffer.StreamCopy

数据会被设置一次并在从OpenGL服务器读取数据用于进一步绘制操作时使用几次。在OpenGL/ES下不支持。

QOpenGLBuffer.StaticDraw

数据会被设置一次并在绘制操作中使用多次。

QOpenGLBuffer.StaticRead

数据会被设置一次并在从OpenGL服务器读取数据时使用多次。在OpenGL/ES下不支持。

QOpenGLBuffer.StaticCopy

数据会被设置一次并在从OpenGL服务器读取数据用于进一步绘制操作时使用多次。在OpenGL/ES下不支持。

QOpenGLBuffer.DynamicDraw

数据会被重复修改并在绘制操作中使用多次。

QOpenGLBuffer.DynamicRead

数据会被重复修改并在从OpenGL服务器读取数据时使用多次。在OpenGL/ES下不支持。

QOpenGLBuffer.DynamicCopy

数据会被重复修改并在从OpenGL服务器读取数据用于进一步绘制操作时使用多次。在OpenGL/ES下不支持。

class Access#

此枚举定义了map()方法的访问模式。

常量

描述

QOpenGLBuffer.ReadOnly

缓冲区将只映射用于读取。

QOpenGLBuffer.WriteOnly

缓冲区将只映射用于写入。

QOpenGLBuffer.ReadWrite

缓冲区可以映射用于读取和写入。

class RangeAccessFlag#

(继承自enum.Flag) 此枚举定义了mapRange()的访问模式位。

常量

描述

QOpenGLBuffer.RangeRead

缓冲区将映射用于读取。

QOpenGLBuffer.RangeWrite

缓冲区将映射用于写入。

QOpenGLBuffer.RangeInvalidate

丢弃指定的范围中的以前内容。

QOpenGLBuffer.RangeInvalidateBuffer

丢弃整个缓冲区中的以前内容。

QOpenGLBuffer.Range FlushExplicit

表示修改将通过glFlushMappedBufferRange显式刷新。

QOpenGLBuffer.Range Unsynchronized

表示在返回mapRange()之前不应同步挂起的操作。

__init__(type)#
参数:

type - Type

构建一个新的缓冲区对象,类型为 type

注意:此构造函数仅创建 QOpenGLBuffer 实例。实际的缓冲区对象在调用 create() 方法后才会创建。

另请参阅

create()

__init__(other)
参数:

other - QOpenGLBuffer

构建 other 的浅拷贝。

注意:QOpenGLBuffer 不实现写时复制语义,因此当复制被修改时,other 将受到影响。

__init__()

构建一个新的缓冲区对象,类型为 VertexBuffer

注意:此构造函数仅创建 QOpenGLBuffer 实例。实际的缓冲区对象在调用 create() 方法后才会创建。

另请参阅

create()

allocate(data, count)#
参数:
  • data - void

  • count - 整数

在缓冲区中分配 count 字节的空間,并初始化为 data 的内容。任何之前的内
容都会被删除。

假设已对该缓冲区调用 create() 并将
其绑定到当前上下文。

另请参阅

create() read() write()

allocate(count)
参数:

count - 整数

这是一个重载函数。

在缓冲区中分配 count 字节的空間。任何之前的内
容都会被删除。

假设已对该缓冲区调用 create() 并将
其绑定到当前上下文。

另请参阅

create() write()

bind()#
返回类型:

bool

将与此对象关联的缓冲区绑定到当前OpenGL上下文。如果绑定失败,则返回 false,通常因为 type() 在此OpenGL实现中不受支持。

该缓冲区必须绑定到在调用 create() 时当前相同的 QOpenGLContext,或者绑定到包含共享关系的另一个 QOpenGLContext。否则,此函数将返回 false。

另请参阅

release() create()

bufferId()#
返回类型:

int

返回与此缓冲区关联的OpenGL标识符;如果缓冲区尚未创建,则返回零。

另请参阅

isCreated()

create()#
返回类型:

bool

在OpenGL服务器中创建缓冲区对象。如果对象已创建,则返回 true;否则返回 false

必须使用当前 QOpenGLContext 调用此函数。该缓冲区将绑定到该上下文,并且只能在该上下文(或任何与之共享的上下文)中使用。

如果OpenGL实现不支持缓冲区,或没有当前 QOpenGLContext,则此函数将返回 false

destroy()#

销毁此缓冲区对象,包括OpenGL服务器中使用的存储。所有对该缓冲区的引用都将变为无效。

isCreated()#
返回类型:

bool

如果此缓冲区已创建,则返回 true;否则返回 false

另请参阅

create() destroy()

map(access)#
参数:

访问Access

返回类型:

void

将此缓冲区的内容映射到应用程序的内存空间并返回其指针。如果内存映射不可行,则返回null。access参数指示要执行访问的类型。

假设已对该缓冲区调用 create() 并将
其绑定到当前上下文。

注意

如果存在GL_OES_mapbuffer扩展,则在OpenGL ES 2.0或更早版本中支持此功能。

注意

在OpenGL ES 3.0和更高版本,或者如果是桌面OpenGL,如果支持GL_ARB_map_buffer_range,则此函数将使用glMapBufferRange而不是glMapBuffer

mapRange(offset, count, access)#
参数:
返回类型:

void

将指定由offsetcount的此缓冲区内容映射到应用程序的内存空间并返回其指针。如果内存映射不可行,则返回null。access参数指定了一组访问标志。

假设已对该缓冲区调用 create() 并将
其绑定到当前上下文。

注意

此函数在OpenGL ES 2.0和更早版本中不可用。

另请参阅

unmap() create() bind()

read(offset, data, count)#
参数:
  • offset – int

  • data - void

  • count - 整数

返回类型:

bool

从缓冲区开始于offset读取count字节到data中。成功则返回true;如果从缓冲区读取不受支持,则返回false。在OpenGL/ES下不支持缓冲区读取。

假设此缓冲区已绑定到当前上下文。

另请参阅

write() bind()

release()#

释放与该对象关联的缓冲区,从当前OpenGL上下文中。

此函数必须在与调用 bind() 时的相同 QOpenGLContext 中调用。

另请参阅

bind()

static release(type)
参数:

type - Type

警告

本节包含从 C++ 自动翻译到 Python 的代码片段,可能包含错误。

在当前的 QOpenGLContext 中释放与 type 相关的缓冲区。

此函数是直接调用 glBindBuffer(type, 0) 的函数,当调用者不知道哪个 QOpenGLBuffer 已绑定到上下文但想确保它被释放时使用。

QOpenGLBuffer.release(QOpenGLBuffer.VertexBuffer)
setUsagePattern(value)#
参数:

valueUsagePattern

将此缓冲区对象的用法模式设置为 value。必须在调用 allocate()write() 之前调用此函数。

size()#
返回类型:

int

返回此缓冲区中数据的长度,用于读取操作。如果获取缓冲区大小不受支持或缓冲区尚未创建,则返回 -1。

假设此缓冲区已绑定到当前上下文。

另请参阅

isCreated() bind()

swap(other)#
参数:

other - QOpenGLBuffer

将缓冲区 other 与此缓冲区交换。此操作非常快并且永远不会失败。

类型()#
返回类型:

类型

返回此对象表示的缓冲区的类型。

unmap()#
返回类型:

bool

取消映射缓冲区,之前使用 map() 方法定向到应用程序的内存空间。如果取消映射成功返回 true;否则返回 false

假设此缓冲区已绑定到当前上下文,并且之前使用 map() 方法映射。

注意

如果存在扩展 GL_OES_mapbuffer,则此函数在 OpenGL ES 2.0 及更早版本中才受支持。

另请参阅

map()

usagePattern()#
返回类型:

使用模式

返回此缓冲区对象的用途模式。默认值是 StaticDraw

另请参阅

setUsagePattern()

write(偏移量, 数据, 计数)#
参数:
  • offset – int

  • data - void

  • count - 整数

数据 的内容替换从 偏移量 开始的 计数 字节。缓冲区中的其他字节将被保留不变。

假设已对该缓冲区调用 create() 并将
其绑定到当前上下文。

另请参阅

create() read() allocate()