- final version of Material/RenderState comparison and hashValue methods, he who changes them again has to buy a crate of beer for all core members

git-svn-id: https://jmonkeyengine.googlecode.com/svn/trunk@9365 75d07b2b-3a1a-0410-a2c5-0572b91ccdca
3.0
nor..67 13 years ago
parent c803ffd1ae
commit 783ec50326
  1. 8
      engine/src/core/com/jme3/material/Material.java
  2. 2
      engine/src/core/com/jme3/material/RenderState.java
  3. 4
      engine/src/core/com/jme3/scene/BatchNode.java
  4. 2
      engine/src/tools/jme3tools/optimize/GeometryBatchFactory.java

@ -219,12 +219,12 @@ public class Material implements CloneableSmartAsset, Cloneable, Savable {
* Compares two materials and returns true if they are equal. * Compares two materials and returns true if they are equal.
* This methods compare definition, parameters, additional render states. * This methods compare definition, parameters, additional render states.
* Since materials are mutable objects, implementing equals() properly is not possible, * Since materials are mutable objects, implementing equals() properly is not possible,
* hence the name dynamicEquals(). * hence the name contentEquals().
* *
* @param otherObj the material to compare to this material * @param otherObj the material to compare to this material
* @return true if the materials are equal. * @return true if the materials are equal.
*/ */
public boolean dynamicEquals(Object otherObj) { public boolean contentEquals(Object otherObj) {
if (!(otherObj instanceof Material)) { if (!(otherObj instanceof Material)) {
return false; return false;
} }
@ -291,12 +291,12 @@ public class Material implements CloneableSmartAsset, Cloneable, Savable {
/** /**
* Works like {@link Object#hashCode() } except it may change together with the material as the material is mutable by definition. * Works like {@link Object#hashCode() } except it may change together with the material as the material is mutable by definition.
*/ */
public int dynamicHashCode() { public int contentHashCode() {
int hash = 7; int hash = 7;
hash = 29 * hash + (this.def != null ? this.def.hashCode() : 0); hash = 29 * hash + (this.def != null ? this.def.hashCode() : 0);
hash = 29 * hash + (this.paramValues != null ? this.paramValues.hashCode() : 0); hash = 29 * hash + (this.paramValues != null ? this.paramValues.hashCode() : 0);
hash = 29 * hash + (this.technique != null ? this.technique.getDef().getName().hashCode() : 0); hash = 29 * hash + (this.technique != null ? this.technique.getDef().getName().hashCode() : 0);
hash = 29 * hash + (this.additionalState != null ? this.additionalState.dynamicHashCode() : 0); hash = 29 * hash + (this.additionalState != null ? this.additionalState.contentHashCode() : 0);
return hash; return hash;
} }

@ -1047,7 +1047,7 @@ public class RenderState implements Cloneable, Savable {
/** /**
* *
*/ */
public int dynamicHashCode() { public int contentHashCode() {
if (cachedHashCode == -1){ if (cachedHashCode == -1){
int hash = 7; int hash = 7;
hash = 79 * hash + (this.pointSprite ? 1 : 0); hash = 79 * hash + (this.pointSprite ? 1 : 0);

@ -259,7 +259,7 @@ public class BatchNode extends Node implements Savable {
if (list == null) { if (list == null) {
//trying to compare materials with the isEqual method //trying to compare materials with the isEqual method
for (Map.Entry<Material, List<Geometry>> mat : map.entrySet()) { for (Map.Entry<Material, List<Geometry>> mat : map.entrySet()) {
if (g.getMaterial().dynamicEquals(mat)) { if (g.getMaterial().contentEquals(mat)) {
list = mat.getValue(); list = mat.getValue();
} }
} }
@ -286,7 +286,7 @@ public class BatchNode extends Node implements Savable {
private Batch findBatchByMaterial(Material m) { private Batch findBatchByMaterial(Material m) {
for (Batch batch : batches.getArray()) { for (Batch batch : batches.getArray()) {
if (batch.geometry.getMaterial().dynamicEquals(m)) { if (batch.geometry.getMaterial().contentEquals(m)) {
return batch; return batch;
} }
} }

@ -291,7 +291,7 @@ public class GeometryBatchFactory {
if (outList == null) { if (outList == null) {
//trying to compare materials with the contentEquals method //trying to compare materials with the contentEquals method
for (Material mat : matToGeom.keySet()) { for (Material mat : matToGeom.keySet()) {
if (geom.getMaterial().dynamicEquals(mat)){ if (geom.getMaterial().contentEquals(mat)){
outList = matToGeom.get(mat); outList = matToGeom.get(mat);
} }
} }

Loading…
Cancel
Save