OpenCV 4.12.0
开源计算机视觉
加载中...
搜索中...
无匹配项
cv::ogl::Buffer 类参考

带有引用计数的 OpenGL 缓冲区对象智能指针。更多...

#include <opencv2/core/opengl.hpp>

cv::ogl::Buffer 的协作图

公共类型

枚举  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 内存。

成员枚举文档

◆ 访问模式

枚举器
READ_ONLY 
WRITE_ONLY 
READ_WRITE 

◆ 目标

目标定义了您打算如何使用缓冲区对象。

枚举器
ARRAY_BUFFER 

此缓冲区将用作顶点数据的来源。

ELEMENT_ARRAY_BUFFER 

此缓冲区将用于索引(例如在 glDrawElements 中)

PIXEL_PACK_BUFFER 

此缓冲区将用于从 OpenGL 纹理读取数据。

PIXEL_UNPACK_BUFFER 

此缓冲区将用于写入 OpenGL 纹理。

构造函数 & 析构函数文档

◆ Buffer() [1/6]

cv::ogl::Buffer::Buffer ( )

构造函数。

创建空的 ogl::Buffer 对象,从现有缓冲区(abufId 参数)创建 ogl::Buffer 对象,为 ogl::Buffer 对象分配内存或从主机/设备内存复制数据。

◆ Buffer() [2/6]

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)。

◆ Buffer() [3/6]

cv::ogl::Buffer::Buffer ( Size asize,
int atype,
unsigned int abufId,
bool autoRelease = false )

这是一个重载成员函数,为方便起见而提供。它与上述函数的区别仅在于所接受的参数。

参数
asize2D 数组大小。
atype数组类型 (CV_8UC1, ..., CV_64FC4)。详见 Mat
abufId缓冲区对象名称。
autoRelease自动释放模式(如果为 true,则在对象的析构函数中调用 release)。

◆ Buffer() [4/6]

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)。

◆ Buffer() [5/6]

cv::ogl::Buffer::Buffer ( Size asize,
int atype,
Target target = ARRAY_BUFFER,
bool autoRelease = false )

这是一个重载成员函数,为方便起见而提供。它与上述函数的区别仅在于所接受的参数。

参数
asize2D 数组大小。
atype数组类型 (CV_8UC1, ..., CV_64FC4)。详见 Mat
target缓冲区用途。详见 cv::ogl::Buffer::Target
autoRelease自动释放模式(如果为 true,则在对象的析构函数中调用 release)。

◆ Buffer() [6/6]

cv::ogl::Buffer::Buffer ( InputArray arr,
Target target = ARRAY_BUFFER,
bool autoRelease = false )
显式

这是一个重载成员函数,为方便起见而提供。它与上述函数的区别仅在于所接受的参数。

参数
arr输入数组(主机或设备内存,可以是 Matcuda::GpuMat 或 std::vector )。
target缓冲区用途。详见 cv::ogl::Buffer::Target
autoRelease自动释放模式(如果为 true,则在对象的析构函数中调用 release)。

成员函数文档

◆ bind()

void cv::ogl::Buffer::bind ( Target target) const

将 OpenGL 缓冲区绑定到指定的缓冲区绑定点。

参数
target绑定点。详见 cv::ogl::Buffer::Target

◆ bufId()

unsigned int cv::ogl::Buffer::bufId ( ) const

获取 OpenGL 对象 ID

◆ channels()

int cv::ogl::Buffer::channels ( ) const

◆ clone()

Buffer cv::ogl::Buffer::clone ( Target target = ARRAY_BUFFER,
bool autoRelease = false ) const

创建缓冲区对象及其底层数据的完整副本。

参数
target目标缓冲区的缓冲区用途。
autoRelease目标缓冲区的自动释放模式。

◆ cols()

int cv::ogl::Buffer::cols ( ) const

◆ copyFrom() [1/2]

void cv::ogl::Buffer::copyFrom ( InputArray arr,
cuda::Stream & ,
Target target = ARRAY_BUFFER,
bool autoRelease = false )

这是一个重载成员函数,为方便起见而提供。它与上述函数的区别仅在于所接受的参数。

◆ copyFrom() [2/2]

void cv::ogl::Buffer::copyFrom ( InputArray arr,
Target target = ARRAY_BUFFER,
bool autoRelease = false )

将数据从主机/设备内存复制到 OpenGL 缓冲区。

参数
arr输入数组(主机或设备内存,可以是 Matcuda::GpuMat 或 std::vector )。
target缓冲区用途。详见 cv::ogl::Buffer::Target
autoRelease自动释放模式(如果为 true,则在对象的析构函数中调用 release)。

