LODGroup or OGLLOD index/range error
Regression test failure:
Xj3D Replica model loading and generation of Viewpoint images:
C:\x3d-code\www.web3d.org\x3d\content\examples\ConformanceNist/SpecialGroups/LOD/bound_500.x3d
C:\x3d-code\www.web3d.org\x3d\content\examples\ConformanceNist/SpecialGroups/LOD/_viewpoints/ holds viewpoint images
org.xj3d.core.loading.threads set to: 4
Mar 27, 2020 1:25:59 AM org.odejava.Odejava <clinit>
INFO: OdeJava natives version 0.3.4 loaded.
org.web3d.vrml.renderer.common.nodes.shape.useMipMaps set to: true
org.web3d.vrml.renderer.common.nodes.shape.anisotropicDegree set to: 16
Exception in thread "Xj3D BlockingWorld Loader" java.lang.IllegalArgumentException: Index provided > last valid index
at org.j3d.renderer.aviatrix3d.nodes.LODGroup.setRange(LODGroup.java:640)
at org.web3d.vrml.renderer.ogl.nodes.navigation.OGLLOD.updateNodeDataChanges(OGLLOD.java:274)
at org.web3d.vrml.renderer.ogl.nodes.navigation.OGLLOD.setupFinished(OGLLOD.java:200)
at org.web3d.vrml.renderer.common.nodes.BaseGroupingNode.setupFinished(BaseGroupingNode.java:365)
at org.web3d.vrml.renderer.ogl.nodes.group.OGLTransform.setupFinished(OGLTransform.java:223)
at org.web3d.vrml.renderer.common.nodes.core.BaseWorldRoot.setupFinished(BaseWorldRoot.java:470)
at org.web3d.vrml.renderer.ogl.nodes.core.OGLWorldRoot.setupFinished(OGLWorldRoot.java:172)
at org.web3d.vrml.renderer.CRMainSceneBuilder.endDocument(CRMainSceneBuilder.java:614)
at org.web3d.vrml.renderer.ogl.OGLVRMLSceneBuilder.endDocument(OGLVRMLSceneBuilder.java:490)
at org.web3d.x3d.jaxp.X3DSAVAdapter.endDocument(X3DSAVAdapter.java:711)
at java.xml/com.sun.org.apache.xerces.internal.parsers.AbstractSAXParser.endDocument(AbstractSAXParser.java:754)
at java.xml/com.sun.org.apache.xerces.internal.impl.dtd.XMLDTDValidator.endDocument(XMLDTDValidator.java:914)
at java.xml/com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl.scanDocument(XMLDocumentFragmentScannerImpl.java:546)
at java.xml/com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:888)
at java.xml/com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:824)
at java.xml/com.sun.org.apache.xerces.internal.parsers.XMLParser.parse(XMLParser.java:141)
at java.xml/com.sun.org.apache.xerces.internal.parsers.AbstractSAXParser.parse(AbstractSAXParser.java:1224)
at java.xml/com.sun.org.apache.xerces.internal.jaxp.SAXParserImpl$JAXPSAXParser.parse(SAXParserImpl.java:635)
at org.web3d.parser.GeneralisedReader.parse(GeneralisedReader.java:248)
at org.xj3d.impl.core.loading.DefaultWorldLoader.loadNow(DefaultWorldLoader.java:156)
at org.xj3d.impl.core.loading.DefaultWorldLoader.loadNow(DefaultWorldLoader.java:106)
at org.xj3d.ui.construct.BlockingWorldLoader.run(BlockingWorldLoader.java:112)
at java.base/java.lang.Thread.run(Thread.java:832)
Time exceeded, killing system
Java Result: -1
C:\x3d-code\www.web3d.org\x3d\content\examples\ConformanceNist/SpecialGroups/LOD/bound_500.x3d processing with X3dToXhtml stylesheet pretty-print .html
Code block in OGLLOD.java:
@Override
public void updateNodeDataChanges(Object src) {
// update the range
if(src != implLod)
return;
int num_kids = (rangeLen < childCount) ? rangeLen : childCount;
if (num_kids > vfRange.length) // safety check to avoid exception, TODO figure out what went wrong
{
System.err.println ("org.web3d.vrml.renderer.ogl.nodes.navigation.OGLLOD.updateNodeDataChanges() internal error, exceeded vfRange.length=" + vfRange.length);
num_kids = vfRange.length;
}
for(int i = 0; i < num_kids; i++)
{
// TODO NPE C:/x3d-code/www.web3d.org/x3d/content/Savage/Tools/Animation/WaypointInterpolatorPrototype.x3d
// TODO java.lang.IndexOutOfBoundsException: Index provided > last valid index
// at org.j3d.renderer.aviatrix3d.nodes.LODGroup.setRange(LODGroup.java:632)
implLod.setRange(i, vfRange[i]);
}
implLod.setCenter(vfCenter);
}
Debugging shows that this fails on the second pass through the 'for' loop when invoking org.j3d.renderer.aviatrix3d.nodes.LODGroup instance implLod.
So there is some mismatch on the method implLod.setRange(i, vfRange[i]);
i.e. either it is not growing the array each time or else is not being invoked correctly via Xj3D.
Related: no javadoc provided for aviatrix. Unable to debug further.