From 0c1f740dd6ddd6432dc29266e42ef851e26027bb Mon Sep 17 00:00:00 2001 From: Normand Briere <nbriere@noware.ca> Date: Tue, 13 Aug 2019 21:21:38 -0400 Subject: [PATCH] Random node + optimizations. --- ObjEditor.java | 77 +++++++++------ SwitchNode.java | 11 + GroupLeaf.java | 2 cMaterial.java | 2 RandomEditor.java | 36 ++++-- CameraPane.java | 13 + Globals.java | 2 SwitchEditor.java | 3 GroupEditor.java | 5 cTexture.java | 3 ParticleNode.java | 2 RandomNode.java | 54 ++++++++-- Object3D.java | 88 ++++++++++------- 13 files changed, 195 insertions(+), 103 deletions(-) diff --git a/CameraPane.java b/CameraPane.java index 778fb13..ebdca60 100644 --- a/CameraPane.java +++ b/CameraPane.java @@ -113,6 +113,8 @@ /*static*/ com.sun.opengl.util.texture.Texture cubemap; // Either custom or rgb /*static*/ com.sun.opengl.util.texture.Texture cubemapcustom; /*static*/ com.sun.opengl.util.texture.Texture cubemaprgb; + boolean transformMode; + boolean reverseUP = false; static boolean frozen = false; boolean enablebackspace = false; // patch for back buffer refresh @@ -2515,7 +2517,7 @@ com.sun.opengl.util.texture.TextureIO.newTextureData( getClass().getClassLoader().getResourceAsStream(name), true, - com.sun.opengl.util.texture.TextureIO.PNG); + GetFormat(name)); // com.sun.opengl.util.texture.TextureIO.PNG); } catch (java.io.IOException e) { throw new javax.media.opengl.GLException(e); @@ -11082,11 +11084,11 @@ // // newenvy = -1; - if (object.skyboxname != null && object.skyboxname.equals("cubemaps/default-skyboxes/rgb")) + if (transformMode) // object.skyboxname != null && object.skyboxname.equals("cubemaps/default-skyboxes/rgb")) { if (cubemaprgb == null) { - cubemaprgb = LoadSkybox(object.skyboxname + "/", object.skyboxext, false); + cubemaprgb = LoadSkybox("cubemaps/default-skyboxes/rgb" + "/", "jpg", false); } cubemap = cubemaprgb; @@ -11097,6 +11099,8 @@ { if (!object.skyboxname.equals(this.loadedskyboxname)) { + if (cubemap != null && cubemap != cubemaprgb) + cubemap.dispose(); cubemapcustom = LoadSkybox(object.skyboxname + "/", object.skyboxext, false); loadedskyboxname = object.skyboxname; } @@ -16788,7 +16792,8 @@ gl.glDisable(GL.GL_TEXTURE_GEN_R); cubemap.disable(); - ////cubemap.unbind(); + //cubemap.dispose(); + if (CULLFACE) { gl.glEnable(gl.GL_CULL_FACE); diff --git a/Globals.java b/Globals.java index cc0475f..efa09ba 100644 --- a/Globals.java +++ b/Globals.java @@ -1,7 +1,7 @@ public class Globals { - public static boolean TOOLTIPS = false; + public static boolean TOOLTIPS = true; // false; public static boolean ADVANCED = false; public static boolean DEBUG = false; diff --git a/GroupEditor.java b/GroupEditor.java index 4faf49e..9f3c422 100644 --- a/GroupEditor.java +++ b/GroupEditor.java @@ -1043,8 +1043,8 @@ // maxButton.addActionListener(this); } -// cButton gcButton; -// + cButton gcButton; + // oe.toolbarPanel.add(gcButton = GetButton("icons/trash.png", !Grafreed.NIMBUSLAF)); //, oe.aConstraints); // gcButton.setToolTipText("Garbage collect"); // gcButton.addActionListener(new ActionListener() @@ -5325,6 +5325,7 @@ boolean allComposites = true; + if (group.selection != null) for (Enumeration e = group.selection.elements(); e.hasMoreElements();) { if (!(e.nextElement() instanceof Composite)) diff --git a/GroupLeaf.java b/GroupLeaf.java index 98da0c9..9c7e5f5 100644 --- a/GroupLeaf.java +++ b/GroupLeaf.java @@ -21,7 +21,7 @@ { super(name); - addChild(new cGroup("Leaf")); + addChild(new cGroup(name + "Leaf")); } Object3D deepCopy() diff --git a/ObjEditor.java b/ObjEditor.java index 4b4a90a..c07bcab 100644 --- a/ObjEditor.java +++ b/ObjEditor.java @@ -75,8 +75,16 @@ return new cCheckBox(icon, border); } + static java.util.Hashtable<String, javax.swing.ImageIcon> icons = new java.util.Hashtable<String, javax.swing.ImageIcon>(); + ImageIcon GetIcon(String name) { + javax.swing.ImageIcon iconCache = icons.get(name); + if (iconCache != null) + { + return iconCache; + } + try { BufferedImage image = javax.imageio.ImageIO.read(getClass().getClassLoader().getResourceAsStream(name)); @@ -94,10 +102,14 @@ // } javax.swing.ImageIcon icon = new javax.swing.ImageIcon(image); + + icons.put(name, icon); + return icon; } catch (Exception e) { + //icons.put(name, null); return null; } } @@ -433,7 +445,7 @@ ChangeListener changeListener = new ChangeListener() { - String name; + //String name; public void stateChanged(ChangeEvent changeEvent) { @@ -453,33 +465,34 @@ // EditSelection(false); // } - if (objectPanel.getSelectedIndex() == 4) - { - name = copy.skyboxname; - - if (name == null) - { - name = ""; - } - - copy.skyboxname = "cubemaps/default-skyboxes/rgb"; - copy.skyboxext = "jpg"; - } - else - { - if (name != null) - { - if (name.equals("")) - { - copy.skyboxname = null; - copy.skyboxext = null; - } - else - { - copy.skyboxname = name; - } - } - } +// if (objectPanel.getSelectedIndex() == 4) +// { +// name = copy.skyboxname; +// +// if (name == null) +// { +// name = ""; +// } +// +// copy.skyboxname = "cubemaps/default-skyboxes/rgb"; +// copy.skyboxext = "jpg"; +// } +// else +// { +// if (name != null) +// { +// if (name.equals("")) +// { +// copy.skyboxname = null; +// copy.skyboxext = null; +// } +// else +// { +// copy.skyboxname = name; +// } +// } +// } + cameraView.transformMode = objectPanel.getSelectedIndex() == 4; // refreshContents(false); // To refresh Info tab cameraView.repaint(); @@ -1676,9 +1689,9 @@ scenePanel.add(tabbedPane); //if (Globals.ADVANCED) - tabbedPane.add(infoPanel); - tabbedPane.setIconAt(3, GetIcon("icons/info.png")); - tabbedPane.setToolTipTextAt(3, "Information"); +// tabbedPane.add(infoPanel); +// tabbedPane.setIconAt(3, GetIcon("icons/info.png")); +// tabbedPane.setToolTipTextAt(3, "Information"); /* cTree jTree = new cTree(null); @@ -4781,6 +4794,8 @@ if (muteSlider) return; + Replace(); + int version = versionSlider.getInteger(); if (version != -1 && copy.versionlist[version] != null) diff --git a/Object3D.java b/Object3D.java index cc8b73b..3772174 100644 --- a/Object3D.java +++ b/Object3D.java @@ -5574,6 +5574,11 @@ if (fullname == null) return ""; + if (fullname.pigment != null) + { + return fullname.pigment; + } + // System.out.println("Fullname = " + fullname); // Does not work on Windows due to C: @@ -5586,7 +5591,7 @@ if (split.length == 0) { - return ""; + return fullname.pigment = ""; } if (split.length <= 2) @@ -5594,22 +5599,27 @@ if (fullname.name.endsWith(":")) { // Windows - return fullname.name.substring(0, fullname.name.length()-1); + return fullname.pigment = fullname.name.substring(0, fullname.name.length()-1); } - return split[0]; + return fullname.pigment = split[0]; } // Windows assert(split.length == 4); - return split[0] + ":" + split[1]; + return fullname.pigment = split[0] + ":" + split[1]; } static String GetBump(cTexture fullname) { if (fullname == null) return ""; + + if (fullname.bump != null) + { + return fullname.bump; + } // System.out.println("Fullname = " + fullname); // Does not work on Windows due to C: @@ -5621,12 +5631,12 @@ if (split.length == 0) { - return ""; + return fullname.bump = ""; } if (split.length == 1) { - return ""; + return fullname.bump = ""; } if (split.length == 2) @@ -5634,16 +5644,16 @@ if (fullname.name.endsWith(":")) { // Windows - return ""; + return fullname.bump = ""; } - return split[1]; + return fullname.bump = split[1]; } // Windows assert(split.length == 4); - return split[2] + ":" + split[3]; + return fullname.bump = split[2] + ":" + split[3]; } String GetPigmentTexture() @@ -5726,6 +5736,9 @@ texname = ""; GetTextures().name = texname + ":" + GetBump(GetTextures()); + + GetTextures().pigment = null; + Touch(); } @@ -5798,6 +5811,8 @@ texname = ""; GetTextures().name = Object3D.GetPigment(GetTextures()) + ":" + texname; + + GetTextures().bump = null; Touch(); } @@ -7422,7 +7437,29 @@ // { // CameraPane.Ymax = spoth; // } - spot.translate(32, 32); +// if (CameraPane.Xmin > spot.x) +// { +// CameraPane.Xmin = spot.x; +// } +// if (CameraPane.Xmax < spotw) +// { +// CameraPane.Xmax = spotw; +// } +// if (CameraPane.Ymin > spot.y) +// { +// CameraPane.Ymin = spot.y; +// } +// if (CameraPane.Ymax < spoth) +// { +// CameraPane.Ymax = spoth; +// } + // bonhommes info.g.drawLine(spotw, spoth, spotw, spoth - boundary.height/2); // 15 + //info.g.drawLine(spotw, spoth, spotw - boundary.width/2, spoth); // 15 + spot.translate(32, 0); + clickInfo.g.setColor(Color.yellow); + clickInfo.g.fillRect(spot.x, spot.y, spot.width, spot.height); + + spot.translate(32, 64); spotw = spot.x + spot.width; spoth = spot.y + spot.height; clickInfo.g.setColor(Color.cyan); @@ -7443,28 +7480,7 @@ // { // CameraPane.Ymax = spoth; // } - // bonhommes info.g.drawLine(spotw, spoth, spotw, spoth - boundary.height/2); // 15 - //info.g.drawLine(spotw, spoth, spotw - boundary.width/2, spoth); // 15 - spot.translate(0, -32); - clickInfo.g.setColor(Color.yellow); - clickInfo.g.fillRect(spot.x, spot.y, spot.width, spot.height); clickInfo.g.setColor(Color.green); -// if (CameraPane.Xmin > spot.x) -// { -// CameraPane.Xmin = spot.x; -// } -// if (CameraPane.Xmax < spotw) -// { -// CameraPane.Xmax = spotw; -// } -// if (CameraPane.Ymin > spot.y) -// { -// CameraPane.Ymin = spot.y; -// } -// if (CameraPane.Ymax < spoth) -// { -// CameraPane.Ymax = spoth; -// } clickInfo.g.drawArc(boundary.x + clickInfo.DX, boundary.y + clickInfo.DY, (int)(boundary.width * clickInfo.W), (int)(boundary.height * clickInfo.W), 0, 360); //info.g.drawArc(spot.x, spotw, spot.width/2, boundary.height/2, 0, 360); @@ -7523,12 +7539,14 @@ retval = true; } spot.translate(0, 32); + spot.translate(32, 0); + spot.translate(0, 32); if (spot.contains(clickInfo.x, clickInfo.y)) { hitSomething = hitScale; double scale = 0.005f * clickInfo.camera.Distance(); - double hScale = (double) (clickInfo.x - centerPt.x) / 32; + double hScale = (double) (clickInfo.x - centerPt.x) / 64; double sign = 1; if (hScale < 0) { @@ -7540,7 +7558,7 @@ //hScale = 0.01; } - double vScale = (double) (clickInfo.y - centerPt.y) / 32; + double vScale = (double) (clickInfo.y - centerPt.y) / 64; sign = 1; if (vScale < 0) { @@ -7755,7 +7773,7 @@ break; case hitScale: // scale - double hScale = (double) (clickInfo.x - centerPt.x) / 32; + double hScale = (double) (clickInfo.x - centerPt.x) / 64; double sign = 1; if (hScale < 0) { @@ -7767,7 +7785,7 @@ //hScale = 0.01; } - double vScale = (double) (clickInfo.y - centerPt.y) / 32; + double vScale = (double) (clickInfo.y - centerPt.y) / 64; sign = 1; if (vScale < 0) { diff --git a/ParticleNode.java b/ParticleNode.java index 9977719..d7e2b28 100644 --- a/ParticleNode.java +++ b/ParticleNode.java @@ -356,7 +356,7 @@ if (support != null && link2master) geo = support; - if (live && Globals.isLIVE() && display.DrawMode() == display.SHADOW) // june 2013 + if (live && Globals.isLIVE() && (display.DrawMode() == display.SHADOW || !Globals.RENDERSHADOW)) // june 2013 { Step(); } diff --git a/RandomEditor.java b/RandomEditor.java index 85b7563..864154b 100644 --- a/RandomEditor.java +++ b/RandomEditor.java @@ -9,14 +9,15 @@ class RandomEditor extends ObjEditor implements //ItemListener, ChangeListener, ObjectUI, ActionListener { - cGridBag childPanel; + cGridBag itemPanel; + private cGridBag dampPanel; RandomEditor(RandomNode inBP, GroupEditor callee) { super(inBP,callee); objEditor = callee.GetEditor(); // new ObjEditor(inBP, this, callee); - switchnode = (RandomNode) inBP; + randomnode = (RandomNode) inBP; // parent = p; //SetupUI2(callee.objEditor); @@ -35,7 +36,7 @@ objEditor = callee.GetEditor(); // new ObjEditor(inBP, this, callee); - switchnode = (RandomNode) inBP; + randomnode = (RandomNode) inBP; parent = p; SetupUI2(callee.objEditor); @@ -49,7 +50,7 @@ //objEditor = new ObjEditor(inBP, copy, this, callee); // ?? super.parent = p; - switchnode = (RandomNode) copy; + randomnode = (RandomNode) copy; parent = p; //objEditor.SetupUI(false); // ? @@ -60,24 +61,30 @@ void SetupUI2(ObjEditor oe) { super.SetupUI2(oe); - childPanel = AddSlider(oe.ctrlPanel, "Item: ", 0, switchnode.Size()-1, switchnode.rnd); + itemPanel = AddSlider(oe.ctrlPanel, "Item: ", 0, randomnode.Size()-1, randomnode.rndIndex); - childField = (cNumberSlider)childPanel.getComponent(1); + itemField = (cNumberSlider)itemPanel.getComponent(1); oe.ctrlPanel.Return(); + + oe.ctrlPanel.Return(); + dampPanel = AddSlider(oe.ctrlPanel, "Damp: ", 0, 300, randomnode.damp); + + dampField = (cNumberSlider)dampPanel.getComponent(1); + oe.ctrlPanel.Return(); } void Clear() { objEditor.Clear(); - switchnode = null; + randomnode = null; } public void stateChanged(ChangeEvent e) { //System.out.println("Biparam :: stateChanged"); - if (e.getSource() == childField) + if (e.getSource() == itemField || e.getSource() == dampField) { //System.out.println("#U = " + biparam.uDivs); //System.out.println("#V = " + biparam.vDivs); @@ -94,7 +101,7 @@ void Refresh() { - switchnode.rnd = childField.getInteger(); + randomnode.rndIndex = itemField.getInteger(); refreshContents(); } @@ -102,7 +109,8 @@ /**/ public void applySelf() { - switchnode.rnd = childField.getInteger(); + randomnode.rndIndex = itemField.getInteger(); + randomnode.damp = dampField.getInteger(); // biparam.minUDivs, 99); } /**/ @@ -111,7 +119,8 @@ ObjEditor oe = objEditor; //Remove(childField); - oe.ctrlPanel.remove(this.childPanel); + oe.ctrlPanel.remove(this.itemPanel); + oe.ctrlPanel.remove(this.dampPanel); super.closeUI(); } @@ -126,8 +135,9 @@ objEditor.refreshContents(); } - RandomNode switchnode; - cNumberSlider childField; + RandomNode randomnode; + cNumberSlider itemField; + cNumberSlider dampField; ObjectUI parent; diff --git a/RandomNode.java b/RandomNode.java index 7d0d7b3..81b7d4e 100644 --- a/RandomNode.java +++ b/RandomNode.java @@ -38,7 +38,7 @@ return super.size(); } - int rnd = -1; + int rndIndex = -1; static int globalseed = 0; static int globalseed2 = 0; // mocap frames??? @@ -54,6 +54,35 @@ super.ResetRandom(); } + int damp; + transient int countdamp; + transient int globaloffset; + + void DrawNode(iCameraPane display, Object3D /*Composite*/ root, boolean selected) + { + if (live && Globals.isLIVE() && (display.DrawMode() == display.SHADOW || !Globals.RENDERSHADOW) && + currentframe != Globals.framecount) + { + currentframe = Globals.framecount; + + if (countdamp <= 0) + { + countdamp = damp; + + globaloffset += 1; + } + else + { + if (CameraPane.FAST) + countdamp -= CameraPane.STEP; + else + countdamp--; + } + } + + super.DrawNode(display, root, selected); + } + int firstchoice = 0; // int currentpass = 0; @@ -66,8 +95,8 @@ // if (!link2master && rnd != -1) // new Exception().printStackTrace(); - if (!random && rnd != -1) // freeze current value - return super.reserve(rnd); + if (!random && rndIndex != -1) // freeze current value + return super.reserve(rndIndex); if (firstchoice == 0) firstchoice = (int)(Math.random()*super.Size()) + 1; @@ -91,11 +120,11 @@ } //int tabarnak = super.Size(); - rnd = gcount%super.Size(); // + rndIndex = gcount%super.Size(); // //(int)(Math.random()*super.size()); //globalcount++; - gcount += Grafreed.mix3(rnd+12345,firstchoice*12345,gcount); + gcount += Grafreed.mix3(rndIndex+12345,firstchoice*12345,gcount); gcount &= 0x7fffffff; @@ -105,12 +134,17 @@ globalseed = gcount; if (!random) // aout 2013 link2master) - rnd = whatevercount++; + rndIndex = whatevercount++; - rnd %= super.Size(); + if (live) // aout 2019 + { + rndIndex += globaloffset; + } + + rndIndex %= super.Size(); //GraphreeD.tracein("RESERVE " + this + " = ", i); - Object3D child = super.get(rnd); + Object3D child = super.get(rndIndex); //Applet3D.tracein("RESERVE ", child); child.count--; @@ -139,11 +173,11 @@ // globalcount--; - super.get(rnd).count++; + super.get(rndIndex).count++; //assert (child.count >= 0); if (random) // volatile value - rnd = -1; + rndIndex = -1; } void createEditWindow(GroupEditor callee, boolean newWindow) diff --git a/SwitchEditor.java b/SwitchEditor.java index 19f7e34..3940f44 100644 --- a/SwitchEditor.java +++ b/SwitchEditor.java @@ -11,6 +11,7 @@ { private cGridBag dampPanel; private cGridBag framePanel; + SwitchEditor(SwitchNode inBP, GroupEditor callee) { super(inBP,callee); @@ -86,7 +87,7 @@ frameField = (cNumberSlider)framePanel.getComponent(1); oe.ctrlPanel.Return(); - dampPanel = AddSlider(oe.ctrlPanel, "Damp: ", 0, 500, switchnode.speed); + dampPanel = AddSlider(oe.ctrlPanel, "Damp: ", 0, 300, switchnode.speed); speedField = (cNumberSlider)dampPanel.getComponent(1); oe.ctrlPanel.Return(); diff --git a/SwitchNode.java b/SwitchNode.java index 96c3568..7189ebc 100644 --- a/SwitchNode.java +++ b/SwitchNode.java @@ -41,7 +41,7 @@ switchobject.count = 1; // hide } - transient boolean restarted; + //transient boolean restarted; transient int countspeed; transient boolean toggleneutral; @@ -59,7 +59,7 @@ } if (live && Globals.isLIVE() && display.DrawMode() == display.SHADOW) { - if (countspeed == 0) + if (countspeed <= 0) { countspeed = speed; @@ -92,7 +92,12 @@ } else - countspeed--; + { + if (CameraPane.FAST) + countspeed -= CameraPane.STEP; + else + countspeed--; + } } if (bRep == null) diff --git a/cMaterial.java b/cMaterial.java index 98e4639..fe3d2ea 100644 --- a/cMaterial.java +++ b/cMaterial.java @@ -362,7 +362,7 @@ float diffuse = 0.75f, specular = 0.25f, shininess = 0.75f, shift = 1; float ambient = 0.001f, lightarea = 0.025f, factor = 0.001f, velvet = 0.001f; float sheen = 1f, subsurface = 0.001f, bump = 0.75f, aniso = 0.001f, anisoV = 0.001f; - float cameralight = 0.2f, diffuseness = 0.001f, shadow = 5f, texture = 1f, opacity = 1; + float cameralight = 0.3f, diffuseness = 0.001f, shadow = 5f, texture = 1f, opacity = 1; float fakedepth = 0.5f, shadowbias = 0.01f; // 0.001f; boolean multiply; diff --git a/cTexture.java b/cTexture.java index 6c5d9f7..51caa46 100644 --- a/cTexture.java +++ b/cTexture.java @@ -32,6 +32,9 @@ String name; + transient String pigment; + transient String bump; + int pw, ph; byte[] pigmentdata; -- Gitblit v1.6.2