Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: Alex Cristici <alex.cristici@gmail.com> Co-authored-by: mwilsnd <mwilsnd@gmail.com> Co-authored-by: Stefan Karschti <stefan.karschti@gmail.com> Co-authored-by: Bart Louwers <bart@emeel.net> Co-authored-by: Alex Cristici <alex@skoon.energy> Co-authored-by: Bart Louwers <bart.louwers@gmail.com> Co-authored-by: Wei Chen <alanchenboy@gmail.com> Co-authored-by: Siarhei Fedartsou <siarhei.fedartsou@gmail.com> Co-authored-by: tdcosta100 <tdcosta100@gmail.com>
Mapbox GL Shaders
This repository contains GL shaders which are shared by Mapbox GL JS and Mapbox GL Native.
Pragmas
Some variables change type depending on their context:
- if the variable is the same for all features, we declare it as a
uniform - if the variable is different for each feature, we declare it as an
attribute(in the vertex shader) and an accompanyingvarying(in both the vertex and fragment shaders). - if the variable is different for each feature and a function of zoom, we declare several
attributesanduniformsthen calculate the value using interpolation
We abstract over this functionality using pragmas.
#pragma mapbox: define highp vec4 color
main() {
#pragma mapbox: initialize highp vec4 color
...
gl_FragColor = color;
}
This program defines a variable within main called color, initialize the value of color, then sets gl_FragColor to the value of color.
Pragmas take the following form.
#pragma mapbox: (define|initialize) (lowp|mediump|highp) (float|vec2|vec3|vec4) {name}
When using pragmas, the following requirements apply.
- all pragma-defined variables must have both
defineandinitializepragmas definepragmas must be in file scopeinitializepragmas must be in function scope- all pragma-defined variables defined and initialized in the fragment shader must also be defined and initialized in the vertex shader because
attributes are not accessible from the fragment shader
Prelude
The _prelude.fragment.glsl and _prelude.vertex.glsl files are automatically included in all shaders by the compiler.