Skip to content

Commit f270985

Browse files
committed
Got rid of the sorting for Technique selection
1 parent cb04548 commit f270985

File tree

3 files changed

+9
-197
lines changed

3 files changed

+9
-197
lines changed

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

Lines changed: 9 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -711,19 +711,22 @@ public void selectTechnique(String name, final RenderManager renderManager) {
711711
// supports all the caps.
712712
if (tech == null) {
713713
EnumSet<Caps> rendererCaps = renderManager.getRenderer().getCaps();
714-
List<TechniqueDef> techDefs = def.getSortedTechniqueDefs(name, renderManager);
714+
List<TechniqueDef> techDefs = def.getTechniqueDefs(name);
715715
if (techDefs == null || techDefs.isEmpty()) {
716716
throw new IllegalArgumentException(
717717
String.format("The requested technique %s is not available on material %s", name, def.getName()));
718718
}
719719

720720
TechniqueDef lastTech = null;
721+
float weight = 0;
721722
for (TechniqueDef techDef : techDefs) {
722723
if (rendererCaps.containsAll(techDef.getRequiredCaps())) {
723-
// use the first one that supports all the caps
724-
tech = new Technique(this, techDef);
725-
techniques.put(name, tech);
726-
break;
724+
float techWeight = techDef.getWeight() + (techDef.getLightMode() == renderManager.getPreferredLightMode() ? 10f : 0);
725+
if (techWeight > weight) {
726+
tech = new Technique(this, techDef);
727+
techniques.put(name, tech);
728+
weight = techWeight;
729+
}
727730
}
728731
lastTech = techDef;
729732
}
@@ -734,6 +737,7 @@ public void selectTechnique(String name, final RenderManager renderManager) {
734737
+ "The capabilities %s are required.",
735738
name, def.getName(), lastTech.getRequiredCaps()));
736739
}
740+
logger.log(Level.FINE, this.getMaterialDef().getName() + " selected technique def " + tech.getDef());
737741
} else if (technique == tech) {
738742
// attempting to switch to an already
739743
// active technique.

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

Lines changed: 0 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -55,7 +55,6 @@ public class MaterialDef{
5555

5656
private Map<String, List<TechniqueDef>> techniques;
5757
private Map<String, MatParam> matParams;
58-
private TechDefComparator comparator = new TechDefComparator();
5958

6059
/**
6160
* Serialization only. Do not use.
@@ -188,17 +187,6 @@ public List<TechniqueDef> getTechniqueDefs(String name) {
188187
return techniques.get(name);
189188
}
190189

191-
public List<TechniqueDef> getSortedTechniqueDefs(String name, RenderManager rm) {
192-
List<TechniqueDef> techDefs = getTechniqueDefs(name);
193-
if (techDefs == null) {
194-
return null;
195-
}
196-
//Sorting the techdef depending on their weight (depending on their glsl version) and on the preferred light mode)
197-
comparator.rm = rm;
198-
Collections.sort(techDefs, comparator);
199-
return techDefs;
200-
}
201-
202190
/**
203191
*
204192
* @return the list of all the technique definitions names.
@@ -207,17 +195,4 @@ public Collection<String> getTechniqueDefsNames(){
207195
return techniques.keySet();
208196
}
209197

210-
public static class TechDefComparator implements Comparator<TechniqueDef> {
211-
212-
RenderManager rm;
213-
214-
@Override
215-
public int compare(TechniqueDef o1, TechniqueDef o2) {
216-
float o1Weight = o1.getWeight() + (o1.getLightMode() == rm.getPreferredLightMode() ? 10f : 0);
217-
float o2Weight = o2.getWeight() + (o2.getLightMode() == rm.getPreferredLightMode() ? 10f : 0);
218-
return (int) Math.signum(o2Weight - o1Weight);
219-
}
220-
}
221-
222-
223198
}

jme3-core/src/test/java/com/jme3/material/TestTechniqueDefOrdering.java

Lines changed: 0 additions & 167 deletions
This file was deleted.

0 commit comments

Comments
 (0)