From de4f66e0239a736bce24e09c9a0b49b5bb92d84b Mon Sep 17 00:00:00 2001 From: Normand Briere <nbriere@noware.ca> Date: Tue, 23 Jul 2019 02:41:35 -0400 Subject: [PATCH] Min shader. --- Object3D.java | 220 +++++++++++++++++++++++++++++++++++++++++++++++------- 1 files changed, 191 insertions(+), 29 deletions(-) diff --git a/Object3D.java b/Object3D.java index 7b52765..1b9b4c0 100644 --- a/Object3D.java +++ b/Object3D.java @@ -24,11 +24,14 @@ private UUID uuid = UUID.randomUUID(); - // TEMPORARY for mocap undo - mocap.reader.BVHReader.BVHResult bvh; - Object3D skeleton; + // TEMPORARY for mocap undo. No need to be transient. + mocap.reader.BVHReader.BVHResult savebvh; + Object3D saveskeleton; // + byte[] versions[]; + int versionindex = -1; + ScriptNode scriptnode; void InitOthers() @@ -170,24 +173,35 @@ void ExtractBigData(java.util.Hashtable<java.util.UUID, Object3D> hashtable) { + Object3D o; + if (hashtable.containsKey(GetUUID())) { - Object3D o = hashtable.get(GetUUID()); + o = hashtable.get(GetUUID()); Grafreed.Assert(this.bRep == o.bRep); - if (this.bRep != null) - assert(this.bRep.support == o.transientrep); + //if (this.bRep != null) + // assert(this.bRep.support == o.transientrep); + if (this.support != null) + assert(this.support.bRep == o.transientrep); + } + else + { + o = new Object3D("copy of " + this.name); - return; + hashtable.put(GetUUID(), o); } - Object3D o = new Object3D(); - - hashtable.put(GetUUID(), o); - - for (int i=0; i<Size(); i++) + if (!blockloop) { - get(i).ExtractBigData(hashtable); + blockloop = true; + + for (int i=0; i<Size(); i++) + { + get(i).ExtractBigData(hashtable); + } + + blockloop = false; } ExtractBigData(o); @@ -195,11 +209,26 @@ void ExtractBigData(Object3D o) { + if (o.bRep != null) + Grafreed.Assert(o.bRep == this.bRep); + o.bRep = this.bRep; - if (this.bRep != null) +// July 2019 if (this.bRep != null) +// { +// o.transientrep = this.bRep.support; +// o.bRep.support = null; +// } + o.selection = this.selection; + o.versions = this.versions; + o.versionindex = this.versionindex; + + if (this.support != null) { - o.transientrep = this.bRep.support; - o.bRep.support = null; + if (o.transientrep != null) + Grafreed.Assert(o.transientrep == this.support.bRep); + + o.transientrep = this.support.bRep; + this.support.bRep = null; } // o.support = this.support; @@ -223,19 +252,35 @@ RestoreBigData(o); - hashtable.remove(GetUUID()); + if (blockloop) + return; + + blockloop = true; + + //hashtable.remove(GetUUID()); for (int i=0; i<Size(); i++) { get(i).RestoreBigData(hashtable); } + + blockloop = false; } void RestoreBigData(Object3D o) { this.bRep = o.bRep; - if (this.bRep != null) - this.bRep.support = o.transientrep; + if (this.support != null && o.transientrep != null) + { + this.support.bRep = o.transientrep; + } + + this.selection = o.selection; + + this.versions = o.versions; + this.versionindex = o.versionindex; +// July 2019 if (this.bRep != null) +// this.bRep.support = o.transientrep; // this.support = o.support; // this.fileparent = o.fileparent; } @@ -381,6 +426,7 @@ } boolean live = false; + transient boolean keepdontselect; boolean dontselect = false; boolean hide = false; boolean link2master = false; // performs reset support/master at each frame @@ -881,7 +927,7 @@ if (marked && Globals.isLIVE() && live && //TEMP21aug2018 - (Globals.DrawMode() == iCameraPane.SHADOW || !Globals.RENDERSHADOW) && + (Globals.DrawMode() == iCameraPane.SHADOW || !Globals.RENDERSHADOW || !Globals.COMPUTESHADOWWHENLIVE) && currentframe != Globals.framecount) { currentframe = Globals.framecount; @@ -966,6 +1012,7 @@ if (material == null || material.multiply) return true; + // Transparent objects are dynamic because we have to sort the triangles. return material.opacity > 0.99; } @@ -1366,6 +1413,7 @@ toParent = LA.newMatrix(); fromParent = LA.newMatrix(); } + LA.matCopy(other.toParent, toParent); LA.matCopy(other.fromParent, fromParent); @@ -2387,6 +2435,10 @@ } */ } + else + { + //((ObjEditor)editWindow).SetupUI2(null); + } } void createEditWindow(GroupEditor callee, boolean newWindow) //, boolean root) @@ -2428,6 +2480,14 @@ { editWindow.refreshContents(); } + else + { + if (manipWindow != null) + { + manipWindow.refreshContents(); + } + } + //if (parent != null) //parent.refreshEditWindow(); } @@ -3058,7 +3118,7 @@ { if (bRep != null) { - bRep.GenerateNormalsMINE(); + bRep.MergeNormals(); //.GenerateNormalsMINE(); Touch(); } } @@ -4958,6 +5018,14 @@ } } + ObjEditor GetWindow() + { + if (editWindow != null) + return editWindow; + + return manipWindow; + } + cTreePath Select(int indexcount, boolean deselect) { if (hide || dontselect) @@ -4994,10 +5062,11 @@ if (leaf != null) { cTreePath tp = new cTreePath(this, leaf); - if (editWindow != null) + ObjEditor window = GetWindow(); + if (window != null) { //System.out.println("editWindow = " + editWindow + " vs " + this); - editWindow.Select(tp, deselect, true); + window.Select(tp, deselect, true); } return tp; @@ -5014,6 +5083,7 @@ if (child == null) continue; + if (child.HasTransparency() && child.size() != 0) { cTreePath leaf = child.Select(indexcount, deselect); @@ -5023,9 +5093,10 @@ if (leaf != null) { cTreePath tp = new cTreePath(this, leaf); - if (editWindow != null) + ObjEditor window = GetWindow(); + if (window != null) { - editWindow.Select(tp, deselect, true); + window.Select(tp, deselect, true); } return tp; @@ -5350,6 +5421,51 @@ blockloop = false; } + void ResetSelectable() + { + if (blockloop) + return; + + blockloop = true; + + keepdontselect = dontselect; + dontselect = true; + + Object3D child; + int nb = Size(); + for (int i = 0; i < nb; i++) + { + child = (Object3D) get(i); + if (child == null) + continue; + child.ResetSelectable(); + } + + blockloop = false; + } + + void RestoreSelectable() + { + if (blockloop) + return; + + blockloop = true; + + dontselect = keepdontselect; + + Object3D child; + int nb = Size(); + for (int i = 0; i < nb; i++) + { + child = (Object3D) get(i); + if (child == null) + continue; + child.RestoreSelectable(); + } + + blockloop = false; + } + boolean IsSelected() { if (parent == null) @@ -5659,6 +5775,38 @@ } } + void EmbedTextures(boolean embed) + { + if (blockloop) + return; + + //if (GetTextures() != null) + if (embed) + CameraPane.EmbedTextures(GetTextures()); + else + { + GetTextures().pigmentdata = null; + GetTextures().bumpdata = null; + GetTextures().pw = 0; + GetTextures().ph = 0; + GetTextures().bw = 0; + GetTextures().bh = 0; + } + + int nb = Size(); + for (int i = 0; i < nb; i++) + { + Object3D child = (Object3D) get(i); + + if (child == null) + continue; + + blockloop = true; + child.EmbedTextures(embed); + blockloop = false; + } + } + void draw(iCameraPane display, Object3D /*Composite*/ root, boolean selected, boolean blocked) { Draw(display, root, selected, blocked); @@ -5746,7 +5894,7 @@ support = support; //boolean usecalllists = IsStatic() && GetBRep() != null && (!CameraPane.SUPPORT || support == null || !link2master); // !(this instanceof cSpring) && !(this instanceof BezierPatch); - boolean usecalllists = IsLive(); // IsStatic() && GetBRep() != null && (!CameraPane.SUPPORT || support == null) && !link2master; // !(this instanceof cSpring) && !(this instanceof BezierPatch); + boolean usecalllists = !IsLive(); // IsStatic() && GetBRep() != null && (!CameraPane.SUPPORT || support == null) && !link2master; // !(this instanceof cSpring) && !(this instanceof BezierPatch); if (!usecalllists && bRep != null && bRep.displaylist > 0) { @@ -5767,7 +5915,7 @@ if (!selectmode && //display.DrawMode() != display.SELECTION && //(touched || (bRep != null && bRep.displaylist <= 0))) - (Globals.isLIVE() || touched && (bRep != null && bRep.displaylist <= 0))) + (Globals.isLIVE() && Globals.COMPUTESHADOWWHENLIVE || touched && Globals.COMPUTESHADOWWHENLIVE)) // || (bRep != null && bRep.displaylist <= 0))) { Globals.lighttouched = true; } // all panes... @@ -5899,6 +6047,7 @@ if (GetBRep() != null) { display.NextIndex(); + // vertex color conflict : gl.glCallList(list); DrawNode(display, root, selected); if (this instanceof BezierPatch) @@ -6359,6 +6508,11 @@ // dec 2012 new Exception().printStackTrace(); return; + } + + if (dontselect) + { + //bRep.GenerateNormalsMINE(); } display.DrawGeometry(bRep, flipV, selectmode); @@ -7251,8 +7405,8 @@ // { // CameraPane.Ymax = spoth; // } - info.g.drawArc(boundary.x, boundary.y, - boundary.width, boundary.height, 0, 360); + info.g.drawArc(boundary.x + info.DX, boundary.y + info.DY, + (int)(boundary.width * info.W), (int)(boundary.height * info.W), 0, 360); //info.g.drawArc(spot.x, spotw, spot.width/2, boundary.height/2, 0, 360); // if (CameraPane.Xmin > boundary.x) // { @@ -7796,6 +7950,10 @@ editWindow = null; } // ? } + else + { + //editWindow.closeUI(); + } } boolean root; // patch for edit windows @@ -7953,6 +8111,10 @@ } transient ObjEditor editWindow; + transient ObjEditor manipWindow; + + transient boolean pinned; + transient ObjectUI objectUI; public static int povDepth = 0; private static cVector tbMin = new cVector(); -- Gitblit v1.6.2