From 5a546232b84ce65d8779d29e9171e7e2df013614 Mon Sep 17 00:00:00 2001
From: Normand Briere <nbriere@noware.ca>
Date: Sat, 20 Jul 2019 20:50:17 -0400
Subject: [PATCH] Restore bind texture

---
 CameraPane.java |  301 ++++++++++++++++++++++++++++++++++----------------
 1 files changed, 205 insertions(+), 96 deletions(-)

diff --git a/CameraPane.java b/CameraPane.java
index 6966eee..b55d184 100644
--- a/CameraPane.java
+++ b/CameraPane.java
@@ -335,14 +335,28 @@
                     display.options1[2] = material.shadowbias;
                     display.options1[3] = material.aniso;
                     display.options1[4] = material.anisoV;
+//                System.out.println("display.options1[0] " + display.options1[0]);
+//                System.out.println("display.options1[1] " + display.options1[1]);
+//                System.out.println("display.options1[2] " + display.options1[2]);
+//                System.out.println("display.options1[3] " + display.options1[3]);
+//                System.out.println("display.options1[4] " + display.options1[4]);
                     display.options2[0] = material.opacity;
                     display.options2[1] = material.diffuse;
                     display.options2[2] = material.factor;
+//                System.out.println("display.options2[0] " + display.options2[0]);
+//                System.out.println("display.options2[1] " + display.options2[1]);
+//                System.out.println("display.options2[2] " + display.options2[2]);
 
                     cColor.HSBtoRGB(material.color, material.modulation, 1, display.options3);
+//                System.out.println("display.options3[0] " + display.options3[0]);
+//                System.out.println("display.options3[1] " + display.options3[1]);
+//                System.out.println("display.options3[2] " + display.options3[2]);
                     display.options4[0] = material.cameralight/0.2f;
                     display.options4[1] = material.subsurface;
                     display.options4[2] = material.sheen;
+//                System.out.println("display.options4[0] " + display.options4[0]);
+//                System.out.println("display.options4[1] " + display.options4[1]);
+//                System.out.println("display.options4[2] " + display.options4[2]);
                     
                  //   if (display.CURRENTANTIALIAS > 0)
                  //       display.options3[3] /= 4;
@@ -2051,7 +2065,7 @@
             //System.err.println("Oeil on");
             OEIL = true;
             if ((TRACK || SHADOWTRACK) && trackedobject != null && DrawMode() == SHADOW) // && !lightMode)
-                object.editWindow.ScreenFit(trackedobject, SHADOWTRACK && !TRACK);
+                object.GetWindow().ScreenFit(trackedobject, SHADOWTRACK && !TRACK);
             //pingthread.StepToTarget(true);
         }
         
@@ -2284,10 +2298,17 @@
         HANDLES ^= true;
     }
 
+    Object3D paintFolder;
+    
     void TogglePaint()
     {
         PAINTMODE ^= true;
         paintcount = 0;
+        
+        if (PAINTMODE)
+        {
+            paintFolder = GetFolder();
+        }
     }
 
     void SwapCamera(int a, int b)
@@ -7909,7 +7930,7 @@
         String pigment = Object3D.GetPigment(tex);
         String bump = Object3D.GetBump(tex);
 
