- 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 -
void
count - 整数
在缓冲区中分配
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 -
void
count - 整数
- 返回类型::
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 -
void
count - 整数
用
数据
的内容替换从偏移量
开始的计数
字节。缓冲区中的其他字节将被保留不变。假设已对该缓冲区调用
create()
并将
其绑定到当前上下文。另请参阅