- class QOpenGLBuffer#
类 QOpenGLBuffer 提供了创建和管理 OpenGL 缓冲区对象的函数。 更多...
概要#
方法#
def __init__()
def allocate()
def bind()
def bufferId()
def create()
def destroy()
定义
isCreated()定义
map()定义
mapRange()定义
read()定义
release()定义
size()定义
swap()定义
type()定义
unmap()定义
write()
静态函数#
定义
release()
注意
本文档可能包含从 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()之前不应同步挂起的操作。
构建一个新的缓冲区对象,类型为
type。注意:此构造函数仅创建
QOpenGLBuffer实例。实际的缓冲区对象在调用create()方法后才会创建。另请参阅
- __init__(other)
- 参数:
other -
QOpenGLBuffer
构建
other的浅拷贝。注意:
QOpenGLBuffer不实现写时复制语义,因此当复制被修改时,other将受到影响。- __init__()
构建一个新的缓冲区对象,类型为
VertexBuffer。注意:此构造函数仅创建
QOpenGLBuffer实例。实际的缓冲区对象在调用create()方法后才会创建。另请参阅
- allocate(data, count)#
- 参数:
data -
voidcount - 整数
在缓冲区中分配
count字节的空間,并初始化为data的内容。任何之前的内
容都会被删除。假设已对该缓冲区调用
create()并将
其绑定到当前上下文。- allocate(count)
- 参数:
count - 整数
这是一个重载函数。
在缓冲区中分配
count字节的空間。任何之前的内
容都会被删除。假设已对该缓冲区调用
create()并将
其绑定到当前上下文。- bind()#
- 返回类型::
bool
将与此对象关联的缓冲区绑定到当前OpenGL上下文。如果绑定失败,则返回
false,通常因为type()在此OpenGL实现中不受支持。该缓冲区必须绑定到在调用
create()时当前相同的 QOpenGLContext,或者绑定到包含共享关系的另一个 QOpenGLContext。否则,此函数将返回 false。- bufferId()#
- 返回类型::
int
返回与此缓冲区关联的OpenGL标识符;如果缓冲区尚未创建,则返回零。
另请参阅
- create()#
- 返回类型::
bool
在OpenGL服务器中创建缓冲区对象。如果对象已创建,则返回
true;否则返回false。必须使用当前 QOpenGLContext 调用此函数。该缓冲区将绑定到该上下文,并且只能在该上下文(或任何与之共享的上下文)中使用。
如果OpenGL实现不支持缓冲区,或没有当前 QOpenGLContext,则此函数将返回
false。- destroy()#
销毁此缓冲区对象,包括OpenGL服务器中使用的存储。所有对该缓冲区的引用都将变为无效。
- isCreated()#
- 返回类型::
bool
如果此缓冲区已创建,则返回
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)#
- 参数:
offset – int
count - 整数
access –
RangeAccessFlag的组合
- 返回类型::
void
将指定由
offset和count的此缓冲区内容映射到应用程序的内存空间并返回其指针。如果内存映射不可行,则返回null。access参数指定了一组访问标志。假设已对该缓冲区调用
create()并将
其绑定到当前上下文。- read(offset, data, count)#
- 参数:
offset – int
data -
voidcount - 整数
- 返回类型::
bool
从缓冲区开始于
offset读取count字节到data中。成功则返回true;如果从缓冲区读取不受支持,则返回false。在OpenGL/ES下不支持缓冲区读取。假设此缓冲区已绑定到当前上下文。
- release()#
释放与该对象关联的缓冲区,从当前OpenGL上下文中。
此函数必须在与调用
bind()时的相同 QOpenGLContext 中调用。另请参阅
- static release(type)
- 参数:
type -
Type
警告
本节包含从 C++ 自动翻译到 Python 的代码片段,可能包含错误。
在当前的 QOpenGLContext 中释放与
type相关的缓冲区。此函数是直接调用
glBindBuffer(type, 0)的函数,当调用者不知道哪个QOpenGLBuffer已绑定到上下文但想确保它被释放时使用。QOpenGLBuffer.release(QOpenGLBuffer.VertexBuffer)
- setUsagePattern(value)#
- 参数:
value –
UsagePattern
将此缓冲区对象的用法模式设置为
value。必须在调用allocate()或write()之前调用此函数。- size()#
- 返回类型::
int
返回此缓冲区中数据的长度,用于读取操作。如果获取缓冲区大小不受支持或缓冲区尚未创建,则返回 -1。
假设此缓冲区已绑定到当前上下文。
另请参阅
- swap(other)#
- 参数:
other -
QOpenGLBuffer
将缓冲区
other与此缓冲区交换。此操作非常快并且永远不会失败。返回此对象表示的缓冲区的类型。
- unmap()#
- 返回类型::
bool
取消映射缓冲区,之前使用 map() 方法定向到应用程序的内存空间。如果取消映射成功返回
true;否则返回false。假设此缓冲区已绑定到当前上下文,并且之前使用 map() 方法映射。
返回此缓冲区对象的用途模式。默认值是
StaticDraw。另请参阅
- write(偏移量, 数据, 计数)#
- 参数:
offset – int
data -
voidcount - 整数
用
数据的内容替换从偏移量开始的计数字节。缓冲区中的其他字节将被保留不变。假设已对该缓冲区调用
create()并将
其绑定到当前上下文。另请参阅