Browse Source

Fixed shadow map scissor getting always disabled.

Lasse Öörni 14 years ago
parent
commit
a66b1fc648
2 changed files with 7 additions and 6 deletions
  1. 6 5
      Engine/Graphics/View.cpp
  2. 1 1
      Engine/Graphics/View.h

+ 6 - 5
Engine/Graphics/View.cpp

@@ -2110,7 +2110,7 @@ void View::DrawSplitLightToStencil(Camera& camera, Light* light, bool clear)
     }
     }
 }
 }
 
 
-void View::RenderBatchQueue(const BatchQueue& queue, bool useScissor, bool useLightBuffer)
+void View::RenderBatchQueue(const BatchQueue& queue, bool useScissor, bool useLightBuffer, bool disableScissor)
 {
 {
     Texture2D* diffBuffer = 0;
     Texture2D* diffBuffer = 0;
     VertexBuffer* instancingBuffer = 0;
     VertexBuffer* instancingBuffer = 0;
@@ -2119,7 +2119,8 @@ void View::RenderBatchQueue(const BatchQueue& queue, bool useScissor, bool useLi
     if (renderer_->GetDynamicInstancing())
     if (renderer_->GetDynamicInstancing())
         instancingBuffer = renderer_->instancingBuffer_;
         instancingBuffer = renderer_->instancingBuffer_;
     
     
-    graphics_->SetScissorTest(false);
+    if (disableScissor)
+        graphics_->SetScissorTest(false);
     graphics_->SetStencilTest(false);
     graphics_->SetStencilTest(false);
     
     
     // Priority instanced
     // Priority instanced
@@ -2239,14 +2240,14 @@ void View::RenderShadowMap(const LightBatchQueue& queue)
     {
     {
         float zoom = Min(queue.light_->GetShadowCamera()->GetZoom(),
         float zoom = Min(queue.light_->GetShadowCamera()->GetZoom(),
             (float)(shadowMap->GetWidth() - 2) / (float)shadowMap->GetWidth());
             (float)(shadowMap->GetWidth() - 2) / (float)shadowMap->GetWidth());
-        Rect zoorect_(Vector2(-1.0f, -1.0f) * zoom, Vector2(1.0f, 1.0f) * zoom);
-        graphics_->SetScissorTest(true, zoorect_, false);
+        Rect zoomRect(Vector2(-1.0f, -1.0f) * zoom, Vector2(1.0f, 1.0f) * zoom);
+        graphics_->SetScissorTest(true, zoomRect, false);
     }
     }
     else
     else
         graphics_->SetScissorTest(false);
         graphics_->SetScissorTest(false);
     
     
     // Draw instanced and non-instanced shadow casters
     // Draw instanced and non-instanced shadow casters
-    RenderBatchQueue(queue.shadowBatches_);
+    RenderBatchQueue(queue.shadowBatches_, false, false, false);
     
     
     graphics_->SetColorWrite(true);
     graphics_->SetColorWrite(true);
     graphics_->SetDepthBias(0.0f, 0.0f);
     graphics_->SetDepthBias(0.0f, 0.0f);

+ 1 - 1
Engine/Graphics/View.h

@@ -159,7 +159,7 @@ private:
     /// Draw a split light to stencil buffer
     /// Draw a split light to stencil buffer
     void DrawSplitLightToStencil(Camera& camera, Light* light, bool clear = false);
     void DrawSplitLightToStencil(Camera& camera, Light* light, bool clear = false);
     /// Draw everything in a batch queue, priority batches first
     /// Draw everything in a batch queue, priority batches first
-    void RenderBatchQueue(const BatchQueue& queue, bool useScissor = false, bool useLightBuffer = false);
+    void RenderBatchQueue(const BatchQueue& queue, bool useScissor = false, bool useLightBuffer = false, bool disableScissor = true);
     /// Draw a forward (shadowed) light batch queue
     /// Draw a forward (shadowed) light batch queue
     void RenderForwardLightBatchQueue(const BatchQueue& queue, Light* forwardQueueLight);
     void RenderForwardLightBatchQueue(const BatchQueue& queue, Light* forwardQueueLight);
     /// Render a shadow map
     /// Render a shadow map