From e36047725ce3217618d4e5807ac7c8769b9e3598 Mon Sep 17 00:00:00 2001 From: Normand Briere <nbriere@noware.ca> Date: Mon, 17 Jun 2019 19:45:55 -0400 Subject: [PATCH] Split pigment bump. --- iCameraPane.java | 8 + CameraPane.java | 125 +++++++++++++++++++++++++++++++ Object3D.java | 73 +++++++++++++++++- Composite.java | 24 +++++ 4 files changed, 220 insertions(+), 10 deletions(-) diff --git a/CameraPane.java b/CameraPane.java index cfdc3d3..99e2648 100644 --- a/CameraPane.java +++ b/CameraPane.java @@ -7921,6 +7921,64 @@ ReleaseTexture(pigment, false); } + public void ReleasePigmentTexture(cTexture tex) // INTERFACE + { + if (/*tex == null ||*/ ambientOcclusion ) // || !textureon) + { + return; + } + + if (tex == null) + { + ReleaseTexture(null, false); + return; + } + + String pigment = Object3D.GetPigment(tex); + + if (!tex.equals(":") && !tex.equals(DEFAULT_TEXTURES)) + { + // System.out.print("RELEASE +++++++++++++++ pigment = " + pigment); + // System.out.println("; bump = " + bump); + } + + if (pigment.equals("")) + { + pigment = null; + } + + ReleaseTexture(pigment, false); + } + + public void ReleaseBumpTexture(cTexture tex) // INTERFACE + { + if (/*tex == null ||*/ ambientOcclusion ) // || !textureon) + { + return; + } + + if (tex == null) + { + ReleaseTexture(null, true); + return; + } + + String bump = Object3D.GetBump(tex); + + if (!tex.equals(":") && !tex.equals(DEFAULT_TEXTURES)) + { + // System.out.print("RELEASE +++++++++++++++ pigment = " + pigment); + // System.out.println("; bump = " + bump); + } + + if (bump.equals("")) + { + bump = null; + } + + ReleaseTexture(bump, true); + } + void ReleaseTexture(String tex, boolean bump) { if (// DrawMode() != 0 || /*tex == null ||*/ @@ -8069,6 +8127,73 @@ return; // true; } + /*boolean*/ public void BindPigmentTexture(cTexture tex, int resolution) throws Exception // INTERFACE + { + if (// DrawMode() != 0 || /*tex == null ||*/ + ambientOcclusion ) // || !textureon) + { + return; // false; + } + + if (tex == null) + { + BindTexture(null,false,resolution); + return; + } + + String pigment = Object3D.GetPigment(tex); + + usedtextures.put(pigment, pigment); + + if (!tex.equals(":") && !tex.equals(DEFAULT_TEXTURES)) + { + // System.out.print("BIND +++++++++++++++ pigment = " + pigment); + // System.out.println("; bump = " + bump); + } + + if (pigment.equals("")) + { + pigment = null; + } + + GetGL().glActiveTexture(GetGL().GL_TEXTURE0); + BindTexture(pigment, false, resolution); + } + + /*boolean*/ public void BindBumpTexture(cTexture tex, int resolution) throws Exception // INTERFACE + { + if (// DrawMode() != 0 || /*tex == null ||*/ + ambientOcclusion ) // || !textureon) + { + return; // false; + } + + if (tex == null) + { + BindTexture(null,true,resolution); + return; + } + + String bump = Object3D.GetBump(tex); + + usedtextures.put(bump, bump); + + if (!tex.equals(":") && !tex.equals(DEFAULT_TEXTURES)) + { + // System.out.print("BIND +++++++++++++++ pigment = " + pigment); + // System.out.println("; bump = " + bump); + } + + if (bump.equals("")) + { + bump = null; + } + + GetGL().glActiveTexture(GetGL().GL_TEXTURE2); + BindTexture(bump, true, resolution); + GetGL().glActiveTexture(GetGL().GL_TEXTURE0); + } + java.util.HashSet<String> missingTextures = new java.util.HashSet<String>(); private boolean FileExists(String tex) diff --git a/Composite.java b/Composite.java index 2a525ae..9244c31 100644 --- a/Composite.java +++ b/Composite.java @@ -867,15 +867,29 @@ tex = GetTextures(); } + boolean failedPigment = false; + boolean failedBump = false; + try { - display.BindTextures(tex, texres); + display.BindPigmentTexture(tex, texres); } catch (Exception e) { System.err.println("FAILED: " + this); + failedPigment = true; } - + + try + { + display.BindBumpTexture(tex, texres); + } + catch (Exception e) + { + //System.err.println("FAILED: " + this); + failedBump = true; + } + if (//true) // new NORMAND touched || softtouched) { @@ -937,7 +951,11 @@ } } - display.ReleaseTextures(tex); + if (!failedBump) + display.ReleaseBumpTexture(tex); + + if (!failedPigment) + display.ReleasePigmentTexture(tex); } void Reset0() diff --git a/Object3D.java b/Object3D.java index 17916d8..d6e0e59 100644 --- a/Object3D.java +++ b/Object3D.java @@ -4351,6 +4351,55 @@ } } + void RepairSOV() + { + if (blockloop) + return; + + String texname = this.GetPigmentTexture(); + + if (texname.startsWith("sov")) + { + String[] s = texname.split("/"); + + String[] sname = s[1].split("Color.pn"); + + texname = sname[0]; + + if (sname.length > 1) + { + texname += "Color.jpg"; + } + + this.SetPigmentTexture("sov/" + texname); + } + + texname = this.GetBumpTexture(); + + if (texname.startsWith("sov")) + { + String[] s = texname.split("/"); + + String[] sname = s[1].split("Bump.pn"); + + texname = sname[0]; + + if (sname.length > 1) + { + texname += "Bump.jpg"; + } + + this.SetBumpTexture("sov/" + texname); + } + + for (int i=0; i<Size(); i++) + { + blockloop = true; + get(i).RepairSOV(); + blockloop = false; + } + } + void RepairTexture() { if (this instanceof FileObject || blockloop) @@ -5846,16 +5895,27 @@ tex = GetTextures(); } - boolean failed = false; + boolean failedPigment = false; + boolean failedBump = false; try { - display.BindTextures(tex, texres); + display.BindPigmentTexture(tex, texres); } catch (Exception e) { System.err.println("FAILED: " + this); - failed = true; + failedPigment = true; + } + + try + { + display.BindBumpTexture(tex, texres); + } + catch (Exception e) + { + //System.err.println("FAILED: " + this); + failedBump = true; } if (!compiled) @@ -5878,8 +5938,11 @@ } } - if (!failed) - display.ReleaseTextures(tex); + if (!failedBump) + display.ReleaseBumpTexture(tex); + + if (!failedPigment) + display.ReleasePigmentTexture(tex); display.PopMaterial(this, selected); } diff --git a/iCameraPane.java b/iCameraPane.java index ccb0763..8fef1f6 100644 --- a/iCameraPane.java +++ b/iCameraPane.java @@ -55,8 +55,12 @@ void DrawString(Object3D obj); - void BindTextures(cTexture tex, int resolution) throws Exception; - void ReleaseTextures(cTexture tex); + //void BindTextures(cTexture tex, int resolution) throws Exception; + //void ReleaseTextures(cTexture tex); + void BindPigmentTexture(cTexture tex, int resolution) throws Exception; + void BindBumpTexture(cTexture tex, int resolution) throws Exception; + void ReleasePigmentTexture(cTexture tex); + void ReleaseBumpTexture(cTexture tex); void DrawFace(Object3D obj, Vertex pv, Vertex qv, Vertex rv, Face face); -- Gitblit v1.6.2