diff --git a/components/renderers/cpp/src/triangle_render.cu b/components/renderers/cpp/src/triangle_render.cu
index 96fa70012adb59d992dda651018bef4239cca213..236038fbabed6a05780254c19c856e4344f31065 100644
--- a/components/renderers/cpp/src/triangle_render.cu
+++ b/components/renderers/cpp/src/triangle_render.cu
@@ -30,7 +30,8 @@ __device__ inline float length2(int dx, int dy) { return dx*dx + dy*dy; }
     d[2] = depth_in.tex2D(x+A,y+(1-B));
 
     // Is this triangle valid
-    if (fabs(d[0] - d[1]) > 0.04f || fabs(d[0] - d[2]) > 0.04f) return;
+	if (fabs(d[0] - d[1]) > 0.04f || fabs(d[0] - d[2]) > 0.04f) return;
+	if (d[0] < params.camera.minDepth || d[1] < params.camera.minDepth || d[2] < params.camera.minDepth) return;
 
     short2 s[3];
     s[0] = screen.tex2D(x+A,y+B);
@@ -48,8 +49,8 @@ __device__ inline float length2(int dx, int dy) { return dx*dx + dy*dy; }
     s[1].x = min(s[1].x,10);
 	s[2].y = min(s[2].y,10);
 
-    for (int sx=0; sx < s[1].x; ++sx) {
-        for (int sy=0; sy < min(s[1].x - sx, s[2].y); ++sy) {
+    for (int sx=0; sx <= s[1].x; ++sx) {
+        for (int sy=0; sy <= min(s[1].x - sx, s[2].y); ++sy) {
 			//if (sx > s[2].y-sy) continue;
             if (dx*sx+s[0].x >= params.camera.width || dy*sy+s[0].y >= params.camera.height) continue;
 
@@ -57,7 +58,8 @@ __device__ inline float length2(int dx, int dy) { return dx*dx + dy*dy; }
             float dist2 = length2(s[1].x-sx, s[1].y-sy);
             float dist3 = length2(s[2].x-sx, s[2].y-sy);
 
-            float new_depth = (d[0]*dist1 + d[1]*dist2 + d[2] * dist3) / (dist1+dist2+dist3);
+			float new_depth = (d[0]*dist1 + d[1]*dist2 + d[2] * dist3) / (dist1+dist2+dist3);
+			//if (new_depth < params.camera.minDepth || new_depth > params.camera.maxDepth) continue;
 
             atomicMin(&depth_out(dx*sx+s[0].x,dy*sy+s[0].y), int(new_depth*1000.0f));
         }