Browse Source

Do not create a new directional light when drawing a fullscreen quad.

Lasse Öörni 13 years ago
parent
commit
0c98c92182
3 changed files with 10 additions and 4 deletions
  1. 3 0
      Engine/Graphics/Renderer.cpp
  2. 4 0
      Engine/Graphics/Renderer.h
  3. 3 4
      Engine/Graphics/View.cpp

+ 3 - 0
Engine/Graphics/Renderer.cpp

@@ -262,6 +262,7 @@ OBJECTTYPESTATIC(Renderer);
 Renderer::Renderer(Context* context) :
 Renderer::Renderer(Context* context) :
     Object(context),
     Object(context),
     defaultZone_(new Zone(context)),
     defaultZone_(new Zone(context)),
+    quadDirLight_(new Light(context)),
     numViews_(0),
     numViews_(0),
     numShadowCameras_(0),
     numShadowCameras_(0),
     numOcclusionBuffers_(0),
     numOcclusionBuffers_(0),
@@ -291,6 +292,8 @@ Renderer::Renderer(Context* context) :
     SubscribeToEvent(E_GRAPHICSFEATURES, HANDLER(Renderer, HandleGraphicsFeatures));
     SubscribeToEvent(E_GRAPHICSFEATURES, HANDLER(Renderer, HandleGraphicsFeatures));
     SubscribeToEvent(E_RENDERUPDATE, HANDLER(Renderer, HandleRenderUpdate));
     SubscribeToEvent(E_RENDERUPDATE, HANDLER(Renderer, HandleRenderUpdate));
     
     
+    quadDirLight_->SetLightType(LIGHT_DIRECTIONAL);
+    
     // Try to initialize right now, but skip if screen mode is not yet set
     // Try to initialize right now, but skip if screen mode is not yet set
     Initialize();
     Initialize();
     SetNumViewports(1);
     SetNumViewports(1);

+ 4 - 0
Engine/Graphics/Renderer.h

@@ -260,6 +260,8 @@ public:
     unsigned GetNumOccluders(bool allViews = false) const;
     unsigned GetNumOccluders(bool allViews = false) const;
     /// Return the default zone.
     /// Return the default zone.
     Zone* GetDefaultZone() const { return defaultZone_; }
     Zone* GetDefaultZone() const { return defaultZone_; }
+    /// Return the directional light for fullscreen quad rendering.
+    Light* GetQuadDirLight() const { return quadDirLight_; }
     /// Return the default material.
     /// Return the default material.
     Material* GetDefaultMaterial() const { return defaultMaterial_; }
     Material* GetDefaultMaterial() const { return defaultMaterial_; }
     /// Return the default range attenuation texture.
     /// Return the default range attenuation texture.
@@ -368,6 +370,8 @@ private:
     WeakPtr<ResourceCache> cache_;
     WeakPtr<ResourceCache> cache_;
     /// Default zone.
     /// Default zone.
     SharedPtr<Zone> defaultZone_;
     SharedPtr<Zone> defaultZone_;
+    /// Directional light for drawing fullscreen quads.
+    SharedPtr<Light> quadDirLight_;
     /// Directional light quad geometry.
     /// Directional light quad geometry.
     SharedPtr<Geometry> dirLightGeometry_;
     SharedPtr<Geometry> dirLightGeometry_;
     /// Spot light volume geometry.
     /// Spot light volume geometry.

+ 3 - 4
Engine/Graphics/View.cpp

@@ -2458,16 +2458,15 @@ void View::SetupLightVolumeBatch(Batch& batch)
 
 
 void View::DrawFullscreenQuad(Camera* camera, bool nearQuad)
 void View::DrawFullscreenQuad(Camera* camera, bool nearQuad)
 {
 {
-    Light quadDirLight(context_);
-    quadDirLight.SetLightType(LIGHT_DIRECTIONAL);
-    Matrix3x4 model(quadDirLight.GetDirLightTransform(camera, nearQuad));
+    Light* quadDirLight = renderer_->GetQuadDirLight();
+    Matrix3x4 model(quadDirLight->GetDirLightTransform(camera, nearQuad));
     
     
     graphics_->SetCullMode(CULL_NONE);
     graphics_->SetCullMode(CULL_NONE);
     graphics_->SetShaderParameter(VSP_MODEL, model);
     graphics_->SetShaderParameter(VSP_MODEL, model);
     graphics_->SetShaderParameter(VSP_VIEWPROJ, camera->GetProjection());
     graphics_->SetShaderParameter(VSP_VIEWPROJ, camera->GetProjection());
     graphics_->ClearTransformSources();
     graphics_->ClearTransformSources();
     
     
-    renderer_->GetLightGeometry(&quadDirLight)->Draw(graphics_);
+    renderer_->GetLightGeometry(quadDirLight)->Draw(graphics_);
 }
 }
 
 
 void View::RenderShadowMap(const LightBatchQueue& queue)
 void View::RenderShadowMap(const LightBatchQueue& queue)