UNPKG

@deck.gl/core

Version:

deck.gl core library

78 lines (69 loc) 2.55 kB
// deck.gl // SPDX-License-Identifier: MIT // Copyright (c) vis.gl contributors import project from "../project/project.js"; const source = /* wgsl */ `\ // Define a structure to hold both the clip-space position and the common position. struct ProjectResult { clipPosition: vec4<f32>, commonPosition: vec4<f32>, }; // This function mimics the GLSL version with the 'out' parameter by returning both values. fn project_position_to_clipspace_and_commonspace( position: vec3<f32>, position64Low: vec3<f32>, offset: vec3<f32> ) -> ProjectResult { // Compute the projected position. let projectedPosition: vec3<f32> = project_position_vec3_f64(position, position64Low); // Start with the provided offset. var finalOffset: vec3<f32> = offset; // Get whether a rotation is needed and the rotation matrix. let rotationResult = project_needs_rotation(projectedPosition); // If rotation is needed, update the offset. if (rotationResult.needsRotation) { finalOffset = rotationResult.transform * offset; } // Compute the common position. let commonPosition: vec4<f32> = vec4<f32>(projectedPosition + finalOffset, 1.0); // Convert to clip-space. let clipPosition: vec4<f32> = project_common_position_to_clipspace(commonPosition); return ProjectResult(clipPosition, commonPosition); } // A convenience overload that returns only the clip-space position. fn project_position_to_clipspace( position: vec3<f32>, position64Low: vec3<f32>, offset: vec3<f32> ) -> vec4<f32> { return project_position_to_clipspace_and_commonspace(position, position64Low, offset).clipPosition; } `; const vs = /* glsl */ `\ vec4 project_position_to_clipspace( vec3 position, vec3 position64Low, vec3 offset, out vec4 commonPosition ) { vec3 projectedPosition = project_position(position, position64Low); mat3 rotation; if (project_needs_rotation(projectedPosition, rotation)) { // offset is specified as ENU // when in globe projection, rotate offset so that the ground alighs with the surface of the globe offset = rotation * offset; } commonPosition = vec4(projectedPosition + offset, 1.0); return project_common_position_to_clipspace(commonPosition); } vec4 project_position_to_clipspace( vec3 position, vec3 position64Low, vec3 offset ) { vec4 commonPosition; return project_position_to_clipspace(position, position64Low, offset, commonPosition); } `; export default { name: 'project32', dependencies: [project], source, vs }; //# sourceMappingURL=project32.js.map