Skip to content
Projects
Groups
Snippets
Help
Loading...
Sign in / Register
Toggle navigation
O
opencv
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Packages
Packages
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
submodule
opencv
Commits
b33e2313
Commit
b33e2313
authored
Nov 23, 2011
by
Vladislav Vinogradov
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
minor
parent
d168c2b9
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
127 additions
and
122 deletions
+127
-122
gpumat.cpp
modules/core/src/gpumat.cpp
+127
-122
No files found.
modules/core/src/gpumat.cpp
View file @
b33e2313
...
...
@@ -52,7 +52,7 @@
#ifdef HAVE_OPENGL
#include <GL/gl.h>
#include <G
l
/glu.h>
#include <G
L
/glu.h>
#ifdef HAVE_CUDA
#include <cuda_gl_interop.h>
...
...
@@ -66,15 +66,15 @@ using namespace cv::gpu;
////////////////////////////////////////////////////////////////////////
// GpuMat
cv
::
gpu
::
GpuMat
::
GpuMat
(
const
GpuMat
&
m
)
cv
::
gpu
::
GpuMat
::
GpuMat
(
const
GpuMat
&
m
)
:
flags
(
m
.
flags
),
rows
(
m
.
rows
),
cols
(
m
.
cols
),
step
(
m
.
step
),
data
(
m
.
data
),
refcount
(
m
.
refcount
),
datastart
(
m
.
datastart
),
dataend
(
m
.
dataend
)
{
if
(
refcount
)
CV_XADD
(
refcount
,
1
);
}
cv
::
gpu
::
GpuMat
::
GpuMat
(
int
rows_
,
int
cols_
,
int
type_
,
void
*
data_
,
size_t
step_
)
:
flags
(
Mat
::
MAGIC_VAL
+
(
type_
&
TYPE_MASK
)),
rows
(
rows_
),
cols
(
cols_
),
cv
::
gpu
::
GpuMat
::
GpuMat
(
int
rows_
,
int
cols_
,
int
type_
,
void
*
data_
,
size_t
step_
)
:
flags
(
Mat
::
MAGIC_VAL
+
(
type_
&
TYPE_MASK
)),
rows
(
rows_
),
cols
(
cols_
),
step
(
step_
),
data
((
uchar
*
)
data_
),
refcount
(
0
),
datastart
((
uchar
*
)
data_
),
dataend
((
uchar
*
)
data_
)
{
...
...
@@ -87,7 +87,7 @@ cv::gpu::GpuMat::GpuMat(int rows_, int cols_, int type_, void* data_, size_t ste
}
else
{
if
(
rows
==
1
)
if
(
rows
==
1
)
step
=
minstep
;
CV_DbgAssert
(
step
>=
minstep
);
...
...
@@ -97,7 +97,7 @@ cv::gpu::GpuMat::GpuMat(int rows_, int cols_, int type_, void* data_, size_t ste
dataend
+=
step
*
(
rows
-
1
)
+
minstep
;
}
cv
::
gpu
::
GpuMat
::
GpuMat
(
Size
size_
,
int
type_
,
void
*
data_
,
size_t
step_
)
:
cv
::
gpu
::
GpuMat
::
GpuMat
(
Size
size_
,
int
type_
,
void
*
data_
,
size_t
step_
)
:
flags
(
Mat
::
MAGIC_VAL
+
(
type_
&
TYPE_MASK
)),
rows
(
size_
.
height
),
cols
(
size_
.
width
),
step
(
step_
),
data
((
uchar
*
)
data_
),
refcount
(
0
),
datastart
((
uchar
*
)
data_
),
dataend
((
uchar
*
)
data_
)
...
...
@@ -111,7 +111,7 @@ cv::gpu::GpuMat::GpuMat(Size size_, int type_, void* data_, size_t step_) :
}
else
{
if
(
rows
==
1
)
if
(
rows
==
1
)
step
=
minstep
;
CV_DbgAssert
(
step
>=
minstep
);
...
...
@@ -158,7 +158,7 @@ cv::gpu::GpuMat::GpuMat(const GpuMat& m, Range rowRange, Range colRange)
rows
=
cols
=
0
;
}
cv
::
gpu
::
GpuMat
::
GpuMat
(
const
GpuMat
&
m
,
Rect
roi
)
:
cv
::
gpu
::
GpuMat
::
GpuMat
(
const
GpuMat
&
m
,
Rect
roi
)
:
flags
(
m
.
flags
),
rows
(
roi
.
height
),
cols
(
roi
.
width
),
step
(
m
.
step
),
data
(
m
.
data
+
roi
.
y
*
step
),
refcount
(
m
.
refcount
),
datastart
(
m
.
datastart
),
dataend
(
m
.
dataend
)
...
...
@@ -175,10 +175,10 @@ cv::gpu::GpuMat::GpuMat(const GpuMat& m, Rect roi) :
rows
=
cols
=
0
;
}
cv
::
gpu
::
GpuMat
::
GpuMat
(
const
Mat
&
m
)
:
flags
(
0
),
rows
(
0
),
cols
(
0
),
step
(
0
),
data
(
0
),
refcount
(
0
),
datastart
(
0
),
dataend
(
0
)
{
upload
(
m
);
cv
::
gpu
::
GpuMat
::
GpuMat
(
const
Mat
&
m
)
:
flags
(
0
),
rows
(
0
),
cols
(
0
),
step
(
0
),
data
(
0
),
refcount
(
0
),
datastart
(
0
),
dataend
(
0
)
{
upload
(
m
);
}
GpuMat
&
cv
::
gpu
::
GpuMat
::
operator
=
(
const
GpuMat
&
m
)
...
...
@@ -195,9 +195,9 @@ GpuMat& cv::gpu::GpuMat::operator = (const GpuMat& m)
void
cv
::
gpu
::
GpuMat
::
swap
(
GpuMat
&
b
)
{
std
::
swap
(
flags
,
b
.
flags
);
std
::
swap
(
rows
,
b
.
rows
);
std
::
swap
(
rows
,
b
.
rows
);
std
::
swap
(
cols
,
b
.
cols
);
std
::
swap
(
step
,
b
.
step
);
std
::
swap
(
step
,
b
.
step
);
std
::
swap
(
data
,
b
.
data
);
std
::
swap
(
datastart
,
b
.
datastart
);
std
::
swap
(
dataend
,
b
.
dataend
);
...
...
@@ -230,20 +230,20 @@ void cv::gpu::GpuMat::locateROI(Size& wholeSize, Point& ofs) const
GpuMat
&
cv
::
gpu
::
GpuMat
::
adjustROI
(
int
dtop
,
int
dbottom
,
int
dleft
,
int
dright
)
{
Size
wholeSize
;
Size
wholeSize
;
Point
ofs
;
locateROI
(
wholeSize
,
ofs
);
size_t
esz
=
elemSize
();
int
row1
=
std
::
max
(
ofs
.
y
-
dtop
,
0
);
int
row1
=
std
::
max
(
ofs
.
y
-
dtop
,
0
);
int
row2
=
std
::
min
(
ofs
.
y
+
rows
+
dbottom
,
wholeSize
.
height
);
int
col1
=
std
::
max
(
ofs
.
x
-
dleft
,
0
);
int
col2
=
std
::
min
(
ofs
.
x
+
cols
+
dright
,
wholeSize
.
width
);
data
+=
(
row1
-
ofs
.
y
)
*
step
+
(
col1
-
ofs
.
x
)
*
esz
;
rows
=
row2
-
row1
;
rows
=
row2
-
row1
;
cols
=
col2
-
col1
;
if
(
esz
*
cols
==
step
||
rows
==
1
)
...
...
@@ -329,9 +329,9 @@ namespace
namespace
{
void
throw_nogpu
()
{
CV_Error
(
CV_GpuNotSupported
,
"The library is compiled without GPU support"
);
void
throw_nogpu
()
{
CV_Error
(
CV_GpuNotSupported
,
"The library is compiled without GPU support"
);
}
class
EmptyFuncTable
:
public
GpuFuncTable
...
...
@@ -361,7 +361,7 @@ namespace
#else // HAVE_CUDA
namespace
cv
{
namespace
gpu
{
namespace
device
namespace
cv
{
namespace
gpu
{
namespace
device
{
void
copy_to_with_mask
(
DevMem2Db
src
,
DevMem2Db
dst
,
int
depth
,
DevMem2Db
mask
,
int
channels
,
cudaStream_t
stream
);
...
...
@@ -418,15 +418,15 @@ namespace
namespace
cv
{
namespace
gpu
{
CV_EXPORTS
void
copyWithMask
(
const
GpuMat
&
src
,
GpuMat
&
dst
,
const
GpuMat
&
mask
,
cudaStream_t
stream
=
0
)
{
CV_EXPORTS
void
copyWithMask
(
const
GpuMat
&
src
,
GpuMat
&
dst
,
const
GpuMat
&
mask
,
cudaStream_t
stream
=
0
)
{
::
cv
::
gpu
::
device
::
copy_to_with_mask
(
src
,
dst
,
src
.
depth
(),
mask
,
src
.
channels
(),
stream
);
}
CV_EXPORTS
void
convertTo
(
const
GpuMat
&
src
,
GpuMat
&
dst
)
{
::
cv
::
gpu
::
device
::
convert_gpu
(
src
.
reshape
(
1
),
src
.
depth
(),
dst
.
reshape
(
1
),
dst
.
depth
(),
1.0
,
0.0
,
0
);
}
}
CV_EXPORTS
void
convertTo
(
const
GpuMat
&
src
,
GpuMat
&
dst
,
double
alpha
,
double
beta
,
cudaStream_t
stream
=
0
)
{
...
...
@@ -437,7 +437,7 @@ namespace cv { namespace gpu
{
typedef
void
(
*
caller_t
)(
GpuMat
&
src
,
Scalar
s
,
cudaStream_t
stream
);
static
const
caller_t
callers
[]
=
static
const
caller_t
callers
[]
=
{
kernelSetCaller
<
uchar
>
,
kernelSetCaller
<
schar
>
,
kernelSetCaller
<
ushort
>
,
kernelSetCaller
<
short
>
,
kernelSetCaller
<
int
>
,
kernelSetCaller
<
float
>
,
kernelSetCaller
<
double
>
...
...
@@ -450,7 +450,7 @@ namespace cv { namespace gpu
{
typedef
void
(
*
caller_t
)(
GpuMat
&
src
,
Scalar
s
,
const
GpuMat
&
mask
,
cudaStream_t
stream
);
static
const
caller_t
callers
[]
=
static
const
caller_t
callers
[]
=
{
kernelSetCaller
<
uchar
>
,
kernelSetCaller
<
schar
>
,
kernelSetCaller
<
ushort
>
,
kernelSetCaller
<
short
>
,
kernelSetCaller
<
int
>
,
kernelSetCaller
<
float
>
,
kernelSetCaller
<
double
>
...
...
@@ -524,11 +524,11 @@ namespace
cudaSafeCall
(
cudaDeviceSynchronize
()
);
}
};
};
//////////////////////////////////////////////////////////////////////////
// Set
template
<
int
SDEPTH
,
int
SCN
>
struct
NppSetFunc
{
typedef
typename
NPPTypeTraits
<
SDEPTH
>::
npp_type
src_t
;
...
...
@@ -575,7 +575,7 @@ namespace
cudaSafeCall
(
cudaDeviceSynchronize
()
);
}
};
};
template
<
int
SDEPTH
,
int
SCN
>
struct
NppSetMaskFunc
{
...
...
@@ -623,35 +623,35 @@ namespace
cudaSafeCall
(
cudaDeviceSynchronize
()
);
}
};
};
class
CudaFuncTable
:
public
GpuFuncTable
{
public
:
void
copy
(
const
Mat
&
src
,
GpuMat
&
dst
)
const
{
void
copy
(
const
Mat
&
src
,
GpuMat
&
dst
)
const
{
cudaSafeCall
(
cudaMemcpy2D
(
dst
.
data
,
dst
.
step
,
src
.
data
,
src
.
step
,
src
.
cols
*
src
.
elemSize
(),
src
.
rows
,
cudaMemcpyHostToDevice
)
);
}
void
copy
(
const
GpuMat
&
src
,
Mat
&
dst
)
const
{
{
cudaSafeCall
(
cudaMemcpy2D
(
dst
.
data
,
dst
.
step
,
src
.
data
,
src
.
step
,
src
.
cols
*
src
.
elemSize
(),
src
.
rows
,
cudaMemcpyDeviceToHost
)
);
}
void
copy
(
const
GpuMat
&
src
,
GpuMat
&
dst
)
const
{
{
cudaSafeCall
(
cudaMemcpy2D
(
dst
.
data
,
dst
.
step
,
src
.
data
,
src
.
step
,
src
.
cols
*
src
.
elemSize
(),
src
.
rows
,
cudaMemcpyDeviceToDevice
)
);
}
void
copyWithMask
(
const
GpuMat
&
src
,
GpuMat
&
dst
,
const
GpuMat
&
mask
)
const
{
void
copyWithMask
(
const
GpuMat
&
src
,
GpuMat
&
dst
,
const
GpuMat
&
mask
)
const
{
::
cv
::
gpu
::
copyWithMask
(
src
,
dst
,
mask
);
}
void
convert
(
const
GpuMat
&
src
,
GpuMat
&
dst
)
const
{
void
convert
(
const
GpuMat
&
src
,
GpuMat
&
dst
)
const
{
typedef
void
(
*
caller_t
)(
const
GpuMat
&
src
,
GpuMat
&
dst
);
static
const
caller_t
callers
[
7
][
7
][
7
]
=
{
{
{
/* 8U -> 8U */
{
0
,
0
,
0
,
0
},
/* 8U -> 8S */
{
::
cv
::
gpu
::
convertTo
,
::
cv
::
gpu
::
convertTo
,
::
cv
::
gpu
::
convertTo
,
::
cv
::
gpu
::
convertTo
},
/* 8U -> 16U */
{
NppCvt
<
CV_8U
,
CV_16U
,
nppiConvert_8u16u_C1R
>::
cvt
,
::
cv
::
gpu
::
convertTo
,
::
cv
::
gpu
::
convertTo
,
NppCvt
<
CV_8U
,
CV_16U
,
nppiConvert_8u16u_C4R
>::
cvt
},
...
...
@@ -722,8 +722,8 @@ namespace
func
(
src
,
dst
);
}
void
convert
(
const
GpuMat
&
src
,
GpuMat
&
dst
,
double
alpha
,
double
beta
)
const
{
void
convert
(
const
GpuMat
&
src
,
GpuMat
&
dst
,
double
alpha
,
double
beta
)
const
{
::
cv
::
gpu
::
convertTo
(
src
,
dst
,
alpha
,
beta
);
}
...
...
@@ -796,7 +796,7 @@ namespace
cudaFree
(
devPtr
);
}
};
const
GpuFuncTable
*
gpuFuncTable
()
{
static
CudaFuncTable
funcTable
;
...
...
@@ -883,7 +883,7 @@ GpuMat& cv::gpu::GpuMat::setTo(Scalar s, const GpuMat& mask)
CV_Assert
(
mask
.
empty
()
||
mask
.
type
()
==
CV_8UC1
);
CV_DbgAssert
(
!
empty
());
gpuFuncTable
()
->
setTo
(
*
this
,
s
,
mask
);
gpuFuncTable
()
->
setTo
(
*
this
,
s
,
mask
);
return
*
this
;
}
...
...
@@ -948,12 +948,12 @@ void cv::gpu::GpuMat::release()
namespace
{
void
throw_nogl
()
void
throw_nogl
()
{
#ifndef HAVE_OPENGL
CV_Error
(
CV_OpenGlNotSupported
,
"The library is compiled without OpenGL support"
);
CV_Error
(
CV_OpenGlNotSupported
,
"The library is compiled without OpenGL support"
);
#else
CV_Error
(
CV_OpenGlNotSupported
,
"OpenGL context doesn't exist"
);
CV_Error
(
CV_OpenGlNotSupported
,
"OpenGL context doesn't exist"
);
#endif
}
...
...
@@ -1012,7 +1012,7 @@ void cv::gpu::setGlFuncTab(const GlFuncTab* tab)
#endif
namespace
{
{
const
GLenum
gl_types
[]
=
{
GL_UNSIGNED_BYTE
,
GL_BYTE
,
GL_UNSIGNED_SHORT
,
GL_SHORT
,
GL_INT
,
GL_FLOAT
,
GL_DOUBLE
};
#ifdef HAVE_CUDA
...
...
@@ -1034,7 +1034,7 @@ void cv::gpu::setGlDevice(int device)
if
(
!
glFuncTab
()
->
isGlContextInitialized
())
throw_nogl
();
cudaSafeCall
(
cudaGLSetGLDevice
(
device
)
);
cudaSafeCall
(
cudaGLSetGLDevice
(
device
)
);
g_isCudaGlDeviceInitialized
=
true
;
#endif
...
...
@@ -1064,17 +1064,17 @@ namespace
cudaGraphicsResource_t
resource_
;
};
inline
CudaGlInterop
::
CudaGlInterop
()
:
resource_
(
0
)
inline
CudaGlInterop
::
CudaGlInterop
()
:
resource_
(
0
)
{
}
CudaGlInterop
::~
CudaGlInterop
()
{
CudaGlInterop
::~
CudaGlInterop
()
{
if
(
resource_
)
{
cudaGraphicsUnregisterResource
(
resource_
);
resource_
=
0
;
}
}
}
void
CudaGlInterop
::
registerBuffer
(
unsigned
int
buffer
)
...
...
@@ -1097,7 +1097,7 @@ namespace
void
*
dst_ptr
;
size_t
num_bytes
;
cudaSafeCall
(
cudaGraphicsResourceGetMappedPointer
(
&
dst_ptr
,
&
num_bytes
,
resource_
)
);
const
void
*
src_ptr
=
mat
.
ptr
();
size_t
widthBytes
=
mat
.
cols
*
mat
.
elemSize
();
...
...
@@ -1177,20 +1177,21 @@ private:
#endif
};
inline
cv
::
gpu
::
GlBuffer
::
Impl
::
Impl
()
:
buffer_
(
0
)
inline
cv
::
gpu
::
GlBuffer
::
Impl
::
Impl
()
:
buffer_
(
0
)
{
}
cv
::
gpu
::
GlBuffer
::
Impl
::
Impl
(
int
rows
,
int
cols
,
int
type
,
unsigned
int
target
)
:
buffer_
(
0
)
{
cv
::
gpu
::
GlBuffer
::
Impl
::
Impl
(
int
rows
,
int
cols
,
int
type
,
unsigned
int
target
)
:
buffer_
(
0
)
{
if
(
!
glFuncTab
()
->
isGlContextInitialized
())
throw_nogl
();
CV_DbgAssert
(
rows
>
0
&&
cols
>
0
);
CV_DbgAssert
(
CV_MAT_DEPTH
(
type
)
>=
0
&&
CV_MAT_DEPTH
(
type
)
<=
CV_64F
);
glFuncTab
()
->
genBuffers
(
1
,
&
buffer_
);
CV_CheckGlError
();
CV_Assert
(
buffer_
!=
0
);
size_t
size
=
rows
*
cols
*
CV_ELEM_SIZE
(
type
);
...
...
@@ -1201,24 +1202,25 @@ cv::gpu::GlBuffer::Impl::Impl(int rows, int cols, int type, unsigned int target)
CV_CheckGlError
();
glFuncTab
()
->
bindBuffer
(
target
,
0
);
#ifdef HAVE_CUDA
if
(
g_isCudaGlDeviceInitialized
)
cudaGlInterop_
.
registerBuffer
(
buffer_
);
#endif
}
cv
::
gpu
::
GlBuffer
::
Impl
::
Impl
(
const
Mat
&
m
,
unsigned
int
target
)
:
buffer_
(
0
)
{
cv
::
gpu
::
GlBuffer
::
Impl
::
Impl
(
const
Mat
&
m
,
unsigned
int
target
)
:
buffer_
(
0
)
{
if
(
!
glFuncTab
()
->
isGlContextInitialized
())
throw_nogl
();
CV_DbgAssert
(
m
.
rows
>
0
&&
m
.
cols
>
0
);
CV_DbgAssert
(
m
.
depth
()
>=
0
&&
m
.
depth
()
<=
CV_64F
);
CV_Assert
(
m
.
isContinuous
());
glFuncTab
()
->
genBuffers
(
1
,
&
buffer_
);
CV_CheckGlError
();
CV_Assert
(
buffer_
!=
0
);
size_t
size
=
m
.
rows
*
m
.
cols
*
m
.
elemSize
();
...
...
@@ -1229,15 +1231,15 @@ cv::gpu::GlBuffer::Impl::Impl(const Mat& m, unsigned int target) : buffer_(0)
CV_CheckGlError
();
glFuncTab
()
->
bindBuffer
(
target
,
0
);
#ifdef HAVE_CUDA
if
(
g_isCudaGlDeviceInitialized
)
cudaGlInterop_
.
registerBuffer
(
buffer_
);
#endif
}
cv
::
gpu
::
GlBuffer
::
Impl
::~
Impl
()
{
cv
::
gpu
::
GlBuffer
::
Impl
::~
Impl
()
{
try
{
if
(
buffer_
)
...
...
@@ -1272,7 +1274,7 @@ void cv::gpu::GlBuffer::Impl::copyFrom(const Mat& m, unsigned int target)
#ifdef HAVE_CUDA
void
cv
::
gpu
::
GlBuffer
::
Impl
::
copyFrom
(
const
GpuMat
&
mat
,
cudaStream_t
stream
)
void
cv
::
gpu
::
GlBuffer
::
Impl
::
copyFrom
(
const
GpuMat
&
mat
,
cudaStream_t
stream
)
{
if
(
!
g_isCudaGlDeviceInitialized
)
cvError
(
CV_GpuApiCallError
,
"copyFrom"
,
"cuda GL device wasn't initialized, call setGlDevice"
,
__FILE__
,
__LINE__
);
...
...
@@ -1284,16 +1286,16 @@ void cv::gpu::GlBuffer::Impl::copyFrom(const GpuMat& mat, cudaStream_t stream)
#endif // HAVE_CUDA
inline
void
cv
::
gpu
::
GlBuffer
::
Impl
::
bind
(
unsigned
int
target
)
const
inline
void
cv
::
gpu
::
GlBuffer
::
Impl
::
bind
(
unsigned
int
target
)
const
{
CV_Assert
(
buffer_
!=
0
);
glFuncTab
()
->
bindBuffer
(
target
,
buffer_
);
glFuncTab
()
->
bindBuffer
(
target
,
buffer_
);
CV_CheckGlError
();
}
inline
void
cv
::
gpu
::
GlBuffer
::
Impl
::
unbind
(
unsigned
int
target
)
const
{
{
glFuncTab
()
->
bindBuffer
(
target
,
0
);
}
...
...
@@ -1397,7 +1399,7 @@ cv::gpu::GlBuffer::GlBuffer(const GpuMat& d_mat, Usage usage) : rows(0), cols(0)
#endif
}
cv
::
gpu
::
GlBuffer
::
GlBuffer
(
const
GlBuffer
&
other
)
cv
::
gpu
::
GlBuffer
::
GlBuffer
(
const
GlBuffer
&
other
)
:
rows
(
other
.
rows
),
cols
(
other
.
cols
),
type_
(
other
.
type_
),
usage_
(
other
.
usage_
),
impl_
(
other
.
impl_
)
{
}
...
...
@@ -1582,6 +1584,7 @@ cv::gpu::GlTexture::Impl::Impl(int rows, int cols, int type) : tex_(0)
glGenTextures
(
1
,
&
tex_
);
CV_CheckGlError
();
CV_Assert
(
tex_
!=
0
);
glBindTexture
(
GL_TEXTURE_2D
,
tex_
);
CV_CheckGlError
();
...
...
@@ -1589,7 +1592,7 @@ cv::gpu::GlTexture::Impl::Impl(int rows, int cols, int type) : tex_(0)
glTexParameteri
(
GL_TEXTURE_2D
,
GL_TEXTURE_WRAP_S
,
GL_REPEAT
);
glTexParameteri
(
GL_TEXTURE_2D
,
GL_TEXTURE_WRAP_T
,
GL_REPEAT
);
glTexParameteri
(
GL_TEXTURE_2D
,
GL_TEXTURE_MAG_FILTER
,
GL_LINEAR
);
glTexParameteri
(
GL_TEXTURE_2D
,
GL_TEXTURE_MIN_FILTER
,
GL_LINEAR
);
glTexParameteri
(
GL_TEXTURE_2D
,
GL_TEXTURE_MIN_FILTER
,
GL_LINEAR
);
CV_CheckGlError
();
GLenum
format
=
cn
==
1
?
GL_LUMINANCE
:
cn
==
3
?
GL_BGR
:
GL_BGRA
;
...
...
@@ -1616,6 +1619,7 @@ cv::gpu::GlTexture::Impl::Impl(const Mat& mat, bool bgra) : tex_(0)
glGenTextures
(
1
,
&
tex_
);
CV_CheckGlError
();
CV_Assert
(
tex_
!=
0
);
glBindTexture
(
GL_TEXTURE_2D
,
tex_
);
CV_CheckGlError
();
...
...
@@ -1623,7 +1627,7 @@ cv::gpu::GlTexture::Impl::Impl(const Mat& mat, bool bgra) : tex_(0)
glTexParameteri
(
GL_TEXTURE_2D
,
GL_TEXTURE_WRAP_S
,
GL_REPEAT
);
glTexParameteri
(
GL_TEXTURE_2D
,
GL_TEXTURE_WRAP_T
,
GL_REPEAT
);
glTexParameteri
(
GL_TEXTURE_2D
,
GL_TEXTURE_MAG_FILTER
,
GL_LINEAR
);
glTexParameteri
(
GL_TEXTURE_2D
,
GL_TEXTURE_MIN_FILTER
,
GL_LINEAR
);
glTexParameteri
(
GL_TEXTURE_2D
,
GL_TEXTURE_MIN_FILTER
,
GL_LINEAR
);
CV_CheckGlError
();
GLenum
format
=
cn
==
1
?
GL_LUMINANCE
:
(
cn
==
3
?
(
bgra
?
GL_BGR
:
GL_RGB
)
:
(
bgra
?
GL_BGRA
:
GL_RGBA
));
...
...
@@ -1643,13 +1647,14 @@ cv::gpu::GlTexture::Impl::Impl(const GlBuffer& buf, bool bgra) : tex_(0)
int
depth
=
buf
.
depth
();
int
cn
=
buf
.
channels
();
CV_DbgAssert
(
buf
.
rows
()
>
0
&&
buf
.
cols
()
>
0
);
CV_DbgAssert
(
buf
.
rows
>
0
&&
buf
.
cols
>
0
);
CV_Assert
(
cn
==
1
||
cn
==
3
||
cn
==
4
);
CV_Assert
(
depth
>=
0
&&
depth
<=
CV_32F
);
CV_Assert
(
buf
.
usage
()
==
GlBuffer
::
TEXTURE_BUFFER
);
glGenTextures
(
1
,
&
tex_
);
CV_CheckGlError
();
CV_Assert
(
tex_
!=
0
);
glBindTexture
(
GL_TEXTURE_2D
,
tex_
);
CV_CheckGlError
();
...
...
@@ -1657,7 +1662,7 @@ cv::gpu::GlTexture::Impl::Impl(const GlBuffer& buf, bool bgra) : tex_(0)
glTexParameteri
(
GL_TEXTURE_2D
,
GL_TEXTURE_WRAP_S
,
GL_REPEAT
);
glTexParameteri
(
GL_TEXTURE_2D
,
GL_TEXTURE_WRAP_T
,
GL_REPEAT
);
glTexParameteri
(
GL_TEXTURE_2D
,
GL_TEXTURE_MAG_FILTER
,
GL_LINEAR
);
glTexParameteri
(
GL_TEXTURE_2D
,
GL_TEXTURE_MIN_FILTER
,
GL_LINEAR
);
glTexParameteri
(
GL_TEXTURE_2D
,
GL_TEXTURE_MIN_FILTER
,
GL_LINEAR
);
CV_CheckGlError
();
GLenum
format
=
cn
==
1
?
GL_LUMINANCE
:
(
cn
==
3
?
(
bgra
?
GL_BGR
:
GL_RGB
)
:
(
bgra
?
GL_BGRA
:
GL_RGBA
));
...
...
@@ -1790,7 +1795,7 @@ cv::gpu::GlTexture::GlTexture(const GlBuffer& buf, bool bgra) : rows(0), cols(0)
#endif
}
cv
::
gpu
::
GlTexture
::
GlTexture
(
const
GlTexture
&
other
)
cv
::
gpu
::
GlTexture
::
GlTexture
(
const
GlTexture
&
other
)
:
rows
(
other
.
rows
),
cols
(
other
.
cols
),
type_
(
other
.
type_
),
impl_
(
other
.
impl_
)
{
}
...
...
@@ -1874,8 +1879,8 @@ void cv::gpu::GlTexture::unbind() const
////////////////////////////////////////////////////////////////////////
// GlArrays
void
cv
::
gpu
::
GlArrays
::
setVertexArray
(
const
GlBuffer
&
vertex
)
{
void
cv
::
gpu
::
GlArrays
::
setVertexArray
(
const
GlBuffer
&
vertex
)
{
CV_Assert
(
vertex
.
usage
()
==
GlBuffer
::
ARRAY_BUFFER
);
int
cn
=
vertex
.
channels
();
...
...
@@ -1884,65 +1889,65 @@ void cv::gpu::GlArrays::setVertexArray(const GlBuffer& vertex)
CV_Assert
(
cn
==
2
||
cn
==
3
||
cn
==
4
);
CV_Assert
(
depth
==
CV_16S
||
depth
==
CV_32S
||
depth
==
CV_32F
||
depth
==
CV_64F
);
vertex_
=
vertex
;
vertex_
=
vertex
;
}
void
cv
::
gpu
::
GlArrays
::
setVertexArray
(
const
GpuMat
&
vertex
)
{
void
cv
::
gpu
::
GlArrays
::
setVertexArray
(
const
GpuMat
&
vertex
)
{
int
cn
=
vertex
.
channels
();
int
depth
=
vertex
.
depth
();
CV_Assert
(
cn
==
2
||
cn
==
3
||
cn
==
4
);
CV_Assert
(
depth
==
CV_16S
||
depth
==
CV_32S
||
depth
==
CV_32F
||
depth
==
CV_64F
);
vertex_
.
copyFrom
(
vertex
);
vertex_
.
copyFrom
(
vertex
);
}
void
cv
::
gpu
::
GlArrays
::
setVertexArray
(
InputArray
vertex
)
{
void
cv
::
gpu
::
GlArrays
::
setVertexArray
(
InputArray
vertex
)
{
int
cn
=
vertex
.
channels
();
int
depth
=
vertex
.
depth
();
CV_Assert
(
cn
==
2
||
cn
==
3
||
cn
==
4
);
CV_Assert
(
depth
==
CV_16S
||
depth
==
CV_32S
||
depth
==
CV_32F
||
depth
==
CV_64F
);
vertex_
.
copyFrom
(
vertex
);
vertex_
.
copyFrom
(
vertex
);
}
void
cv
::
gpu
::
GlArrays
::
setColorArray
(
const
GlBuffer
&
color
,
bool
bgra
)
{
void
cv
::
gpu
::
GlArrays
::
setColorArray
(
const
GlBuffer
&
color
,
bool
bgra
)
{
CV_Assert
(
color
.
usage
()
==
GlBuffer
::
ARRAY_BUFFER
);
int
cn
=
color
.
channels
();
CV_Assert
((
cn
==
3
&&
!
bgra
)
||
cn
==
4
);
color_
=
color
;
bgra_
=
bgra
;
color_
=
color
;
bgra_
=
bgra
;
}
void
cv
::
gpu
::
GlArrays
::
setColorArray
(
const
GpuMat
&
color
,
bool
bgra
)
{
void
cv
::
gpu
::
GlArrays
::
setColorArray
(
const
GpuMat
&
color
,
bool
bgra
)
{
int
cn
=
color
.
channels
();
CV_Assert
((
cn
==
3
&&
!
bgra
)
||
cn
==
4
);
color_
.
copyFrom
(
color
);
bgra_
=
bgra
;
color_
.
copyFrom
(
color
);
bgra_
=
bgra
;
}
void
cv
::
gpu
::
GlArrays
::
setColorArray
(
InputArray
color
,
bool
bgra
)
{
void
cv
::
gpu
::
GlArrays
::
setColorArray
(
InputArray
color
,
bool
bgra
)
{
int
cn
=
color
.
channels
();
CV_Assert
((
cn
==
3
&&
!
bgra
)
||
cn
==
4
);
color_
.
copyFrom
(
color
);
bgra_
=
bgra
;
color_
.
copyFrom
(
color
);
bgra_
=
bgra
;
}
void
cv
::
gpu
::
GlArrays
::
setNormalArray
(
const
GlBuffer
&
normal
)
{
void
cv
::
gpu
::
GlArrays
::
setNormalArray
(
const
GlBuffer
&
normal
)
{
CV_Assert
(
normal
.
usage
()
==
GlBuffer
::
ARRAY_BUFFER
);
int
cn
=
normal
.
channels
();
...
...
@@ -1951,33 +1956,33 @@ void cv::gpu::GlArrays::setNormalArray(const GlBuffer& normal)
CV_Assert
(
cn
==
3
);
CV_Assert
(
depth
==
CV_8S
||
depth
==
CV_16S
||
depth
==
CV_32S
||
depth
==
CV_32F
||
depth
==
CV_64F
);
normal_
=
normal
;
normal_
=
normal
;
}
void
cv
::
gpu
::
GlArrays
::
setNormalArray
(
const
GpuMat
&
normal
)
{
void
cv
::
gpu
::
GlArrays
::
setNormalArray
(
const
GpuMat
&
normal
)
{
int
cn
=
normal
.
channels
();
int
depth
=
normal
.
depth
();
CV_Assert
(
cn
==
3
);
CV_Assert
(
depth
==
CV_8S
||
depth
==
CV_16S
||
depth
==
CV_32S
||
depth
==
CV_32F
||
depth
==
CV_64F
);
normal_
.
copyFrom
(
normal
);
normal_
.
copyFrom
(
normal
);
}
void
cv
::
gpu
::
GlArrays
::
setNormalArray
(
InputArray
normal
)
{
void
cv
::
gpu
::
GlArrays
::
setNormalArray
(
InputArray
normal
)
{
int
cn
=
normal
.
channels
();
int
depth
=
normal
.
depth
();
CV_Assert
(
cn
==
3
);
CV_Assert
(
depth
==
CV_8S
||
depth
==
CV_16S
||
depth
==
CV_32S
||
depth
==
CV_32F
||
depth
==
CV_64F
);
normal_
.
copyFrom
(
normal
);
normal_
.
copyFrom
(
normal
);
}
void
cv
::
gpu
::
GlArrays
::
setTexCoordArray
(
const
GlBuffer
&
texCoord
)
{
void
cv
::
gpu
::
GlArrays
::
setTexCoordArray
(
const
GlBuffer
&
texCoord
)
{
CV_Assert
(
texCoord
.
usage
()
==
GlBuffer
::
ARRAY_BUFFER
);
int
cn
=
texCoord
.
channels
();
...
...
@@ -1986,29 +1991,29 @@ void cv::gpu::GlArrays::setTexCoordArray(const GlBuffer& texCoord)
CV_Assert
(
cn
>=
1
&&
cn
<=
4
);
CV_Assert
(
depth
==
CV_16S
||
depth
==
CV_32S
||
depth
==
CV_32F
||
depth
==
CV_64F
);
texCoord_
=
texCoord
;
texCoord_
=
texCoord
;
}
void
cv
::
gpu
::
GlArrays
::
setTexCoordArray
(
const
GpuMat
&
texCoord
)
{
void
cv
::
gpu
::
GlArrays
::
setTexCoordArray
(
const
GpuMat
&
texCoord
)
{
int
cn
=
texCoord
.
channels
();
int
depth
=
texCoord
.
depth
();
CV_Assert
(
cn
>=
1
&&
cn
<=
4
);
CV_Assert
(
depth
==
CV_16S
||
depth
==
CV_32S
||
depth
==
CV_32F
||
depth
==
CV_64F
);
texCoord_
.
copyFrom
(
texCoord
);
texCoord_
.
copyFrom
(
texCoord
);
}
void
cv
::
gpu
::
GlArrays
::
setTexCoordArray
(
InputArray
texCoord
)
{
void
cv
::
gpu
::
GlArrays
::
setTexCoordArray
(
InputArray
texCoord
)
{
int
cn
=
texCoord
.
channels
();
int
depth
=
texCoord
.
depth
();
CV_Assert
(
cn
>=
1
&&
cn
<=
4
);
CV_Assert
(
depth
==
CV_16S
||
depth
==
CV_32S
||
depth
==
CV_32F
||
depth
==
CV_64F
);
texCoord_
.
copyFrom
(
texCoord
);
texCoord_
.
copyFrom
(
texCoord
);
}
void
cv
::
gpu
::
GlArrays
::
bind
()
const
...
...
@@ -2054,7 +2059,7 @@ void cv::gpu::GlArrays::bind() const
color_
.
bind
();
int
cn
=
color_
.
channels
();
int
format
=
cn
==
3
?
cn
:
(
bgra_
?
GL_BGRA
:
4
);
int
format
=
cn
==
3
?
cn
:
(
bgra_
?
GL_BGRA
:
4
);
glColorPointer
(
format
,
gl_types
[
color_
.
depth
()],
0
,
0
);
CV_CheckGlError
();
...
...
@@ -2125,13 +2130,13 @@ void cv::gpu::render(const GlTexture& tex, Rect_<double> wndRect, Rect_<double>
glBegin
(
GL_QUADS
);
glTexCoord2d
(
texRect
.
x
,
texRect
.
y
);
glVertex2d
(
wndRect
.
x
,
wndRect
.
y
);
glTexCoord2d
(
texRect
.
x
,
texRect
.
y
+
texRect
.
height
);
glVertex2d
(
wndRect
.
x
,
(
wndRect
.
y
+
wndRect
.
height
));
glTexCoord2d
(
texRect
.
x
+
texRect
.
width
,
texRect
.
y
+
texRect
.
height
);
glVertex2d
(
wndRect
.
x
+
wndRect
.
width
,
(
wndRect
.
y
+
wndRect
.
height
));
glTexCoord2d
(
texRect
.
x
+
texRect
.
width
,
texRect
.
y
);
glVertex2d
(
wndRect
.
x
+
wndRect
.
width
,
wndRect
.
y
);
glEnd
();
...
...
@@ -2159,7 +2164,7 @@ void cv::gpu::render(const GlArrays& arr, int mode)
////////////////////////////////////////////////////////////////////////
// GlCamera
cv
::
gpu
::
GlCamera
::
GlCamera
()
:
cv
::
gpu
::
GlCamera
::
GlCamera
()
:
eye_
(
0.0
,
0.0
,
-
5.0
),
center_
(
0.0
,
0.0
,
0.0
),
up_
(
0.0
,
1.0
,
0.0
),
pos_
(
0.0
,
0.0
,
-
5.0
),
yaw_
(
0.0
),
pitch_
(
0.0
),
roll_
(
0.0
),
useLookAtParams_
(
false
),
...
...
@@ -2288,13 +2293,13 @@ void cv::gpu::error(const char *error_string, const char *file, const int line,
if
(
uncaught_exception
())
{
const
char
*
errorStr
=
cvErrorStr
(
code
);
const
char
*
function
=
func
?
func
:
"unknown function"
;
const
char
*
errorStr
=
cvErrorStr
(
code
);
const
char
*
function
=
func
?
func
:
"unknown function"
;
cerr
<<
"OpenCV Error: "
<<
errorStr
<<
"("
<<
error_string
<<
") in "
<<
function
<<
", file "
<<
file
<<
", line "
<<
line
;
cerr
.
flush
();
cerr
.
flush
();
}
else
else
cv
::
error
(
cv
::
Exception
(
code
,
error_string
,
func
,
file
,
line
)
);
}
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment