gazebo-tooling / release-tools

8 stars 9 forks source link

Ogre 2.2 ignition-rendering plugin not loaded on Windows #920

Open j-rivero opened 1 year ago

j-rivero commented 1 year ago

We have noticed that the ogre 2.2 plugin coming from the osrf vcpkg port repository is not being loaded in the Windows CI builds on build.o.o. The test ended up with an success result but the reality is that it won't run any test.

        Start  61: UNIT_RenderPassSystem_TEST

61: Test command: C:\J\workspace\_test_ign_rendering-ign-6-win\ws\build\ignition-rendering6\bin\Release\UNIT_RenderPassSystem_TEST.exe "--gtest_output=xml:C:/J/workspace/_test_ign_rendering-ign-6-win/ws/build/ignition-rendering6/test_results/UNIT_RenderPassSystem_TEST.xml"
61: Test timeout computed to be: 240
61: [==========] Running 2 tests from 1 test case.
61: [----------] Global test environment set-up.
61: [----------] 2 tests from GaussianNoise/RenderPassSystemTest
61: [ RUN      ] GaussianNoise/RenderPassSystemTest.RenderPassSystem/ogre2
61: Error while loading the library [C:\J\workspace\_test_ign_rendering-ign-6-win\ws\install\ignition-rendering6\lib\ign-rendering-6\engine-plugins\ignition-rendering-ogre2.dll]: "C:\J\workspace\_test_ign_rendering-ign-6-win\ws\install\ignition-rendering6\lib\ign-rendering-6\engine-plugins\ignition-rendering-ogre2.dll": The specified module could not be found.
61: [Err] [C:\J\workspace\_test_ign_rendering-ign-6-win\ws\gz-rendering\src\RenderEngineManager.cc:470] Failed to load plugin [ignition-rendering-ogre2] : couldn't load library on path [C:\J\workspace\_test_ign_rendering-ign-6-win\ws\install\ignition-rendering6\lib\ign-rendering-6\engine-plugins\ignition-rendering-ogre2.dll].
61: [       OK ] GaussianNoise/RenderPassSystemTest.RenderPassSystem/ogre2 (5 ms)

The Windows message probably from dlopen saying:

"C:\J\workspace\_test_ign_rendering-ign-6-win\ws\install\ignition-rendering6\lib\ign-rendering-6\engine-plugins\ignition-rendering-ogre2.dll": The specified module could not be found.

Is not really accurate since the module is that location. It is more interesting the message from gz-rendering that says:

61: [Err] [C:\J\workspace\_test_ign_rendering-ign-6-win\ws\gz-rendering\src\RenderEngineManager.cc:470] Failed to load plugin [ignition-rendering-ogre2] : couldn't load library on path

gz-rendering is checking that the file exists and if it is not the case, the error message is different. couldn't load library on path probably means that it could not be loaded for other reason.

My hypothesis for this first problem is https://github.com/osrf/vcpkg-ports/issues/12. In summary, the test is loading the Ogre 1.x dll instead of the Ogre 2.x dll so they can not be loaded. To support this, I run a build without Ogre 1.x in vcpkg, and after adding the vcpkg OGRE-2.2 bin directory I see the following:

[ RUN      ] RenderingIfaceTest.GetEngine
[Dbg] [C:\J\workspace\_test_ign_rendering-ign-6-win\ws\gz-rendering\src\RenderingIface.cc:135] No rendering engine is loaded yet
[Msg] Loading plugin [ignition-rendering-ogre2]
[Err] [C:\J\workspace\_test_ign_rendering-ign-6-win\ws\gz-rendering\ogre2\src\Ogre2RenderEngine.cc:603] unable to find OpenGL 3+ Rendering Subsystem. OGRE is probably installed incorrectly. Double check the OGRE cmake output, and make sure OpenGL is enabled.
unknown file: error: SEH exception with code 0xc0000005 thrown in the test body.

The error probably comes from the fact of using the Remote Desktop Protocol or other problems with OpenGL but the dll loading seems to have been successful:

 ~/.ignition
$ cat rendering/ogre2.log
17:05:15: Creating resource group General
17:05:15: Creating resource group Internal
17:05:15: Creating resource group Autodetect
17:05:15: SceneManagerFactory for type 'DefaultSceneManager' registered.
17:05:15: Registering ResourceManager for type Material
17:05:15: Registering ResourceManager for type Mesh
17:05:15: Registering ResourceManager for type Mesh2
17:05:15: Registering ResourceManager for type OldSkeleton
17:05:15: MovableObjectFactory for type 'ParticleSystem' registered.
17:05:15: ArchiveFactory for archive type FileSystem registered.
17:05:15: ArchiveFactory for archive type Zip registered.
17:05:15: ArchiveFactory for archive type EmbeddedZip registered.
17:05:15: FreeImage version: 3.18.0
17:05:15: This program uses FreeImage, a free, open source image library supporting all common bitmap formats. See http://freeimage.sourceforge.net for details
17:05:15: Supported formats: bmp,ico,jpg,jif,jpeg,jpe,jng,koa,iff,lbm,mng,pbm,pbm,pcd,pcx,pgm,pgm,png,ppm,ppm,ras,tga,targa,tif,tiff,wap,wbmp,wbm,psd,psb,cut,xbm,xpm,gif,hdr,sgi,rgb,rgba,bw,exr,j2k,j2c,jp2,pfm,pct,pict,pic,3fr,arw,bay,bmq,cap,cine,cr2,crw,cs1,dc2,dcr,drf,dsc,dng,erf,fff,ia,iiq,k25,kc2,kdc,mdc,mef,mos,mrw,nef,nrw,orf,pef,ptx,pxn,qtk,raf,raw,rdc,rw2,rwl,rwz,sr2,srf,srw,sti,x3f,webp,jxr,wdp,hdp
17:05:15: ETC codec registering
17:05:15: Registering ResourceManager for type HighLevelGpuProgram
17:05:15: MovableObjectFactory for type 'Decal' registered.
17:05:15: MovableObjectFactory for type 'InternalCubemapProbe' registered.
17:05:15: MovableObjectFactory for type 'Entity' registered.
17:05:15: MovableObjectFactory for type 'Item' registered.
17:05:15: MovableObjectFactory for type 'Light' registered.
17:05:15: MovableObjectFactory for type 'Rectangle2Dv2' registered.
17:05:15: MovableObjectFactory for type 'BillboardSet' registered.
17:05:15: MovableObjectFactory for type 'ManualObject2' registered.
17:05:15: MovableObjectFactory for type 'BillboardChain' registered.
17:05:15: MovableObjectFactory for type 'RibbonTrail' registered.
17:05:15: MovableObjectFactory for type 'WireAabb' registered.
17:05:15: *-*-* OGRE Initialising
17:05:15: *-*-* Version 2.2.6 (Cerberus)
17:05:15: OverlayElementFactory for type Panel registered.
17:05:15: OverlayElementFactory for type BorderPanel registered.
17:05:15: OverlayElementFactory for type TextArea registered.
17:05:15: Registering ResourceManager for type Font

FYI: @iche033

iche033 commented 1 year ago

thanks for looking into this! Maybe we should just run with only either ogre 1.x or ogre 2.x on windows CI for now?

j-rivero commented 1 year ago

thanks for looking into this! Maybe we should just run with only either ogre 1.x or ogre 2.x on windows CI for now?

+1. Looking at vcpkg they don't support ogre1 and ogre-next together. Question is, which one should we choose?

iche033 commented 1 year ago

my vote would be ogre-next as that's more commonly used and also the rendering default engine used in Gazebo