Below is a simple app that creates a cube and a skybox, adds the cube to the scenegraph, then later adds the skybox. On windows, the result is what you’d expect - a blue box on a black background, then a blue box floating above the lagoon. On linux though, once the skybox is added, the cube spatial disappears.
[java]
Geometry cube;
Spatial skybox;
float timeOffset;
@Override
public void simpleInitApp() {
// create a cube in front of the camera
Material m = new Material( assetManager, "Common/MatDefs/Misc/Unshaded.j3md" );
m.setColor( "Color", ColorRGBA.Blue );
cube = new Geometry( "Box", new Box( 1, 1, 1 ) );
cube.setMaterial( m );
cube.setLocalTranslation( 0f, 0f, -3f );
// create a simple skybox using jpgs (vmware 3d can't decode dds formats)
Texture west = assetManager.loadTexture( "Textures/Sky/Lagoon/lagoon_west.jpg" );
Texture east = assetManager.loadTexture( "Textures/Sky/Lagoon/lagoon_east.jpg" );
Texture north = assetManager.loadTexture( "Textures/Sky/Lagoon/lagoon_north.jpg" );
Texture south = assetManager.loadTexture( "Textures/Sky/Lagoon/lagoon_south.jpg" );
Texture up = assetManager.loadTexture( "Textures/Sky/Lagoon/lagoon_up.jpg" );
Texture down = assetManager.loadTexture( "Textures/Sky/Lagoon/lagoon_down.jpg" );
skybox = SkyFactory.createSky( assetManager, west, east, north, south, up, down );
}
@Override
public void simpleUpdate( float tpf ) {
// create a seconds value since app start
timeOffset += tpf;
if ( (int) timeOffset == (int) (timeOffset - tpf) )
return;
switch ( (int) timeOffset ) {
case 2:
System.out.println( "Attaching cube" );
rootNode.attachChild( cube );
break;
case 4:
System.out.println( "Attaching skybox" );
rootNode.attachChild( skybox );
break;
case 8:
System.exit( 0 );
}
}
[/java]
I tried forcing all node cullhints to never, updating bounds, and a few other guesses - but the hiding still happens. Again, only on linux (64bit Debian wheezy running within VMWare 9 w/ 3D acceleration enabled).
Note, I did compare capabilities between the native card and the virtual one - the vm is missing: TextureMultisample, OpenGL30, OpenGL31, OpenGL32, GLSL130, GLSL140, GLSL150, TextureArray, FloatColorBuffer, FloatDepthBuffer, and PackedDepthStencilBuffer.
If anyone has a native Linux box handy, would you mind running this code to see what it does? I’m curious if it’s a result of the VMWare environment or not.
Thanks =D