in modules/core/src/shaderlib/project/viewport-uniforms.js [203:277]
function calculateViewportUniforms({
viewport,
devicePixelRatio,
coordinateSystem,
coordinateOrigin
}) {
const {
projectionCenter,
viewProjectionMatrix,
cameraPosCommon,
shaderCoordinateOrigin,
geospatialOrigin
} = calculateMatrixAndOffset(viewport, coordinateSystem, coordinateOrigin);
// Calculate projection pixels per unit
const distanceScales = viewport.getDistanceScales();
const viewportSize = [viewport.width * devicePixelRatio, viewport.height * devicePixelRatio];
const uniforms = {
// Projection mode values
project_uCoordinateSystem: coordinateSystem,
project_uProjectionMode: viewport.projectionMode,
project_uCoordinateOrigin: shaderCoordinateOrigin,
project_uCenter: projectionCenter,
project_uAntimeridian: (viewport.longitude || 0) - 180,
// Screen size
project_uViewportSize: viewportSize,
project_uDevicePixelRatio: devicePixelRatio,
// Distance at which screen pixels are projected
project_uFocalDistance: viewport.focalDistance || 1,
project_uCommonUnitsPerMeter: distanceScales.unitsPerMeter,
project_uCommonUnitsPerWorldUnit: distanceScales.unitsPerMeter,
project_uCommonUnitsPerWorldUnit2: DEFAULT_PIXELS_PER_UNIT2,
project_uScale: viewport.scale, // This is the mercator scale (2 ** zoom)
project_uViewProjectionMatrix: viewProjectionMatrix,
// This is for lighting calculations
project_uCameraPosition: cameraPosCommon
};
if (geospatialOrigin) {
const distanceScalesAtOrigin = viewport.getDistanceScales(geospatialOrigin);
switch (coordinateSystem) {
case COORDINATE_SYSTEM.METER_OFFSETS:
uniforms.project_uCommonUnitsPerWorldUnit = distanceScalesAtOrigin.unitsPerMeter;
uniforms.project_uCommonUnitsPerWorldUnit2 = distanceScalesAtOrigin.unitsPerMeter2;
break;
case COORDINATE_SYSTEM.LNGLAT:
case COORDINATE_SYSTEM.LNGLAT_OFFSETS:
uniforms.project_uCommonUnitsPerWorldUnit = distanceScalesAtOrigin.unitsPerDegree;
uniforms.project_uCommonUnitsPerWorldUnit2 = distanceScalesAtOrigin.unitsPerDegree2;
break;
// a.k.a "preprojected" positions
case COORDINATE_SYSTEM.CARTESIAN:
uniforms.project_uCommonUnitsPerWorldUnit = [1, 1, distanceScalesAtOrigin.unitsPerMeter[2]];
uniforms.project_uCommonUnitsPerWorldUnit2 = [
0,
0,
distanceScalesAtOrigin.unitsPerMeter2[2]
];
break;
default:
break;
}
}
return uniforms;
}