Hello,
I’m using a nice library from the JME store for outlining some of my entities:
The problem is that it crashes my application when I detach the outlined Spatial from the root node (threading issue - see below stack trace).
Here is the code which attaches the outline filter to the Spatial:
private void showOutlineFilterEffect(Spatial model, int width, ColorRGBA color) {
Filter outlineFilter = model.getUserData("OutlineFilter");
OutlinePreFilter outlinePreFilter;
if (outlineFilter == null) {
ViewPort outlineViewport = renderManager.createPreView("outlineViewport", cam);
FilterPostProcessor outlinefpp = new FilterPostProcessor(assetManager);
outlinePreFilter = new OutlinePreFilter();
outlinefpp.addFilter(outlinePreFilter);
outlineViewport.attachScene(model);
outlineViewport.addProcessor(outlinefpp);
//
outlineFilter = new OutlineFilter(outlinePreFilter);
((OutlineFilter)outlineFilter).setOutlineColor(color);
((OutlineFilter)outlineFilter).setOutlineWidth(width);
model.setUserData("OutlineFilter", outlineFilter);
fpp.addFilter(outlineFilter);
} else {
outlineFilter.setEnabled(true);
//
((OutlineFilter)outlineFilter).getOutlinePreFilter().setEnabled(true);
}
}
And here is the exception’s stack trace which happens when I detach the Spatial:
SEVERE: Uncaught exception thrown in Thread[jME3 Main,6,main]
java.lang.IllegalStateException: Scene graph is not properly updated for rendering.
State was changed after rootNode.updateGeometricState() call.
Make sure you do not modify the scene from another thread!
Problem spatial name: s@1
at com.jme3.scene.Spatial.checkCulling(Spatial.java:361)
at com.jme3.scene.Geometry.checkCulling(Geometry.java:149)
at com.jme3.renderer.RenderManager.renderSubScene(RenderManager.java:717)
at com.jme3.renderer.RenderManager.renderScene(RenderManager.java:710)
at com.jme3.renderer.RenderManager.renderViewPort(RenderManager.java:1096)
at com.jme3.renderer.RenderManager.render(RenderManager.java:1150)
at com.jme3.app.SimpleApplication.update(SimpleApplication.java:272)
at com.jme3.system.lwjgl.LwjglAbstractDisplay.runLoop(LwjglAbstractDisplay.java:153)
at com.jme3.system.lwjgl.LwjglDisplay.runLoop(LwjglDisplay.java:193)
at com.jme3.system.lwjgl.LwjglAbstractDisplay.run(LwjglAbstractDisplay.java:234)
at java.lang.Thread.run(Thread.java:745)
I guess I need to somehow disable the filter before I detach the Spatial…
What do you think?
Adi