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