From c1dd8f845e285fb5cae79c9ba6b85584a77ebc54 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Radek=20O=C5=A1lej=C5=A1ek?= <oslejsek@fi.muni.cz>
Date: Mon, 2 May 2022 14:59:32 +0200
Subject: [PATCH] Resolve "Fix material serialization"

---
 .../analyst/face/HumanFaceFactory.java        |  3 +++
 .../fidentis/analyst/face/HumanFaceUtils.java |  3 ++-
 .../fidentis/analyst/scene/DrawableMesh.java  | 25 ++++++++-----------
 .../analyst/mesh/material/Material.java       |  3 ++-
 4 files changed, 18 insertions(+), 16 deletions(-)

diff --git a/Comparison/src/main/java/cz/fidentis/analyst/face/HumanFaceFactory.java b/Comparison/src/main/java/cz/fidentis/analyst/face/HumanFaceFactory.java
index 6076af44..5c1516eb 100644
--- a/Comparison/src/main/java/cz/fidentis/analyst/face/HumanFaceFactory.java
+++ b/Comparison/src/main/java/cz/fidentis/analyst/face/HumanFaceFactory.java
@@ -10,6 +10,7 @@ import cz.fidentis.analyst.mesh.core.CornerTableRow;
 import cz.fidentis.analyst.mesh.core.MeshFacetImpl;
 import cz.fidentis.analyst.mesh.core.MeshModel;
 import cz.fidentis.analyst.mesh.core.MeshPointImpl;
+import cz.fidentis.analyst.mesh.material.Material;
 import cz.fidentis.analyst.symmetry.Plane;
 import cz.fidentis.analyst.visitors.mesh.BoundingBox.BBox;
 import java.io.File;
@@ -118,11 +119,13 @@ public class HumanFaceFactory {
                 HumanFaceFactory.kryo.register(CornerTable.class);
                 HumanFaceFactory.kryo.register(CornerTableRow.class);
                 HumanFaceFactory.kryo.register(BBox.class);
+                HumanFaceFactory.kryo.register(Material.class);
                 HumanFaceFactory.kryo.register(Plane.class);
                 HumanFaceFactory.kryo.register(Point3d.class);
                 HumanFaceFactory.kryo.register(Vector3d.class);
                 HumanFaceFactory.kryo.register(ArrayList.class);
                 HumanFaceFactory.kryo.register(HashMap.class);
+                HumanFaceFactory.kryo.register(String.class);
             }
         }
     }
