Skip to content

Commit

Permalink
MaterialDebugAppState: format code (#2200)
Browse files Browse the repository at this point in the history
MaterialDebugAppState: format code
  • Loading branch information
capdevon authored Feb 29, 2024
1 parent 80c2577 commit 8181057
Showing 1 changed file with 23 additions and 32 deletions.
55 changes: 23 additions & 32 deletions jme3-core/src/main/java/com/jme3/util/MaterialDebugAppState.java
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
/*
* Copyright (c) 2009-2021 jMonkeyEngine
* Copyright (c) 2009-2024 jMonkeyEngine
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
Expand Down Expand Up @@ -98,9 +98,8 @@ public class MaterialDebugAppState extends AbstractAppState {
private RenderManager renderManager;
private AssetManager assetManager;
private InputManager inputManager;
final private List<Binding> bindings = new ArrayList<>();
final private Map<Trigger,List<Binding>> fileTriggers = new HashMap<> ();

private final List<Binding> bindings = new ArrayList<>();
private final Map<Trigger, List<Binding>> fileTriggers = new HashMap<>();

@Override
public void initialize(AppStateManager stateManager, Application app) {
Expand All @@ -119,20 +118,18 @@ public void initialize(AppStateManager stateManager, Application app) {
* @param spat the spatial to reload
*/
public void registerBinding(Trigger trigger, final Spatial spat) {
if(spat instanceof Geometry){
GeometryBinding binding = new GeometryBinding(trigger, (Geometry)spat);
if (spat instanceof Geometry) {
GeometryBinding binding = new GeometryBinding(trigger, (Geometry) spat);
bindings.add(binding);
if (isInitialized()) {
bind(binding);
}
}else if (spat instanceof Node){
for (Spatial child : ((Node)spat).getChildren()) {
} else if (spat instanceof Node) {
for (Spatial child : ((Node) spat).getChildren()) {
registerBinding(trigger, child);
}
}
}



/**
* Will reload the filter's materials whenever the trigger is fired.
Expand All @@ -146,7 +143,6 @@ public void registerBinding(Trigger trigger, final Filter filter) {
bind(binding);
}
}


/**
* Will reload the filter's materials whenever the shader file is changed
Expand Down Expand Up @@ -174,7 +170,7 @@ private void bind(final Binding binding) {
if (binding.getTrigger() instanceof FileChangedTrigger) {
FileChangedTrigger t = (FileChangedTrigger) binding.getTrigger();
List<Binding> b = fileTriggers.get(t);
if(b == null){
if (b == null) {
t.init();
b = new ArrayList<Binding>();
fileTriggers.put(t, b);
Expand All @@ -186,7 +182,7 @@ private void bind(final Binding binding) {
@Override
public void onAction(String name, boolean isPressed, float tpf) {
if (actionName.equals(name) && isPressed) {
//reloading the material
// reloading the material
binding.reload();
}
}
Expand All @@ -197,42 +193,41 @@ public void onAction(String name, boolean isPressed, float tpf) {
}

public Material reloadMaterial(Material mat) {
//clear the entire cache, there might be more clever things to do, like clearing only the matdef, and the associated shaders.
// clear the entire cache, there might be more clever things to do, like
// clearing only the matdef, and the associated shaders.
assetManager.clearCache();

//creating a dummy mat with the mat def of the mat to reload
// creating a dummy mat with the mat def of the mat to reload
// Force the reloading of the asset, otherwise the new shader code will not be applied.
Material dummy = new Material(assetManager, mat.getMaterialDef().getAssetName());

for (MatParam matParam : mat.getParams()) {
dummy.setParam(matParam.getName(), matParam.getVarType(), matParam.getValue());
}

dummy.getAdditionalRenderState().set(mat.getAdditionalRenderState());

//creating a dummy geom and assigning the dummy material to it
dummy.getAdditionalRenderState().set(mat.getAdditionalRenderState());

// creating a dummy geom and assigning the dummy material to it
Geometry dummyGeom = new Geometry("dummyGeom", new Box(1f, 1f, 1f));
dummyGeom.setMaterial(dummy);

try {
//preloading the dummyGeom, this call will compile the shader again
// preloading the dummyGeom, this call will compile the shader again
renderManager.preloadScene(dummyGeom);
} catch (RendererException e) {
//compilation error, the shader code will be output to the console
//the following code will output the error
//System.err.println(e.getMessage());
// compilation error, the shader code will be output to the console
// the following code will output the error
Logger.getLogger(MaterialDebugAppState.class.getName()).log(Level.SEVERE, e.getMessage());
return null;
}

Logger.getLogger(MaterialDebugAppState.class.getName()).log(Level.INFO, "Material successfully reloaded");
//System.out.println("Material successfully reloaded");
return dummy;
}

@Override
public void update(float tpf) {
super.update(tpf); //To change body of generated methods, choose Tools | Templates.
super.update(tpf);
for (Trigger trigger : fileTriggers.keySet()) {
if (trigger instanceof FileChangedTrigger) {
FileChangedTrigger t = (FileChangedTrigger) trigger;
Expand All @@ -243,7 +238,7 @@ public void update(float tpf) {
}
}
}
}
}
}

private interface Binding {
Expand All @@ -263,23 +258,21 @@ private class GeometryBinding implements Binding {
public GeometryBinding(Trigger trigger, Geometry geom) {
this.trigger = trigger;
this.geom = geom;

}

@Override
public void reload() {
Material reloadedMat = reloadMaterial(geom.getMaterial());
//if the reload is successful, we re setup the material with its params and reassign it to the box
// if the reload is successful, we re setup the material with its params and
// reassign it to the box
if (reloadedMat != null) {
// setupMaterial(reloadedMat);
geom.setMaterial(reloadedMat);
}
}

@Override
public String getActionName() {
return geom.getName() + "Reload";

}

@Override
Expand Down Expand Up @@ -319,12 +312,11 @@ public void reload() {
} else {
field.set(filter, mat);
}

}
if (field.getType().isInstance(p)) {
field.setAccessible(true);
p = (Filter.Pass) field.get(filter);
if (p!= null && p.getPassMaterial() != null) {
if (p != null && p.getPassMaterial() != null) {
Material mat = reloadMaterial(p.getPassMaterial());
if (mat == null) {
return;
Expand Down Expand Up @@ -352,7 +344,6 @@ public void reload() {
} catch (IllegalArgumentException | IllegalAccessException ex) {
Logger.getLogger(MaterialDebugAppState.class.getName()).log(Level.SEVERE, null, ex);
}

}

@Override
Expand Down

0 comments on commit 8181057

Please sign in to comment.