gazebosim / gazebosim/gz-rendering

Better error reporting when OGRE2_RESOURCE_PATH is broken

Open
#596 0 comments 0 reactions 0 assignees View on GitHub
enhancement help wanted
Dominant language
C++
Stars
81
Forks
90
Avg merge
1d 13h
Merged PRs (30d)
10

Description

## Desired behavior
Better error message when the system can not find the expected RenderEngine. With a broken `OGRE2_RESOURCE_PATH` contain, the crash when running `ign gazebo` with current `ign-rendering6` will display the following `Err` followed by a segfault:

```bash
jrivero@9f9f70a37e23:~$ ign gazebo
QStandardPaths: XDG_RUNTIME_DIR not set, defaulting to '/tmp/runtime-jrivero'
[GUI] [Err] [Ogre2RenderEngine.cc:589] unable to find OpenGL 3+ Rendering Subsystem. OGRE is probably installed incorrectly. Double check the OGRE cmake output, and make sure OpenGL is enabled.
Stack trace (most recent call last) in thread 165:
... (cut)
#2 Object "/usr/lib/x86_64-linux-gnu/ign-rendering-6/engine-plugins/libignition-rendering-ogre2.so", at 0x7feae03b7a99, in ignition::rendering::v6::Ogre2RenderEngine::LoadImpl(std::map, std::allocator >, std::__cxx11::basic_string, std::allocator >, std::less, std::allocator > >, std::allocator, std::allocator > const, std::__cxx11::basic_string, std::allocator > > > > const&)
#1 Object "/usr/lib/x86_64-linux-gnu/ign-rendering-6/engine-plugins/libignition-rendering-ogre2.so", at 0x7feae03b6f22, in ignition::rendering::v6::Ogre2RenderEngine::LoadAttempt()
#0 Object "/usr/lib/x86_64-linux-gnu/ign-rendering-6/engine-plugins/libignition-rendering-ogre2.so", at 0x7feae03b2412, in ignition::rendering::v6::Ogre2RenderEngine::CreateRenderSystem()
Segmentation fault (Address not mapped to object [(nil)])
```

Unfortunately the ogre.log did not help either:
```
jrivero@9f9f70a37e23:~/.ignition/rendering$ cat ogre2.log
19:35:05: Creating resource group General
19:35:05: Creating resource group Internal
19:35:05: Creating resource group Autodetect
19:35:05: SceneManagerFactory for type 'DefaultSceneManager' registered.
19:35:05: Registering ResourceManager for type Material
19:35:05: Registering ResourceManager for type Mesh
19:35:05: Registering ResourceManager for type Mesh2
19:35:05: Registering ResourceManager for type OldSkeleton
19:35:05: MovableObjectFactory for type 'ParticleSystem' registered.
19:35:05: ArchiveFactory for archive type FileSystem registered.
19:35:05: ArchiveFactory for archive type Zip registered.
19:35:05: ArchiveFactory for archive type EmbeddedZip registered.
19:35:05: DDS codec registering
19:35:05: FreeImage version: 3.18.0
19:35:05: This program uses FreeImage, a free, open source image library supporting all common bitmap formats. See http://freeimage.sourceforge.net/ for details
19:35:05: 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,g3,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
19:35:05: OITD codec registering
19:35:05: Registering ResourceManager for type HighLevelGpuProgram
19:35:05: MovableObjectFactory for type 'Decal' registered.
19:35:05: MovableObjectFactory for type 'InternalCubemapProbe' registered.
19:35:05: MovableObjectFactory for type 'Entity' registered.
19:35:05: MovableObjectFactory for type 'Item' registered.
19:35:05: MovableObjectFactory for type 'Light' registered.
19:35:05: MovableObjectFactory for type 'Rectangle2Dv2' registered.
19:35:05: MovableObjectFactory for type 'BillboardSet' registered.
19:35:05: MovableObjectFactory for type 'ManualObject2' registered.
19:35:05: MovableObjectFactory for type 'BillboardChain' registered.
19:35:05: MovableObjectFactory for type 'RibbonTrail' registered.
19:35:05: MovableObjectFactory for type 'WireAabb' registered.
19:35:05: *-*-* OGRE Initialising
19:35:05: *-*-* Version 2.2.5 (Cerberus)
19:35:05: OverlayElementFactory for type Panel registered.
19:35:05: OverlayElementFactory for type BorderPanel registered.
19:35:05: OverlayElementFactory for type TextArea registered.
19:35:05: Registering ResourceManager for type Font
```

It would be great if we can somehow warn about the content of `OGRE2_RESOURCE_PATH` too.

## Alternatives considered
Leave the code as it is now? Write an external "doctor" tool that make the checks to the ogre installation?

## Implementation suggestion
A first approach would be to print the content of `OGRE2_RESOURCE_PATH` to the error message and avoid the segfault. Even better would be to check to iterate on the content of `OGRE2_RESOURCE_PATH` to see if the directories listed there at least exists.

Contributor guide

Open the contributing guide

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.