-        if (!tex.equals(":") && !tex.equals(DEFAULT_TEXTURES))
+        //if (!tex.equals(":") && !tex.equals(DEFAULT_TEXTURES))
         {
         //    System.out.print("RELEASE  +++++++++++++++  pigment = " + pigment);
         //    System.out.println("; bump = " + bump);
@@ -7943,7 +7964,7 @@
         
         String pigment = Object3D.GetPigment(tex);
 
-        if (!tex.equals(":") && !tex.equals(DEFAULT_TEXTURES))
+        //if (!tex.equals(":") && !tex.equals(DEFAULT_TEXTURES))
         {
         //    System.out.print("RELEASE  +++++++++++++++  pigment = " + pigment);
         //    System.out.println("; bump = " + bump);
@@ -7972,7 +7993,7 @@
         
         String bump = Object3D.GetBump(tex);
 
-        if (!tex.equals(":") && !tex.equals(DEFAULT_TEXTURES))
+        //if (!tex.equals(":") && !tex.equals(DEFAULT_TEXTURES))
         {
         //    System.out.print("RELEASE  +++++++++++++++  pigment = " + pigment);
         //    System.out.println("; bump = " + bump);
@@ -8110,7 +8131,7 @@
         usedtextures.put(pigment, pigment);
         usedtextures.put(bump, bump);
         
-        if (!tex.equals(":") && !tex.equals(DEFAULT_TEXTURES))
+        //if (!tex.equals(":") && !tex.equals(DEFAULT_TEXTURES))
         {
         //    System.out.print("BIND  +++++++++++++++  pigment = " + pigment);
         //    System.out.println("; bump = " + bump);
@@ -8152,7 +8173,7 @@
 
         usedtextures.put(pigment, pigment);
         
-        if (!tex.equals(":") && !tex.equals(DEFAULT_TEXTURES))
+        //if (!tex.equals(":") && !tex.equals(DEFAULT_TEXTURES))
         {
         //    System.out.print("BIND  +++++++++++++++  pigment = " + pigment);
         //    System.out.println("; bump = " + bump);
@@ -8185,7 +8206,7 @@
 
         usedtextures.put(bump, bump);
         
-        if (!tex.equals(":") && !tex.equals(DEFAULT_TEXTURES))
+        //if (!tex.equals(":") && !tex.equals(DEFAULT_TEXTURES))
         {
         //    System.out.print("BIND  +++++++++++++++  pigment = " + pigment);
         //    System.out.println("; bump = " + bump);
@@ -8496,7 +8517,7 @@
             return false;
         }
 
-        boolean newtex = false;
+        //boolean newtex = false;
 
         com.sun.opengl.util.texture.Texture texture = GetTexture(tex, bump, resolution);
 
@@ -8528,7 +8549,7 @@
         texture.setTexParameteri(GetGL().GL_TEXTURE_WRAP_S, GetGL().GL_REPEAT);
         texture.setTexParameteri(GetGL().GL_TEXTURE_WRAP_T, GetGL().GL_REPEAT);
         
-        return newtex;
+        return true; // Warning: not used.
     }
     
     ShadowBuffer shadowPBuf;
@@ -9366,11 +9387,35 @@
         jy8[3] = 0.5f;
     }
     
-    float[] options1 = new float[]{1000, 0.00001f, 20, 0, 0}; // focus, aperture, Shadow blur, aniso, anisoV
+    float[] options1 = new float[]{100, 0.00001f, 20, 0, 0}; // focus, aperture, Shadow blur, aniso, anisoV
     float[] options2 = new float[]{0, 1, 0, 0}; // fog density, intensity, elevation
     float[] options3 = new float[]{1, 1, 1, 0}; // fog color
     float[] options4 = new float[]{1, 0, 1, 0}; // image intensity, subsurface, lightsheen
 
+    void ResetOptions()
+    {
+        options1[0] = 100;
+        options1[1] = 0.025f;
+        options1[2] = 0.01f;
+        options1[3] = 0;
+        options1[4] = 0;
+        
+        options2[0] = 0;
+        options2[1] = 0.75f;
+        options2[2] = 0;
+        options2[3] = 0;
+        
+        options3[0] = 1;
+        options3[1] = 1;
+        options3[2] = 1;
+        options3[3] = 0;
+        
+        options4[0] = 1;
+        options4[1] = 0;
+        options4[2] = 1;
+        options4[3] = 0;
+    }
+    
     static int imagecount = 0; // movie generation
     
     static int jitter = 0;
@@ -10990,9 +11035,9 @@
 
             gl.glMatrixMode(GL.GL_MODELVIEW);
 
-//gl.glHint(gl.GL_POLYGON_SMOOTH_HINT, gl.GL_NICEST);
-//gl.glEnable(gl.GL_POLYGON_SMOOTH);
-//gl.glEnable(gl.GL_MULTISAMPLE);
+gl.glEnable(gl.GL_POLYGON_SMOOTH);
+gl.glHint(gl.GL_POLYGON_SMOOTH_HINT, gl.GL_NICEST);
+gl.glEnable(gl.GL_MULTISAMPLE);
         } else
         {
             //gl.glDisable(GL.GL_TEXTURE_2D);
@@ -11003,7 +11048,7 @@
         //System.out.println("BLENDING ON");
         gl.glEnable(GL.GL_BLEND);
         gl.glBlendFunc(GL.GL_SRC_ALPHA, GL.GL_ONE_MINUS_SRC_ALPHA);
-
+//        gl.glBlendFunc(GL.GL_SRC_ALPHA_SATURATE, GL.GL_ONE);
         gl.glMatrixMode(gl.GL_PROJECTION);
         gl.glLoadIdentity();
 
@@ -11480,13 +11525,16 @@
     
     void DrawObject(GL gl, boolean draw)
     {
+        // To clear camera values
+        ResetOptions();
+        
         //System.out.println("DRAW OBJECT " + mouseDown);
 //        DrawMode() = SELECTION;
         //GL gl = getGL();
         if ((TRACK || SHADOWTRACK) || zoomonce)
         {
             if ((TRACK || SHADOWTRACK) && trackedobject != null && DrawMode() == SHADOW) // && !lightMode)
-                object.editWindow.ScreenFit(trackedobject, SHADOWTRACK && !TRACK);
+                object.GetWindow().ScreenFit(trackedobject, SHADOWTRACK && !TRACK);
             pingthread.StepToTarget(true); // true);
        //     zoomonce = false;
         }
@@ -12047,7 +12095,7 @@
             for (int i = tp.size(); --i >= 0;)
             {
                 //for (int count = tp.get(i).GetTransformCount(); --count>=0;)
-                    LA.xformPos(light, tp.get(i).GlobalTransform(), light);
+                    LA.xformPos(light, tp.get(i).GlobalTransformInv(), light);
             }
 
 
@@ -13334,9 +13382,10 @@
                 "DP3 " + dest + ".z," + "normals," + "eye;" +
                 "MAX " + dest + ".w," + dest + ".z," + "eps.x;" +
                 //"MOV " + dest + ".w," + "normal.z;" +
-                "MUL " + dest + ".z," + "params2.w," + dest + ".x;" +
-                "MUL " + dest + ".z," + dest + ".z," + dest + ".x;" +
-                //"MOV " + dest + ".z," + "params2.w;" + 
+//            "MUL " + dest + ".z," + "params2.w," + dest + ".x;" + // PRETTY HEURISTIC FOR VELVET
+//            "MUL " + dest + ".z," + dest + ".z," + dest + ".x;" +
+                
+                "MOV " + dest + ".z," + "params2.w;" + // EXACT
                 "POW " + dest + ".w," + dest + ".w," + dest + ".z;" +
                 "RCP " + dest + ".w," + dest + ".w;" +
                 //"RSQ " + dest + ".w," + dest + ".w;" +
@@ -13901,7 +13950,7 @@
             
 // fev 2014???
             if ((TRACK || SHADOWTRACK) && trackedobject != null) // && DrawMode() == SHADOW) // && !lightMode)
-                object.editWindow.ScreenFit(trackedobject, SHADOWTRACK && !TRACK);
+                object.GetWindow().ScreenFit(trackedobject, SHADOWTRACK && !TRACK);
             pingthread.StepToTarget(true); // true);
         }
     //    if (!LIVE)
@@ -14255,12 +14304,12 @@
     void GoDown(int mod)
     {
         MODIFIERS |= COMMAND;
-        /*
+        /**/
         if((mod&SHIFT) == SHIFT)
         manipCamera.RotatePosition(0, -speed);
         else
-        manipCamera.BackForth(0, -speed*delta, getWidth());
-         */
+        manipCamera.BackForth(0, -speed*delta, 0); // getWidth());
+        /**/
         if ((mod & SHIFT) == SHIFT)
         {
             mouseMode = mouseMode; // VR??
@@ -14276,12 +14325,12 @@
     void GoUp(int mod)
     {
         MODIFIERS |= COMMAND;
-        /*
+        /**/
         if((mod&SHIFT) == SHIFT)
         manipCamera.RotatePosition(0, speed);
         else
-        manipCamera.BackForth(0, speed*delta, getWidth());
-         */
+        manipCamera.BackForth(0, speed*delta, 0); // getWidth());
+        /**/
         if ((mod & SHIFT) == SHIFT)
         {
             mouseMode = mouseMode;
@@ -14297,12 +14346,12 @@
     void GoLeft(int mod)
     {
         MODIFIERS |= COMMAND;
-        /*
+        /**/
         if((mod&SHIFT) == SHIFT)
-        manipCamera.RotatePosition(speed, 0);
-        else
         manipCamera.Translate(speed*delta, 0, getWidth());
-         */
+        else
+        manipCamera.RotatePosition(speed, 0);
+        /**/
         if ((mod & SHIFT) == SHIFT)
         {
             mouseMode = mouseMode;
@@ -14318,12 +14367,12 @@
     void GoRight(int mod)
     {
         MODIFIERS |= COMMAND;
-        /*
+        /**/
         if((mod&SHIFT) == SHIFT)
-        manipCamera.RotatePosition(-speed, 0);
-        else
         manipCamera.Translate(-speed*delta, 0, getWidth());
-         */
+        else
+        manipCamera.RotatePosition(-speed, 0);
+        /**/
         if ((mod & SHIFT) == SHIFT)
         {
             mouseMode = mouseMode;
@@ -14562,7 +14611,8 @@
         Globals.MOUSEDRAGGED = false;
         
         movingcamera = false;
-        X = Y = 0;
+        X = 0; // getBounds().width/2;
+        Y = 0; // getBounds().height/2;
         //System.out.println("mouseReleased: " + e);
         clickEnd(e.getX(), e.getY(), e.getModifiersEx());
     }
@@ -14903,7 +14953,9 @@
             case 'E' : COMPACT ^= true;
                 repaint();
                 break;
-            case 'W' : DEBUGHSB ^= true;
+            case 'W' : // Wide Window (fullscreen)
+                //DEBUGHSB ^= true;
+                ObjEditor.theFrame.ToggleFullScreen();
                 repaint();
                 break;
             case 'u' : Udebug ^= true; Vdebug = false; NORMALdebug = false; programInitialized = false; repaint(); break;
@@ -14929,13 +14981,7 @@
                 repaint();
                 break;
             case 'l':
-                lightMode ^= true;
-                Globals.lighttouched = true;
-                manipCamera = renderCamera = lightMode ? lightCamera : eyeCamera;
-                targetLookAt.set(manipCamera.lookAt);
-                repaint();
-                break;
-            case 'L':
+            //case 'L':
                 if (lightMode)
                 {
                     lightMode = false;
@@ -15078,11 +15124,14 @@
             case '_':
                 kompactbit = 5;
                 break;
-            case '+':
-                kompactbit = 6;
-                break;
+//            case '+':
+//                kompactbit = 6;
+//                break;
             case ' ':
-                ObjEditor.theFrame.ToggleFullScreen();
+                lightMode ^= true;
+                Globals.lighttouched = true;
+                manipCamera = renderCamera = lightMode ? lightCamera : eyeCamera;
+                targetLookAt.set(manipCamera.lookAt);
                 repaint();
                 break;
             //case '`' :
@@ -15129,8 +15178,9 @@
             case DELETE:
                 ClearSelection();
                 break;
-                /*
             case '+':
+                
+                /*
                 //fontsize += 1;
                 bbzoom *= 2;
                 repaint();
@@ -15147,17 +15197,17 @@
             case '=':
                 IncDepth();
                 //fontsize += 1;
-                object.editWindow.refreshContents(true);
+                object.GetWindow().refreshContents(true);
                 maskbit = 6;
                 break;
             case '-': //if (PixelThreshold>1) PixelThreshold /= 2;
                 DecDepth();
                 maskbit = 5;
                 //if(fontsize > 1) fontsize -= 1;
-                if (object.editWindow == null)
-                    new Exception().printStackTrace();
-                else
-                    object.editWindow.refreshContents(true);
+//                if (object.editWindow == null)
+//                    new Exception().printStackTrace();
+//                else
+                    object.GetWindow().refreshContents(true);
                 break;
             case '{':
                 manipCamera.shaper_fovy /= 1.1;
@@ -15381,7 +15431,7 @@
         }
          */
 
-        object.editWindow.EditSelection(false);
+        object.GetWindow().EditSelection(false);
     }
 
     void SelectParent()
@@ -15398,10 +15448,10 @@
             {
                 //selectees.remove(i);
                 System.out.println("select parent of " + elem);
-                group.editWindow.Select(elem.parent.GetTreePath(), first, true);
+                group.GetWindow().Select(elem.parent.GetTreePath(), first, true);
             } else
             {
-                group.editWindow.Select(elem.GetTreePath(), first, true);
+                group.GetWindow().Select(elem.GetTreePath(), first, true);
             }
 
             first = false;
@@ -15443,12 +15493,12 @@
                 for (int j = 0; j < group.children.size(); j++)
                 {
                     elem = (Object3D) group.children.elementAt(j);
-                    object.editWindow.Select(elem.GetTreePath(), first, true);
+                    object.GetWindow().Select(elem.GetTreePath(), first, true);
                     first = false;
                 }
             } else
             {
-                object.editWindow.Select(elem.GetTreePath(), first, true);
+                object.GetWindow().Select(elem.GetTreePath(), first, true);
             }
 
             first = false;
@@ -15459,21 +15509,21 @@
     {
         //Composite group = (Composite) object;
         Object3D group = object;
-        group.editWindow.loadClipboard(true); // ClearSelection(false);
+        group.GetWindow().loadClipboard(true); // ClearSelection(false);
     }
 
     void ResetTransform(int mask)
     {
         //Composite group = (Composite) object;
         Object3D group = object;
-        group.editWindow.ResetTransform(mask);
+        group.GetWindow().ResetTransform(mask);
     }
 
     void FlipTransform()
     {
         //Composite group = (Composite) object;
         Object3D group = object;
-        group.editWindow.FlipTransform();
+        group.GetWindow().FlipTransform();
 //        group.editWindow.ReduceMesh(true);
     }
 
@@ -15481,7 +15531,7 @@
     {
         //Composite group = (Composite) object;
         Object3D group = object;
-        group.editWindow.PrintMemory();
+        group.GetWindow().PrintMemory();
 //        group.editWindow.ReduceMesh(true);
     }
     
@@ -15489,7 +15539,7 @@
     {
         //Composite group = (Composite) object;
         Object3D group = object;
-        group.editWindow.ResetCentroid();
+        group.GetWindow().ResetCentroid();
     }
 
     void IncDepth()
@@ -15665,6 +15715,7 @@
                     info.bounds.y += (height - desired) / 2;
                 }
             }
+            
             info.g = gr;
             info.camera = renderCamera;
             /* 
@@ -15674,23 +15725,44 @@
              */
             if (!isRenderer)
             {
-                object.drawEditHandles(info, 0);
-                
-                if (drag && (X != 0 || Y != 0) && object.selection.Size() > 0)
+                Grafreed.Assert(object != null);
+                Grafreed.Assert(object.selection != null);
+                if (object.selection.Size() > 0)
                 {
-                    switch (object.selection.get(0).hitSomething)
+                    int hitSomething = object.selection.get(0).hitSomething;
+
+                    info.DX = 0;
+                    info.DY = 0;
+                    info.W = 1;
+                    if (hitSomething == Object3D.hitCenter)
                     {
-                        case Object3D.hitCenter: gr.setColor(Color.pink);
-                            gr.drawLine(X, Y, info.bounds.width/2, info.bounds.height/2);
-                            break;
-                        case Object3D.hitRotate: gr.setColor(Color.yellow);
-                            gr.drawLine(X, Y, info.bounds.width/2, info.bounds.height/2);
-                        break;
-                        case Object3D.hitScale: gr.setColor(Color.cyan);
-                            gr.drawLine(X, Y, info.bounds.width/2, info.bounds.height/2);
-                        break;
+                        info.DX = X;
+                        if (X != 0)
+                            info.DX -= info.bounds.width/2;
+
+                        info.DY = Y;
+                        if (Y != 0)
+                            info.DY -= info.bounds.height/2;
                     }
-                    
+
+                    object.drawEditHandles(info, 0);
+
+                    if (drag && (X != 0 || Y != 0))
+                    {
+                        switch (hitSomething)
+                        {
+                            case Object3D.hitCenter: gr.setColor(Color.pink);
+                                gr.drawLine(X, Y, info.bounds.width/2, info.bounds.height/2);
+                                break;
+                            case Object3D.hitRotate: gr.setColor(Color.yellow);
+                                gr.drawLine(X, Y, info.bounds.width/2, info.bounds.height/2);
+                            break;
+                            case Object3D.hitScale: gr.setColor(Color.cyan);
+                                gr.drawLine(X, Y, info.bounds.width/2, info.bounds.height/2);
+                            break;
+                        }
+
+                    }
                 }
             }
         }
@@ -16488,6 +16560,14 @@
         }
     }
     
+    private Object3D GetFolder()
+    {
+        Object3D folder = object.GetWindow().copy;
+        if (object.GetWindow().copy.selection.Size() > 0)
+            folder = object.GetWindow().copy.selection.elementAt(0);
+        return folder;
+    }
+
     class SelectBuffer implements GLEventListener
     {
 
@@ -16567,6 +16647,17 @@
 
             //gl.glDisable(GL.GL_POLYGON_OFFSET_FILL);
 
+                if (PAINTMODE)
+                {
+                    if (object.GetWindow().copy.selection.Size() > 0)
+                    {
+                        Object3D paintobj = object.GetWindow().copy.selection.elementAt(0);
+
+                        // Make what you paint not selectable.
+                        paintobj.ResetSelectable();
+                    }
+                }
+                
             //int tmp = selection_view;
             //selection_view = -1;
             int temp = DrawMode();
@@ -16578,6 +16669,17 @@
             //    temp = DEFAULT; // patch for selection debug
             Globals.drawMode = temp; // WARNING
 
+                if (PAINTMODE)
+                {
+                    if (object.GetWindow().copy.selection.Size() > 0)
+                    {
+                        Object3D paintobj = object.GetWindow().copy.selection.elementAt(0);
+
+                        // Revert.
+                        paintobj.RestoreSelectable();
+                    }
+                }
+                
             //gl.glBindTexture(GL.GL_TEXTURE_2D, selection_view);
 
             // trying different ways of getting the depth info over
@@ -16681,29 +16783,31 @@
                 }
                 
                 if (!movingcamera && !PAINTMODE)
-                    object.editWindow.ScreenFitPoint(); // fev 2014
+                    object.GetWindow().ScreenFitPoint(); // fev 2014
                 
-                if (PAINTMODE && Grafreed.clipboard.size() == 1) // object.editWindow.copy.selection.Size() > 0)
+                if (PAINTMODE) // && Grafreed.clipboard.size() == 1) // object.editWindow.copy.selection.Size() > 0)
                 {
-                    Object3D paintobj = Grafreed.clipboard.get(0); // object.editWindow.copy.selection.elementAt(0);
+                    //Object3D paintobj; // = Grafreed.clipboard.get(0); // object.editWindow.copy.selection.elementAt(0);
                     
-                    Object3D group = new Object3D("inst" + paintcount++);
+                    if (object.GetWindow().copy.selection.Size() > 0)
+                    {
+                        Object3D paintobj = object.GetWindow().copy.selection.elementAt(0);
                     
-                    group.CreateMaterial(); // use a void leaf to select instances
-                    
-                    group.add(paintobj); // link
-                    
-                    object.editWindow.SnapObject(group);
-                    
-                    Object3D folder = object.editWindow.copy;
-                    
-                    if (object.editWindow.copy.selection.Size() > 0)
-                        folder = object.editWindow.copy.selection.elementAt(0);
-                    
-                    folder.add(group);
-                    
-                    object.editWindow.ResetModel();
-                    object.editWindow.refreshContents();
+                        Object3D inst = new Object3D("inst" + paintcount++);
+
+                        inst.CreateMaterial(); // use a void leaf to select instances
+
+                        inst.add(paintobj); // link
+
+                        object.GetWindow().SnapObject(inst);
+
+                        Object3D folder = paintFolder; // GetFolder();
+
+                        folder.add(inst);
+
+                        object.GetWindow().ResetModel();
+                        object.GetWindow().refreshContents();
+                    }
                 }
                 else
                     paintcount = 0;
@@ -16742,6 +16846,11 @@
                 //System.out.println("objects[color] = " + objects[color]);
                 //objects[color].Select();
                 indexcount = 0;
+                    ObjEditor window = object.GetWindow();
+                    if (window != null && deselect)
+                    {
+                        window.Select(null, deselect, true);
+                    }
                 object.Select(color, deselect);
             }
 

--
Gitblit v1.6.2