Prechádzať zdrojové kódy

Shader parameter code cleanup.
Slight optimization to defining polyhedrons from a bounding box or a frustum.

Lasse Öörni 14 rokov pred
rodič
commit
80345e3e30

+ 2 - 10
Engine/Graphics/Direct3D9/D3D9Graphics.cpp

@@ -912,11 +912,7 @@ void Graphics::SetShaders(ShaderVariation* vs, ShaderVariation* ps)
             // Update the parameter-to-register mappings
             const HashMap<StringHash, ShaderParameter>& parameters = vs->GetParameters();
             for (HashMap<StringHash, ShaderParameter>::ConstIterator i = parameters.Begin(); i != parameters.End(); ++i)
-            {
-                HashMap<StringHash, ShaderParameter>::Iterator j = shaderParameters_.Find(i->first_);
-                if (j != parameters.End())
-                    j->second_.register_ = i->second_.register_;
-            }
+                shaderParameters_[i->first_].register_ = i->second_.register_;
         }
         else
         {
@@ -963,11 +959,7 @@ void Graphics::SetShaders(ShaderVariation* vs, ShaderVariation* ps)
             
             const HashMap<StringHash, ShaderParameter>& parameters = ps->GetParameters();
             for (HashMap<StringHash, ShaderParameter>::ConstIterator i = parameters.Begin(); i != parameters.End(); ++i)
-            {
-                HashMap<StringHash, ShaderParameter>::Iterator j = shaderParameters_.Find(i->first_);
-                if (j != parameters.End())
-                    j->second_.register_ = i->second_.register_;
-            }
+                shaderParameters_[i->first_].register_ = i->second_.register_;
         }
         else
         {

+ 33 - 16
Engine/Math/Polyhedron.cpp

@@ -31,8 +31,6 @@ Polyhedron::~Polyhedron()
 
 void Polyhedron::Define(const BoundingBox& box)
 {
-    Clear();
-    
     Vector3 vertices[8];
     vertices[0] = box.min_;
     vertices[1] = Vector3(box.max_.x_, box.min_.y_, box.min_.z_);
@@ -43,26 +41,26 @@ void Polyhedron::Define(const BoundingBox& box)
     vertices[6] = Vector3(box.min_.x_, box.max_.y_, box.max_.z_);
     vertices[7] = box.max_;
     
-    AddFace(vertices[3], vertices[7], vertices[5], vertices[1]);
-    AddFace(vertices[6], vertices[2], vertices[0], vertices[4]);
-    AddFace(vertices[6], vertices[7], vertices[3], vertices[2]);
-    AddFace(vertices[1], vertices[5], vertices[4], vertices[0]);
-    AddFace(vertices[7], vertices[6], vertices[4], vertices[5]);
-    AddFace(vertices[2], vertices[3], vertices[1], vertices[0]);
+    faces_.Resize(6);
+    SetFace(0, vertices[3], vertices[7], vertices[5], vertices[1]);
+    SetFace(1, vertices[6], vertices[2], vertices[0], vertices[4]);
+    SetFace(2, vertices[6], vertices[7], vertices[3], vertices[2]);
+    SetFace(3, vertices[1], vertices[5], vertices[4], vertices[0]);
+    SetFace(4, vertices[7], vertices[6], vertices[4], vertices[5]);
+    SetFace(5, vertices[2], vertices[3], vertices[1], vertices[0]);
 }
 
 void Polyhedron::Define(const Frustum& frustum)
 {
-    Clear();
-    
     const Vector3* vertices = frustum.vertices_;
     
-    AddFace(vertices[0], vertices[4], vertices[5], vertices[1]);
-    AddFace(vertices[7], vertices[3], vertices[2], vertices[6]);
-    AddFace(vertices[7], vertices[4], vertices[0], vertices[3]);
-    AddFace(vertices[1], vertices[5], vertices[6], vertices[2]);
-    AddFace(vertices[4], vertices[7], vertices[6], vertices[5]);
-    AddFace(vertices[3], vertices[0], vertices[1], vertices[2]);
+    faces_.Resize(6);
+    SetFace(0, vertices[0], vertices[4], vertices[5], vertices[1]);
+    SetFace(1, vertices[7], vertices[3], vertices[2], vertices[6]);
+    SetFace(2, vertices[7], vertices[4], vertices[0], vertices[3]);
+    SetFace(3, vertices[1], vertices[5], vertices[6], vertices[2]);
+    SetFace(4, vertices[4], vertices[7], vertices[6], vertices[5]);
+    SetFace(5, vertices[3], vertices[0], vertices[1], vertices[2]);
 }
 
 void Polyhedron::AddFace(const Vector3& v0, const Vector3& v1, const Vector3& v2)
@@ -284,3 +282,22 @@ Polyhedron Polyhedron::Transformed(const Matrix3x4& transform) const
     
     return ret;
 }
+
+void Polyhedron::SetFace(unsigned index, const Vector3& v0, const Vector3& v1, const Vector3& v2)
+{
+    Vector<Vector3>& face = faces_[index];
+    face.Resize(3);
+    face[0] = v0;
+    face[1] = v1;
+    face[2] = v2;
+}
+
+void Polyhedron::SetFace(unsigned index, const Vector3& v0, const Vector3& v1, const Vector3& v2, const Vector3& v3)
+{
+    Vector<Vector3>& face = faces_[index];
+    face.Resize(4);
+    face[0] = v0;
+    face[1] = v1;
+    face[2] = v2;
+    face[3] = v3;
+}

+ 4 - 0
Engine/Math/Polyhedron.h

@@ -99,6 +99,10 @@ public:
     Vector<Vector<Vector3> > faces_;
     
 private:
+    /// Set a triangle face by index.
+    void SetFace(unsigned index, const Vector3& v0, const Vector3& v1, const Vector3& v2);
+    /// Set a quadrilateral face by index.
+    void SetFace(unsigned index, const Vector3& v0, const Vector3& v1, const Vector3& v2, const Vector3& v3);
     /// Internal vector for clipped vertices.
     Vector<Vector3> clippedVertices_;
     /// Internal vector for the new face being constructed.