From 0faabf9ab99b2e6bdaff59cb9c84841b08017da8 Mon Sep 17 00:00:00 2001 From: Robert Haschke Date: Mon, 16 Nov 2020 09:37:52 +0100 Subject: [PATCH] Downgrade to GLSL 140 on Mesa systems Newer versions of libMesa cause issues when rendering materials with glsl150 scripts. Thus, downgrade to glsl120 scripts. --- src/rviz/ogre_helpers/render_system.cpp | 17 +++++++++++++---- 1 file changed, 13 insertions(+), 4 deletions(-) diff --git a/src/rviz/ogre_helpers/render_system.cpp b/src/rviz/ogre_helpers/render_system.cpp index e04bfa7463..87f1784297 100644 --- a/src/rviz/ogre_helpers/render_system.cpp +++ b/src/rviz/ogre_helpers/render_system.cpp @@ -171,6 +171,7 @@ void RenderSystem::loadOgrePlugins() void RenderSystem::detectGlVersion() { + bool mesa_workaround = false; if (force_gl_version_) { gl_version_ = force_gl_version_; @@ -178,11 +179,11 @@ void RenderSystem::detectGlVersion() else { Ogre::RenderSystem* renderSys = ogre_root_->getRenderSystem(); - renderSys->createRenderSystemCapabilities(); - const Ogre::RenderSystemCapabilities* caps = renderSys->getCapabilities(); + const Ogre::RenderSystemCapabilities* caps = renderSys->createRenderSystemCapabilities(); int major = caps->getDriverVersion().major; int minor = caps->getDriverVersion().minor; gl_version_ = major * 100 + minor * 10; + mesa_workaround = caps->getDeviceName().find("Mesa ") != std::string::npos && gl_version_ >= 320; } switch (gl_version_) @@ -213,8 +214,16 @@ void RenderSystem::detectGlVersion() } break; } - ROS_INFO_STREAM("OpenGl version: " << (float)gl_version_ / 100.0 << " (GLSL " - << (float)glsl_version_ / 100.0 << ")."); + if (mesa_workaround) + { // https://github.com/ros-visualization/rviz/issues/1508 + ROS_INFO("OpenGl version: %.1f (GLSL %.1f) limited to GLSL 1.4 on Mesa system.", + (float)gl_version_ / 100.0, (float)glsl_version_ / 100.0); + + gl_version_ = 310; + glsl_version_ = 140; + return; + } + ROS_INFO("OpenGl version: %.1f (GLSL %.1f).", (float)gl_version_ / 100.0, (float)glsl_version_ / 100.0); } void RenderSystem::setupRenderSystem()