diff --git a/applications/gui/src/camera.cpp b/applications/gui/src/camera.cpp index ab94a7848ae05b7c1715530a9909bbf158975110..db1ee404deba24d35168e828aca96ebe34190394 100644 --- a/applications/gui/src/camera.cpp +++ b/applications/gui/src/camera.cpp @@ -333,14 +333,14 @@ void ftl::gui::Camera::_draw(std::vector<ftl::rgbd::FrameSet*> &fss) { } if (channel_ != Channel::Left && channel_ != Channel::Right && channel_ != Channel::None) { - renderer_->blend(0.5f, channel_); + renderer_->blend(channel_); if (isStereo()) { - renderer2_->blend(0.5f, mapToSecondChannel(channel_)); + renderer2_->blend(mapToSecondChannel(channel_)); } } if (enable_overlay) { - renderer_->blend(overlayer_->value("alpha", 0.8f), Channel::Overlay); + renderer_->blend(Channel::Overlay); } renderer_->end(); diff --git a/components/renderers/cpp/include/ftl/render/CUDARender.hpp b/components/renderers/cpp/include/ftl/render/CUDARender.hpp index 7a9d46e5b32befa9a1f3338ecf4212ed80562cac..25f0ffaa608354e4af63c9de128f5a38621d74f4 100644 --- a/components/renderers/cpp/include/ftl/render/CUDARender.hpp +++ b/components/renderers/cpp/include/ftl/render/CUDARender.hpp @@ -28,7 +28,7 @@ class CUDARender : public ftl::render::Renderer { bool submit(ftl::rgbd::FrameSet *in, ftl::codecs::Channels<0>, const Eigen::Matrix4d &t) override; //void setOutputDevice(int); - void blend(float alpha, ftl::codecs::Channel) override; + void blend(ftl::codecs::Channel) override; void setViewPort(ftl::render::ViewPortMode mode, const ftl::render::ViewPort &vp) { params_.viewport = vp; diff --git a/components/renderers/cpp/include/ftl/render/renderer.hpp b/components/renderers/cpp/include/ftl/render/renderer.hpp index 5d9d55f13fc3447e2ec6112694056474bc837a8b..2273220cfcf198067c25d1a3d329a2cb4558b8d1 100644 --- a/components/renderers/cpp/include/ftl/render/renderer.hpp +++ b/components/renderers/cpp/include/ftl/render/renderer.hpp @@ -56,7 +56,7 @@ class Renderer : public ftl::Configurable { */ virtual bool submit(ftl::rgbd::FrameSet *, ftl::codecs::Channels<0>, const Eigen::Matrix4d &)=0; - virtual void blend(float, ftl::codecs::Channel)=0; + virtual void blend(ftl::codecs::Channel)=0; protected: Stage stage_; diff --git a/components/renderers/cpp/src/CUDARender.cpp b/components/renderers/cpp/src/CUDARender.cpp index 557392d1ced004f232f7bcf5fef3dd6262468766..9a62807cca29a5e296628138cbb63d88a398ca12 100644 --- a/components/renderers/cpp/src/CUDARender.cpp +++ b/components/renderers/cpp/src/CUDARender.cpp @@ -490,7 +490,7 @@ void CUDARender::begin(ftl::rgbd::Frame &out, ftl::codecs::Channel chan) { stage_ = Stage::ReadySubmit; } -void CUDARender::blend(float alpha, Channel c) { +void CUDARender::blend(Channel c) { if (stage_ == Stage::Finished) { throw FTL_Error("Cannot call blend at this time"); } else if (stage_ == Stage::ReadySubmit) { @@ -504,11 +504,11 @@ void CUDARender::blend(float alpha, Channel c) { //cv::cuda::addWeighted(buf.to_gpumat(), alpha, out_->get<GpuMat>(out_chan_), 1.0f-alpha, 0.0f, // out_->get<GpuMat>(out_chan_), -1, cvstream); - if (alpha < 0.0f) { + //if (alpha < 0.0f) { ftl::cuda::composite(buf, out_->getTexture<uchar4>(out_chan_), stream_); - } else { - ftl::cuda::blend_alpha(buf, out_->getTexture<uchar4>(out_chan_), alpha, 1.0f-alpha, stream_); - } + //} else { + // ftl::cuda::blend_alpha(buf, out_->getTexture<uchar4>(out_chan_), alpha, 1.0f-alpha, stream_); + //} } void CUDARender::end() { diff --git a/components/renderers/cpp/src/colour_cuda.hpp b/components/renderers/cpp/src/colour_cuda.hpp index bad912c96f99e1d36091076f23da436dde3f8c26..1e44bdc934190759b0ee108000b1137c2dd64083 100644 --- a/components/renderers/cpp/src/colour_cuda.hpp +++ b/components/renderers/cpp/src/colour_cuda.hpp @@ -9,7 +9,7 @@ namespace cuda { template <typename T> void lut(ftl::cuda::TextureObject<T> &in, ftl::cuda::TextureObject<uchar4> &out, const cv::cuda::PtrStepSz<uchar3> &lut, float minval, float maxval, - bool invert, cudaStream_t stream); + float alpha, bool invert, cudaStream_t stream); void blend_alpha( ftl::cuda::TextureObject<uchar4> &in, diff --git a/components/renderers/cpp/src/colour_util.cu b/components/renderers/cpp/src/colour_util.cu index 01939ebd37609c690ab4ec8f4cf873a357be3192..bc8c1603398da9e3f94bad6e55b7d0dc3e3a09a0 100644 --- a/components/renderers/cpp/src/colour_util.cu +++ b/components/renderers/cpp/src/colour_util.cu @@ -14,12 +14,12 @@ template <typename T, bool INVERT> int out_pitch, int width, int height, const uchar3* __restrict__ lut, - float minval, float maxval) { + float minval, float maxval, float alpha) { __shared__ uchar4 table[256]; int id = threadIdx.x + blockDim.x*threadIdx.y; - table[id] = make_uchar4(lut[id], (id == 0 || id == 255) ? 0 : 255); + table[id] = make_uchar4(lut[id], (id == 0 || id == 255) ? 0 : alpha); __syncthreads(); @@ -36,7 +36,7 @@ template <typename T, bool INVERT> template <typename T> void ftl::cuda::lut(TextureObject<T> &in, TextureObject<uchar4> &out, const cv::cuda::PtrStepSz<uchar3> &lut, float minval, float maxval, - bool invert, + float alpha, bool invert, cudaStream_t stream) { static constexpr int THREADS_X = 64; // Must total 256 @@ -46,19 +46,19 @@ void ftl::cuda::lut(TextureObject<T> &in, TextureObject<uchar4> &out, const dim3 blockSize(THREADS_X, THREADS_Y); if (invert) { - lut_kernel<T,true><<<gridSize, blockSize, 0, stream>>>(in.devicePtr(), in.pixelPitch(), out.devicePtr(), out.pixelPitch(), out.width(), out.height(), lut.data, minval, maxval); + lut_kernel<T,true><<<gridSize, blockSize, 0, stream>>>(in.devicePtr(), in.pixelPitch(), out.devicePtr(), out.pixelPitch(), out.width(), out.height(), lut.data, minval, maxval, alpha); } else { - lut_kernel<T,false><<<gridSize, blockSize, 0, stream>>>(in.devicePtr(), in.pixelPitch(), out.devicePtr(), out.pixelPitch(), out.width(), out.height(), lut.data, minval, maxval); + lut_kernel<T,false><<<gridSize, blockSize, 0, stream>>>(in.devicePtr(), in.pixelPitch(), out.devicePtr(), out.pixelPitch(), out.width(), out.height(), lut.data, minval, maxval, alpha); } cudaSafeCall( cudaGetLastError() ); } template void ftl::cuda::lut<float>(TextureObject<float> &in, TextureObject<uchar4> &out, - const cv::cuda::PtrStepSz<uchar3> &lut, float minval, float maxval, bool invert, + const cv::cuda::PtrStepSz<uchar3> &lut, float minval, float maxval, float, bool invert, cudaStream_t stream); template void ftl::cuda::lut<short>(TextureObject<short> &in, TextureObject<uchar4> &out, - const cv::cuda::PtrStepSz<uchar3> &lut, float minval, float maxval, bool invert, + const cv::cuda::PtrStepSz<uchar3> &lut, float minval, float maxval, float, bool invert, cudaStream_t stream); // ==== Blending =============================================================== diff --git a/components/renderers/cpp/src/colouriser.cpp b/components/renderers/cpp/src/colouriser.cpp index 95e85c47116857799276e52c18b8812033b735c6..bcaaf28d9e0bc21d51947e6e1f6317d4865bb598 100644 --- a/components/renderers/cpp/src/colouriser.cpp +++ b/components/renderers/cpp/src/colouriser.cpp @@ -133,6 +133,10 @@ TextureObject<uchar4> &Colouriser::_processNormals(ftl::rgbd::Frame &f, Channel auto light_diffuse = parseCUDAColour(value("diffuse", std::string("#e0e0e0"))); auto light_ambient = parseCUDAColour(value("ambient", std::string("#0e0e0e"))); + + light_diffuse.w = value("alpha", 0.5f)*255.0f; + light_ambient.w = light_diffuse.w; + auto light_pos = make_float3(value("light_x", 0.3f), value("light_y", 0.2f), value("light_z", 1.0f)); ftl::cuda::normal_visualise(f.createTexture<half4>(c), buf, @@ -152,7 +156,9 @@ TextureObject<uchar4> &Colouriser::_processSingle(ftl::rgbd::Frame &f, Channel c depth_lut.upload(lut); } - ftl::cuda::lut(f.createTexture<T>(c), buf, depth_lut, 0, std::numeric_limits<T>::max(), true, stream); + float alpha = value("alpha",0.5f)*255.0f; + + ftl::cuda::lut(f.createTexture<T>(c), buf, depth_lut, 0, std::numeric_limits<T>::max(), alpha, true, stream); return buf; } @@ -165,7 +171,9 @@ TextureObject<uchar4> &Colouriser::_processFloat(ftl::rgbd::Frame &f, Channel c, depth_lut.upload(lut); } - ftl::cuda::lut(f.createTexture<float>(c), buf, depth_lut, minval, maxval, false, stream); + float alpha = value("alpha",0.5f)*255.0f; + + ftl::cuda::lut(f.createTexture<float>(c), buf, depth_lut, minval, maxval, alpha, false, stream); return buf; } diff --git a/components/renderers/cpp/src/normals.cu b/components/renderers/cpp/src/normals.cu index 1375dc0356fb682c7e0990a90b21255fa83c2f3a..ddeb6294e20aa681302932a44ade664f512272f4 100644 --- a/components/renderers/cpp/src/normals.cu +++ b/components/renderers/cpp/src/normals.cu @@ -430,7 +430,7 @@ __global__ void vis_normals_kernel(ftl::cuda::TextureObject<half4> norm, output(x,y) = make_uchar4( min(255.0f, diffuse.x*d + ambient.x), min(255.0f, diffuse.y*d + ambient.y), - min(255.0f, diffuse.z*d + ambient.z), 255); + min(255.0f, diffuse.z*d + ambient.z), ambient.w); } } }