From 88f6339151e13c28e0393733abbcebde015d0c6b Mon Sep 17 00:00:00 2001 From: darksylinc Date: Tue, 8 Jun 2021 23:58:21 -0300 Subject: [PATCH] Fix floating point precision bug handling alpha channel (#332) (#333) Fixes #332 Fixes #108 Signed-off-by: Matias N. Goldberg --- .../materials/programs/depth_camera_final_fs.glsl | 10 +++++++++- .../src/media/materials/scripts/depth_camera.material | 2 ++ test/integration/depth_camera.cc | 4 ++++ 3 files changed, 15 insertions(+), 1 deletion(-) diff --git a/ogre2/src/media/materials/programs/depth_camera_final_fs.glsl b/ogre2/src/media/materials/programs/depth_camera_final_fs.glsl index ca3be0d0c..ef5eec270 100644 --- a/ogre2/src/media/materials/programs/depth_camera_final_fs.glsl +++ b/ogre2/src/media/materials/programs/depth_camera_final_fs.glsl @@ -31,10 +31,18 @@ uniform float far; uniform float min; uniform float max; +uniform vec4 texResolution; + void main() { float tolerance = 1e-6; - vec4 p = texture(inputTexture, inPs.uv0); + + // Note: We use texelFetch because p.a contains an uint32 and sampling + // (even w/ point filtering) causes p.a to loss information (e.g. + // values close to 0 get rounded to 0) + // + // See https://github.com/ignitionrobotics/ign-rendering/issues/332 + vec4 p = texelFetch(inputTexture, ivec2(inPs.uv0 *texResolution.xy), 0); vec3 point = p.xyz; diff --git a/ogre2/src/media/materials/scripts/depth_camera.material b/ogre2/src/media/materials/scripts/depth_camera.material index e0b87e166..602c69505 100644 --- a/ogre2/src/media/materials/scripts/depth_camera.material +++ b/ogre2/src/media/materials/scripts/depth_camera.material @@ -88,6 +88,8 @@ fragment_program DepthCameraFinalFS glsl default_params { param_named inputTexture int 0 + + param_named_auto texResolution texture_size 0 } } diff --git a/test/integration/depth_camera.cc b/test/integration/depth_camera.cc index c014d5985..1c7fabfba 100644 --- a/test/integration/depth_camera.cc +++ b/test/integration/depth_camera.cc @@ -254,6 +254,8 @@ void DepthCameraTest::DepthCameraBoxes( unsigned int ma = *mrgba >> 0 & 0xFF; EXPECT_EQ(0u, mr); EXPECT_EQ(0u, mg); + // Note: If it fails here, it may be this problem again: + // https://github.com/ignitionrobotics/ign-rendering/issues/332 EXPECT_GT(mb, 0u); // Far left and right points should be red (background color) @@ -453,6 +455,8 @@ void DepthCameraTest::DepthCameraBoxes( unsigned int a = *rgba >> 0 & 0xFF; EXPECT_EQ(0u, r); EXPECT_EQ(0u, g); + // Note: If it fails here, it may be this problem again: + // https://github.com/ignitionrobotics/ign-rendering/issues/332 EXPECT_GT(b, 0u); EXPECT_EQ(255u, a); }