Newer
Older
#include <ftl/depth_camera.hpp>
#include "depth_camera_cuda.hpp"
#include <opencv2/core/cuda_stream_accessor.hpp>
using ftl::voxhash::DepthCamera;
using ftl::voxhash::DepthCameraCUDA;
DepthCamera::DepthCamera() {
depth_tex_ = nullptr;
depth2_tex_ = nullptr;
points_tex_ = nullptr;
colour_tex_ = nullptr;
normal_tex_ = nullptr;
}
void DepthCamera::alloc(const DepthCameraParams& params, bool withNormals) { //! todo resizing???
depth_tex_ = new ftl::cuda::TextureObject<float>(params.m_imageWidth, params.m_imageHeight);
depth2_tex_ = new ftl::cuda::TextureObject<int>(params.m_imageWidth, params.m_imageHeight);
points_tex_ = new ftl::cuda::TextureObject<float4>(params.m_imageWidth, params.m_imageHeight);
colour_tex_ = new ftl::cuda::TextureObject<uchar4>(params.m_imageWidth, params.m_imageHeight);
data.depth = depth_tex_->cudaTexture();
data.depth2 = depth2_tex_->cudaTexture();
data.points = points_tex_->cudaTexture();
data.colour = colour_tex_->cudaTexture();
data.params = params;
normal_tex_ = new ftl::cuda::TextureObject<float4>(params.m_imageWidth, params.m_imageHeight);
data.normal = normal_tex_->cudaTexture();
}
void DepthCamera::free() {
delete depth_tex_;
delete colour_tex_;
delete depth2_tex_;
delete points_tex_;
if (normal_tex_) delete normal_tex_;
}
void DepthCamera::updateData(const cv::Mat &depth, const cv::Mat &rgb, cv::cuda::Stream &stream) {
depth_tex_->upload(depth, cv::cuda::StreamAccessor::getStream(stream));
colour_tex_->upload(rgb, cv::cuda::StreamAccessor::getStream(stream));
//if (normal_mat_) {
//computeNormals(cv::cuda::StreamAccessor::getStream(stream));
void DepthCamera::computeNormals(cudaStream_t stream) {
//ftl::cuda::point_cloud(*points_tex_, data, stream);
ftl::cuda::compute_normals(*depth_tex_, *normal_tex_, data, stream);