opencv / opencv_contrib

Repository for OpenCV's extra modules
Apache License 2.0
9.32k stars 5.74k forks source link

RGBD failing to compile with OpenGL enabled #2307

Open eezstreet opened 4 years ago

eezstreet commented 4 years ago
System information (version)
Detailed description

With OpenGL enabled and RGBD, it does not compile due to an error:

OpenCV-Contrib\modules\rgbd\src\dynafu.cpp(234): error C2131: expression did not evaluate to a constant
OpenCV-Contrib\modules\rgbd\src\dynafu.cpp(234): note: failure was caused by a read of a variable outside its lifetime
OpenCV-Contrib\modules\rgbd\src\dynafu.cpp(234): note: see usage of 'this'
OpenCV-Contrib\modules\rgbd\src\dynafu.cpp(206): note: while compiling class template member function 'void cv::dynafu::DynaFuImpl<cv::Mat>::drawScene(cv::OutputArray,cv::OutputArray)'
OpenCV-Contrib\modules\rgbd\src\dynafu.cpp(526): note: see reference to function template instantiation 'void cv::dynafu::DynaFuImpl<cv::Mat>::drawScene(cv::OutputArray,cv::OutputArray)' being compiled
OpenCV-Contrib\modules\rgbd\src\dynafu.cpp(275): note: while compiling class template member function 'cv::dynafu::DynaFuImpl<cv::Mat>::~DynaFuImpl(void)'
OpenCV-Contrib\modules\rgbd\src\dynafu.cpp(291): note: see reference to class template instantiation 'cv::dynafu::DynaFuImpl<cv::Mat>' being compiled
OpenCV-Contrib\modules\rgbd\src\dynafu.cpp(235): error C2131: expression did not evaluate to a constant
OpenCV-Contrib\modules\rgbd\src\dynafu.cpp(235): note: failure was caused by a read of a variable outside its lifetime
OpenCV-Contrib\modules\rgbd\src\dynafu.cpp(235): note: see usage of 'this'

The exact code that is failing is here:

float f[params.frameSize.width*params.frameSize.height];
Steps to reproduce

Compile with OpenGL and RGBD enabled.

LaurentBerger commented 4 years ago

float f[params.frameSize.width*params.frameSize.height]; is it really C++ https://en.cppreference.com/w/cpp/language/array ?

ThomasLengeling commented 4 years ago

I also have the problem with

Severity Code Description Project File Line Suppression State Error C2131 expression did not evaluate to a constant opencv_rgbd

[234] - float f[params.frameSize.width*params.frameSize.height];
[235] - float pixels[params.frameSize.width*params.frameSize.height][3];
juxiangwu commented 4 years ago

I also have the same problem. Error C2131 expression did not evaluate to a constant opencv_rgbd

minimalisticMe commented 4 years ago

If you don't need the RGB-Depth Processing module (that's where the error occurs) and just want to compile opencv on windows, just deactivate the extra module with -DBUILD_opencv_rgbd=OFF during cmake-configure and you are good to go.

LaurentBerger commented 4 years ago

Problem is not easy to solve. You can use vector instaed of float[] but it does not solve problem. New problem is glext.h which is not available on windows. You can download it with khrplatform.h and then you will have link errors :

1>dynafu.obj : error LNK2019: unresolved external symbol glBindRenderbufferEXT referenced in function "public: cdecl cv::dynafu::DynaFuImpl::DynaFuImpl(struct cv::dynafu::Params const &)" (??0?$DynaFuImpl@VMat@cv@@@dynafu@cv@@QEAA@AEBUParams@12@@Z) 1>dynafu.obj : error LNK2019: unresolved external symbol glGenRenderbuffersEXT referenced in function "public: cdecl cv::dynafu::DynaFuImpl::DynaFuImpl(struct cv::dynafu::Params const &)" (??0?$DynaFuImpl@VMat@cv@@@dynafu@cv@@QEAA@AEBUParams@12@@Z) 1>dynafu.obj : error LNK2019: unresolved external symbol glRenderbufferStorageEXT referenced in function "public: cdecl cv::dynafu::DynaFuImpl::DynaFuImpl(struct cv::dynafu::Params const &)" (??0?$DynaFuImpl@VMat@cv@@@dynafu@cv@@QEAA@AEBUParams@12@@Z) 1>dynafu.obj : error LNK2019: unresolved external symbol glBindFramebufferEXT referenced in function "public: cdecl cv::dynafu::DynaFuImpl::DynaFuImpl(struct cv::dynafu::Params const &)" (??0?$DynaFuImpl@VMat@cv@@@dynafu@cv@@QEAA@AEBUParams@12@@Z) 1>dynafu.obj : error LNK2019: unresolved external symbol glGenFramebuffersEXT referenced in function "public: cdecl cv::dynafu::DynaFuImpl::DynaFuImpl(struct cv::dynafu::Params const &)" (??0?$DynaFuImpl@VMat@cv@@@dynafu@cv@@QEAA@AEBUParams@12@@Z) 1>dynafu.obj : error LNK2019: unresolved external symbol glFramebufferRenderbufferEXT referenced in function "public: cdecl cv::dynafu::DynaFuImpl::DynaFuImpl(struct cv::dynafu::Params const &)" (??0?$DynaFuImpl@VMat@cv@@@dynafu@cv@@QEAA@AEBUParams@12@@Z)

This module is not compatible with windows and msvc. It is not available in 3.4 branch

MGarvinNYC commented 4 years ago

I have encountered what seems to be a related problem, when compiling under Linux.

When OPENCV_ENABLE_NONFREE is set, and OpenGL_GL_PREFERENCE is set to GLVND (newer OpenGL), the build fails, with reference to libopencv_rgbd:

../../lib/libopencv_rgbd.so.4.2.0: undefined reference to `glRenderbufferStorageEXT' etc...

But if OpenGL_GL_PREFERENCE is set to LEGACY, there is no error.

zuoyizhongguo commented 4 years ago

Also have the problem:dynafu.cpp:181:26: error: 'glGenRenderbuffersEXT' was not declared in this scope glGenRenderbuffersEXT(1, &fbo_depth);

smartnet-club commented 4 years ago

The issue described here and here set BUILD_opencv_rgbd=OFF for fast build fix

alalek commented 3 years ago

Reopening... Fix #2679 handles Windows case only, we need similar approach for Linux platform too.

acochrane commented 3 years ago

Just adding the 'diff' from GArik's pull to my 4.4.0 release build appears to have fixed the issue on my Jetson nano (running linux).

twdragon commented 1 year ago

Confirmed building on Ubuntu 22.04, patch by @GArik works fine

jiapei100 commented 1 year ago

Trying to build OpenCV-4.7.0 and met this same issue.

It looks patch by @GArik works okay for this specific problem. However, I still cannot figure out this issue ...

jiapei100 commented 4 months ago

If you don't need the RGB-Depth Processing module (that's where the error occurs) and just want to compile opencv on windows, just deactivate the extra module with -DBUILD_opencv_rgbd=OFF during cmake-configure and you are good to go.

As you said, I solved this issue by Turn OFF rgbd. Thank you ...