Skip to content

Commit 9d035f7

Browse files
committed
Add the new material system
Also includes some unrelated tests Conflicts: jme3-core/src/main/java/com/jme3/renderer/RenderManager.java jme3-core/src/main/java/com/jme3/renderer/opengl/GLRenderer.java
1 parent 4933949 commit 9d035f7

33 files changed

+2073
-1209
lines changed

jme3-core/src/main/java/com/jme3/asset/AssetManager.java

Lines changed: 0 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -41,9 +41,7 @@
4141
import com.jme3.renderer.Caps;
4242
import com.jme3.scene.Spatial;
4343
import com.jme3.scene.plugins.OBJLoader;
44-
import com.jme3.shader.Shader;
4544
import com.jme3.shader.ShaderGenerator;
46-
import com.jme3.shader.ShaderKey;
4745
import com.jme3.texture.Texture;
4846
import com.jme3.texture.plugins.TGALoader;
4947
import java.io.IOException;
@@ -320,13 +318,6 @@ public interface AssetManager {
320318
*/
321319
public Material loadMaterial(String name);
322320

323-
/**
324-
* Loads shader file(s), shouldn't be used by end-user in most cases.
325-
*
326-
* @see AssetManager#loadAsset(com.jme3.asset.AssetKey)
327-
*/
328-
public Shader loadShader(ShaderKey key);
329-
330321
/**
331322
* Load a font file. Font files are in AngelCode text format,
332323
* and are with the extension "fnt".

jme3-core/src/main/java/com/jme3/asset/DesktopAssetManager.java

Lines changed: 0 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,6 @@
3232
package com.jme3.asset;
3333

3434
import com.jme3.asset.cache.AssetCache;
35-
import com.jme3.asset.cache.SimpleAssetCache;
3635
import com.jme3.audio.AudioData;
3736
import com.jme3.audio.AudioKey;
3837
import com.jme3.font.BitmapFont;
@@ -42,9 +41,7 @@
4241
import com.jme3.scene.Spatial;
4342
import com.jme3.shader.Glsl100ShaderGenerator;
4443
import com.jme3.shader.Glsl150ShaderGenerator;
45-
import com.jme3.shader.Shader;
4644
import com.jme3.shader.ShaderGenerator;
47-
import com.jme3.shader.ShaderKey;
4845
import com.jme3.system.JmeSystem;
4946
import com.jme3.texture.Texture;
5047
import java.io.IOException;
@@ -431,36 +428,6 @@ public FilterPostProcessor loadFilter(String name){
431428
return loadFilter(new FilterKey(name));
432429
}
433430

434-
/**
435-
* Load a vertex/fragment shader combo.
436-
*
437-
* @param key
438-
* @return the loaded {@link Shader}
439-
*/
440-
public Shader loadShader(ShaderKey key){
441-
// cache abuse in method
442-
// that doesn't use loaders/locators
443-
AssetCache cache = handler.getCache(SimpleAssetCache.class);
444-
Shader shader = (Shader) cache.getFromCache(key);
445-
if (shader == null){
446-
if (key.isUsesShaderNodes()) {
447-
if(shaderGenerator == null){
448-
throw new UnsupportedOperationException("ShaderGenerator was not initialized, make sure assetManager.getGenerator(caps) has been called");
449-
}
450-
shader = shaderGenerator.generateShader();
451-
} else {
452-
shader = new Shader();
453-
shader.initialize();
454-
for (Shader.ShaderType shaderType : key.getUsedShaderPrograms()) {
455-
shader.addSource(shaderType,key.getShaderProgramName(shaderType),(String) loadAsset(new AssetKey(key.getShaderProgramName(shaderType))),key.getDefines().getCompiled(),key.getShaderProgramLanguage(shaderType));
456-
}
457-
}
458-
459-
cache.addToCache(key, shader);
460-
}
461-
return shader;
462-
}
463-
464431
/**
465432
* {@inheritDoc}
466433
*/
Lines changed: 96 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,96 @@
1+
/*
2+
* Copyright (c) 2009-2015 jMonkeyEngine
3+
* All rights reserved.
4+
*
5+
* Redistribution and use in source and binary forms, with or without
6+
* modification, are permitted provided that the following conditions are
7+
* met:
8+
*
9+
* * Redistributions of source code must retain the above copyright
10+
* notice, this list of conditions and the following disclaimer.
11+
*
12+
* * Redistributions in binary form must reproduce the above copyright
13+
* notice, this list of conditions and the following disclaimer in the
14+
* documentation and/or other materials provided with the distribution.
15+
*
16+
* * Neither the name of 'jMonkeyEngine' nor the names of its contributors
17+
* may be used to endorse or promote products derived from this software
18+
* without specific prior written permission.
19+
*
20+
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
21+
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
22+
* TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
23+
* PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
24+
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
25+
* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
26+
* PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
27+
* PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
28+
* LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
29+
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
30+
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
31+
*/
32+
package com.jme3.material;
33+
34+
import com.jme3.asset.AssetManager;
35+
import com.jme3.light.AmbientLight;
36+
import com.jme3.light.Light;
37+
import com.jme3.light.LightList;
38+
import com.jme3.math.ColorRGBA;
39+
import com.jme3.renderer.Caps;
40+
import com.jme3.renderer.RenderManager;
41+
import com.jme3.renderer.Renderer;
42+
import com.jme3.scene.Geometry;
43+
import com.jme3.scene.Mesh;
44+
import com.jme3.scene.instancing.InstancedGeometry;
45+
import com.jme3.shader.DefineList;
46+
import com.jme3.shader.Shader;
47+
import java.util.EnumSet;
48+
49+
public class DefaultTechniqueDefLogic implements TechniqueDefLogic {
50+
51+
protected final TechniqueDef techniqueDef;
52+
53+
public DefaultTechniqueDefLogic(TechniqueDef techniqueDef) {
54+
this.techniqueDef = techniqueDef;
55+
}
56+
57+
@Override
58+
public Shader makeCurrent(AssetManager assetManager, RenderManager renderManager,
59+
EnumSet<Caps> rendererCaps, DefineList defines) {
60+
return techniqueDef.getShader(assetManager, rendererCaps, defines);
61+
}
62+
63+
public static void renderMeshFromGeometry(Renderer renderer, Geometry geom) {
64+
Mesh mesh = geom.getMesh();
65+
int lodLevel = geom.getLodLevel();
66+
if (geom instanceof InstancedGeometry) {
67+
InstancedGeometry instGeom = (InstancedGeometry) geom;
68+
renderer.renderMesh(mesh, lodLevel, instGeom.getActualNumInstances(),
69+
instGeom.getAllInstanceData());
70+
} else {
71+
renderer.renderMesh(mesh, lodLevel, 1, null);
72+
}
73+
}
74+
75+
public static ColorRGBA getAmbientColor(LightList lightList, boolean removeLights, ColorRGBA ambientLightColor) {
76+
ambientLightColor.set(0, 0, 0, 1);
77+
for (int j = 0; j < lightList.size(); j++) {
78+
Light l = lightList.get(j);
79+
if (l instanceof AmbientLight) {
80+
ambientLightColor.addLocal(l.getColor());
81+
if (removeLights) {
82+
lightList.remove(l);
83+
}
84+
}
85+
}
86+
ambientLightColor.a = 1.0f;
87+
return ambientLightColor;
88+
}
89+
90+
@Override
91+
public void render(RenderManager renderManager, Shader shader, Geometry geometry, LightList lights) {
92+
Renderer renderer = renderManager.getRenderer();
93+
renderer.setShader(shader);
94+
renderMeshFromGeometry(renderer, geometry);
95+
}
96+
}

jme3-core/src/main/java/com/jme3/material/MatParam.java

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -129,9 +129,6 @@ public void setValue(Object value) {
129129
this.value = value;
130130
}
131131

132-
void apply(Renderer r, Technique technique) {
133-
technique.updateUniformParam(getPrefixedName(), getVarType(), getValue());
134-
}
135132

136133
/**
137134
* Returns the material parameter value as it would appear in a J3M

jme3-core/src/main/java/com/jme3/material/MatParamTexture.java

Lines changed: 0 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -100,12 +100,6 @@ public int getUnit() {
100100
return unit;
101101
}
102102

103-
@Override
104-
public void apply(Renderer r, Technique technique) {
105-
TechniqueDef techDef = technique.getDef();
106-
r.setTexture(getUnit(), getTextureValue());
107-
technique.updateUniformParam(getPrefixedName(), getVarType(), getUnit());
108-
}
109103

110104
@Override
111105
public void write(JmeExporter ex) throws IOException {

0 commit comments

Comments
 (0)