When I first start the game shadows are working, but when I restart the game (hitting a "restart" button in the game, not stopping/starting the application)
it crashes with a nullpointer exception:
Exception in thread "OpenGL" java.lang.NullPointerException
at com.jme.scene.shadow.MeshShadows.createGeometry(MeshShadows.java:129)
at com.jme.renderer.pass.ShadowedRenderPass.generateVolumes(ShadowedRenderPass.java:525)
at com.jme.renderer.pass.ShadowedRenderPass.doRender(ShadowedRenderPass.java:313)
at com.jme.renderer.pass.Pass.renderPass(Pass.java:90)
at com.jme.renderer.pass.BasicPassManager.renderPasses(BasicPassManager.java:89)
at net.ob3d.states.BasicState.render(BasicState.java:324)
at net.ob3d.multiplayer.FightState.render(FightState.java:82)
at net.ob3d.multiplayer.FightStateSinglePlayer.render(FightStateSinglePlayer.java:95)
at com.jmex.game.state.GameStateNode.render(GameStateNode.java:84)
at net.ob3d.OBStandardGame.render(OBStandardGame.java:321)
at net.ob3d.OBStandardGame.run(OBStandardGame.java:194)
at java.lang.Thread.run(Thread.java:619)
Anyone has an idea of what this might be ?
I use gamestates and standardgame:
public abstract class BasicState extends GameState implements INodeReceiver,
IUniverseFactory, IGraphicsSettings {
boolean lightShadow1Enabled = true;
boolean lightShadow2enabled = false;
boolean lightShadow3enabled = true;
boolean lightShadow4enabled = true;
protected Node nonShadow;
Node shadowNode;
BasicPassManager passManager = new BasicPassManager();
private static ShadowedRenderPass shadowPass = new ShadowedRenderPass();
public void addNode(INode node) {
GraphicsAttributes g = node.getGraphicsAttributes();
//nonShadow.attachChild((Spatial) node);
if(g!=null) {
if(g.castShadows) {
shadowNode.attachChild((Spatial) node);
}else {
nonShadow.attachChild((Spatial) node);
}
return;
}
nonShadow.attachChild((Spatial) node);
}
public Node createNode(String name) {
Node node= new Node(name);
ZBufferState buf = DisplaySystem.getDisplaySystem().getRenderer()
.createZBufferState();
buf.setEnabled(true);
buf.setFunction(ZBufferState.CF_LEQUAL);
node.setRenderState(buf);
return node;
}
public void init() {
nonShadow = createNode("nonShadow");
shadowNode = createNode("shadow");
shadowPass.setRenderShadows(true);
shadowPass.setLightingMethod(ShadowedRenderPass.MODULATIVE);
shadowPass.add(shadowNode);
shadowPass.addOccluder(shadowNode);
RenderPass renderPass = new RenderPass();
renderPass.add(nonShadow);
passManager.add(renderPass);
passManager.add(shadowPass);
}
public void update(float tpf) {
if(!isActive()) return;
shadowNode.updateGeometricState(tpf, true);
nonShadow.updateGeometricState(tpf, true);
shadowNode.updateRenderState();
nonShadow.updateRenderState();
passManager.updatePasses(tpf);
}
public void render(float tpf) {
passManager.renderPasses(DisplaySystem.getDisplaySystem().getRenderer());
}
}