Spaces:
Sleeping
Sleeping
| // Disable Flow annotations here because Flow doesn't support importing GLSL files | |
| /* eslint-disable flowtype/require-valid-file-annotation */ | |
| import preludeFrag from './_prelude.fragment.glsl'; | |
| import preludeVert from './_prelude.vertex.glsl'; | |
| import backgroundFrag from './background.fragment.glsl'; | |
| import backgroundVert from './background.vertex.glsl'; | |
| import backgroundPatternFrag from './background_pattern.fragment.glsl'; | |
| import backgroundPatternVert from './background_pattern.vertex.glsl'; | |
| import circleFrag from './circle.fragment.glsl'; | |
| import circleVert from './circle.vertex.glsl'; | |
| import clippingMaskFrag from './clipping_mask.fragment.glsl'; | |
| import clippingMaskVert from './clipping_mask.vertex.glsl'; | |
| import heatmapFrag from './heatmap.fragment.glsl'; | |
| import heatmapVert from './heatmap.vertex.glsl'; | |
| import heatmapTextureFrag from './heatmap_texture.fragment.glsl'; | |
| import heatmapTextureVert from './heatmap_texture.vertex.glsl'; | |
| import collisionBoxFrag from './collision_box.fragment.glsl'; | |
| import collisionBoxVert from './collision_box.vertex.glsl'; | |
| import collisionCircleFrag from './collision_circle.fragment.glsl'; | |
| import collisionCircleVert from './collision_circle.vertex.glsl'; | |
| import debugFrag from './debug.fragment.glsl'; | |
| import debugVert from './debug.vertex.glsl'; | |
| import fillFrag from './fill.fragment.glsl'; | |
| import fillVert from './fill.vertex.glsl'; | |
| import fillOutlineFrag from './fill_outline.fragment.glsl'; | |
| import fillOutlineVert from './fill_outline.vertex.glsl'; | |
| import fillOutlinePatternFrag from './fill_outline_pattern.fragment.glsl'; | |
| import fillOutlinePatternVert from './fill_outline_pattern.vertex.glsl'; | |
| import fillPatternFrag from './fill_pattern.fragment.glsl'; | |
| import fillPatternVert from './fill_pattern.vertex.glsl'; | |
| import fillExtrusionFrag from './fill_extrusion.fragment.glsl'; | |
| import fillExtrusionVert from './fill_extrusion.vertex.glsl'; | |
| import fillExtrusionPatternFrag from './fill_extrusion_pattern.fragment.glsl'; | |
| import fillExtrusionPatternVert from './fill_extrusion_pattern.vertex.glsl'; | |
| import hillshadePrepareFrag from './hillshade_prepare.fragment.glsl'; | |
| import hillshadePrepareVert from './hillshade_prepare.vertex.glsl'; | |
| import hillshadeFrag from './hillshade.fragment.glsl'; | |
| import hillshadeVert from './hillshade.vertex.glsl'; | |
| import lineFrag from './line.fragment.glsl'; | |
| import lineVert from './line.vertex.glsl'; | |
| import lineGradientFrag from './line_gradient.fragment.glsl'; | |
| import lineGradientVert from './line_gradient.vertex.glsl'; | |
| import linePatternFrag from './line_pattern.fragment.glsl'; | |
| import linePatternVert from './line_pattern.vertex.glsl'; | |
| import lineSDFFrag from './line_sdf.fragment.glsl'; | |
| import lineSDFVert from './line_sdf.vertex.glsl'; | |
| import rasterFrag from './raster.fragment.glsl'; | |
| import rasterVert from './raster.vertex.glsl'; | |
| import symbolIconFrag from './symbol_icon.fragment.glsl'; | |
| import symbolIconVert from './symbol_icon.vertex.glsl'; | |
| import symbolSDFFrag from './symbol_sdf.fragment.glsl'; | |
| import symbolSDFVert from './symbol_sdf.vertex.glsl'; | |
| import symbolTextAndIconFrag from './symbol_text_and_icon.fragment.glsl'; | |
| import symbolTextAndIconVert from './symbol_text_and_icon.vertex.glsl'; | |
| export const prelude = compile(preludeFrag, preludeVert); | |
| export const background = compile(backgroundFrag, backgroundVert); | |
| export const backgroundPattern = compile(backgroundPatternFrag, backgroundPatternVert); | |
| export const circle = compile(circleFrag, circleVert); | |
| export const clippingMask = compile(clippingMaskFrag, clippingMaskVert); | |
| export const heatmap = compile(heatmapFrag, heatmapVert); | |
| export const heatmapTexture = compile(heatmapTextureFrag, heatmapTextureVert); | |
| export const collisionBox = compile(collisionBoxFrag, collisionBoxVert); | |
| export const collisionCircle = compile(collisionCircleFrag, collisionCircleVert); | |
| export const debug = compile(debugFrag, debugVert); | |
| export const fill = compile(fillFrag, fillVert); | |
| export const fillOutline = compile(fillOutlineFrag, fillOutlineVert); | |
| export const fillOutlinePattern = compile(fillOutlinePatternFrag, fillOutlinePatternVert); | |
| export const fillPattern = compile(fillPatternFrag, fillPatternVert); | |
| export const fillExtrusion = compile(fillExtrusionFrag, fillExtrusionVert); | |
| export const fillExtrusionPattern = compile(fillExtrusionPatternFrag, fillExtrusionPatternVert); | |
| export const hillshadePrepare = compile(hillshadePrepareFrag, hillshadePrepareVert); | |
| export const hillshade = compile(hillshadeFrag, hillshadeVert); | |
| export const line = compile(lineFrag, lineVert); | |
| export const lineGradient = compile(lineGradientFrag, lineGradientVert); | |
| export const linePattern = compile(linePatternFrag, linePatternVert); | |
| export const lineSDF = compile(lineSDFFrag, lineSDFVert); | |
| export const raster = compile(rasterFrag, rasterVert); | |
| export const symbolIcon = compile(symbolIconFrag, symbolIconVert); | |
| export const symbolSDF = compile(symbolSDFFrag, symbolSDFVert); | |
| export const symbolTextAndIcon = compile(symbolTextAndIconFrag, symbolTextAndIconVert); | |
| // Expand #pragmas to #ifdefs. | |
| function compile(fragmentSource, vertexSource) { | |
| const re = /#pragma mapbox: ([\w]+) ([\w]+) ([\w]+) ([\w]+)/g; | |
| const staticAttributes = vertexSource.match(/attribute ([\w]+) ([\w]+)/g); | |
| const fragmentUniforms = fragmentSource.match(/uniform ([\w]+) ([\w]+)([\s]*)([\w]*)/g); | |
| const vertexUniforms = vertexSource.match(/uniform ([\w]+) ([\w]+)([\s]*)([\w]*)/g); | |
| const staticUniforms = vertexUniforms ? vertexUniforms.concat(fragmentUniforms) : fragmentUniforms; | |
| const fragmentPragmas = {}; | |
| fragmentSource = fragmentSource.replace(re, (match, operation, precision, type, name) => { | |
| fragmentPragmas[name] = true; | |
| if (operation === 'define') { | |
| return ` | |
| #ifndef HAS_UNIFORM_u_${name} | |
| varying ${precision} ${type} ${name}; | |
| #else | |
| uniform ${precision} ${type} u_${name}; | |
| #endif | |
| `; | |
| } else /* if (operation === 'initialize') */ { | |
| return ` | |
| #ifdef HAS_UNIFORM_u_${name} | |
| ${precision} ${type} ${name} = u_${name}; | |
| #endif | |
| `; | |
| } | |
| }); | |
| vertexSource = vertexSource.replace(re, (match, operation, precision, type, name) => { | |
| const attrType = type === 'float' ? 'vec2' : 'vec4'; | |
| const unpackType = name.match(/color/) ? 'color' : attrType; | |
| if (fragmentPragmas[name]) { | |
| if (operation === 'define') { | |
| return ` | |
| #ifndef HAS_UNIFORM_u_${name} | |
| uniform lowp float u_${name}_t; | |
| attribute ${precision} ${attrType} a_${name}; | |
| varying ${precision} ${type} ${name}; | |
| #else | |
| uniform ${precision} ${type} u_${name}; | |
| #endif | |
| `; | |
| } else /* if (operation === 'initialize') */ { | |
| if (unpackType === 'vec4') { | |
| // vec4 attributes are only used for cross-faded properties, and are not packed | |
| return ` | |
| #ifndef HAS_UNIFORM_u_${name} | |
| ${name} = a_${name}; | |
| #else | |
| ${precision} ${type} ${name} = u_${name}; | |
| #endif | |
| `; | |
| } else { | |
| return ` | |
| #ifndef HAS_UNIFORM_u_${name} | |
| ${name} = unpack_mix_${unpackType}(a_${name}, u_${name}_t); | |
| #else | |
| ${precision} ${type} ${name} = u_${name}; | |
| #endif | |
| `; | |
| } | |
| } | |
| } else { | |
| if (operation === 'define') { | |
| return ` | |
| #ifndef HAS_UNIFORM_u_${name} | |
| uniform lowp float u_${name}_t; | |
| attribute ${precision} ${attrType} a_${name}; | |
| #else | |
| uniform ${precision} ${type} u_${name}; | |
| #endif | |
| `; | |
| } else /* if (operation === 'initialize') */ { | |
| if (unpackType === 'vec4') { | |
| // vec4 attributes are only used for cross-faded properties, and are not packed | |
| return ` | |
| #ifndef HAS_UNIFORM_u_${name} | |
| ${precision} ${type} ${name} = a_${name}; | |
| #else | |
| ${precision} ${type} ${name} = u_${name}; | |
| #endif | |
| `; | |
| } else /* */{ | |
| return ` | |
| #ifndef HAS_UNIFORM_u_${name} | |
| ${precision} ${type} ${name} = unpack_mix_${unpackType}(a_${name}, u_${name}_t); | |
| #else | |
| ${precision} ${type} ${name} = u_${name}; | |
| #endif | |
| `; | |
| } | |
| } | |
| } | |
| }); | |
| return {fragmentSource, vertexSource, staticAttributes, staticUniforms}; | |
| } | |