From 7bd2feb4167b79f96b02f1aaf6d97807503c2c5f Mon Sep 17 00:00:00 2001 From: Nehon Date: Mon, 11 Apr 2016 21:02:16 +0200 Subject: [PATCH] Made a test for shaderNode based j3md loading --- .../jme3/material/plugins/LoadJ3mdTest.java | 100 ++++++++++++++++++ jme3-core/src/test/resources/testMatDef.j3md | 34 ++++++ 2 files changed, 134 insertions(+) create mode 100644 jme3-core/src/test/java/com/jme3/material/plugins/LoadJ3mdTest.java create mode 100644 jme3-core/src/test/resources/testMatDef.j3md diff --git a/jme3-core/src/test/java/com/jme3/material/plugins/LoadJ3mdTest.java b/jme3-core/src/test/java/com/jme3/material/plugins/LoadJ3mdTest.java new file mode 100644 index 000000000..ea47129a7 --- /dev/null +++ b/jme3-core/src/test/java/com/jme3/material/plugins/LoadJ3mdTest.java @@ -0,0 +1,100 @@ +/* + * Copyright (c) 2009-2016 jMonkeyEngine + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are + * met: + * + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * * Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * * Neither the name of 'jMonkeyEngine' nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED + * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF + * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ +package com.jme3.material.plugins; + +import com.jme3.asset.AssetManager; +import com.jme3.material.*; +import com.jme3.renderer.*; +import com.jme3.scene.Geometry; +import com.jme3.scene.shape.Box; +import com.jme3.shader.Shader; +import com.jme3.system.*; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.mockito.runners.MockitoJUnitRunner; + +import java.util.*; + +import static org.junit.Assert.assertEquals; + +@RunWith(MockitoJUnitRunner.class) +public class LoadJ3mdTest { + + private Material material; + private final Geometry geometry = new Geometry("Geometry", new Box(1, 1, 1)); + private final EnumSet myCaps = EnumSet.noneOf(Caps.class); + private final RenderManager renderManager = new RenderManager(new NullRenderer() { + @Override + public EnumSet getCaps() { + return LoadJ3mdTest.this.myCaps; + } + }); + + @Test + public void testShaderNodesMaterialDefLoading() { + supportGlsl(100); + material("testMatDef.j3md"); + material.selectTechnique("Default", renderManager); + + assertEquals(material.getActiveTechnique().getDef().getShaderNodes().size(), 2); + Shader s = material.getActiveTechnique().getDef().getShader(TestUtil.createAssetManager(), myCaps, material.getActiveTechnique().getDynamicDefines()); + assertEquals(s.getSources().size(), 2); + } + + private void supportGlsl(int version) { + switch (version) { + case 150: + myCaps.add(Caps.GLSL150); + case 140: + myCaps.add(Caps.GLSL140); + case 130: + myCaps.add(Caps.GLSL130); + case 120: + myCaps.add(Caps.GLSL120); + case 110: + myCaps.add(Caps.GLSL110); + case 100: + myCaps.add(Caps.GLSL100); + break; + } + } + private void caps(Caps... caps) { + myCaps.addAll(Arrays.asList(caps)); + } + + private void material(String path) { + AssetManager assetManager = TestUtil.createAssetManager(); + material = new Material(assetManager, path); + geometry.setMaterial(material); + } + +} diff --git a/jme3-core/src/test/resources/testMatDef.j3md b/jme3-core/src/test/resources/testMatDef.j3md new file mode 100644 index 000000000..bf70b1e2a --- /dev/null +++ b/jme3-core/src/test/resources/testMatDef.j3md @@ -0,0 +1,34 @@ +MaterialDef Simple { + MaterialParameters { + Color Color + } + Technique { + WorldParameters { + WorldViewProjectionMatrix + } + VertexShaderNodes { + ShaderNode CommonVert { + Definition : CommonVert : Common/MatDefs/ShaderNodes/Common/CommonVert.j3sn + InputMappings { + worldViewProjectionMatrix = WorldParam.WorldViewProjectionMatrix + modelPosition = Global.position.xyz + } + OutputMappings { + Global.position = projPosition + } + } + } + FragmentShaderNodes { + ShaderNode ColorMult { + Definition : ColorMult : Common/MatDefs/ShaderNodes/Basic/ColorMult.j3sn + InputMappings { + color1 = MatParam.Color + color2 = Global.color + } + OutputMappings { + Global.color = outColor + } + } + } + } +} \ No newline at end of file