Loading...
Searching...
No Matches

Smart pointer for OpenGL buffer object with reference counting. More...

#include <opencv2/core/opengl.hpp>

Public Types

enum  Access {
  READ_ONLY = 0x88B8 ,
  WRITE_ONLY = 0x88B9 ,
  READ_WRITE = 0x88BA
}
 
enum  Target {
  ARRAY_BUFFER = 0x8892 ,
  ELEMENT_ARRAY_BUFFER = 0x8893 ,
  PIXEL_PACK_BUFFER = 0x88EB ,
  PIXEL_UNPACK_BUFFER = 0x88EC
}
 The target defines how you intend to use the buffer object. More...
 

Public Member Functions

 Buffer ()
 The constructors.
 
 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
 Binds OpenGL buffer to the specified buffer binding point.
 
unsigned int bufId () const
 get OpenGL opject id
 
int channels () const
 
Buffer clone (Target target=ARRAY_BUFFER, bool autoRelease=false) const
 Creates a full copy of the buffer object and the underlying data.
 
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)
 Copies from host/device memory to OpenGL buffer.
 
void copyTo (OutputArray arr) const
 Copies from OpenGL buffer to host/device memory or another OpenGL buffer object.
 
void copyTo (OutputArray arr, cuda::Stream &stream) const
 
void create (int arows, int acols, int atype, Target target=ARRAY_BUFFER, bool autoRelease=false)
 Allocates memory for ogl::Buffer object.
 
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 ()
 map to device memory (blocking)
 
cuda::GpuMat mapDevice (cuda::Stream &stream)
 Maps OpenGL buffer to CUDA device memory.
 
Mat mapHost (Access access)
 Maps OpenGL buffer to host memory.
 
void release ()
 Decrements the reference counter and destroys the buffer object if needed.
 
int rows () const
 
void setAutoRelease (bool flag)
 Sets auto release mode.
 
Size size () const
 
int type () const
 
void unmapDevice ()
 
void unmapDevice (cuda::Stream &stream)
 Unmaps OpenGL buffer.
 
void unmapHost ()
 Unmaps OpenGL buffer.
 

Static Public Member Functions

static void unbind (Target target)
 Unbind any buffers from the specified binding point.
 

Detailed Description

Smart pointer for OpenGL buffer object with reference counting.

Buffer Objects are OpenGL objects that store an array of unformatted memory allocated by the OpenGL context. These can be used to store vertex data, pixel data retrieved from images or the framebuffer, and a variety of other things.

ogl::Buffer has interface similar with Mat interface and represents 2D array memory.

ogl::Buffer supports memory transfers between host and device and also can be mapped to CUDA memory.

Member Enumeration Documentation

◆ Access

Enumerator
READ_ONLY 
WRITE_ONLY 
READ_WRITE 

◆ Target

The target defines how you intend to use the buffer object.

Enumerator
ARRAY_BUFFER 

The buffer will be used as a source for vertex data.

ELEMENT_ARRAY_BUFFER 

The buffer will be used for indices (in glDrawElements, for example)

PIXEL_PACK_BUFFER 

The buffer will be used for reading from OpenGL textures.

PIXEL_UNPACK_BUFFER 

The buffer will be used for writing to OpenGL textures.

Constructor & Destructor Documentation

◆ Buffer() [1/6]

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

The constructors.

Creates empty ogl::Buffer object, creates ogl::Buffer object from existed buffer ( abufId parameter), allocates memory for ogl::Buffer object or copies from host/device memory.

◆ Buffer() [2/6]

cv::ogl::Buffer::Buffer ( int  arows,
int  acols,
int  atype,
unsigned int  abufId,
bool  autoRelease = false 
)

This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts.

