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