PySide6.QtOpenGL.QOpenGLBuffer¶
- class QOpenGLBuffer¶
QOpenGLBuffer类提供了创建和管理 OpenGL 缓冲对象的功能。更多…概要¶
方法¶
def
__init__()def
allocate()def
bind()def
bufferId()def
create()def
destroy()def
isCreated()def
map()def
mapRange()def
read()def
release()def
size()def
swap()def
type()def
unmap()def
usagePattern()def
write()
静态函数¶
def
release()
注意
本文档可能包含从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()才会创建。另请参阅
- __init__(type)
- Parameters:
类型 –
Type
构造一个新的
type类型的缓冲区对象。注意:此构造函数仅创建
QOpenGLBuffer实例。实际的缓冲区对象在OpenGL服务器中直到调用create()才会创建。另请参阅
- __init__(other)
- Parameters:
其他 –
QOpenGLBuffer
构造
other的浅拷贝。注意:
QOpenGLBuffer没有实现写时复制语义,因此每当副本被修改时,other将会受到影响。- allocate(count)¶
- Parameters:
count – int
这是一个重载函数。
为缓冲区分配
count字节的空间。任何之前的内容将被移除。假设已经在此缓冲区上调用了
create(),并且它已绑定到当前上下文。- allocate(data, count)
- Parameters:
data –
voidcount – int
为缓冲区分配
count字节的空间,初始化为data的内容。任何之前的内容将被移除。假设已经在此缓冲区上调用了
create(),并且它已绑定到当前上下文。- bind()¶
- Return type:
布尔
将与此对象关联的缓冲区绑定到当前的OpenGL上下文。如果绑定不可行,通常是因为此OpenGL实现不支持
type(),则返回false。缓冲区必须绑定到调用
create()时当前的同一个QOpenGLContext,或者绑定到与其共享的另一个QOpenGLContext。否则,此函数将返回false。- bufferId()¶
- Return type:
整数
返回与此缓冲区关联的OpenGL标识符;如果缓冲区尚未创建,则返回零。
另请参阅
- create()¶
- Return type:
布尔
在OpenGL服务器中创建缓冲区对象。如果对象创建成功,则返回
true;否则返回false。此函数必须与当前的QOpenGLContext一起调用。缓冲区将被绑定并且只能在该上下文(或与之共享的任何其他上下文)中使用。
如果OpenGL实现不支持缓冲区,或者没有当前的QOpenGLContext,此函数将返回false。
- destroy()¶
销毁此缓冲区对象,包括在OpenGL服务器中使用的存储。所有对该缓冲区的引用将变为无效。
- isCreated()¶
- Return type:
布尔
如果此缓冲区已创建,则返回
true;否则返回false。将此缓冲区的内容映射到应用程序的内存空间,并返回指向它的指针。如果无法进行内存映射,则返回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:
offset – int
count – int
access –
RangeAccessFlag的组合
- Return type:
void
将此缓冲区内容中由
offset和count指定的范围映射到应用程序的内存空间,并返回指向它的指针。如果无法进行内存映射,则返回null。access参数指定了访问标志的组合。假设已经在此缓冲区上调用了
create(),并且它已绑定到当前上下文。- read(offset, data, count)¶
- Parameters:
offset – int
data –
voidcount – int
- Return type:
布尔
从缓冲区中的
offset开始读取count字节到data中。成功时返回true;如果不支持从缓冲区读取,则返回false。在OpenGL/ES下不支持缓冲区读取。假设此缓冲区已绑定到当前上下文。
- release()¶
从当前OpenGL上下文中释放与此对象关联的缓冲区。
此函数必须在与缓冲区上调用
bind()时相同的QOpenGLContext当前状态下调用。另请参阅
- 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。
假设此缓冲区已绑定到当前上下文。
另请参阅
- swap(other)¶
- Parameters:
其他 –
QOpenGLBuffer
将此缓冲区与
other缓冲区交换。此操作非常快速且永远不会失败。返回此对象表示的缓冲区类型。
- unmap()¶
- Return type:
布尔
在通过先前调用
map()将缓冲区映射到应用程序的内存空间后,取消映射该缓冲区。如果取消映射成功,则返回true;否则返回false。假设此缓冲区已绑定到当前上下文,并且之前已使用
map()进行映射。- usagePattern()¶
- Return type:
返回此缓冲对象的使用模式。默认值为
StaticDraw。另请参阅
- write(offset, data, count)¶
- Parameters:
offset – int
data –
voidcount – int
用
data的内容替换此缓冲区从offset开始的count字节。缓冲区中的其他字节将保持不变。假设已经在此缓冲区上调用了
create(),并且它已绑定到当前上下文。另请参阅