[committed] RenderState type change from integers to enumeration

As I mentioned in this thread I have changed the RenderState type to an enumeration which is safer, and it will also be consistent with other changes made throughout the API. I was able to deprecate the old integer constants and the methods that accepted them, so this will not break anyones code, they will just get some warnings, so they can transition at their own pace. We can remove them later.



As you might expect, this change extends through many classes. But please don’t worry, it really was not a significant change but just a ton of simple changes. I have run almost every jME test, and even checked line-by-line to verify the changes of the diff are accurate.



Here is the patch for your viewing pleasure.  :wink:

nice work

Nice one, this was next on my list of things to do so you saved me a bunch of work!

Once the integer constants are removed then it would be a good idea to replace this (in Geometry):

public RenderState[] states = new RenderState[RenderState.RS_MAX_STATE];


with this

public Map<RenderState.StateType, RenderState> states = new EnumMap<RenderState.StateType, RenderState>()


I'd also make it private, but that's separate issue.
ianp said:

Once the integer constants are removed then it would be a good idea to replace this (in Geometry):

public RenderState[] states = new RenderState[RenderState.RS_MAX_STATE];


with this

public Map<RenderState.StateType, RenderState> states = new EnumMap<RenderState.StateType, RenderState>()


I'd also make it private, but that's separate issue.

