package.src.render.program.circle_program.js Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of mapbox-gl Show documentation
Show all versions of mapbox-gl Show documentation
A WebGL interactive maps library
The newest version!
// @flow
import {
Uniform1i,
Uniform1f,
Uniform2f,
UniformMatrix4f
} from '../uniform_binding';
import pixelsToTileUnits from '../../source/pixels_to_tile_units';
import type Context from '../../gl/context';
import type {UniformValues, UniformLocations} from '../uniform_binding';
import type {OverscaledTileID} from '../../source/tile_id';
import type Tile from '../../source/tile';
import type CircleStyleLayer from '../../style/style_layer/circle_style_layer';
import type Painter from '../painter';
import browser from '../../util/browser';
export type CircleUniformsType = {|
'u_camera_to_center_distance': Uniform1f,
'u_scale_with_map': Uniform1i,
'u_pitch_with_map': Uniform1i,
'u_extrude_scale': Uniform2f,
'u_device_pixel_ratio': Uniform1f,
'u_matrix': UniformMatrix4f
|};
const circleUniforms = (context: Context, locations: UniformLocations): CircleUniformsType => ({
'u_camera_to_center_distance': new Uniform1f(context, locations.u_camera_to_center_distance),
'u_scale_with_map': new Uniform1i(context, locations.u_scale_with_map),
'u_pitch_with_map': new Uniform1i(context, locations.u_pitch_with_map),
'u_extrude_scale': new Uniform2f(context, locations.u_extrude_scale),
'u_device_pixel_ratio': new Uniform1f(context, locations.u_device_pixel_ratio),
'u_matrix': new UniformMatrix4f(context, locations.u_matrix)
});
const circleUniformValues = (
painter: Painter,
coord: OverscaledTileID,
tile: Tile,
layer: CircleStyleLayer
): UniformValues => {
const transform = painter.transform;
let pitchWithMap: boolean, extrudeScale: [number, number];
if (layer.paint.get('circle-pitch-alignment') === 'map') {
const pixelRatio = pixelsToTileUnits(tile, 1, transform.zoom);
pitchWithMap = true;
extrudeScale = [pixelRatio, pixelRatio];
} else {
pitchWithMap = false;
extrudeScale = transform.pixelsToGLUnits;
}
return {
'u_camera_to_center_distance': transform.cameraToCenterDistance,
'u_scale_with_map': +(layer.paint.get('circle-pitch-scale') === 'map'),
'u_matrix': painter.translatePosMatrix(
coord.posMatrix,
tile,
layer.paint.get('circle-translate'),
layer.paint.get('circle-translate-anchor')),
'u_pitch_with_map': +(pitchWithMap),
'u_device_pixel_ratio': browser.devicePixelRatio,
'u_extrude_scale': extrudeScale
};
};
export {circleUniforms, circleUniformValues};