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 –
void
count – 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 –
void
count – 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 –
void
count – int
用
data
的内容替换此缓冲区从offset
开始的count
字节。缓冲区中的其他字节将保持不变。假设已经在此缓冲区上调用了
create()
,并且它已绑定到当前上下文。另请参阅