I was thinking along those lines as well (but didn't know about EnumMap, thanks!) but was curious about a performance penalty in moving from a simple array to a collection. I don't have any evidence either way, though.

This is also an internal change, and some thing we can justify putting off for an update or later version after experiments.

It shouldn't be too much, the whole point of EnumMap is that it's backed by a fixed size array and uses integer lookups to guarantee a direct hit every time (i.e. speed should be about the same as calling get(int) on an ArrayList).




Great, we'll definitely slate that change.

No objections? I put it in tonight.

Committed r4048.

I get this now when I run the target compile-test:

[javac] /home/julien/workspace/jme/src/jmetest/renderer/TestMipMaps.java:242: cannot find symbol
    [javac] symbol  : variable StateType
    [javac] location: class com.jme.scene.state.RenderState
    [javac]         sp.clearRenderState(RenderState.StateType.Texture);



It is strange because Eclipse doesn't indicate any error, the target "compile" works but not this target.

That's odd, it works here on NetBeans…

basixs said:

That's odd, it works here on NetBeans...

It is not possible, I tested without Eclipse, with ANT in command line and I get the same result:

[javac] /home/julien/workspace/jme/src/jmetest/TutorialGuide/HelloLOD.java:180: cannot find symbol
    [javac] symbol  : variable StateType
    [javac] location: class com.jme.scene.state.RenderState
    [javac]                 acm.setRenderState(child.getRenderState(RenderState.StateType.Material));
    [javac]                                                                    ^
    [javac] /home/julien/workspace/jme/src/jmetest/effects/RenParticleEditor.java:734: cannot find symbol
    [javac] symbol  : variable StateType
    [javac] location: class com.jme.scene.state.RenderState
    [javac]         TextureState tstate = (TextureState) spatial.getRenderState(RenderState.StateType.Texture);
    [javac]                                                                                ^
    [javac] /home/julien/workspace/jme/src/jmetest/effects/RenParticleEditor.java:816: cannot find symbol
    [javac] symbol  : variable StateType
    [javac] location: class com.jme.scene.state.RenderState
    [javac]         BlendState as = (BlendState) particleGeom.getRenderState(RenderState.StateType.Blend);
    [javac]                                                                             ^
    [javac] /home/julien/workspace/jme/src/jmetest/effects/transients/TestFadeInOutTransientEffect.java:116: cannot find symbol
    [javac] symbol  : method updateGeometry(int,int)
    [javac] location: class com.jme.scene.shape.Quad
    [javac]         fadeQ.updateGeometry(5, 5);
    [javac]              ^
    [javac] /home/julien/workspace/jme/src/jmetest/input/TestInputHandler.java:96: cannot find symbol
    [javac] symbol  : variable StateType
    [javac] location: class com.jme.scene.state.RenderState
    [javac]         cursor.setRenderState( text1.getRenderState( RenderState.StateType.Blend ) );
    [javac]                                                                 ^
    [javac] /home/julien/workspace/jme/src/jmetest/intersection/TestBoundingCapsule.java:110: cannot find symbol
    [javac] symbol  : method updateGeometry(com.jme.math.Vector3f,com.jme.math.Vector3f,int)
    [javac] location: class com.jme.scene.shape.Capsule
    [javac]             c.updateGeometry(cap1.getLineSegment().getOrigin(), cap2.getLineSegment().getOrigin(), 1);
    [javac]              ^
    [javac] /home/julien/workspace/jme/src/jmetest/intersection/TestBoundingCapsule.java:144: cannot find symbol
    [javac] symbol  : variable StateType
    [javac] location: class com.jme.scene.state.RenderState
    [javac]             c.clearRenderState(RenderState.StateType.Texture);
    [javac]                                           ^
    [javac] /home/julien/workspace/jme/src/jmetest/renderer/TestBillboardNode.java:71: cannot find symbol
    [javac] symbol  : method updateGeometry(int,int)
    [javac] location: class com.jme.scene.shape.Quad
    [javac]     q.updateGeometry(3, 3);
    [javac]      ^
    [javac] /home/julien/workspace/jme/src/jmetest/renderer/TestCameraMan.java:211: cannot find symbol
    [javac] symbol  : method updateGeometry(int,int)
    [javac] location: class com.jme.scene.shape.Quad
    [javac]     quad.updateGeometry(3, 3);
    [javac]         ^
    [javac] /home/julien/workspace/jme/src/jmetest/renderer/TestCameraMan.java:216: cannot find symbol
    [javac] symbol  : method updateGeometry(float,float)
    [javac] location: class com.jme.scene.shape.Quad
    [javac]     quad2.updateGeometry(3.4f, 3.4f);
    [javac]          ^
    [javac] /home/julien/workspace/jme/src/jmetest/renderer/TestEnvMap.java:69: cannot find symbol
    [javac] symbol  : method updateGeometry(int,int)
    [javac] location: class com.jme.scene.shape.Quad
    [javac]         background.updateGeometry(150, 120);
    [javac]                   ^
    [javac] /home/julien/workspace/jme/src/jmetest/renderer/TestMipMaps.java:115: cannot find symbol
    [javac] symbol  : method updateGeometry(int,int)
    [javac] location: class com.jme.scene.shape.Quad
    [javac]         quad.updateGeometry(100, 100);
    [javac]             ^
    [javac] /home/julien/workspace/jme/src/jmetest/renderer/TestMipMaps.java:121: cannot find symbol
    [javac] symbol  : method updateGeometry(int,int)
    [javac] location: class com.jme.scene.shape.Quad
    [javac]         quad2.updateGeometry(110, 110);
    [javac]              ^
    [javac] /home/julien/workspace/jme/src/jmetest/renderer/TestMipMaps.java:242: cannot find symbol
    [javac] symbol  : variable StateType
    [javac] location: class com.jme.scene.state.RenderState
    [javac]         sp.clearRenderState(RenderState.StateType.Texture);
    [javac]                                        ^
    [javac] /home/julien/workspace/jme/src/jmetest/renderer/TestMipMaps.java:243: cannot find symbol
    [javac] symbol  : variable StateType
    [javac] location: class com.jme.scene.state.RenderState
    [javac]         sp.clearRenderState(RenderState.StateType.Material);
    [javac]                                        ^
    [javac] /home/julien/workspace/jme/src/jmetest/renderer/TestScenegraph.java:124: cannot find symbol
    [javac] symbol  : variable StateType
    [javac] location: class com.jme.scene.state.RenderState
    [javac]             selectedNode.clearRenderState(RenderState.StateType.Texture);
    [javac]                                                      ^
    [javac] /home/julien/workspace/jme/src/jmetest/renderer/TestRenderQueue.java:273: cannot find symbol
    [javac] symbol  : variable StateType
    [javac] location: class com.jme.scene.state.RenderState
    [javac]         orthos.setRenderState(Renderer.defaultStateList[RenderState.StateType.Light.ordinal()]);
    [javac]                                                                    ^
    [javac] /home/julien/workspace/jme/src/jmetest/renderer/TestSpatialLookAt.java:185: cannot find symbol
    [javac] symbol  : method updateGeometry(int,int)
    [javac] location: class com.jme.scene.shape.Quad
    [javac]         quad.updateGeometry(150, 150);
    [javac]             ^
    [javac] /home/julien/workspace/jme/src/jmetest/renderer/TestSpatialLookAt.java:191: cannot find symbol
    [javac] symbol  : method updateGeometry(float,float)
    [javac] location: class com.jme.scene.shape.Quad
    [javac]         quad2.updateGeometry(160f, 160f);
    [javac]              ^
    [javac] /home/julien/workspace/jme/src/jmetest/renderer/loader/TestNormalmap.java:236: cannot find symbol
    [javac] symbol  : variable StateType
    [javac] location: class com.jme.scene.state.RenderState
    [javac]         node.clearRenderState(RenderState.StateType.Material);
    [javac]                                          ^
    [javac] /home/julien/workspace/jme/src/jmetest/renderer/loader/TestNormalmap.java:245: cannot find symbol
    [javac] symbol  : variable StateType
    [javac] location: class com.jme.scene.state.RenderState
    [javac]                 child.clearRenderState(RenderState.StateType.Material);
    [javac]                                                   ^
    [javac] /home/julien/workspace/jme/src/jmetest/renderer/loader/TestNormalmap.java:251: cannot find symbol
    [javac] symbol  : variable StateType
    [javac] location: class com.jme.scene.state.RenderState
    [javac]                     t.clearRenderState(RenderState.StateType.Material);
    [javac]                                                   ^
    [javac] /home/julien/workspace/jme/src/jmetest/shape/TestMultiFaceBox.java:118: cannot find symbol
    [javac] symbol  : variable StateType
    [javac] location: class com.jme.scene.state.RenderState
    [javac]                             .getRenderState(RenderState.StateType.Texture);
    [javac]                                                        ^
    [javac] /home/julien/workspace/jme/src/jmetest/util/TestExporter.java:88: cannot find symbol
    [javac] symbol  : method updateGeometry(int,int)
    [javac] location: class com.jme.scene.shape.Quad
    [javac]         background.updateGeometry(150, 120);
    [javac]                   ^
    [javac] /home/julien/workspace/jme/src/jmetest/util/TestXMLExporter.java:88: cannot find symbol
    [javac] symbol  : method updateGeometry(int,int)
    [javac] location: class com.jme.scene.shape.Quad
    [javac]         background.updateGeometry(150, 120);
    [javac]                   ^
    [javac] Note: /home/julien/workspace/jme/src/jmetest/util/TestLightStateController.java uses or overrides a deprecated API.
    [javac] Note: Recompile with -Xlint:deprecation for details.
    [javac] Note: /home/julien/workspace/jme/src/jmetest/TestChooser.java uses unchecked or unsafe operations.
    [javac] Note: Recompile with -Xlint:unchecked for details.
    [javac] 25 errors
    [javac] 5 warnings

BUILD FAILED
/home/julien/workspace/jme/build.xml:153: Compile failed; see the compiler error output for details.

Total time: 51 seconds

It is not possible

Umm, yes it is; I just ran it again (right click on compile-test -> select run target)


init:
jmeKeyStore
compile:
Compiling 1483 source files to /Volumes/Storage/Documents/Programs/_jME2.0/trunk/build
Note: Some input files use or override a deprecated API.
Note: Recompile with -Xlint:deprecation for details.
Note: Some input files use unchecked or unsafe operations.
Note: Recompile with -Xlint:unchecked for details.
compile-test:
Compiling 269 source files to /Volumes/Storage/Documents/Programs/_jME2.0/trunk/build
Note: Some input files use or override a deprecated API.
Note: Recompile with -Xlint:deprecation for details.
BUILD SUCCESSFUL (total time: 20 seconds)


Let's wait for a little bit and let someone else test it...

It is my fault, I need to remove some old JARs that are in the JVM.