PySide6.QtOpenGL.QOpenGLBuffer

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 在对象以这种方式复制时执行浅拷贝,但不实现写时复制语义。每当副本被修改时,原始对象都会受到影响。

class Type

此枚举定义了使用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.RangeFlushExplicit

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

QOpenGLBuffer.RangeUnsynchronized

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

__init__()

构造一个类型为VertexBuffer的新缓冲区对象。

注意:此构造函数仅创建QOpenGLBuffer实例。实际的缓冲区对象在OpenGL服务器中直到调用create()才会创建。

另请参阅

create()

__init__(type)
Parameters:

类型Type

构造一个新的type类型的缓冲区对象。

注意:此构造函数仅创建QOpenGLBuffer实例。实际的缓冲区对象在OpenGL服务器中直到调用create()才会创建。

另请参阅

create()

__init__(other)
Parameters:

其他QOpenGLBuffer

构造other的浅拷贝。

注意:QOpenGLBuffer 没有实现写时复制语义,因此每当副本被修改时,other 将会受到影响。

allocate(count)
Parameters:

count – int

这是一个重载函数。

为缓冲区分配count字节的空间。任何之前的内容将被移除。

假设已经在此缓冲区上调用了create(),并且它已绑定到当前上下文。

另请参阅

create() write()

allocate(data, count)
Parameters:
  • datavoid

  • count – int

为缓冲区分配count字节的空间,初始化为data的内容。任何之前的内容将被移除。

假设已经在此缓冲区上调用了create(),并且它已绑定到当前上下文。

另请参阅

create() read() write()

bind()
Return type:

布尔

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

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

另请参阅

release() create()

bufferId()
Return type:

整数

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

另请参阅

isCreated()

create()
Return type:

布尔

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

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

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

destroy()

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

isCreated()
Return type:

布尔

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

另请参阅

create() destroy()

map(access)
Parameters:

访问Access

Return type:

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)
Parameters:
Return type:

void

将此缓冲区内容中由offsetcount指定的范围映射到应用程序的内存空间,并返回指向它的指针。如果无法进行内存映射,则返回null。access参数指定了访问标志的组合。

假设已经在此缓冲区上调用了create(),并且它已绑定到当前上下文。

注意

此功能在OpenGL ES 2.0及更早版本上不可用。

另请参阅

unmap() create() bind()

read(offset, data, count)
Parameters:
  • offset – int

  • datavoid

  • count – int

Return type:

布尔

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

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

另请参阅

write() bind()

release()

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

此函数必须在与缓冲区上调用bind()时相同的QOpenGLContext当前状态下调用。

另请参阅

bind()

static release(type)
Parameters:

类型Type

警告

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

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

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

QOpenGLBuffer.release(QOpenGLBuffer.VertexBuffer)
setUsagePattern(value)
Parameters:

UsagePattern

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

size()
Return type:

整数

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

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

另请参阅

isCreated() bind()

swap(other)
Parameters:

其他QOpenGLBuffer

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

type()
Return type:

类型

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

unmap()
Return type:

布尔

在通过先前调用map()将缓冲区映射到应用程序的内存空间后,取消映射该缓冲区。如果取消映射成功,则返回true;否则返回false。

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

注意

此功能仅在OpenGL ES 2.0及更早版本中支持,前提是存在GL_OES_mapbuffer扩展。

另请参阅

map()

usagePattern()
Return type:

UsagePattern

返回此缓冲对象的使用模式。默认值为StaticDraw

另请参阅

setUsagePattern()

write(offset, data, count)
Parameters:
  • offset – int

  • datavoid

  • count – int

data的内容替换此缓冲区从offset开始的count字节。缓冲区中的其他字节将保持不变。

假设已经在此缓冲区上调用了create(),并且它已绑定到当前上下文。

另请参阅

create() read() allocate()