Weird problem with Billboard Control and water

Hello!

Today I came across weird bug: I can’t use anything with Billboard Control when there is water in the scene(either Postprocess or Simple Water). I have latest nightly build. Here is the error:

[java]SEVERE: Uncaught exception thrown in Thread[LWJGL Renderer Thread,6,main]

java.lang.IllegalStateException: Scene graph is not properly updated for rendering.

Make sure scene graph state was not changed after

rootNode.updateGeometricState() call.

Problem spatial name: Root Node

at com.jme3.scene.Spatial.checkCulling(Spatial.java:211)

at com.jme3.renderer.RenderManager.renderScene(RenderManager.java:503)

at com.jme3.renderer.RenderManager.renderViewPort(RenderManager.java:724)

at com.jme3.water.WaterFilter.postQueue(WaterFilter.java:179)

at com.jme3.post.FilterPostProcessor.postQueue(FilterPostProcessor.java:188)

at com.jme3.renderer.RenderManager.renderViewPort(RenderManager.java:729)

at com.jme3.renderer.RenderManager.render(RenderManager.java:757)

at com.jme3.app.SimpleApplication.update(SimpleApplication.java:257)

at com.jme3.system.lwjgl.LwjglAbstractDisplay.runLoop(LwjglAbstractDisplay.java:144)

at com.jme3.system.lwjgl.LwjglDisplay.runLoop(LwjglDisplay.java:172)

at com.jme3.system.lwjgl.LwjglAbstractDisplay.run(LwjglAbstractDisplay.java:218)

at java.lang.Thread.run(Thread.java:662)

Java Result: 143[/java]

And here is an example:

[java]package jme3test.model.shape;

import com.jme3.app.SimpleApplication;

import com.jme3.material.Material;

import com.jme3.math.ColorRGBA;

import com.jme3.math.Quaternion;

import com.jme3.math.Vector3f;

import com.jme3.scene.Geometry;

import com.jme3.scene.Node;

import com.jme3.scene.control.BillboardControl;

import com.jme3.scene.shape.Box;

import com.jme3.scene.shape.Quad;

import com.jme3.water.WaterFilter;

import com.jme3.post.FilterPostProcessor;

public class TestBillboard extends SimpleApplication {

private FilterPostProcessor fpp;

private WaterFilter water;

private Vector3f lightDir = new Vector3f(-4.9f, -1.3f, 5.9f); // same as light source

private float initialWaterHeight = 0.8f; // choose a value for your scene

public void simpleInitApp() {

fpp = new FilterPostProcessor(assetManager);

water = new WaterFilter(rootNode, lightDir);

water.setWaterHeight(initialWaterHeight);

fpp.addFilter(water);

viewPort.addProcessor(fpp);

flyCam.setMoveSpeed(10);

Quad q = new Quad(2, 2);

Geometry g = new Geometry(“Quad”, q);

Material mat = new Material(assetManager, “Common/MatDefs/Misc/Unshaded.j3md”);

mat.setColor(“Color”, ColorRGBA.Blue);

g.setMaterial(mat);

Quad q2 = new Quad(1, 1);

Geometry g3 = new Geometry(“Quad2”, q2);

Material mat2 = new Material(assetManager, “Common/MatDefs/Misc/Unshaded.j3md”);

mat2.setColor(“Color”, ColorRGBA.Yellow);

g3.setMaterial(mat2);

g3.setLocalTranslation(.5f, .5f, .01f);

Box b = new Box(new Vector3f(0, 0, 3), .25f, .5f, .25f);

Geometry g2 = new Geometry(“Box”, b);

g2.setMaterial(mat);

Node bb = new Node(“billboard”);

BillboardControl control=new BillboardControl();

bb.addControl(control);

bb.attachChild(g);

bb.attachChild(g3);

n=new Node(“parent”);

n.attachChild(g2);

n.attachChild(bb);

rootNode.attachChild(n);

n2=new Node(“parentParent”);

n2.setLocalTranslation(Vector3f.UNIT_X.mult(5));

n2.attachChild(n);

rootNode.attachChild(n2);

}

Node n;

Node n2;

@Override

public void simpleUpdate(float tpf) {

super.simpleUpdate(tpf);

n.rotate(0, tpf, 0);

n.move(0.1f*tpf, 0, 0);

n2.rotate(0, 0, -tpf);

}

public static void main(String[] args) {

TestBillboard app = new TestBillboard();

app.start();

}

}[/java]

I hope that somebody know how to fix it. I’m usin openSUSE 11.4 x86 btw.

I’m gonna check that out thanks

I think I have the solution for that built into SimpleWater, added it when somebody wanted to use the water as a mirror. Atm the Y-up is expected I think in post water too

Fixed in SVN

Thank you for fixing it :slight_smile: