From c74ca569dd9c7c277cd476f57a2d27f36943d5fb Mon Sep 17 00:00:00 2001 From: Piotr Jaroszek Date: Thu, 6 May 2021 00:31:54 +0200 Subject: [PATCH] Putting glsl 1.50 resources back in RenderSystem (#668) * Included glsl v150 resources in rendering system Signed-off-by: Piotr Jaroszek * Unit tests fixed for glsl 150 Signed-off-by: Piotr Jaroszek * getGlslVersion test method changed to const Signed-off-by: Piotr Jaroszek * Public dll spec for getglsl method. Signed-off-by: Piotr Jaroszek --- .../include/rviz_rendering/render_system.hpp | 1 + .../src/rviz_rendering/render_system.cpp | 14 ++++++------- .../objects/point_cloud_renderable_test.cpp | 21 +++++++++++++++---- .../objects/point_cloud_test.cpp | 16 ++++++++++++-- .../ogre_testing_environment.cpp | 5 +++++ .../ogre_testing_environment.hpp | 2 ++ 6 files changed, 45 insertions(+), 14 deletions(-) diff --git a/rviz_rendering/include/rviz_rendering/render_system.hpp b/rviz_rendering/include/rviz_rendering/render_system.hpp index 6f457a945..04b9fd09d 100644 --- a/rviz_rendering/include/rviz_rendering/render_system.hpp +++ b/rviz_rendering/include/rviz_rendering/render_system.hpp @@ -80,6 +80,7 @@ class RenderSystem getGlVersion(); /// return GLSL Version as integer, e.g. 150 for GLSL 1.50 + RVIZ_RENDERING_PUBLIC int getGlslVersion(); diff --git a/rviz_rendering/src/rviz_rendering/render_system.cpp b/rviz_rendering/src/rviz_rendering/render_system.cpp index 1765e804e..207ff4971 100644 --- a/rviz_rendering/src/rviz_rendering/render_system.cpp +++ b/rviz_rendering/src/rviz_rendering/render_system.cpp @@ -335,14 +335,12 @@ RenderSystem::setupResources() // Unfortunately, Ogre doesn't have a notion of glsl versions so we can't go // the 'official' way of defining multiple schemes per material and let Ogre // decide which one to use. - // TODO(wjwwood): figure out why includes don't work on 150 - // if (getGlslVersion() >= 150) { - // Ogre::ResourceGroupManager::getSingleton().addResourceLocation( - // rviz_path + "/ogre_media/materials/glsl150", "FileSystem", "rviz_rendering"); - // Ogre::ResourceGroupManager::getSingleton().addResourceLocation( - // rviz_path + "/ogre_media/materials/scripts150", "FileSystem", "rviz_rendering"); - // } else if (getGlslVersion() >= 120) { - if (getGlslVersion() >= 120) { + if (getGlslVersion() >= 150) { + Ogre::ResourceGroupManager::getSingleton().addResourceLocation( + rviz_path + "/ogre_media/materials/glsl150", "FileSystem", "rviz_rendering"); + Ogre::ResourceGroupManager::getSingleton().addResourceLocation( + rviz_path + "/ogre_media/materials/scripts150", "FileSystem", "rviz_rendering"); + } else if (getGlslVersion() >= 120) { Ogre::ResourceGroupManager::getSingleton().addResourceLocation( rviz_path + "/ogre_media/materials/scripts120", "FileSystem", "rviz_rendering"); } else { diff --git a/rviz_rendering/test/rviz_rendering/objects/point_cloud_renderable_test.cpp b/rviz_rendering/test/rviz_rendering/objects/point_cloud_renderable_test.cpp index 54badd6e9..5a968850c 100644 --- a/rviz_rendering/test/rviz_rendering/objects/point_cloud_renderable_test.cpp +++ b/rviz_rendering/test/rviz_rendering/objects/point_cloud_renderable_test.cpp @@ -83,13 +83,26 @@ TEST_F(PointCloudRenderableTestFixture, renderable_contains_a_correctly_filled_b size_t vertex_size = renderable_->getBuffer()->getVertexSize(); size_t number_of_vertices = renderable_->getBuffer()->getNumVertices(); - size_t size_of_single_vertex = 3 * 8 + 4; // three floats + 4 bytes for color - size_t vertices_added = 3 * 1; // three vertices per point + size_t size_of_single_vertex {0}; + size_t vertices_added {0}; + + int glsl_version = testing_environment_->getGlslVersion(); + if (glsl_version >= 150) { + size_of_single_vertex = 3 * 4 + 4; // position + color + vertices_added = 1; + ASSERT_THAT( + renderable_->getRenderOperation()->operationType, + Eq(Ogre::RenderOperation::OT_POINT_LIST)); + } else if (glsl_version >= 120) { + size_of_single_vertex = 3 * 4 + 3 * 4 + 4; // position + texture coordinates + color + vertices_added = 3 * 1; // three vertices per point + ASSERT_THAT( + renderable_->getRenderOperation()->operationType, + Eq(Ogre::RenderOperation::OT_TRIANGLE_LIST)); + } ASSERT_THAT(vertex_size, Eq(size_of_single_vertex)); ASSERT_THAT(number_of_vertices, Eq(vertices_added)); - ASSERT_THAT( - renderable_->getRenderOperation()->operationType, Eq(Ogre::RenderOperation::OT_TRIANGLE_LIST)); } TEST_F( diff --git a/rviz_rendering/test/rviz_rendering/objects/point_cloud_test.cpp b/rviz_rendering/test/rviz_rendering/objects/point_cloud_test.cpp index 767f3a78d..0bf960e84 100644 --- a/rviz_rendering/test/rviz_rendering/objects/point_cloud_test.cpp +++ b/rviz_rendering/test/rviz_rendering/objects/point_cloud_test.cpp @@ -245,6 +245,7 @@ TEST_F(PointCloudTestFixture, setRenderMode_changes_material) { TEST_F( PointCloudTestFixture, setRenderMode_regenerates_renderables_with_different_size_when_geometry_support_changes) { + int glsl_version = testing_environment_->getGlslVersion(); auto point_cloud = std::make_shared(); point_cloud->addPoints(singlePointArray.begin(), singlePointArray.end()); @@ -260,7 +261,12 @@ TEST_F( renderables = point_cloud->getRenderables(); for (auto const & renderable : renderables) { - size_t number_of_vertices_per_box = 6 * 3 * 2; // six sides with two triangles each + size_t number_of_vertices_per_box {0}; + if (glsl_version >= 150) { + number_of_vertices_per_box = 1; + } else if (glsl_version >= 120) { + number_of_vertices_per_box = 6 * 3 * 2; // six sides with two triangles each + } ASSERT_THAT(renderable->getBuffer()->getNumVertices(), Eq(number_of_vertices_per_box)); } } @@ -278,9 +284,15 @@ TEST_F(PointCloudTestFixture, addPoints_adds_new_renderable_whenever_it_is_calle TEST_F(PointCloudTestFixture, addPoints_adds_vertices_with_correct_geometry_when_called) { + int glsl_version = testing_environment_->getGlslVersion(); auto point_cloud = std::make_shared(); point_cloud->setRenderMode(rviz_rendering::PointCloud::RM_FLAT_SQUARES); - size_t number_of_vertices_per_flat_square = 3 * 2; // two triangles for one square + size_t number_of_vertices_per_flat_square = {0}; + if (glsl_version >= 150) { + number_of_vertices_per_flat_square = 1; + } else if (glsl_version >= 120) { + number_of_vertices_per_flat_square = 3 * 2; // two triangles for one square + } point_cloud->addPoints(singlePointArray.begin(), singlePointArray.end()); diff --git a/rviz_rendering/test/rviz_rendering/ogre_testing_environment.cpp b/rviz_rendering/test/rviz_rendering/ogre_testing_environment.cpp index 2cea3fe5a..038f85a91 100644 --- a/rviz_rendering/test/rviz_rendering/ogre_testing_environment.cpp +++ b/rviz_rendering/test/rviz_rendering/ogre_testing_environment.cpp @@ -53,4 +53,9 @@ void OgreTestingEnvironment::setUpRenderSystem() RenderSystem::get(); } +int OgreTestingEnvironment::getGlslVersion() const +{ + return RenderSystem::get()->getGlslVersion(); +} + } // end namespace rviz_rendering diff --git a/rviz_rendering/test/rviz_rendering/ogre_testing_environment.hpp b/rviz_rendering/test/rviz_rendering/ogre_testing_environment.hpp index c3b74e710..5736c98b8 100644 --- a/rviz_rendering/test/rviz_rendering/ogre_testing_environment.hpp +++ b/rviz_rendering/test/rviz_rendering/ogre_testing_environment.hpp @@ -44,6 +44,8 @@ class OgreTestingEnvironment void setUpOgreTestEnvironment(bool debug = false); void setUpRenderSystem(); + + int getGlslVersion() const; }; } // namespace rviz_rendering