瀏覽代碼

Fix occlusion rendering to work with reverse triangle winding. Fix MultipleViewports C++ example using depth test in debug geometry.

Lasse Öörni 11 年之前
父節點
當前提交
16c05ee6cf

+ 4 - 1
Source/Engine/Graphics/OcclusionBuffer.cpp

@@ -806,6 +806,10 @@ void OcclusionBuffer::DrawTriangle2D(const Vector3* vertices)
         }
     }
     
+    // If culling is reversed, also reverse the middleIsRight assumption
+    if (cullMode_ == CULL_CW)
+        middleIsRight = !middleIsRight;
+    
     int topY = (int)vertices[top].y_;
     int middleY = (int)vertices[middle].y_;
     int bottomY = (int)vertices[bottom].y_;
@@ -819,7 +823,6 @@ void OcclusionBuffer::DrawTriangle2D(const Vector3* vertices)
     Edge topToBottom(gradients, vertices[top], vertices[bottom], topY);
     Edge middleToBottom(gradients, vertices[middle], vertices[bottom], middleY);
     
-    // The triangle is clockwise, so if bottom > middle then middle is right
     if (middleIsRight)
     {
         // Top half

+ 1 - 1
Source/Samples/09_MultipleViewports/MultipleViewports.cpp

@@ -283,5 +283,5 @@ void MultipleViewports::HandlePostRenderUpdate(StringHash eventType, VariantMap&
     // If draw debug mode is enabled, draw viewport debug geometry, which will show eg. drawable bounding boxes and skeleton
     // bones. Disable depth test so that we can see the effect of occlusion
     if (drawDebug_)
-        GetSubsystem<Renderer>()->DrawDebugGeometry(true);
+        GetSubsystem<Renderer>()->DrawDebugGeometry(false);
 }