QOpenGLBuffer |
您所在的位置:网站首页 › qt退出程序函数 › QOpenGLBuffer |
一、描述
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 |