Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
Greenplum
Opencv
提交
6994a02c
O
Opencv
项目概览
Greenplum
/
Opencv
11 个月 前同步成功
通知
7
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
DevOps
流水线
流水线任务
计划
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
O
Opencv
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
DevOps
DevOps
流水线
流水线任务
计划
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
流水线任务
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
提交
6994a02c
编写于
4月 15, 2013
作者:
V
Vladislav Vinogradov
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
added Stream support to ogl::Buffer
上级
649737b6
变更
4
隐藏空白更改
内联
并排
Showing
4 changed file
with
341 addition
and
137 deletion
+341
-137
modules/core/include/opencv2/core/opengl.hpp
modules/core/include/opencv2/core/opengl.hpp
+186
-27
modules/core/src/matrix.cpp
modules/core/src/matrix.cpp
+0
-2
modules/core/src/opengl.cpp
modules/core/src/opengl.cpp
+153
-107
modules/gpu/test/test_opengl.cpp
modules/gpu/test/test_opengl.cpp
+2
-1
未找到文件。
modules/core/include/opencv2/core/opengl.hpp
浏览文件 @
6994a02c
...
...
@@ -40,8 +40,12 @@
//
//M*/
#ifndef __OPENCV_OPENGL_INTEROP_HPP__
#define __OPENCV_OPENGL_INTEROP_HPP__
#ifndef __OPENCV_CORE_OPENGL_HPP__
#define __OPENCV_CORE_OPENGL_HPP__
#ifndef __cplusplus
# error opengl.hpp header must be compiled as C++
#endif
#include "opencv2/core.hpp"
...
...
@@ -84,7 +88,7 @@ public:
//! create buffer
void
create
(
int
arows
,
int
acols
,
int
atype
,
Target
target
=
ARRAY_BUFFER
,
bool
autoRelease
=
false
);
void
create
(
Size
asize
,
int
atype
,
Target
target
=
ARRAY_BUFFER
,
bool
autoRelease
=
false
)
{
create
(
asize
.
height
,
asize
.
width
,
atype
,
target
,
autoRelease
);
}
void
create
(
Size
asize
,
int
atype
,
Target
target
=
ARRAY_BUFFER
,
bool
autoRelease
=
false
)
;
//! release memory and delete buffer object
void
release
();
...
...
@@ -92,11 +96,15 @@ public:
//! set auto release mode (if true, release will be called in object's destructor)
void
setAutoRelease
(
bool
flag
);
//! copy from host/device memory
//! copy from host/device memory
(blocking)
void
copyFrom
(
InputArray
arr
,
Target
target
=
ARRAY_BUFFER
,
bool
autoRelease
=
false
);
//! copy from device memory (non blocking)
void
copyFrom
(
InputArray
arr
,
gpu
::
Stream
&
stream
,
Target
target
=
ARRAY_BUFFER
,
bool
autoRelease
=
false
);
//! copy to host/device memory
void
copyTo
(
OutputArray
arr
,
Target
target
=
ARRAY_BUFFER
,
bool
autoRelease
=
false
)
const
;
//! copy to host/device memory (blocking)
void
copyTo
(
OutputArray
arr
)
const
;
//! copy to device memory (non blocking)
void
copyTo
(
OutputArray
arr
,
gpu
::
Stream
&
stream
)
const
;
//! create copy of current buffer
Buffer
clone
(
Target
target
=
ARRAY_BUFFER
,
bool
autoRelease
=
false
)
const
;
...
...
@@ -111,21 +119,26 @@ public:
Mat
mapHost
(
Access
access
);
void
unmapHost
();
//! map to device memory
//! map to device memory
(blocking)
gpu
::
GpuMat
mapDevice
();
void
unmapDevice
();
int
rows
()
const
{
return
rows_
;
}
int
cols
()
const
{
return
cols_
;
}
Size
size
()
const
{
return
Size
(
cols_
,
rows_
);
}
bool
empty
()
const
{
return
rows_
==
0
||
cols_
==
0
;
}
//! map to device memory (non blocking)
gpu
::
GpuMat
mapDevice
(
gpu
::
Stream
&
stream
);
void
unmapDevice
(
gpu
::
Stream
&
stream
);
int
type
()
const
{
return
type_
;
}
int
depth
()
const
{
return
CV_MAT_DEPTH
(
type_
);
}
int
channels
()
const
{
return
CV_MAT_CN
(
type_
);
}
int
elemSize
()
const
{
return
CV_ELEM_SIZE
(
type_
);
}
int
elemSize1
()
const
{
return
CV_ELEM_SIZE1
(
type_
);
}
int
rows
()
const
;
int
cols
()
const
;
Size
size
()
const
;
bool
empty
()
const
;
int
type
()
const
;
int
depth
()
const
;
int
channels
()
const
;
int
elemSize
()
const
;
int
elemSize1
()
const
;
//! get OpenGL opject id
unsigned
int
bufId
()
const
;
class
Impl
;
...
...
@@ -165,7 +178,7 @@ public:
//! create texture
void
create
(
int
arows
,
int
acols
,
Format
aformat
,
bool
autoRelease
=
false
);
void
create
(
Size
asize
,
Format
aformat
,
bool
autoRelease
=
false
)
{
create
(
asize
.
height
,
asize
.
width
,
aformat
,
autoRelease
);
}
void
create
(
Size
asize
,
Format
aformat
,
bool
autoRelease
=
false
)
;
//! release memory and delete texture object
void
release
();
...
...
@@ -182,13 +195,14 @@ public:
//! bind texture to current active texture unit for GL_TEXTURE_2D target
void
bind
()
const
;
int
rows
()
const
{
return
rows_
;
}
int
cols
()
const
{
return
cols_
;
}
Size
size
()
const
{
return
Size
(
cols_
,
rows_
);
}
bool
empty
()
const
{
return
rows_
==
0
||
cols_
==
0
;
}
int
rows
()
const
;
int
cols
()
const
;
Size
size
()
const
;
bool
empty
()
const
;
Format
format
()
const
{
return
format_
;
}
Format
format
()
const
;
//! get OpenGL opject id
unsigned
int
texId
()
const
;
class
Impl
;
...
...
@@ -224,8 +238,8 @@ public:
void
bind
()
const
;
int
size
()
const
{
return
size_
;
}
bool
empty
()
const
{
return
size_
==
0
;
}
int
size
()
const
;
bool
empty
()
const
;
private:
int
size_
;
...
...
@@ -260,14 +274,14 @@ enum {
CV_EXPORTS
void
render
(
const
Arrays
&
arr
,
int
mode
=
POINTS
,
Scalar
color
=
Scalar
::
all
(
255
));
CV_EXPORTS
void
render
(
const
Arrays
&
arr
,
InputArray
indices
,
int
mode
=
POINTS
,
Scalar
color
=
Scalar
::
all
(
255
));
}}
// namespace cv::gl
}}
// namespace cv::
o
gl
namespace
cv
{
namespace
gpu
{
//! set a CUDA device to use OpenGL interoperability
CV_EXPORTS
void
setGlDevice
(
int
device
=
0
);
}}
// cv::gpu
}}
namespace
cv
{
...
...
@@ -276,4 +290,149 @@ template <> CV_EXPORTS void Ptr<cv::ogl::Texture2D::Impl>::delete_obj();
}
#endif // __OPENCV_OPENGL_INTEROP_HPP__
////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////
inline
cv
::
ogl
::
Buffer
::
Buffer
(
int
arows
,
int
acols
,
int
atype
,
Target
target
,
bool
autoRelease
)
:
rows_
(
0
),
cols_
(
0
),
type_
(
0
)
{
create
(
arows
,
acols
,
atype
,
target
,
autoRelease
);
}
inline
cv
::
ogl
::
Buffer
::
Buffer
(
Size
asize
,
int
atype
,
Target
target
,
bool
autoRelease
)
:
rows_
(
0
),
cols_
(
0
),
type_
(
0
)
{
create
(
asize
,
atype
,
target
,
autoRelease
);
}
inline
void
cv
::
ogl
::
Buffer
::
create
(
Size
asize
,
int
atype
,
Target
target
,
bool
autoRelease
)
{
create
(
asize
.
height
,
asize
.
width
,
atype
,
target
,
autoRelease
);
}
inline
int
cv
::
ogl
::
Buffer
::
rows
()
const
{
return
rows_
;
}
inline
int
cv
::
ogl
::
Buffer
::
cols
()
const
{
return
cols_
;
}
inline
cv
::
Size
cv
::
ogl
::
Buffer
::
size
()
const
{
return
Size
(
cols_
,
rows_
);
}
inline
bool
cv
::
ogl
::
Buffer
::
empty
()
const
{
return
rows_
==
0
||
cols_
==
0
;
}
inline
int
cv
::
ogl
::
Buffer
::
type
()
const
{
return
type_
;
}
inline
int
cv
::
ogl
::
Buffer
::
depth
()
const
{
return
CV_MAT_DEPTH
(
type_
);
}
inline
int
cv
::
ogl
::
Buffer
::
channels
()
const
{
return
CV_MAT_CN
(
type_
);
}
inline
int
cv
::
ogl
::
Buffer
::
elemSize
()
const
{
return
CV_ELEM_SIZE
(
type_
);
}
inline
int
cv
::
ogl
::
Buffer
::
elemSize1
()
const
{
return
CV_ELEM_SIZE1
(
type_
);
}
///////
inline
cv
::
ogl
::
Texture2D
::
Texture2D
(
int
arows
,
int
acols
,
Format
aformat
,
bool
autoRelease
)
:
rows_
(
0
),
cols_
(
0
),
format_
(
NONE
)
{
create
(
arows
,
acols
,
aformat
,
autoRelease
);
}
inline
cv
::
ogl
::
Texture2D
::
Texture2D
(
Size
asize
,
Format
aformat
,
bool
autoRelease
)
:
rows_
(
0
),
cols_
(
0
),
format_
(
NONE
)
{
create
(
asize
,
aformat
,
autoRelease
);
}
inline
void
cv
::
ogl
::
Texture2D
::
create
(
Size
asize
,
Format
aformat
,
bool
autoRelease
)
{
create
(
asize
.
height
,
asize
.
width
,
aformat
,
autoRelease
);
}
inline
int
cv
::
ogl
::
Texture2D
::
rows
()
const
{
return
rows_
;
}
inline
int
cv
::
ogl
::
Texture2D
::
cols
()
const
{
return
cols_
;
}
inline
cv
::
Size
cv
::
ogl
::
Texture2D
::
size
()
const
{
return
Size
(
cols_
,
rows_
);
}
inline
bool
cv
::
ogl
::
Texture2D
::
empty
()
const
{
return
rows_
==
0
||
cols_
==
0
;
}
inline
cv
::
ogl
::
Texture2D
::
Format
cv
::
ogl
::
Texture2D
::
format
()
const
{
return
format_
;
}
///////
inline
cv
::
ogl
::
Arrays
::
Arrays
()
:
size_
(
0
)
{
}
inline
int
cv
::
ogl
::
Arrays
::
size
()
const
{
return
size_
;
}
inline
bool
cv
::
ogl
::
Arrays
::
empty
()
const
{
return
size_
==
0
;
}
#endif
/* __OPENCV_CORE_OPENGL_HPP__ */
modules/core/src/matrix.cpp
浏览文件 @
6994a02c
...
...
@@ -41,8 +41,6 @@
//M*/
#include "precomp.hpp"
#include "opencv2/core/gpu.hpp"
#include "opencv2/core/opengl.hpp"
/****************************************************************************************\
* [scaled] Identity matrix initialization *
...
...
modules/core/src/opengl.cpp
浏览文件 @
6994a02c
...
...
@@ -55,62 +55,61 @@ using namespace cv::gpu;
namespace
{
#ifndef HAVE_OPENGL
void
throw_no_ogl
()
{
CV_Error
(
CV_
OpenGlNotSupported
,
"The library is compiled without OpenGL support"
);
}
inline
void
throw_no_ogl
()
{
CV_Error
(
cv
::
Error
::
OpenGlNotSupported
,
"The library is compiled without OpenGL support"
);
}
#else
void
throw_no_ogl
()
{
CV_Error
(
CV_
OpenGlApiCallError
,
"OpenGL context doesn't exist"
);
}
inline
void
throw_no_ogl
()
{
CV_Error
(
cv
::
Error
::
OpenGlApiCallError
,
"OpenGL context doesn't exist"
);
}
#endif
bool
checkError
(
const
char
*
file
,
const
int
line
,
const
char
*
func
=
0
)
{
#ifndef HAVE_OPENGL
(
void
)
file
;
(
void
)
line
;
(
void
)
func
;
return
true
;
#else
GLenum
err
=
gl
::
GetError
();
if
(
err
!=
gl
::
NO_ERROR_
)
bool
checkError
(
const
char
*
file
,
const
int
line
,
const
char
*
func
=
0
)
{
const
char
*
msg
;
#ifndef HAVE_OPENGL
(
void
)
file
;
(
void
)
line
;
(
void
)
func
;
return
true
;
#else
GLenum
err
=
gl
::
GetError
();
switch
(
err
)
if
(
err
!=
gl
::
NO_ERROR_
)
{
case
gl
::
INVALID_ENUM
:
msg
=
"An unacceptable value is specified for an enumerated argument"
;
break
;
const
char
*
msg
;
case
gl
::
INVALID_VALUE
:
msg
=
"A numeric argument is out of range"
;
break
;
switch
(
err
)
{
case
gl
::
INVALID_ENUM
:
msg
=
"An unacceptable value is specified for an enumerated argument"
;
break
;
case
gl
::
INVALID_OPERATION
:
msg
=
"The specified operation is not allowed in the current stat
e"
;
break
;
case
gl
::
INVALID_VALUE
:
msg
=
"A numeric argument is out of rang
e"
;
break
;
case
gl
::
OUT_OF_MEMORY
:
msg
=
"There is not enough memory left to execute the command
"
;
break
;
case
gl
::
INVALID_OPERATION
:
msg
=
"The specified operation is not allowed in the current state
"
;
break
;
default
:
msg
=
"Unknown error
"
;
}
;
case
gl
::
OUT_OF_MEMORY
:
msg
=
"There is not enough memory left to execute the command
"
;
break
;
cvError
(
CV_OpenGlApiCallError
,
func
,
msg
,
file
,
line
);
default:
msg
=
"Unknown error"
;
};
return
false
;
}
cvError
(
CV_OpenGlApiCallError
,
func
,
msg
,
file
,
line
);
return
true
;
#endif
}
return
false
;
}
#if defined(__GNUC__)
#define CV_CheckGlError() CV_DbgAssert( (checkError(__FILE__, __LINE__, __func__)) )
#else
#define CV_CheckGlError() CV_DbgAssert( (checkError(__FILE__, __LINE__)) )
#endif
return
true
;
#endif
}
#if defined(__GNUC__)
#define CV_CheckGlError() CV_DbgAssert( (checkError(__FILE__, __LINE__, __func__)) )
#else
#define CV_CheckGlError() CV_DbgAssert( (checkError(__FILE__, __LINE__)) )
#endif
}
// namespace
#ifdef HAVE_OPENGL
...
...
@@ -129,7 +128,7 @@ void cv::gpu::setGlDevice(int device)
(
void
)
device
;
throw_no_ogl
();
#else
#if
!defined(HAVE_CUDA) || defined(CUDA_DISABLER)
#if
ndef HAVE_CUDA
(
void
)
device
;
throw_no_cuda
();
#else
...
...
@@ -141,7 +140,7 @@ void cv::gpu::setGlDevice(int device)
////////////////////////////////////////////////////////////////////////
// CudaResource
#if defined(HAVE_OPENGL) && defined(HAVE_CUDA)
&& !defined(CUDA_DISABLER)
#if defined(HAVE_OPENGL) && defined(HAVE_CUDA)
namespace
{
...
...
@@ -353,12 +352,13 @@ const Ptr<cv::ogl::Buffer::Impl>& cv::ogl::Buffer::Impl::empty()
return
p
;
}
cv
::
ogl
::
Buffer
::
Impl
::
Impl
()
:
bufId_
(
0
),
autoRelease_
(
tru
e
)
cv
::
ogl
::
Buffer
::
Impl
::
Impl
()
:
bufId_
(
0
),
autoRelease_
(
fals
e
)
{
}
cv
::
ogl
::
Buffer
::
Impl
::
Impl
(
GLuint
abufId
,
bool
autoRelease
)
:
bufId_
(
abufId
),
autoRelease_
(
autoRelease
)
{
CV_Assert
(
gl
::
IsBuffer
(
abufId
)
==
gl
::
TRUE_
);
}
cv
::
ogl
::
Buffer
::
Impl
::
Impl
(
GLsizeiptr
size
,
const
GLvoid
*
data
,
GLenum
target
,
bool
autoRelease
)
:
bufId_
(
0
),
autoRelease_
(
autoRelease
)
...
...
@@ -437,29 +437,31 @@ void cv::ogl::Buffer::Impl::unmapHost()
}
#ifdef HAVE_CUDA
void
cv
::
ogl
::
Buffer
::
Impl
::
copyFrom
(
const
void
*
src
,
size_t
spitch
,
size_t
width
,
size_t
height
,
cudaStream_t
stream
)
{
cudaResource_
.
registerBuffer
(
bufId_
);
cudaResource_
.
copyFrom
(
src
,
spitch
,
width
,
height
,
stream
);
}
void
cv
::
ogl
::
Buffer
::
Impl
::
copyTo
(
void
*
dst
,
size_t
dpitch
,
size_t
width
,
size_t
height
,
cudaStream_t
stream
)
const
{
cudaResource_
.
registerBuffer
(
bufId_
);
cudaResource_
.
copyTo
(
dst
,
d
pitch
,
width
,
height
,
stream
);
}
void
cv
::
ogl
::
Buffer
::
Impl
::
copyFrom
(
const
void
*
src
,
size_t
spitch
,
size_t
width
,
size_t
height
,
cudaStream_t
stream
)
{
cudaResource_
.
registerBuffer
(
bufId_
);
cudaResource_
.
copyFrom
(
src
,
s
pitch
,
width
,
height
,
stream
);
}
void
*
cv
::
ogl
::
Buffer
::
Impl
::
mapDevice
(
cudaStream_t
stream
)
{
cudaResource_
.
registerBuffer
(
bufId_
);
return
cudaResource_
.
map
(
stream
);
}
void
cv
::
ogl
::
Buffer
::
Impl
::
copyTo
(
void
*
dst
,
size_t
dpitch
,
size_t
width
,
size_t
height
,
cudaStream_t
stream
)
const
{
cudaResource_
.
registerBuffer
(
bufId_
);
cudaResource_
.
copyTo
(
dst
,
dpitch
,
width
,
height
,
stream
);
}
void
cv
::
ogl
::
Buffer
::
Impl
::
unmapDevice
(
cudaStream_t
stream
)
{
cudaResource_
.
unmap
(
stream
);
}
#endif
void
*
cv
::
ogl
::
Buffer
::
Impl
::
mapDevice
(
cudaStream_t
stream
)
{
cudaResource_
.
registerBuffer
(
bufId_
);
return
cudaResource_
.
map
(
stream
);
}
void
cv
::
ogl
::
Buffer
::
Impl
::
unmapDevice
(
cudaStream_t
stream
)
{
cudaResource_
.
unmap
(
stream
);
}
#endif // HAVE_CUDA
#endif // HAVE_OPENGL
...
...
@@ -505,16 +507,6 @@ cv::ogl::Buffer::Buffer(Size asize, int atype, unsigned int abufId, bool autoRel
#endif
}
cv
::
ogl
::
Buffer
::
Buffer
(
int
arows
,
int
acols
,
int
atype
,
Target
target
,
bool
autoRelease
)
:
rows_
(
0
),
cols_
(
0
),
type_
(
0
)
{
create
(
arows
,
acols
,
atype
,
target
,
autoRelease
);
}
cv
::
ogl
::
Buffer
::
Buffer
(
Size
asize
,
int
atype
,
Target
target
,
bool
autoRelease
)
:
rows_
(
0
),
cols_
(
0
),
type_
(
0
)
{
create
(
asize
,
atype
,
target
,
autoRelease
);
}
cv
::
ogl
::
Buffer
::
Buffer
(
InputArray
arr
,
Target
target
,
bool
autoRelease
)
:
rows_
(
0
),
cols_
(
0
),
type_
(
0
)
{
#ifndef HAVE_OPENGL
...
...
@@ -528,16 +520,9 @@ cv::ogl::Buffer::Buffer(InputArray arr, Target target, bool autoRelease) : rows_
switch
(
kind
)
{
case
_InputArray
::
OPENGL_BUFFER
:
{
copyFrom
(
arr
,
target
,
autoRelease
);
break
;
}
case
_InputArray
::
GPU_MAT
:
{
copyFrom
(
arr
,
target
,
autoRelease
);
break
;
}
copyFrom
(
arr
,
target
,
autoRelease
);
break
;
default:
{
...
...
@@ -622,7 +607,7 @@ void cv::ogl::Buffer::copyFrom(InputArray arr, Target target, bool autoRelease)
case
_InputArray
::
GPU_MAT
:
{
#if
!defined HAVE_CUDA || defined(CUDA_DISABLER)
#if
ndef HAVE_CUDA
throw_no_cuda
();
#else
GpuMat
dmat
=
arr
.
getGpuMat
();
...
...
@@ -642,13 +627,36 @@ void cv::ogl::Buffer::copyFrom(InputArray arr, Target target, bool autoRelease)
#endif
}
void
cv
::
ogl
::
Buffer
::
copy
To
(
OutputArray
arr
,
Target
target
,
bool
autoRelease
)
const
void
cv
::
ogl
::
Buffer
::
copy
From
(
InputArray
arr
,
gpu
::
Stream
&
stream
,
Target
target
,
bool
autoRelease
)
{
#ifndef HAVE_OPENGL
(
void
)
arr
;
(
void
)
stream
;
(
void
)
target
;
(
void
)
autoRelease
;
throw_no_ogl
();
#else
#ifndef HAVE_CUDA
(
void
)
arr
;
(
void
)
stream
;
(
void
)
target
;
(
void
)
autoRelease
;
throw_no_cuda
();
#else
GpuMat
dmat
=
arr
.
getGpuMat
();
create
(
dmat
.
size
(),
dmat
.
type
(),
target
,
autoRelease
);
impl_
->
copyFrom
(
dmat
.
data
,
dmat
.
step
,
dmat
.
cols
*
dmat
.
elemSize
(),
dmat
.
rows
,
gpu
::
StreamAccessor
::
getStream
(
stream
));
#endif
#endif
}
void
cv
::
ogl
::
Buffer
::
copyTo
(
OutputArray
arr
)
const
{
#ifndef HAVE_OPENGL
(
void
)
arr
;
throw_no_ogl
();
#else
const
int
kind
=
arr
.
kind
();
...
...
@@ -656,13 +664,13 @@ void cv::ogl::Buffer::copyTo(OutputArray arr, Target target, bool autoRelease) c
{
case
_InputArray
::
OPENGL_BUFFER
:
{
arr
.
getOGlBufferRef
().
copyFrom
(
*
this
,
target
,
autoRelease
);
arr
.
getOGlBufferRef
().
copyFrom
(
*
this
);
break
;
}
case
_InputArray
::
GPU_MAT
:
{
#if
!defined HAVE_CUDA || defined(CUDA_DISABLER)
#if
ndef HAVE_CUDA
throw_no_cuda
();
#else
GpuMat
&
dmat
=
arr
.
getGpuMatRef
();
...
...
@@ -684,6 +692,25 @@ void cv::ogl::Buffer::copyTo(OutputArray arr, Target target, bool autoRelease) c
#endif
}
void
cv
::
ogl
::
Buffer
::
copyTo
(
OutputArray
arr
,
gpu
::
Stream
&
stream
)
const
{
#ifndef HAVE_OPENGL
(
void
)
arr
;
(
void
)
stream
;
throw_no_ogl
();
#else
#ifndef HAVE_CUDA
(
void
)
arr
;
(
void
)
stream
;
throw_no_cuda
();
#else
arr
.
create
(
rows_
,
cols_
,
type_
);
GpuMat
dmat
=
arr
.
getGpuMat
();
impl_
->
copyTo
(
dmat
.
data
,
dmat
.
step
,
dmat
.
cols
*
dmat
.
elemSize
(),
dmat
.
rows
,
gpu
::
StreamAccessor
::
getStream
(
stream
));
#endif
#endif
}
cv
::
ogl
::
Buffer
cv
::
ogl
::
Buffer
::
clone
(
Target
target
,
bool
autoRelease
)
const
{
#ifndef HAVE_OPENGL
...
...
@@ -745,7 +772,7 @@ GpuMat cv::ogl::Buffer::mapDevice()
throw_no_ogl
();
return
GpuMat
();
#else
#if
!defined HAVE_CUDA || defined(CUDA_DISABLER)
#if
ndef HAVE_CUDA
throw_no_cuda
();
return
GpuMat
();
#else
...
...
@@ -759,7 +786,7 @@ void cv::ogl::Buffer::unmapDevice()
#ifndef HAVE_OPENGL
throw_no_ogl
();
#else
#if
!defined HAVE_CUDA || defined(CUDA_DISABLER)
#if
ndef HAVE_CUDA
throw_no_cuda
();
#else
impl_
->
unmapDevice
();
...
...
@@ -767,6 +794,38 @@ void cv::ogl::Buffer::unmapDevice()
#endif
}
gpu
::
GpuMat
cv
::
ogl
::
Buffer
::
mapDevice
(
gpu
::
Stream
&
stream
)
{
#ifndef HAVE_OPENGL
(
void
)
stream
;
throw_no_ogl
();
return
GpuMat
();
#else
#ifndef HAVE_CUDA
(
void
)
stream
;
throw_no_cuda
();
return
GpuMat
();
#else
return
GpuMat
(
rows_
,
cols_
,
type_
,
impl_
->
mapDevice
(
gpu
::
StreamAccessor
::
getStream
(
stream
)));
#endif
#endif
}
void
cv
::
ogl
::
Buffer
::
unmapDevice
(
gpu
::
Stream
&
stream
)
{
#ifndef HAVE_OPENGL
(
void
)
stream
;
throw_no_ogl
();
#else
#ifndef HAVE_CUDA
(
void
)
stream
;
throw_no_cuda
();
#else
impl_
->
unmapDevice
(
gpu
::
StreamAccessor
::
getStream
(
stream
));
#endif
#endif
}
unsigned
int
cv
::
ogl
::
Buffer
::
bufId
()
const
{
#ifndef HAVE_OPENGL
...
...
@@ -824,12 +883,13 @@ const Ptr<cv::ogl::Texture2D::Impl> cv::ogl::Texture2D::Impl::empty()
return
p
;
}
cv
::
ogl
::
Texture2D
::
Impl
::
Impl
()
:
texId_
(
0
),
autoRelease_
(
tru
e
)
cv
::
ogl
::
Texture2D
::
Impl
::
Impl
()
:
texId_
(
0
),
autoRelease_
(
fals
e
)
{
}
cv
::
ogl
::
Texture2D
::
Impl
::
Impl
(
GLuint
atexId
,
bool
autoRelease
)
:
texId_
(
atexId
),
autoRelease_
(
autoRelease
)
{
CV_Assert
(
gl
::
IsTexture
(
atexId
)
==
gl
::
TRUE_
);
}
cv
::
ogl
::
Texture2D
::
Impl
::
Impl
(
GLint
internalFormat
,
GLsizei
width
,
GLsizei
height
,
GLenum
format
,
GLenum
type
,
const
GLvoid
*
pixels
,
bool
autoRelease
)
:
texId_
(
0
),
autoRelease_
(
autoRelease
)
...
...
@@ -935,16 +995,6 @@ cv::ogl::Texture2D::Texture2D(Size asize, Format aformat, unsigned int atexId, b
#endif
}
cv
::
ogl
::
Texture2D
::
Texture2D
(
int
arows
,
int
acols
,
Format
aformat
,
bool
autoRelease
)
:
rows_
(
0
),
cols_
(
0
),
format_
(
NONE
)
{
create
(
arows
,
acols
,
aformat
,
autoRelease
);
}
cv
::
ogl
::
Texture2D
::
Texture2D
(
Size
asize
,
Format
aformat
,
bool
autoRelease
)
:
rows_
(
0
),
cols_
(
0
),
format_
(
NONE
)
{
create
(
asize
,
aformat
,
autoRelease
);
}
cv
::
ogl
::
Texture2D
::
Texture2D
(
InputArray
arr
,
bool
autoRelease
)
:
rows_
(
0
),
cols_
(
0
),
format_
(
NONE
)
{
#ifndef HAVE_OPENGL
...
...
@@ -985,7 +1035,7 @@ cv::ogl::Texture2D::Texture2D(InputArray arr, bool autoRelease) : rows_(0), cols
case
_InputArray
::
GPU_MAT
:
{
#if
!defined HAVE_CUDA || defined(CUDA_DISABLER)
#if
ndef HAVE_CUDA
throw_no_cuda
();
#else
GpuMat
dmat
=
arr
.
getGpuMat
();
...
...
@@ -1098,7 +1148,7 @@ void cv::ogl::Texture2D::copyFrom(InputArray arr, bool autoRelease)
case
_InputArray
::
GPU_MAT
:
{
#if
!defined HAVE_CUDA || defined(CUDA_DISABLER)
#if
ndef HAVE_CUDA
throw_no_cuda
();
#else
GpuMat
dmat
=
arr
.
getGpuMat
();
...
...
@@ -1149,7 +1199,7 @@ void cv::ogl::Texture2D::copyTo(OutputArray arr, int ddepth, bool autoRelease) c
case
_InputArray
::
GPU_MAT
:
{
#if
!defined HAVE_CUDA || defined(CUDA_DISABLER)
#if
ndef HAVE_CUDA
throw_no_cuda
();
#else
ogl
::
Buffer
buf
(
rows_
,
cols_
,
CV_MAKE_TYPE
(
ddepth
,
cn
),
ogl
::
Buffer
::
PIXEL_PACK_BUFFER
);
...
...
@@ -1201,10 +1251,6 @@ template <> void cv::Ptr<cv::ogl::Texture2D::Impl>::delete_obj()
////////////////////////////////////////////////////////////////////////
// ogl::Arrays
cv
::
ogl
::
Arrays
::
Arrays
()
:
size_
(
0
)
{
}
void
cv
::
ogl
::
Arrays
::
setVertexArray
(
InputArray
vertex
)
{
const
int
cn
=
vertex
.
channels
();
...
...
modules/gpu/test/test_opengl.cpp
浏览文件 @
6994a02c
...
...
@@ -198,7 +198,8 @@ GPU_TEST_P(Buffer, CopyToBuffer)
cv
::
ogl
::
Buffer
buf
(
gold
,
cv
::
ogl
::
Buffer
::
ARRAY_BUFFER
,
true
);
cv
::
ogl
::
Buffer
dst
;
buf
.
copyTo
(
dst
,
cv
::
ogl
::
Buffer
::
ARRAY_BUFFER
,
true
);
buf
.
copyTo
(
dst
);
dst
.
setAutoRelease
(
true
);
EXPECT_NE
(
buf
.
bufId
(),
dst
.
bufId
());
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录