(old topic : http://www.jmonkeyengine.com/forum/index.php?topic=9194.0)
In the predraw function, a loop active and desactive texture units :
for (int i = 0; i < ts.getNumberOfSetTextures()
&& i < TextureState.getNumberOfFragmentTexCoordUnits(); i++) {
[...]
if (capabilities.GL_ARB_multitexture) {
ARBMultitexture
.glClientActiveTextureARB(ARBMultitexture.GL_TEXTURE0_ARB
+ i);
}
[...]
GL11.glEnableClientState(GL11.GL_TEXTURE_COORD_ARRAY);
[...]
}
After this loop, an other loop desactive unused texture unit like this :
if (ts.getNumberOfSetTextures() < prevTextureNumber) {
for (int i = ts.getNumberOfSetTextures(); i < prevTextureNumber; i++) {
if (capabilities.GL_ARB_multitexture) {
ARBMultitexture
.glClientActiveTextureARB(ARBMultitexture.GL_TEXTURE0_ARB
+ i);
}
GL11.glDisableClientState(GL11.GL_TEXTURE_COORD_ARRAY);
}
}
prevTextureNumber = ts.getNumberOfSetTextures() < TextureState
.getNumberOfFixedUnits() ? ts.getNumberOfSetTextures()
: TextureState.getNumberOfFixedUnits();
So, in the compute of prevTextureNumber, we can see the maximum is getNumberOfFixedUnits, and in the first loop, the maximum is getNumberOfFragmentTexCoordUnits.
On NVidia 8800 GT, this difference create a javaw.exe crash.
In my mind, a good solution is to compute prevTextureNumber like this :
prevTextureNumber = ts.getNumberOfSetTextures() < TextureState
.getNumberOfFragmentTexCoordUnits() ? ts.getNumberOfSetTextures()
: TextureState.getNumberOfFragmentTexCoordUnits();
So if you have few seconds to look that, thank you.
:D
Bye