![]() |
OpenCV 4.12.0
开源计算机视觉
|
带有引用计数的 OpenGL 缓冲区对象智能指针。更多...
#include <opencv2/core/opengl.hpp>
公共类型 | |
| 枚举 | Access { READ_ONLY = 0x88B8 , WRITE_ONLY = 0x88B9 , READ_WRITE = 0x88BA } |
| 枚举 | Target { ARRAY_BUFFER = 0x8892 , ELEMENT_ARRAY_BUFFER = 0x8893 , PIXEL_PACK_BUFFER = 0x88EB , PIXEL_UNPACK_BUFFER = 0x88EC } |
| 目标定义了您打算如何使用缓冲区对象。更多... | |
公共成员函数 | |
| Buffer () | |
| 构造函数。 | |
| Buffer (InputArray arr, Target target=ARRAY_BUFFER, bool autoRelease=false) | |
| Buffer (int arows, int acols, int atype, Target target=ARRAY_BUFFER, bool autoRelease=false) | |
| Buffer (int arows, int acols, int atype, unsigned int abufId, bool autoRelease=false) | |
| Buffer (Size asize, int atype, Target target=ARRAY_BUFFER, bool autoRelease=false) | |
| Buffer (Size asize, int atype, unsigned int abufId, bool autoRelease=false) | |
| void | bind (Target target) const |
| 将 OpenGL 缓冲区绑定到指定的缓冲区绑定点。 | |
| unsigned int | bufId () const |
| 获取 OpenGL 对象 ID | |
| int | channels () const |
| Buffer | clone (Target target=ARRAY_BUFFER, bool autoRelease=false) const |
| 创建缓冲区对象及其底层数据的完整副本。 | |
| int | cols () const |
| void | copyFrom (InputArray arr, cuda::Stream &stream, Target target=ARRAY_BUFFER, bool autoRelease=false) |
| void | copyFrom (InputArray arr, Target target=ARRAY_BUFFER, bool autoRelease=false) |
| 将数据从主机/设备内存复制到 OpenGL 缓冲区。 | |
| void | copyTo (OutputArray arr) const |
| 将数据从 OpenGL 缓冲区复制到主机/设备内存或另一个 OpenGL 缓冲区对象。 | |
| void | copyTo (OutputArray arr, cuda::Stream &stream) const |
| void | create (int arows, int acols, int atype, Target target=ARRAY_BUFFER, bool autoRelease=false) |
| 为 ogl::Buffer 对象分配内存。 | |
| void | create (Size asize, int atype, Target target=ARRAY_BUFFER, bool autoRelease=false) |
| int | depth () const |
| int | elemSize () const |
| int | elemSize1 () const |
| bool | empty () const |
| cuda::GpuMat | mapDevice () |
| 映射到设备内存(阻塞) | |
| cuda::GpuMat | mapDevice (cuda::Stream &stream) |
| 将 OpenGL 缓冲区映射到 CUDA 设备内存。 | |
| Mat | mapHost (Access access) |
| 将 OpenGL 缓冲区映射到主机内存。 | |
| void | release () |
| 递减引用计数器,并在需要时销毁缓冲区对象。 | |
| int | rows () const |
| void | setAutoRelease (bool flag) |
| 设置自动释放模式。 | |
| Size | size () const |
| int | type () const |
| void | unmapDevice () |
| void | unmapDevice (cuda::Stream &stream) |
| 取消映射 OpenGL 缓冲区。 | |
| void | unmapHost () |
| 取消映射 OpenGL 缓冲区。 | |
静态公共成员函数 | |
| static void | unbind (Target target) |
| 从指定的绑定点解除绑定任何缓冲区。 | |
带有引用计数的 OpenGL 缓冲区对象智能指针。
缓冲区对象是 OpenGL 对象,用于存储由 OpenGL 上下文分配的未格式化内存数组。它们可用于存储顶点数据、从图像或帧缓冲区检索的像素数据以及各种其他数据。
ogl::Buffer 具有类似于 Mat 接口的接口,并表示 2D 数组内存。
ogl::Buffer 支持主机和设备之间的内存传输,也可以映射到 CUDA 内存。
| cv::ogl::Buffer::Buffer | ( | ) |
构造函数。
创建空的 ogl::Buffer 对象,从现有缓冲区(abufId 参数)创建 ogl::Buffer 对象,为 ogl::Buffer 对象分配内存或从主机/设备内存复制数据。
| cv::ogl::Buffer::Buffer | ( | int | arows, |
| int | acols, | ||
| int | atype, | ||
| unsigned int | abufId, | ||
| bool | autoRelease = false ) |
这是一个重载成员函数,为方便起见而提供。它与上述函数的区别仅在于所接受的参数。
| arows | 二维数组中的行数。 |
| acols | 二维数组中的列数。 |
| atype | 数组类型 (CV_8UC1, ..., CV_64FC4)。详见 Mat。 |
| abufId | 缓冲区对象名称。 |
| autoRelease | 自动释放模式(如果为 true,则在对象的析构函数中调用 release)。 |
| cv::ogl::Buffer::Buffer | ( | Size | asize, |
| int | atype, | ||
| unsigned int | abufId, | ||
| bool | autoRelease = false ) |
这是一个重载成员函数,为方便起见而提供。它与上述函数的区别仅在于所接受的参数。
| asize | 2D 数组大小。 |
| atype | 数组类型 (CV_8UC1, ..., CV_64FC4)。详见 Mat。 |
| abufId | 缓冲区对象名称。 |
| autoRelease | 自动释放模式(如果为 true,则在对象的析构函数中调用 release)。 |
| cv::ogl::Buffer::Buffer | ( | int | arows, |
| int | acols, | ||
| int | atype, | ||
| Target | target = ARRAY_BUFFER, | ||
| bool | autoRelease = false ) |
这是一个重载成员函数,为方便起见而提供。它与上述函数的区别仅在于所接受的参数。
| arows | 二维数组中的行数。 |
| acols | 二维数组中的列数。 |
| atype | 数组类型 (CV_8UC1, ..., CV_64FC4)。详见 Mat。 |
| target | 缓冲区用途。详见 cv::ogl::Buffer::Target 。 |
| autoRelease | 自动释放模式(如果为 true,则在对象的析构函数中调用 release)。 |
| cv::ogl::Buffer::Buffer | ( | Size | asize, |
| int | atype, | ||
| Target | target = ARRAY_BUFFER, | ||
| bool | autoRelease = false ) |
这是一个重载成员函数,为方便起见而提供。它与上述函数的区别仅在于所接受的参数。
| asize | 2D 数组大小。 |
| atype | 数组类型 (CV_8UC1, ..., CV_64FC4)。详见 Mat。 |
| target | 缓冲区用途。详见 cv::ogl::Buffer::Target 。 |
| autoRelease | 自动释放模式(如果为 true,则在对象的析构函数中调用 release)。 |
|
显式 |
这是一个重载成员函数,为方便起见而提供。它与上述函数的区别仅在于所接受的参数。
| arr | 输入数组(主机或设备内存,可以是 Mat 、 cuda::GpuMat 或 std::vector )。 |
| target | 缓冲区用途。详见 cv::ogl::Buffer::Target 。 |
| autoRelease | 自动释放模式(如果为 true,则在对象的析构函数中调用 release)。 |
| void cv::ogl::Buffer::bind | ( | Target | target | ) | const |
将 OpenGL 缓冲区绑定到指定的缓冲区绑定点。
| target | 绑定点。详见 cv::ogl::Buffer::Target 。 |
| unsigned int cv::ogl::Buffer::bufId | ( | ) | const |
获取 OpenGL 对象 ID
| int cv::ogl::Buffer::channels | ( | ) | const |
| Buffer cv::ogl::Buffer::clone | ( | Target | target = ARRAY_BUFFER, |
| bool | autoRelease = false ) const |
创建缓冲区对象及其底层数据的完整副本。
| target | 目标缓冲区的缓冲区用途。 |
| autoRelease | 目标缓冲区的自动释放模式。 |
| int cv::ogl::Buffer::cols | ( | ) | const |
| void cv::ogl::Buffer::copyFrom | ( | InputArray | arr, |
| cuda::Stream & | 流, | ||
| Target | target = ARRAY_BUFFER, | ||
| bool | autoRelease = false ) |
这是一个重载成员函数,为方便起见而提供。它与上述函数的区别仅在于所接受的参数。
| void cv::ogl::Buffer::copyFrom | ( | InputArray | arr, |
| Target | target = ARRAY_BUFFER, | ||
| bool | autoRelease = false ) |
将数据从主机/设备内存复制到 OpenGL 缓冲区。
| arr | 输入数组(主机或设备内存,可以是 Mat 、 cuda::GpuMat 或 std::vector )。 |
| target | 缓冲区用途。详见 cv::ogl::Buffer::Target 。 |
| autoRelease | 自动释放模式(如果为 true,则在对象的析构函数中调用 release)。 |
| void cv::ogl::Buffer::copyTo | ( | OutputArray | arr | ) | const |
将数据从 OpenGL 缓冲区复制到主机/设备内存或另一个 OpenGL 缓冲区对象。
| arr | 目标数组(主机或设备内存,可以是 Mat 、 cuda::GpuMat 、 std::vector 或 ogl::Buffer )。 |
| void cv::ogl::Buffer::copyTo | ( | OutputArray | arr, |
| cuda::Stream & | stream ) const |
这是一个重载成员函数,为方便起见而提供。它与上述函数的区别仅在于所接受的参数。
| void cv::ogl::Buffer::create | ( | int | arows, |
| int | acols, | ||
| int | atype, | ||
| Target | target = ARRAY_BUFFER, | ||
| bool | autoRelease = false ) |
为 ogl::Buffer 对象分配内存。
| arows | 二维数组中的行数。 |
| acols | 二维数组中的列数。 |
| atype | 数组类型 (CV_8UC1, ..., CV_64FC4)。详见 Mat。 |
| target | 缓冲区用途。详见 cv::ogl::Buffer::Target 。 |
| autoRelease | 自动释放模式(如果为 true,则在对象的析构函数中调用 release)。 |
| void cv::ogl::Buffer::create | ( | Size | asize, |
| int | atype, | ||
| Target | target = ARRAY_BUFFER, | ||
| bool | autoRelease = false ) |
这是一个重载成员函数,为方便起见而提供。它与上述函数的区别仅在于所接受的参数。
| asize | 2D 数组大小。 |
| atype | 数组类型 (CV_8UC1, ..., CV_64FC4)。详见 Mat。 |
| target | 缓冲区用途。详见 cv::ogl::Buffer::Target 。 |
| autoRelease | 自动释放模式(如果为 true,则在对象的析构函数中调用 release)。 |
| int cv::ogl::Buffer::depth | ( | ) | const |
| int cv::ogl::Buffer::elemSize | ( | ) | const |
| int cv::ogl::Buffer::elemSize1 | ( | ) | const |
| bool cv::ogl::Buffer::empty | ( | ) | const |
| cuda::GpuMat cv::ogl::Buffer::mapDevice | ( | ) |
映射到设备内存(阻塞)
| cuda::GpuMat cv::ogl::Buffer::mapDevice | ( | cuda::Stream & | 流 | ) |
将 OpenGL 缓冲区映射到 CUDA 设备内存。
此操作不复制数据。多个缓冲区对象可以同时映射到 CUDA 内存。
映射的数据存储在使用其缓冲区对象之前必须通过 ogl::Buffer::unmapDevice 解除映射。
将 OpenGL 缓冲区映射到主机内存。
mapHost 将缓冲区对象的整个数据存储映射到客户端的地址空间。然后,可以根据指定的访问策略,直接读取和/或写入相对于返回指针的数据。
映射的数据存储在使用其缓冲区对象之前必须通过 ogl::Buffer::unmapHost 解除映射。
此操作可能导致主机和设备之间的内存传输。
一次只能映射一个缓冲区对象。
| access | 访问策略,指示是否可以从缓冲区对象的映射数据存储中读取、写入或同时读取和写入。符号常量必须是 ogl::Buffer::READ_ONLY 、 ogl::Buffer::WRITE_ONLY 或 ogl::Buffer::READ_WRITE 。 |
| void cv::ogl::Buffer::release | ( | ) |
递减引用计数器,并在需要时销毁缓冲区对象。
该函数将调用 setAutoRelease(true) 。
| int cv::ogl::Buffer::rows | ( | ) | const |
| void cv::ogl::Buffer::setAutoRelease | ( | bool | flag | ) |
设置自动释放模式。
OpenGL 对象的生命周期与上下文的生命周期绑定。如果 OpenGL 上下文绑定到窗口,则可以在任何时候释放它(用户可以关闭窗口)。如果在上下文销毁后调用对象的析构函数,则会导致错误。因此,ogl::Buffer 默认不会在析构函数中销毁 OpenGL 对象(所有 OpenGL 资源都将随 OpenGL 上下文一起释放)。此函数可以强制 ogl::Buffer 析构函数销毁 OpenGL 对象。
| flag | 自动释放模式(如果为 true,则在对象的析构函数中调用 release)。 |
| Size cv::ogl::Buffer::size | ( | ) | const |
| int cv::ogl::Buffer::type | ( | ) | const |
|
static |
从指定的绑定点解除绑定任何缓冲区。
| target | 绑定点。详见 cv::ogl::Buffer::Target 。 |
| void cv::ogl::Buffer::unmapDevice | ( | ) |
| void cv::ogl::Buffer::unmapDevice | ( | cuda::Stream & | 流 | ) |
取消映射 OpenGL 缓冲区。
| void cv::ogl::Buffer::unmapHost | ( | ) |
取消映射 OpenGL 缓冲区。