diff --git a/applications/reconstruct/include/ftl/ray_cast_sdf.hpp b/applications/reconstruct/include/ftl/ray_cast_sdf.hpp
index 658e8ceebe3ea526cc129e609a6bbe1ef43c5f8a..d796b1cfc209d3f69c378cacb7fd4a98b638c0ae 100644
--- a/applications/reconstruct/include/ftl/ray_cast_sdf.hpp
+++ b/applications/reconstruct/include/ftl/ray_cast_sdf.hpp
@@ -18,6 +18,8 @@ public:
 		hash_render_ = value("hash_renderer", false);
 	}
 
+	bool isIntegerDepth() const { return hash_render_; }
+
 	~CUDARayCastSDF(void) {
 		destroy();
 	}
diff --git a/applications/reconstruct/src/virtual_source.cpp b/applications/reconstruct/src/virtual_source.cpp
index 072f71cb58d3f741714432077748ace9d6975bc5..157b71a3d420ab08775c2842b2cb5bffd3aa6898 100644
--- a/applications/reconstruct/src/virtual_source.cpp
+++ b/applications/reconstruct/src/virtual_source.cpp
@@ -26,6 +26,7 @@ VirtualSource::VirtualSource(ftl::rgbd::Source *host)
 
 	rgb_ = cv::Mat(cv::Size(params_.width,params_.height), CV_8UC3);
 	idepth_ = cv::Mat(cv::Size(params_.width,params_.height), CV_32SC1);
+	depth_ = cv::Mat(cv::Size(params_.width,params_.height), CV_32FC1);
 }
 
 VirtualSource::~VirtualSource() {
@@ -52,8 +53,12 @@ bool VirtualSource::grab() {
 		rays_->render(scene_->getHashData(), scene_->getHashParams(), params, host_->getPose());
 
 		//unique_lock<mutex> lk(mutex_);
-		rays_->getRayCastData().download((int*)idepth_.data, (uchar3*)rgb_.data, rays_->getRayCastParams());
-		idepth_.convertTo(depth_, CV_32FC1, 1.0f / 100.0f);
+		if (rays_->isIntegerDepth()) {
+			rays_->getRayCastData().download((int*)idepth_.data, (uchar3*)rgb_.data, rays_->getRayCastParams());
+			idepth_.convertTo(depth_, CV_32FC1, 1.0f / 100.0f);
+		} else {
+			rays_->getRayCastData().download((int*)depth_.data, (uchar3*)rgb_.data, rays_->getRayCastParams());
+		}
 	}
 	return true;
 }