Parameters
arowsNumber of rows in a 2D array.
acolsNumber of columns in a 2D array.
atypeArray type ( CV_8UC1, ..., CV_64FC4 ). See Mat for details.
abufIdBuffer object name.
autoReleaseAuto release mode (if true, release will be called in object's destructor).

◆ Buffer() [3/6]

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

This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts.

Parameters
asize2D array size.
atypeArray type ( CV_8UC1, ..., CV_64FC4 ). See Mat for details.
abufIdBuffer object name.
autoReleaseAuto release mode (if true, release will be called in object's destructor).

◆ Buffer() [4/6]

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

This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts.

Parameters
arowsNumber of rows in a 2D array.
acolsNumber of columns in a 2D array.
atypeArray type ( CV_8UC1, ..., CV_64FC4 ). See Mat for details.
targetBuffer usage. See cv::ogl::Buffer::Target .
autoReleaseAuto release mode (if true, release will be called in object's destructor).

◆ Buffer() [5/6]

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

This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts.

Parameters
asize2D array size.
atypeArray type ( CV_8UC1, ..., CV_64FC4 ). See Mat for details.
targetBuffer usage. See cv::ogl::Buffer::Target .
autoReleaseAuto release mode (if true, release will be called in object's destructor).

◆ Buffer() [6/6]

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

This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts.

Parameters
arrInput array (host or device memory, it can be Mat , cuda::GpuMat or std::vector ).
targetBuffer usage. See cv::ogl::Buffer::Target .
autoReleaseAuto release mode (if true, release will be called in object's destructor).

Member Function Documentation

◆ bind()

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

Binds OpenGL buffer to the specified buffer binding point.

Parameters
targetBinding point. See cv::ogl::Buffer::Target .

◆ bufId()

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

get OpenGL opject id

◆ channels()

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

◆ clone()

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

Creates a full copy of the buffer object and the underlying data.

Parameters
targetBuffer usage for destination buffer.
autoReleaseAuto release mode for destination buffer.

◆ cols()

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

◆ copyFrom() [1/2]

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

This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts.

◆ copyFrom() [2/2]

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

Copies from host/device memory to OpenGL buffer.

Parameters
arrInput array (host or device memory, it can be Mat , cuda::GpuMat or std::vector ).
targetBuffer usage. See cv::ogl::Buffer::Target .
autoReleaseAuto release mode (if true, release will be called in object's destructor).

◆ copyTo() [1/2]

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

Copies from OpenGL buffer to host/device memory or another OpenGL buffer object.

Parameters
arrDestination array (host or device memory, can be Mat , cuda::GpuMat , std::vector or ogl::Buffer ).

◆ copyTo() [2/2]

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

This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts.

◆ create() [1/2]

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

Allocates memory for ogl::Buffer object.

Parameters
arowsNumber of rows in a 2D array.
acolsNumber of columns in a 2D array.
atypeArray type ( CV_8UC1, ..., CV_64FC4 ). See Mat for details.
targetBuffer usage. See cv::ogl::Buffer::Target .
autoReleaseAuto release mode (if true, release will be called in object's destructor).

◆ create() [2/2]

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

This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts.

Parameters
asize2D array size.
atypeArray type ( CV_8UC1, ..., CV_64FC4 ). See Mat for details.
targetBuffer usage. See cv::ogl::Buffer::Target .
autoReleaseAuto release mode (if true, release will be called in object's destructor).

◆ 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 ( )

map to device memory (blocking)

◆ mapDevice() [2/2]

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

Maps OpenGL buffer to CUDA device memory.

This operation doesn't copy data. Several buffer objects can be mapped to CUDA memory at a time.

A mapped data store must be unmapped with ogl::Buffer::unmapDevice before its buffer object is used.

◆ mapHost()

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

Maps OpenGL buffer to host memory.

mapHost maps to the client's address space the entire data store of the buffer object. The data can then be directly read and/or written relative to the returned pointer, depending on the specified access policy.

A mapped data store must be unmapped with ogl::Buffer::unmapHost before its buffer object is used.

This operation can lead to memory transfers between host and device.

Only one buffer object can be mapped at a time.

Parameters
accessAccess policy, indicating whether it will be possible to read from, write to, or both read from and write to the buffer object's mapped data store. The symbolic constant must be ogl::Buffer::READ_ONLY , ogl::Buffer::WRITE_ONLY or ogl::Buffer::READ_WRITE .

◆ release()

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

Decrements the reference counter and destroys the buffer object if needed.

The function will call setAutoRelease(true) .

◆ rows()

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

◆ setAutoRelease()

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

Sets auto release mode.

The lifetime of the OpenGL object is tied to the lifetime of the context. If OpenGL context was bound to a window it could be released at any time (user can close a window). If object's destructor is called after destruction of the context it will cause an error. Thus ogl::Buffer doesn't destroy OpenGL object in destructor by default (all OpenGL resources will be released with OpenGL context). This function can force ogl::Buffer destructor to destroy OpenGL object.

Parameters
flagAuto release mode (if true, release will be called in object's destructor).

◆ size()

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

◆ type()

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

◆ unbind()

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

Unbind any buffers from the specified binding point.

Parameters
targetBinding point. See cv::ogl::Buffer::Target .

◆ unmapDevice() [1/2]

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

◆ unmapDevice() [2/2]

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

Unmaps OpenGL buffer.

◆ unmapHost()

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

Unmaps OpenGL buffer.


The documentation for this class was generated from the following file: