Files
MapLibreParticleLab/shaders
Tim Sylvester a7f5d565d8 Topic/metal symbol rebase (#1640)
Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: mwilsnd <mwilsnd@gmail.com>
Co-authored-by: Alex Cristici <alex.cristici@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>
2023-09-19 01:32:24 +00:00
..
2023-08-31 15:36:19 +02:00
2023-08-31 15:36:19 +02:00

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 accompanying varying (in both the vertex and fragment shaders).
  • if the variable is different for each feature and a function of zoom, we declare several attributes and uniforms then 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 define and initialize pragmas
  • define pragmas must be in file scope
  • initialize pragmas 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.