From c4fa1ba7248b66ba03b51fc1487865a98073e9fd Mon Sep 17 00:00:00 2001 From: Jerome St-Louis Date: Tue, 2 Aug 2016 20:20:30 -0400 Subject: [PATCH] ecere/gfx/3D/Object: computeLightVector flag to avoid always recomputing uselessly --- ecere/src/gfx/3D/Object.ec | 2 ++ ecere/src/gfx/3D/models/Object3DSFormat.ec | 4 ++++ ecere/src/gfx/Display.ec | 2 +- 3 files changed, 7 insertions(+), 1 deletion(-) diff --git a/ecere/src/gfx/3D/Object.ec b/ecere/src/gfx/3D/Object.ec index 80c7446..186881f 100644 --- a/ecere/src/gfx/3D/Object.ec +++ b/ecere/src/gfx/3D/Object.ec @@ -21,6 +21,7 @@ public class ObjectFlags { public: bool root:1, viewSpace:1, ownMesh:1, translucent:1, flipWindings:1, keysLoaded:1, transform:1, mesh:1, light:1, camera:1, localMatrixSet:1; + bool computeLightVectors:1; int hierarchy:16:16; }; @@ -797,6 +798,7 @@ public: { nVertices += child.mesh.nVertices; flags |= child.mesh.flags; + this.flags.computeLightVectors |= child.flags.computeLightVectors; } } diff --git a/ecere/src/gfx/3D/models/Object3DSFormat.ec b/ecere/src/gfx/3D/models/Object3DSFormat.ec index e7a2ff4..c85b210 100644 --- a/ecere/src/gfx/3D/models/Object3DSFormat.ec +++ b/ecere/src/gfx/3D/models/Object3DSFormat.ec @@ -380,6 +380,7 @@ static void ComputeNormals(Mesh mesh, FileInfo * info, Object object) int nNewVertices; Vector3Df * mVertices; double cutOff = cos(Degrees { SMOOTH_CUTOFF }); + bool hasBumpMap = false; Map sharedVertices { }; Map vertexMap { }; @@ -407,6 +408,8 @@ static void ComputeNormals(Mesh mesh, FileInfo * info, Object object) { Face * face = &faces[c]; int i; + if(face->material && face->material.bumpMap) + hasBumpMap = true; // Zero space points if(!mVertices[face->indices[0]].OnCompare(mVertices[face->indices[1]]) && @@ -698,6 +701,7 @@ static void ComputeNormals(Mesh mesh, FileInfo * info, Object object) } mesh.Unlock({ normals = true, tangents = true }); + object.flags.computeLightVectors = hasBumpMap; // Free all the temporary stuff diff --git a/ecere/src/gfx/Display.ec b/ecere/src/gfx/Display.ec index f6a4a5f..217a181 100644 --- a/ecere/src/gfx/Display.ec +++ b/ecere/src/gfx/Display.ec @@ -947,7 +947,7 @@ public: displaySystem.driver.PushMatrix(this); #if ENABLE_GL_FFP - if(object.mesh.tangents && object.mesh.normals) + if(object.mesh.tangents && object.mesh.normals && object.flags.computeLightVectors) { Mesh mesh = object.mesh; if(!glCaps_shaders) -- 1.8.3.1