OpenCV 4.13.0
开源计算机视觉库 (Open Source Computer Vision)
正在加载...
正在搜索...
未找到匹配项
cv::ogl::Buffer 类参考

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

#include <opencv2/core/opengl.hpp>

cv::ogl::Buffer 协作图

公开类型

enum  Access {
  READ_ONLY = 0x88B8 ,
  WRITE_ONLY = 0x88B9 ,
  READ_WRITE = 0x88BA
}
 
enum  目标 {
  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 缓冲区对象的智能指针。

Buffer 对象是 OpenGL 对象,用于存储由 OpenGL 上下文分配的未格式化内存数组。它们可用于存储顶点数据、从图像或帧缓冲区检索的像素数据以及各种其他数据。

ogl::Buffer 的接口类似于 Mat 接口,表示 2D 数组内存。

ogl::Buffer 支持主机和设备之间的内存传输,也可以映射到 CUDA 内存。

成员枚举文档

◆ Access

枚举值 (Enumerator)
READ_ONLY 
WRITE_ONLY 
READ_WRITE 

◆ Target

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

枚举值 (Enumerator)
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 行数,
int 列数,
int 类型,
unsigned int 缓冲区ID,
bool autoRelease = false )

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

参数
行数2D 数组中的行数。
列数2D 数组中的列数。
类型数组类型(CV_8UC1,...,CV_64FC4)。有关详细信息,请参阅 Mat
缓冲区IDBuffer 对象名称。
自动释放自动释放模式(如果为 true,则将在对象的析构函数中调用 release)。

◆ Buffer() [3/6]

cv::ogl::Buffer::Buffer ( Size 大小,
int 类型,
unsigned int 缓冲区ID,
bool autoRelease = false )

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

参数
大小2D 数组大小。
类型数组类型(CV_8UC1,...,CV_64FC4)。有关详细信息,请参阅 Mat
缓冲区IDBuffer 对象名称。
自动释放自动释放模式(如果为 true,则将在对象的析构函数中调用 release)。

◆ Buffer() [4/6]

cv::ogl::Buffer::Buffer ( int 行数,
int 列数,
int 类型,
目标 target = ARRAY_BUFFER,
bool autoRelease = false )

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

参数
行数2D 数组中的行数。
列数2D 数组中的列数。
类型数组类型(CV_8UC1,...,CV_64FC4)。有关详细信息,请参阅 Mat
目标缓冲区使用。请参阅 cv::ogl::Buffer::Target
自动释放自动释放模式(如果为 true,则将在对象的析构函数中调用 release)。

◆ Buffer() [5/6]

cv::ogl::Buffer::Buffer ( Size 大小,
int 类型,
目标 target = ARRAY_BUFFER,
bool autoRelease = false )

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

参数
大小2D 数组大小。
类型数组类型(CV_8UC1,...,CV_64FC4)。有关详细信息,请参阅 Mat
目标缓冲区使用。请参阅 cv::ogl::Buffer::Target
自动释放自动释放模式(如果为 true,则将在对象的析构函数中调用 release)。

◆ Buffer() [6/6]

cv::ogl::Buffer::Buffer ( InputArray arr (数组),
目标 target = ARRAY_BUFFER,
bool autoRelease = false )
explicit (显式)

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

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

成员函数说明

◆ bind()

void cv::ogl::Buffer::bind ( 目标 目标) const

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

参数
目标绑定点。请参阅 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 = ARRAY_BUFFER,
bool autoRelease = false ) const

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

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

◆ cols()

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

◆ copyFrom() [1/2]

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

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

◆ copyFrom() [2/2]

void cv::ogl::Buffer::copyFrom ( InputArray arr (数组),
目标 target = ARRAY_BUFFER,
bool autoRelease = false )

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

参数
arr (数组)输入数组(主机或设备内存,可以是 Matcuda::GpuMat 或 std::vector )。
目标缓冲区使用。请参阅 cv::ogl::Buffer::Target
自动释放自动释放模式(如果为 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 行数,
int 列数,
int 类型,
目标 target = ARRAY_BUFFER,
bool autoRelease = false )

ogl::Buffer 对象分配内存。

参数
行数2D 数组中的行数。
列数2D 数组中的列数。
类型数组类型(CV_8UC1,...,CV_64FC4)。有关详细信息,请参阅 Mat
目标缓冲区使用。请参阅 cv::ogl::Buffer::Target
自动释放自动释放模式(如果为 true,则将在对象的析构函数中调用 release)。

◆ create() [2/2]

void cv::ogl::Buffer::create ( Size 大小,
int 类型,
目标 target = ARRAY_BUFFER,
bool autoRelease = false )

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

参数
大小2D 数组大小。
类型数组类型(CV_8UC1,...,CV_64FC4)。有关详细信息,请参阅 Mat
目标缓冲区使用。请参阅 cv::ogl::Buffer::Target
自动释放自动释放模式(如果为 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 访问)

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

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

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

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

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

参数
访问访问策略,指示是否可以从缓冲区对象的映射数据存储读取、写入或同时读取和写入。符号常量必须是 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 标志)

设置自动释放模式。

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

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

◆ size()

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

◆ type()

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

◆ unbind()

static void cv::ogl::Buffer::unbind ( 目标 目标)
static (静态)

从指定的绑定点取消绑定任何缓冲区。

参数
目标绑定点。请参阅 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 缓冲区。


该类的文档由以下文件生成: