diff --git a/doc/changelog.dox b/doc/changelog.dox index 82ba7bd89..aa1448267 100644 --- a/doc/changelog.dox +++ b/doc/changelog.dox @@ -432,6 +432,9 @@ See also: check - For a @ref Shaders::Phong with zero lights, alpha mask default value was incorrectly @cpp 0.0f @ce instead of @cpp 0.5f @ce on OpenGL ES +- @ref Shaders::MeshVisualizer3D accidentally didn't enable + @glsl noperspective @ce interpolation on desktop, resulting in minor + wireframe rendering artifacts @subsection changelog-latest-deprecated Deprecated APIs diff --git a/src/Magnum/Shaders/MeshVisualizer.frag b/src/Magnum/Shaders/MeshVisualizer.frag index 12d792737..7f454ae88 100644 --- a/src/Magnum/Shaders/MeshVisualizer.frag +++ b/src/Magnum/Shaders/MeshVisualizer.frag @@ -82,7 +82,7 @@ uniform lowp float smoothness ; #ifndef NO_GEOMETRY_SHADER -#ifdef GL_NV_shader_noperspective_interpolation +#if !defined(GL_ES) || defined(GL_NV_shader_noperspective_interpolation) noperspective #endif in lowp vec3 dist; diff --git a/src/Magnum/Shaders/MeshVisualizer.geom b/src/Magnum/Shaders/MeshVisualizer.geom index 4ca350882..32989140b 100644 --- a/src/Magnum/Shaders/MeshVisualizer.geom +++ b/src/Magnum/Shaders/MeshVisualizer.geom @@ -44,7 +44,7 @@ layout(triangles) in; layout(triangle_strip, max_vertices = 3) out; /* Interpolate in screen space (if possible) */ -#ifdef GL_NV_shader_noperspective_interpolation +#if !defined(GL_ES) || defined(GL_NV_shader_noperspective_interpolation) noperspective #endif out lowp vec3 dist; diff --git a/src/Magnum/Shaders/Test/MeshVisualizerGLTest.cpp b/src/Magnum/Shaders/Test/MeshVisualizerGLTest.cpp index fe7add89b..c33306f9f 100644 --- a/src/Magnum/Shaders/Test/MeshVisualizerGLTest.cpp +++ b/src/Magnum/Shaders/Test/MeshVisualizerGLTest.cpp @@ -792,8 +792,14 @@ void MeshVisualizerGLTest::renderWireframe3D() { CORRADE_EXPECT_FAIL_IF(data.flags & MeshVisualizer3D::Flag::NoGeometryShader, "Line width is currently not configurable w/o geometry shader."); #if !(defined(MAGNUM_TARGET_GLES2) && defined(MAGNUM_TARGET_WEBGL)) - /* SwiftShader has differently rasterized edges on four pixels */ - const Float maxThreshold = 170.0f, meanThreshold = 0.327f; + /* SwiftShader has differently rasterized edges on four pixels. On a + GS, if GL_NV_shader_noperspective_interpolation is not supported, + the artifacts are bigger. */ + Float maxThreshold = 170.0f, meanThreshold = 0.327f; + #if defined(MAGNUM_TARGET_GLES) && !defined(MAGNUM_TARGET_GLES2) && !defined(MAGNUM_TARGET_WEBGL) + if(!(data.flags & MeshVisualizer3D::Flag::NoGeometryShader) && !GL::Context::current().isExtensionSupported()) + meanThreshold = 2.166f; + #endif #else /* WebGL 1 doesn't have 8bit renderbuffer storage, so it's way worse */ const Float maxThreshold = 170.0f, meanThreshold = 1.699f; diff --git a/src/Magnum/Shaders/Test/MeshVisualizerTestFiles/wireframe-wide3D.tga b/src/Magnum/Shaders/Test/MeshVisualizerTestFiles/wireframe-wide3D.tga index 1314e14a2..5aff6ce01 100644 Binary files a/src/Magnum/Shaders/Test/MeshVisualizerTestFiles/wireframe-wide3D.tga and b/src/Magnum/Shaders/Test/MeshVisualizerTestFiles/wireframe-wide3D.tga differ diff --git a/src/Magnum/Shaders/Test/MeshVisualizerTestFiles/wireframe3D.tga b/src/Magnum/Shaders/Test/MeshVisualizerTestFiles/wireframe3D.tga index 9d9724072..efa7e3383 100644 Binary files a/src/Magnum/Shaders/Test/MeshVisualizerTestFiles/wireframe3D.tga and b/src/Magnum/Shaders/Test/MeshVisualizerTestFiles/wireframe3D.tga differ