Browse Source

Refactored temporary shadow camera creation.

Lasse Öörni 14 years ago
parent
commit
593ce78eaf
3 changed files with 12 additions and 28 deletions
  1. 8 17
      Engine/Graphics/Renderer.cpp
  2. 4 10
      Engine/Graphics/Renderer.h
  3. 0 1
      Engine/Scene/Component.h

+ 8 - 17
Engine/Graphics/Renderer.cpp

@@ -236,7 +236,6 @@ Renderer::Renderer(Context* context) :
     defaultZone_(new Zone(context)),
     numViews_(0),
     numShadowCameras_(0),
-    numTempNodes_(0),
     textureAnisotropy_(4),
     textureFilterMode_(FILTER_TRILINEAR),
     textureQuality_(QUALITY_HIGH),
@@ -549,7 +548,6 @@ void Renderer::Update(float timeStep)
     frame_.timeStep_ = timeStep;
     frame_.camera_ = 0;
     numShadowCameras_ = 0;
-    numTempNodes_ = 0;
     updateOctrees_.Clear();
     
     // Reload shaders if needed
@@ -1032,29 +1030,22 @@ void Renderer::SetBatchShaders(Batch& batch, Technique* technique, Pass* pass, b
     }
 }
 
-
 Camera* Renderer::CreateShadowCamera()
 {
-    if (numShadowCameras_ >= shadowCameraStore_.Size())
-        shadowCameraStore_.Push(SharedPtr<Camera>(new Camera(context_)));
-    Camera* camera = shadowCameraStore_[numShadowCameras_];
-    camera->SetNode(CreateTempNode());
+    if (numShadowCameras_ >= shadowCameraNodes_.Size())
+    {
+        SharedPtr<Node> newNode(new Node(context_));
+        newNode->CreateComponent<Camera>();
+        shadowCameraNodes_.Push(newNode);
+    }
+    
+    Camera* camera = shadowCameraNodes_[numShadowCameras_]->GetComponent<Camera>();
     camera->SetOrthographic(false);
     camera->SetZoom(1.0f);
     ++numShadowCameras_;
     return camera;
 }
 
-Node* Renderer::CreateTempNode()
-{
-    if (numTempNodes_ >= tempNodeStore_.Size())
-        tempNodeStore_.Push(SharedPtr<Node>(new Node(context_)));
-    Node* node = tempNodeStore_[numTempNodes_];
-    
-    ++numTempNodes_;
-    return node;
-}
-
 bool Renderer::ResizeInstancingBuffer(unsigned numInstances)
 {
     if (!instancingBuffer_ || !dynamicInstancing_)

+ 4 - 10
Engine/Graphics/Renderer.h

@@ -248,10 +248,8 @@ public:
     ShaderVariation* GetShader(const String& name, const String& extension, bool checkExists) const;
     /// Choose shaders for a batch.
     void SetBatchShaders(Batch& batch, Technique* technique, Pass* pass, bool allowShadows = true);
-    /// Allocate a shadow camera and a scene node for it.
+    /// Allocate a temporary shadow camera and a scene node for it.
     Camera* CreateShadowCamera();
-    /// Allocate a temporary scene node for attaching a split light or a shadow camera.
-    Node* CreateTempNode();
     /// Ensure sufficient size of the instancing vertex buffer. Return true if successful.
     bool ResizeInstancingBuffer(unsigned numInstances);
     /// Reset shadow map allocation counts.
@@ -309,10 +307,8 @@ private:
     SharedPtr<ShaderVariation> stencilVS_;
     /// Stencil rendering pixel shader.
     SharedPtr<ShaderVariation> stencilPS_;
-    /// Reusable shadow cameras.
-    Vector<SharedPtr<Camera> > shadowCameraStore_;
-    /// Reusable temporary scene nodes.
-    Vector<SharedPtr<Node> > tempNodeStore_;
+    /// Reusable scene nodes with shadow camera components.
+    Vector<SharedPtr<Node> > shadowCameraNodes_;
     /// Occlusion buffers.
     HashMap<int, SharedPtr<OcclusionBuffer> > occlusionBuffers_;
     /// Shadow maps by resolution.
@@ -367,10 +363,8 @@ private:
     float occluderSizeThreshold_;
     /// Number of views.
     unsigned numViews_;
-    /// Number of shadow cameras.
+    /// Number of temporary shadow cameras.
     unsigned numShadowCameras_;
-    /// Number of temporary scene nodes.
-    unsigned numTempNodes_;
     /// Number of primitives (3D geometry only.)
     unsigned numPrimitives_;
     /// Number of batches (3D geometry only.)

+ 0 - 1
Engine/Scene/Component.h

@@ -34,7 +34,6 @@ class Component : public Serializable
     OBJECT(Component);
     
     friend class Node;
-    friend class Renderer;
     friend class Scene;
     
 public: