diff --git a/src/Magnum/Shaders/MeshVisualizer.cpp b/src/Magnum/Shaders/MeshVisualizer.cpp index c0d50e681..f0d3a900f 100644 --- a/src/Magnum/Shaders/MeshVisualizer.cpp +++ b/src/Magnum/Shaders/MeshVisualizer.cpp @@ -61,6 +61,12 @@ MeshVisualizer::MeshVisualizer(const Flags flags): flags(flags), transformationP vert.addSource(flags & Flag::Wireframe ? "#define WIREFRAME_RENDERING\n" : "") .addSource(flags & Flag::NoGeometryShader ? "#define NO_GEOMETRY_SHADER\n" : "") + #ifdef MAGNUM_TARGET_WEBGL + .addSource("#define SUBSCRIPTING_WORKAROUND\n") + #elif defined(MAGNUM_TARGET_GLES) + .addSource(Context::current()->detectedDriver() & Context::DetectedDriver::ProbablyAngle ? + "#define SUBSCRIPTING_WORKAROUND\n" : "") + #endif .addSource(rs.get("generic.glsl")) .addSource(rs.get("MeshVisualizer.vert")); frag.addSource(flags & Flag::Wireframe ? "#define WIREFRAME_RENDERING\n" : "") diff --git a/src/Magnum/Shaders/MeshVisualizer.vert b/src/Magnum/Shaders/MeshVisualizer.vert index 156553f49..b8adcb1ba 100644 --- a/src/Magnum/Shaders/MeshVisualizer.vert +++ b/src/Magnum/Shaders/MeshVisualizer.vert @@ -58,10 +58,17 @@ void main() { #if defined(WIREFRAME_RENDERING) && defined(NO_GEOMETRY_SHADER) barycentric = vec3(0.0); - #ifndef NEW_GLSL + + #ifdef SUBSCRIPTING_WORKAROUND + int i = int(mod(vertexIndex, 3.0)); + if(i == 0) barycentric.x = 1.0; + else if(i == 1) barycentric.y = 1.0; + else barycentric.z = 1.0; + #elif !defined(NEW_GLSL) barycentric[int(mod(vertexIndex, 3.0))] = 1.0; #else barycentric[gl_VertexID % 3] = 1.0; #endif + #endif }