maplibre-gl
Version:
BSD licensed community fork of mapbox-gl, a WebGL interactive maps library
77 lines (65 loc) • 2.5 kB
text/typescript
import {mat4} from 'gl-matrix';
import {
Uniform1i,
Uniform1f,
Uniform2f,
UniformMatrix4f
} from '../uniform_binding';
import {pixelsToTileUnits} from '../../source/pixels_to_tile_units';
import type {Context} from '../../gl/context';
import type {Tile} from '../../source/tile';
import type {UniformValues, UniformLocations} from '../uniform_binding';
import type {Painter} from '../painter';
import type {HeatmapStyleLayer} from '../../style/style_layer/heatmap_style_layer';
export type HeatmapUniformsType = {
'u_extrude_scale': Uniform1f;
'u_intensity': Uniform1f;
'u_matrix': UniformMatrix4f;
};
export type HeatmapTextureUniformsType = {
'u_matrix': UniformMatrix4f;
'u_world': Uniform2f;
'u_image': Uniform1i;
'u_color_ramp': Uniform1i;
'u_opacity': Uniform1f;
};
const heatmapUniforms = (context: Context, locations: UniformLocations): HeatmapUniformsType => ({
'u_extrude_scale': new Uniform1f(context, locations.u_extrude_scale),
'u_intensity': new Uniform1f(context, locations.u_intensity),
'u_matrix': new UniformMatrix4f(context, locations.u_matrix)
});
const heatmapTextureUniforms = (context: Context, locations: UniformLocations): HeatmapTextureUniformsType => ({
'u_matrix': new UniformMatrix4f(context, locations.u_matrix),
'u_world': new Uniform2f(context, locations.u_world),
'u_image': new Uniform1i(context, locations.u_image),
'u_color_ramp': new Uniform1i(context, locations.u_color_ramp),
'u_opacity': new Uniform1f(context, locations.u_opacity)
});
const heatmapUniformValues = (matrix: mat4, tile: Tile, zoom: number, intensity: number): UniformValues<HeatmapUniformsType> => ({
'u_matrix': matrix,
'u_extrude_scale': pixelsToTileUnits(tile, 1, zoom),
'u_intensity': intensity
});
const heatmapTextureUniformValues = (
painter: Painter,
layer: HeatmapStyleLayer,
textureUnit: number,
colorRampUnit: number
): UniformValues<HeatmapTextureUniformsType> => {
const matrix = mat4.create();
mat4.ortho(matrix, 0, painter.width, painter.height, 0, 0, 1);
const gl = painter.context.gl;
return {
'u_matrix': matrix,
'u_world': [gl.drawingBufferWidth, gl.drawingBufferHeight],
'u_image': textureUnit,
'u_color_ramp': colorRampUnit,
'u_opacity': layer.paint.get('heatmap-opacity')
};
};
export {
heatmapUniforms,
heatmapTextureUniforms,
heatmapUniformValues,
heatmapTextureUniformValues
};