Merge pull request #301 from Kendanware/issue295
Support for setting minification and magnification filters on a texture in the j3m material fileexperimental
commit
9f9daa13dc
@ -0,0 +1,117 @@ |
||||
package com.jme3.material.plugins; |
||||
|
||||
import com.jme3.asset.AssetInfo; |
||||
import com.jme3.asset.AssetKey; |
||||
import com.jme3.asset.AssetManager; |
||||
import com.jme3.asset.TextureKey; |
||||
import com.jme3.material.MatParamTexture; |
||||
import com.jme3.material.Material; |
||||
import com.jme3.material.MaterialDef; |
||||
import com.jme3.shader.VarType; |
||||
import com.jme3.texture.Texture; |
||||
import org.junit.Before; |
||||
import org.junit.Test; |
||||
import org.junit.runner.RunWith; |
||||
import org.mockito.Mock; |
||||
import org.mockito.Mockito; |
||||
import org.mockito.runners.MockitoJUnitRunner; |
||||
|
||||
import static org.mockito.Matchers.any; |
||||
import static org.mockito.Mockito.verify; |
||||
import static org.mockito.Mockito.when; |
||||
|
||||
/** |
||||
* @author Daniel Johansson |
||||
* @since 2015-07-20 |
||||
*/ |
||||
@RunWith(MockitoJUnitRunner.class) |
||||
public class J3MLoaderTest { |
||||
|
||||
private J3MLoader j3MLoader; |
||||
|
||||
@Mock |
||||
private AssetInfo assetInfo; |
||||
|
||||
@Mock |
||||
private AssetManager assetManager; |
||||
|
||||
@Mock |
||||
private AssetKey<Material> assetKey; |
||||
|
||||
@Mock |
||||
private MaterialDef materialDef; |
||||
|
||||
@Before |
||||
public void setUp() throws Exception { |
||||
when(assetKey.getExtension()).thenReturn(".j3m"); |
||||
when(assetInfo.getManager()).thenReturn(assetManager); |
||||
when(assetInfo.getKey()).thenReturn(assetKey); |
||||
when(assetManager.loadAsset(any(AssetKey.class))).thenReturn(materialDef); |
||||
|
||||
j3MLoader = new J3MLoader(); |
||||
} |
||||
|
||||
@Test |
||||
public void oldStyleTextureParameters_shouldBeSupported() throws Exception { |
||||
when(assetInfo.openStream()).thenReturn(J3MLoader.class.getResourceAsStream("/texture-parameters-oldstyle.j3m")); |
||||
|
||||
final Texture textureOldStyle = Mockito.mock(Texture.class); |
||||
final Texture textureOldStyleUsingQuotes = Mockito.mock(Texture.class); |
||||
|
||||
final TextureKey textureKeyUsingQuotes = setupMockForTexture("OldStyleUsingQuotes", "old style using quotes/texture.png", true, textureOldStyleUsingQuotes); |
||||
final TextureKey textureKeyOldStyle = setupMockForTexture("OldStyle", "old style/texture.png", true, textureOldStyle); |
||||
|
||||
j3MLoader.load(assetInfo); |
||||
|
||||
verify(assetManager).loadTexture(textureKeyUsingQuotes); |
||||
verify(assetManager).loadTexture(textureKeyOldStyle); |
||||
verify(textureOldStyle).setWrap(Texture.WrapMode.Repeat); |
||||
verify(textureOldStyleUsingQuotes).setWrap(Texture.WrapMode.Repeat); |
||||
} |
||||
|
||||
@Test |
||||
public void newStyleTextureParameters_shouldBeSupported() throws Exception { |
||||
when(assetInfo.openStream()).thenReturn(J3MLoader.class.getResourceAsStream("/texture-parameters-newstyle.j3m")); |
||||
|
||||
final Texture textureNoParameters = Mockito.mock(Texture.class); |
||||
final Texture textureFlip = Mockito.mock(Texture.class); |
||||
final Texture textureRepeat = Mockito.mock(Texture.class); |
||||
final Texture textureRepeatAxis = Mockito.mock(Texture.class); |
||||
final Texture textureMin = Mockito.mock(Texture.class); |
||||
final Texture textureMag = Mockito.mock(Texture.class); |
||||
final Texture textureCombined = Mockito.mock(Texture.class); |
||||
|
||||
final TextureKey textureKeyNoParameters = setupMockForTexture("Empty", "empty.png", false, textureNoParameters); |
||||
final TextureKey textureKeyFlip = setupMockForTexture("Flip", "flip.png", true, textureFlip); |
||||
setupMockForTexture("Repeat", "repeat.png", false, textureRepeat); |
||||
setupMockForTexture("RepeatAxis", "repeat-axis.png", false, textureRepeatAxis); |
||||
setupMockForTexture("Min", "min.png", false, textureMin); |
||||
setupMockForTexture("Mag", "mag.png", false, textureMag); |
||||
setupMockForTexture("Combined", "combined.png", true, textureCombined); |
||||
|
||||
j3MLoader.load(assetInfo); |
||||
|
||||
verify(assetManager).loadTexture(textureKeyNoParameters); |
||||
verify(assetManager).loadTexture(textureKeyFlip); |
||||
|
||||
verify(textureRepeat).setWrap(Texture.WrapMode.Repeat); |
||||
verify(textureRepeatAxis).setWrap(Texture.WrapAxis.T, Texture.WrapMode.Repeat); |
||||
verify(textureMin).setMinFilter(Texture.MinFilter.Trilinear); |
||||
verify(textureMag).setMagFilter(Texture.MagFilter.Bilinear); |
||||
|
||||
verify(textureCombined).setMagFilter(Texture.MagFilter.Nearest); |
||||
verify(textureCombined).setMinFilter(Texture.MinFilter.BilinearNoMipMaps); |
||||
verify(textureCombined).setWrap(Texture.WrapMode.Repeat); |
||||
} |
||||
|
||||
private TextureKey setupMockForTexture(final String paramName, final String path, final boolean flipY, final Texture texture) { |
||||
when(materialDef.getMaterialParam(paramName)).thenReturn(new MatParamTexture(VarType.Texture2D, paramName, texture, 0, null)); |
||||
|
||||
final TextureKey textureKey = new TextureKey(path, flipY); |
||||
textureKey.setGenerateMips(true); |
||||
|
||||
when(assetManager.loadTexture(textureKey)).thenReturn(texture); |
||||
|
||||
return textureKey; |
||||
} |
||||
} |
@ -0,0 +1,11 @@ |
||||
Material Test : matdef.j3md { |
||||
MaterialParameters { |
||||
Empty: "empty.png" |
||||
Flip: Flip "flip.png" |
||||
Repeat: WrapRepeat "repeat.png" |
||||
Min: MinTrilinear "min.png" |
||||
Mag: MagBilinear "mag.png" |
||||
RepeatAxis: WrapRepeat_T "repeat-axis.png" |
||||
Combined: MagNearest MinBilinearNoMipMaps Flip WrapRepeat "combined.png" |
||||
} |
||||
} |
@ -0,0 +1,6 @@ |
||||
Material Test : matdef.j3md { |
||||
MaterialParameters { |
||||
OldStyle: Flip Repeat old style/texture.png |
||||
OldStyleUsingQuotes: Repeat Flip "old style using quotes/texture.png" |
||||
} |
||||
} |
Loading…
Reference in new issue