I’m hitting an endless loop in Uniform.clearData().
I’m currently playing with a variation of Unshaded.j3md which has this:
Matrix3Array voxelBackfaces
It is supposed to be filled via this kind of code:
Matrix3f [] backfaces = new Matrix3f [5];
// Add five Matrix3f values to array
material.setParam(“voxelBackfaces”, VarType.Matrix3Array, backfaces);
Now if I use a Material that does not set voxelBackfaces, Uniform.clearData() loops endlessly here:
while (multiData.remaining() > 0){
ZERO_BUF.limit( Math.min(multiData.remaining(), 16) );
multiData.put(ZERO_BUF);
}
multiData.remaining() seems stuck at 29.
Probably because five Matrix3fs contain 5*9 == 45 floats, and 45-16==29.
I’m not sure what this loop is supposed to do, so I don’t know whether I’m Doing It Wrong™ or if that’s a bug in Uniform.clearData().
Here’s the render thread’s stack dump:
java.lang.Throwable
at com.jme3.shader.Uniform.clearValue(Uniform.java:135)
at com.jme3.material.Material.resetUniformsNotSetByCurrent(Material.java:990)
at com.jme3.material.Material.render(Material.java:1063)
at com.jme3.renderer.RenderManager.renderGeometry(RenderManager.java:523)
at com.jme3.renderer.queue.RenderQueue.renderGeometryList(RenderQueue.java:322)
at com.jme3.renderer.queue.RenderQueue.renderQueue(RenderQueue.java:380)
at com.jme3.renderer.RenderManager.renderViewPortQueues(RenderManager.java:782)
at com.jme3.renderer.RenderManager.flushQueue(RenderManager.java:719)
at com.jme3.renderer.RenderManager.renderViewPort(RenderManager.java:983)
at com.jme3.renderer.RenderManager.render(RenderManager.java:1029)
at org.durchholz.jme3lib.ClientApplication.update(ClientApplication.java:317)
at com.jme3.system.lwjgl.LwjglAbstractDisplay.runLoop(LwjglAbstractDisplay.java:151)
at com.jme3.system.lwjgl.LwjglCanvas.runLoop(LwjglCanvas.java:229)
at com.jme3.system.lwjgl.LwjglAbstractDisplay.run(LwjglAbstractDisplay.java:228)
at java.lang.Thread.run(Thread.java:722)
java.lang.Throwable
at com.jme3.shader.Uniform.clearValue(Uniform.java:135)
at com.jme3.material.Material.resetUniformsNotSetByCurrent(Material.java:990)
at com.jme3.material.Material.render(Material.java:1063)
at com.jme3.renderer.RenderManager.renderGeometry(RenderManager.java:523)
at com.jme3.renderer.queue.RenderQueue.renderGeometryList(RenderQueue.java:322)
at com.jme3.renderer.queue.RenderQueue.renderQueue(RenderQueue.java:380)
at com.jme3.renderer.RenderManager.renderViewPortQueues(RenderManager.java:782)
at com.jme3.renderer.RenderManager.flushQueue(RenderManager.java:719)
at com.jme3.renderer.RenderManager.renderViewPort(RenderManager.java:983)
at com.jme3.renderer.RenderManager.render(RenderManager.java:1029)
at org.durchholz.jme3lib.ClientApplication.update(ClientApplication.java:317)
at com.jme3.system.lwjgl.LwjglAbstractDisplay.runLoop(LwjglAbstractDisplay.java:151)
at com.jme3.system.lwjgl.LwjglCanvas.runLoop(LwjglCanvas.java:229)
at com.jme3.system.lwjgl.LwjglAbstractDisplay.run(LwjglAbstractDisplay.java:228)
at java.lang.Thread.run(Thread.java:722)