◆ copyTo() [1/2]

void cv::ogl::Buffer::copyTo ( OutputArray arr) const

将数据从 OpenGL 缓冲区复制到主机/设备内存或另一个 OpenGL 缓冲区对象。

参数
arr目标数组(主机或设备内存,可以是 Matcuda::GpuMat 、 std::vector 或 ogl::Buffer )。

◆ copyTo() [2/2]

void cv::ogl::Buffer::copyTo ( OutputArray arr,
cuda::Stream & stream ) const

这是一个重载成员函数,为方便起见而提供。它与上述函数的区别仅在于所接受的参数。

◆ create() [1/2]

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)。

◆ create() [2/2]

void cv::ogl::Buffer::create ( Size asize,
int atype,
Target target = ARRAY_BUFFER,
bool autoRelease = false )

这是一个重载成员函数,为方便起见而提供。它与上述函数的区别仅在于所接受的参数。

参数
asize2D 数组大小。
atype数组类型 (CV_8UC1, ..., CV_64FC4)。详见 Mat
target缓冲区用途。详见 cv::ogl::Buffer::Target
autoRelease自动释放模式(如果为 true,则在对象的析构函数中调用 release)。

◆ depth()

int cv::ogl::Buffer::depth ( ) const

◆ elemSize()

int cv::ogl::Buffer::elemSize ( ) const

◆ elemSize1()

int cv::ogl::Buffer::elemSize1 ( ) const

◆ empty()

bool cv::ogl::Buffer::empty ( ) const

◆ mapDevice() [1/2]

cuda::GpuMat cv::ogl::Buffer::mapDevice ( )

映射到设备内存(阻塞)

◆ mapDevice() [2/2]

cuda::GpuMat cv::ogl::Buffer::mapDevice ( cuda::Stream & )

将 OpenGL 缓冲区映射到 CUDA 设备内存。

此操作不复制数据。多个缓冲区对象可以同时映射到 CUDA 内存。

映射的数据存储在使用其缓冲区对象之前必须通过 ogl::Buffer::unmapDevice 解除映射。

◆ mapHost()

Mat cv::ogl::Buffer::mapHost ( Access access)

将 OpenGL 缓冲区映射到主机内存。

mapHost 将缓冲区对象的整个数据存储映射到客户端的地址空间。然后,可以根据指定的访问策略,直接读取和/或写入相对于返回指针的数据。

映射的数据存储在使用其缓冲区对象之前必须通过 ogl::Buffer::unmapHost 解除映射。

此操作可能导致主机和设备之间的内存传输。

一次只能映射一个缓冲区对象。

参数
access访问策略,指示是否可以从缓冲区对象的映射数据存储中读取、写入或同时读取和写入。符号常量必须是 ogl::Buffer::READ_ONLYogl::Buffer::WRITE_ONLYogl::Buffer::READ_WRITE

◆ release()

void cv::ogl::Buffer::release ( )

递减引用计数器,并在需要时销毁缓冲区对象。

该函数将调用 setAutoRelease(true) 。

◆ rows()

int cv::ogl::Buffer::rows ( ) const

◆ setAutoRelease()

void cv::ogl::Buffer::setAutoRelease ( bool flag)

设置自动释放模式。

OpenGL 对象的生命周期与上下文的生命周期绑定。如果 OpenGL 上下文绑定到窗口,则可以在任何时候释放它(用户可以关闭窗口)。如果在上下文销毁后调用对象的析构函数,则会导致错误。因此,ogl::Buffer 默认不会在析构函数中销毁 OpenGL 对象(所有 OpenGL 资源都将随 OpenGL 上下文一起释放)。此函数可以强制 ogl::Buffer 析构函数销毁 OpenGL 对象。

参数
flag自动释放模式(如果为 true,则在对象的析构函数中调用 release)。

◆ size()

Size cv::ogl::Buffer::size ( ) const

◆ type()

int cv::ogl::Buffer::type ( ) const

◆ unbind()

static void cv::ogl::Buffer::unbind ( Target target)
static

从指定的绑定点解除绑定任何缓冲区。

参数
target绑定点。详见 cv::ogl::Buffer::Target

◆ unmapDevice() [1/2]

void cv::ogl::Buffer::unmapDevice ( )

◆ unmapDevice() [2/2]

void cv::ogl::Buffer::unmapDevice ( cuda::Stream & )

取消映射 OpenGL 缓冲区。

◆ unmapHost()

void cv::ogl::Buffer::unmapHost ( )

取消映射 OpenGL 缓冲区。


此类的文档是从以下文件生成的