diff --git a/src/render/painter.js b/src/render/painter.js index 04c7ade994b..26d12870aaf 100644 --- a/src/render/painter.js +++ b/src/render/painter.js @@ -393,6 +393,14 @@ class Painter { assert(gl.getShaderParameter(vertexShader, gl.COMPILE_STATUS), gl.getShaderInfoLog(vertexShader)); gl.attachShader(program, vertexShader); + + // For the symbol program, manually ensure the attrib bound to position 0 is always used (either a_data or a_pos_offset would work here). + // This is needed to fix https://github.com/mapbox/mapbox-gl-js/issues/4607 — otherwise a_size can be bound first, causing rendering to fail. + // All remaining attribs will be bound dynamically below. + if (name === 'symbolSDF') { + gl.bindAttribLocation(program, 0, 'a_data'); + } + gl.linkProgram(program); assert(gl.getProgramParameter(program, gl.LINK_STATUS), gl.getProgramInfoLog(program)); diff --git a/src/shaders/symbol_sdf.vertex.glsl b/src/shaders/symbol_sdf.vertex.glsl index 90ed1956582..8de5e56492e 100644 --- a/src/shaders/symbol_sdf.vertex.glsl +++ b/src/shaders/symbol_sdf.vertex.glsl @@ -1,5 +1,7 @@ const float PI = 3.141592653589793; +// NOTE: the a_data attribute in this shader is manually bound (see https://github.com/mapbox/mapbox-gl-js/issues/4607). +// If removing or renaming a_data, revisit the manual binding in painter.js accordingly. attribute vec4 a_pos_offset; attribute vec4 a_data;