QOpenGLBuffer

您所在的位置:网站首页 qt退出程序函数 QOpenGLBuffer

QOpenGLBuffer

2023-06-26 08:37| 来源: 网络整理| 查看: 265

一、描述

QOpenGLBuffer是Qt中用于管理OpenGL缓冲区对象的类。它可以用于创建、绑定和操作各种类型的缓冲区,如顶点缓冲区、索引缓冲区和纹理缓冲区等。

使用QOpenGLBuffer,可以方便地将数据存储到OpenGL中,并在需要时快速地访问它们。同时,它还提供了一些方法来优化内存使用和提高性能,例如使用映射函数将数据直接映射到内存中进行修改。

QOpenGLBuffer 对象可以作为对底层 OpenGL 缓冲区对象的引用进行复制:

QOpenGLBuffer buffer1(QOpenGLBuffer::IndexBuffer); buffer1.create(); QOpenGLBuffer buffer2 = buffer1;

当以这种方式复制对象时,QOpenGLBuffer 执行浅拷贝,但不实现写时复制语义。每当修改副本时,原始对象都会受到影响。

二、类型成员

1、enum QOpenGLBuffer::Access:此枚举定义了 map() 的访问模式。

ReadOnly:缓冲区将被映射为只读。

WriteOnly:缓冲区将被映射为只写。

ReadWrite:缓冲区将被映射用于读写。

2、enum QOpenGLBuffer::RangeAccessFlag:此枚举定义了 mapRange() 的访问模式位。

RangeRead:缓冲区将被映射以供读取。

RangeWrite:缓冲区将被映射以进行写入。

RangeInvalidate:丢弃指定范围的先前内容。

RangeInvalidateBuffer:丢弃整个缓冲区的先前内容。

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

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

3、enum QOpenGLBuffer::Type:此枚举定义了使用 QOpenGLBuffer 创建的 OpenGL 缓冲区对象的类型。

VertexBuffer:顶点数组时使用的顶点缓冲区对象。

IndexBuffer:用于 glDrawElements() 的索引缓冲区对象。

PixelPackBuffer:用于从 OpenGL 服务器读取像素数据的像素包缓冲区对象。

PixelUnpackBuffer:像素解包缓冲区对象,用于将像素数据写入 OpenGL 服务器。

4、enum QOpenGLBuffer::UsagePattern:此枚举定义了 QOpenGLBuffer 对象的使用模式。

StreamDraw:数据将被设置一次,并用于绘制操作几次。

StreamRead:数据将被设置一次并使用几次从OpenGL服务器读回数据。

StreamCopy:数据将被设置一次并使用几次,用于从 OpenGL 服务器读取数据以用于进一步的绘图操作。

StaticDraw:数据会设置一次,多次用于绘图操作。

StaticRead:数据将被设置一次并多次用于从 OpenGL 服务器读取数据。

StaticCopy:数据将被设置一次并多次用于从 OpenGL 服务器读取数据以用于进一步的绘图操作。

DynamicDraw:数据会被反复修改,多次用于绘图操作。

DynamicRead:数据将被反复修改并多次用于从OpenGL服务器读回数据。

DynamicCopy:数据将被反复修改并多次用于从 OpenGL 服务器读取数据以用于进一步的绘图操作。

领取QT开发学习资料+qq群:487707667

三、成员函数

1、void allocate(const void *data, int count)

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

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

void allocate(int count)

将 count 个字节的空间分配给缓冲区。任何以前的内容都将被删除。

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

2、bool bind()

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

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

3、GLuint bufferId()

返回与此缓冲区关联的 OpenGL 标识符。

4、bool create()

在 OpenGL 服务器中创建缓冲区对象。返回是否已创建对象。

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

5、void destroy()

销毁此缓冲区对象。所有对缓冲区的引用都将变为无效。

6、bool isCreated()

此缓冲区是否已创建。

7、void * map(QOpenGLBuffer::Access access)

将此缓冲区的内容映射到应用程序的内存空间并返回指向它的指针。

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

8、void * mapRange(int offset, int count, QOpenGLBuffer::RangeAccessFlags access)

将此缓冲区的内容的 offset 和count 指定的范围映射到应用程序的内存空间并返回指向它的指针。

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

9、bool read(int offset, void *data, int count)

将此缓冲区中从 offset 开始的 count 字节读取到 data 中。返回是否成功读取。

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

10、void release()

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

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

11、【static】void release(QOpenGLBuffer::Type type)

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

12、void setUsagePattern(QOpenGLBuffer::UsagePattern value)

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

13、int size()

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

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

14、bool unmap()

使用先前调用 map() 将缓冲区映射到应用程序的内存空间后取消映射。返回是否取消成功。

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

15、void write(int offset, const void *data, int count)

用 data 的内容替换从 offset 开始的这个缓冲区的 count 字节。缓冲区中的任何其他字节都将保持不变。

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

 进群领取qt开发学习资料以及技术交流  在下方↓↓↓↓↓↓↓↓



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3