diff --git a/Comparison/src/main/java/cz/fidentis/analyst/face/HumanFaceUtils.java b/Comparison/src/main/java/cz/fidentis/analyst/face/HumanFaceUtils.java
index e9f7aa49..9c881cb0 100644
--- a/Comparison/src/main/java/cz/fidentis/analyst/face/HumanFaceUtils.java
+++ b/Comparison/src/main/java/cz/fidentis/analyst/face/HumanFaceUtils.java
@@ -45,6 +45,7 @@ public class HumanFaceUtils {
             boolean recomputeKdTree) {
         
         // transform mesh:
+        System.out.println("_AAA " + staticFace.getShortName() + ":" + transformedFace.getShortName());
         IcpTransformer icp = new IcpTransformer(
                 staticFace.getMeshModel(), 
                 maxIterations, 
@@ -53,7 +54,7 @@ public class HumanFaceUtils {
                 samplingStrategy
         );
         transformedFace.getMeshModel().compute(icp, true); // superimpose face towards the static face
-
+        
         // update k-d of transformed face:
         if (transformedFace.hasKdTree()) { 
             if (recomputeKdTree) {
diff --git a/GUI/src/main/java/cz/fidentis/analyst/scene/DrawableMesh.java b/GUI/src/main/java/cz/fidentis/analyst/scene/DrawableMesh.java
index fbd464b0..7965d913 100644
--- a/GUI/src/main/java/cz/fidentis/analyst/scene/DrawableMesh.java
+++ b/GUI/src/main/java/cz/fidentis/analyst/scene/DrawableMesh.java
@@ -9,8 +9,6 @@ import cz.fidentis.analyst.mesh.core.MeshPoint;
 import java.awt.Color;
 import java.io.File;
 import java.util.List;
-import javax.vecmath.Point3d;
-import javax.vecmath.Vector3d;
 
 /**
  * A drawable triangular mesh, i.e., a mesh model with drawing information like 
@@ -25,7 +23,6 @@ public class DrawableMesh extends Drawable {
     
     private final MeshModel model;
     private Texture texture = null;
-    private int textureHandle;
     
     /**
      * Copy constructor. 
@@ -84,28 +81,28 @@ public class DrawableMesh extends Drawable {
         gl.glMaterialf(GL2.GL_FRONT_AND_BACK, GL2.GL_SHININESS, 50);  
         gl.glMaterialfv(GL2.GL_FRONT_AND_BACK, GL2.GL_SPECULAR, highlights, 0);
         
-        gl.glTexParameterf(GL2.GL_TEXTURE_2D, GL2.GL_TEXTURE_MAG_FILTER, GL2.GL_NEAREST);
-        gl.glTexParameterf(GL2.GL_TEXTURE_2D, GL2.GL_TEXTURE_MIN_FILTER, GL2.GL_NEAREST);
-        gl.glTexEnvf(GL2.GL_TEXTURE_ENV, GL2.GL_TEXTURE_ENV_MODE, GL2.GL_REPLACE);
-        
-        if (model.hasMaterial() && model.getMaterial().hasTexture() && (texture == null)) {
+        if (getRenderMode() == RenderingMode.TEXTURE && 
+                model.hasMaterial() && 
+                model.getMaterial().hasTexture() && 
+                (texture == null)) {
+            
+            gl.glTexParameterf(GL2.GL_TEXTURE_2D, GL2.GL_TEXTURE_MAG_FILTER, GL2.GL_NEAREST);
+            gl.glTexParameterf(GL2.GL_TEXTURE_2D, GL2.GL_TEXTURE_MIN_FILTER, GL2.GL_NEAREST);
+            gl.glTexEnvf(GL2.GL_TEXTURE_ENV, GL2.GL_TEXTURE_ENV_MODE, GL2.GL_REPLACE);
             try{
                 texture = TextureIO.newTexture(new File(model.getMaterial().getTexturePath()), true);
                 texture.bind(gl);
-                textureHandle = texture.getTextureObject();
             } catch (Exception ex){
                 ex.printStackTrace();
             }
         }
-
-    }
+ 
+   }
     
     @Override
     protected void renderObject(GL2 gl) {
         if (getRenderMode() == RenderingMode.TEXTURE){
             gl.glEnable(GL2.GL_TEXTURE_2D);
-            // Select the texture object
-            gl.glBindTexture(GL2.GL_TEXTURE_2D, textureHandle);
         } else {
             gl.glDisable(GL2.GL_TEXTURE_2D);
         }
@@ -123,7 +120,7 @@ public class DrawableMesh extends Drawable {
                 }
                 
                 // render the vertices
-                if (mPoint.getTexCoord() != null) {
+                if (getRenderMode() == RenderingMode.TEXTURE && mPoint.getTexCoord() != null) {
                     gl.glTexCoord2d(mPoint.getTexCoord().x, mPoint.getTexCoord().y);
                 }
                 gl.glVertex3d(mPoint.getPosition().x, mPoint.getPosition().y, mPoint.getPosition().z);
diff --git a/MeshModel/src/main/java/cz/fidentis/analyst/mesh/material/Material.java b/MeshModel/src/main/java/cz/fidentis/analyst/mesh/material/Material.java
index a0a3a578..47664038 100644
--- a/MeshModel/src/main/java/cz/fidentis/analyst/mesh/material/Material.java
+++ b/MeshModel/src/main/java/cz/fidentis/analyst/mesh/material/Material.java
@@ -1,4 +1,5 @@
 package cz.fidentis.analyst.mesh.material;
+import java.io.Serializable;
 import javax.vecmath.Vector3d;
 
 /**
@@ -7,7 +8,7 @@ import javax.vecmath.Vector3d;
  * @author Matej Lukes
  * @author Katerina Zarska
  */
-public class Material {
+public class Material implements Serializable {
     
     private final String name;
     // colour info
-- 
GitLab