@itwin/core-frontend 3.2.0-dev.20 → 3.2.0-dev.23

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (87) hide show
  1. package/lib/cjs/render/primitives/VertexTable.js +30 -2
  2. package/lib/cjs/render/primitives/VertexTable.js.map +1 -1
  3. package/lib/cjs/render/primitives/geometry/GeometryAccumulator.d.ts.map +1 -1
  4. package/lib/cjs/render/primitives/geometry/GeometryAccumulator.js +7 -2
  5. package/lib/cjs/render/primitives/geometry/GeometryAccumulator.js.map +1 -1
  6. package/lib/cjs/render/primitives/mesh/MeshBuilderMap.js +1 -1
  7. package/lib/cjs/render/primitives/mesh/MeshBuilderMap.js.map +1 -1
  8. package/lib/cjs/render/primitives/mesh/MeshPrimitives.d.ts +4 -0
  9. package/lib/cjs/render/primitives/mesh/MeshPrimitives.d.ts.map +1 -1
  10. package/lib/cjs/render/primitives/mesh/MeshPrimitives.js.map +1 -1
  11. package/lib/cjs/render/webgl/glsl/Color.js +1 -1
  12. package/lib/cjs/render/webgl/glsl/Color.js.map +1 -1
  13. package/lib/cjs/render/webgl/glsl/Decode.d.ts +2 -1
  14. package/lib/cjs/render/webgl/glsl/Decode.d.ts.map +1 -1
  15. package/lib/cjs/render/webgl/glsl/Decode.js +16 -2
  16. package/lib/cjs/render/webgl/glsl/Decode.js.map +1 -1
  17. package/lib/cjs/render/webgl/glsl/Edge.d.ts.map +1 -1
  18. package/lib/cjs/render/webgl/glsl/Edge.js +5 -14
  19. package/lib/cjs/render/webgl/glsl/Edge.js.map +1 -1
  20. package/lib/cjs/render/webgl/glsl/FeatureSymbology.d.ts.map +1 -1
  21. package/lib/cjs/render/webgl/glsl/FeatureSymbology.js +0 -2
  22. package/lib/cjs/render/webgl/glsl/FeatureSymbology.js.map +1 -1
  23. package/lib/cjs/render/webgl/glsl/Polyline.d.ts.map +1 -1
  24. package/lib/cjs/render/webgl/glsl/Polyline.js +5 -16
  25. package/lib/cjs/render/webgl/glsl/Polyline.js.map +1 -1
  26. package/lib/cjs/render/webgl/glsl/Surface.d.ts.map +1 -1
  27. package/lib/cjs/render/webgl/glsl/Surface.js +20 -21
  28. package/lib/cjs/render/webgl/glsl/Surface.js.map +1 -1
  29. package/lib/cjs/render/webgl/glsl/Vertex.d.ts +0 -2
  30. package/lib/cjs/render/webgl/glsl/Vertex.d.ts.map +1 -1
  31. package/lib/cjs/render/webgl/glsl/Vertex.js +17 -33
  32. package/lib/cjs/render/webgl/glsl/Vertex.js.map +1 -1
  33. package/lib/cjs/tile/IModelTileRequestChannels.d.ts +3 -3
  34. package/lib/cjs/tile/IModelTileRequestChannels.d.ts.map +1 -1
  35. package/lib/cjs/tile/IModelTileRequestChannels.js +7 -11
  36. package/lib/cjs/tile/IModelTileRequestChannels.js.map +1 -1
  37. package/lib/cjs/tile/TileAdmin.d.ts.map +1 -1
  38. package/lib/cjs/tile/TileAdmin.js +0 -5
  39. package/lib/cjs/tile/TileAdmin.js.map +1 -1
  40. package/lib/cjs/tile/TileRequestChannels.d.ts +0 -4
  41. package/lib/cjs/tile/TileRequestChannels.d.ts.map +1 -1
  42. package/lib/cjs/tile/TileRequestChannels.js +1 -6
  43. package/lib/cjs/tile/TileRequestChannels.js.map +1 -1
  44. package/lib/esm/render/primitives/VertexTable.js +30 -2
  45. package/lib/esm/render/primitives/VertexTable.js.map +1 -1
  46. package/lib/esm/render/primitives/geometry/GeometryAccumulator.d.ts.map +1 -1
  47. package/lib/esm/render/primitives/geometry/GeometryAccumulator.js +7 -2
  48. package/lib/esm/render/primitives/geometry/GeometryAccumulator.js.map +1 -1
  49. package/lib/esm/render/primitives/mesh/MeshBuilderMap.js +1 -1
  50. package/lib/esm/render/primitives/mesh/MeshBuilderMap.js.map +1 -1
  51. package/lib/esm/render/primitives/mesh/MeshPrimitives.d.ts +4 -0
  52. package/lib/esm/render/primitives/mesh/MeshPrimitives.d.ts.map +1 -1
  53. package/lib/esm/render/primitives/mesh/MeshPrimitives.js.map +1 -1
  54. package/lib/esm/render/webgl/glsl/Color.js +1 -1
  55. package/lib/esm/render/webgl/glsl/Color.js.map +1 -1
  56. package/lib/esm/render/webgl/glsl/Decode.d.ts +2 -1
  57. package/lib/esm/render/webgl/glsl/Decode.d.ts.map +1 -1
  58. package/lib/esm/render/webgl/glsl/Decode.js +15 -1
  59. package/lib/esm/render/webgl/glsl/Decode.js.map +1 -1
  60. package/lib/esm/render/webgl/glsl/Edge.d.ts.map +1 -1
  61. package/lib/esm/render/webgl/glsl/Edge.js +5 -14
  62. package/lib/esm/render/webgl/glsl/Edge.js.map +1 -1
  63. package/lib/esm/render/webgl/glsl/FeatureSymbology.d.ts.map +1 -1
  64. package/lib/esm/render/webgl/glsl/FeatureSymbology.js +1 -3
  65. package/lib/esm/render/webgl/glsl/FeatureSymbology.js.map +1 -1
  66. package/lib/esm/render/webgl/glsl/Polyline.d.ts.map +1 -1
  67. package/lib/esm/render/webgl/glsl/Polyline.js +5 -16
  68. package/lib/esm/render/webgl/glsl/Polyline.js.map +1 -1
  69. package/lib/esm/render/webgl/glsl/Surface.d.ts.map +1 -1
  70. package/lib/esm/render/webgl/glsl/Surface.js +21 -22
  71. package/lib/esm/render/webgl/glsl/Surface.js.map +1 -1
  72. package/lib/esm/render/webgl/glsl/Vertex.d.ts +0 -2
  73. package/lib/esm/render/webgl/glsl/Vertex.d.ts.map +1 -1
  74. package/lib/esm/render/webgl/glsl/Vertex.js +17 -32
  75. package/lib/esm/render/webgl/glsl/Vertex.js.map +1 -1
  76. package/lib/esm/tile/IModelTileRequestChannels.d.ts +3 -3
  77. package/lib/esm/tile/IModelTileRequestChannels.d.ts.map +1 -1
  78. package/lib/esm/tile/IModelTileRequestChannels.js +7 -11
  79. package/lib/esm/tile/IModelTileRequestChannels.js.map +1 -1
  80. package/lib/esm/tile/TileAdmin.d.ts.map +1 -1
  81. package/lib/esm/tile/TileAdmin.js +0 -5
  82. package/lib/esm/tile/TileAdmin.js.map +1 -1
  83. package/lib/esm/tile/TileRequestChannels.d.ts +0 -4
  84. package/lib/esm/tile/TileRequestChannels.d.ts.map +1 -1
  85. package/lib/esm/tile/TileRequestChannels.js +1 -6
  86. package/lib/esm/tile/TileRequestChannels.js.map +1 -1
  87. package/package.json +20 -20
@@ -1 +1 @@
1
- {"version":3,"file":"MeshPrimitives.js","sourceRoot":"","sources":["../../../../../src/render/primitives/mesh/MeshPrimitives.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\r\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\r\n* See LICENSE.md in the project root for license terms and full copyright notice.\r\n*--------------------------------------------------------------------------------------------*/\r\n/** @packageDocumentation\r\n * @module Rendering\r\n */\r\n\r\nimport { assert } from \"@itwin/core-bentley\";\r\nimport { AuxChannel, AuxChannelData, Point2d, Point3d, Range3d } from \"@itwin/core-geometry\";\r\nimport {\r\n ColorIndex, EdgeArgs, Feature, FeatureIndex, FeatureIndexType, FeatureTable, FillFlags, LinePixels, MeshEdges, MeshPolyline, MeshPolylineList,\r\n OctEncodedNormal, PolylineData, PolylineEdgeArgs, PolylineFlags, QParams3d, QPoint3dList, RenderMaterial, RenderTexture, SilhouetteEdgeArgs,\r\n} from \"@itwin/core-common\";\r\nimport { InstancedGraphicParams } from \"../../InstancedGraphicParams\";\r\nimport { RenderGraphic } from \"../../RenderGraphic\";\r\nimport { RenderSystem } from \"../../RenderSystem\";\r\nimport { ColorMap } from \"../ColorMap\";\r\nimport { DisplayParams } from \"../DisplayParams\";\r\nimport { Triangle, TriangleList } from \"../Primitives\";\r\nimport { VertexKeyProps } from \"../VertexKey\";\r\n\r\n/** A Point3d[] with an [[add]] method used to enable compatibility with the [[MeshPointList]] union type.\r\n * It is provided a range to contain all of the points. Each point added to the list is transformed to be relative to\r\n * the center of that range.\r\n * In the finished graphic, a transform is applied to transform back from the range's center.\r\n * @internal\r\n */\r\nexport interface Point3dList extends Array<Point3d> {\r\n /** Identical to `push`, except it returns `void` instead of `number`; compatible with [QPoint3dList.add]($common). */\r\n add(point: Point3d): void;\r\n /** The range containing all of the points to be contained in the list, computed in advance. */\r\n range: Range3d;\r\n}\r\n\r\n/** The list of points associated with a [[Mesh]].\r\n * @see [[Mesh.Props.quantizePositions]] to specify whether points should be quantized or not.\r\n * @internal\r\n */\r\nexport type MeshPointList = Point3dList | QPoint3dList;\r\n\r\n/* Information needed to draw a set of indexed polylines using a shared vertex buffer.\r\n * @internal\r\n */\r\nexport interface PolylineArgs {\r\n colors: ColorIndex;\r\n features: FeatureIndex;\r\n width: number;\r\n linePixels: LinePixels;\r\n flags: PolylineFlags;\r\n points: QPoint3dList | Omit<Point3dList, \"add\">;\r\n polylines: PolylineData[];\r\n}\r\n\r\n/** @internal */\r\nexport namespace PolylineArgs {\r\n export function fromMesh(mesh: Mesh): PolylineArgs | undefined {\r\n if (!mesh.polylines || mesh.polylines.length === 0)\r\n return undefined;\r\n\r\n const polylines = [];\r\n for (const polyline of mesh.polylines) {\r\n const polylineData = new PolylineData();\r\n if (polylineData.init(polyline))\r\n polylines.push(polylineData);\r\n }\r\n\r\n if (polylines.length === 0)\r\n return undefined;\r\n\r\n const flags = new PolylineFlags(mesh.is2d, mesh.isPlanar);\r\n flags.isDisjoint = mesh.type === Mesh.PrimitiveType.Point;\r\n if (mesh.displayParams.regionEdgeType === DisplayParams.RegionEdgeType.Outline) {\r\n // This polyline is behaving as the edges of a region surface.\r\n if (!mesh.displayParams.gradient || mesh.displayParams.gradient.isOutlined)\r\n flags.setIsNormalEdge();\r\n else\r\n flags.setIsOutlineEdge(); // edges only displayed if fill undisplayed\r\n }\r\n\r\n const colors = new ColorIndex();\r\n mesh.colorMap.toColorIndex(colors, mesh.colors);\r\n\r\n const features = new FeatureIndex();\r\n mesh.toFeatureIndex(features);\r\n\r\n return {\r\n width: mesh.displayParams.width,\r\n linePixels: mesh.displayParams.linePixels,\r\n flags,\r\n polylines,\r\n points: mesh.points,\r\n colors,\r\n features,\r\n };\r\n }\r\n}\r\n\r\n/** The vertices of the edges are shared with those of the surface\r\n * @internal\r\n */\r\nexport class MeshArgsEdges {\r\n public edges = new EdgeArgs();\r\n public silhouettes = new SilhouetteEdgeArgs();\r\n public polylines = new PolylineEdgeArgs();\r\n public width = 0;\r\n public linePixels = LinePixels.Solid;\r\n\r\n public clear(): void {\r\n this.edges.clear();\r\n this.silhouettes.clear();\r\n this.polylines.clear();\r\n this.width = 0;\r\n this.linePixels = LinePixels.Solid;\r\n }\r\n public get isValid(): boolean { return this.edges.isValid || this.silhouettes.isValid || this.polylines.isValid; }\r\n}\r\n\r\n/* A carrier of information needed to describe a triangle mesh and its edges.\r\n * @internal\r\n */\r\nexport interface MeshArgs {\r\n edges?: MeshArgsEdges;\r\n vertIndices: number[];\r\n points: QPoint3dList | Omit<Point3dList, \"add\">;\r\n normals?: OctEncodedNormal[];\r\n colors: ColorIndex;\r\n features: FeatureIndex;\r\n fillFlags: FillFlags;\r\n isPlanar?: boolean;\r\n is2d?: boolean;\r\n hasBakedLighting?: boolean;\r\n isVolumeClassifier?: boolean;\r\n hasFixedNormals?: boolean;\r\n auxChannels?: ReadonlyArray<AuxChannel>;\r\n material?: RenderMaterial;\r\n textureMapping?: {\r\n texture: RenderTexture;\r\n uvParams: Point2d[];\r\n };\r\n}\r\n\r\n/** @internal */\r\nexport namespace MeshArgs {\r\n export function fromMesh(mesh: Mesh): MeshArgs | undefined {\r\n if (!mesh.triangles || mesh.triangles.isEmpty || mesh.points.length === 0)\r\n return undefined;\r\n\r\n const texture = mesh.displayParams.textureMapping?.texture;\r\n const textureMapping = texture && mesh.uvParams.length > 0 ? { texture, uvParams: mesh.uvParams } : undefined;\r\n\r\n const colors = new ColorIndex();\r\n mesh.colorMap.toColorIndex(colors, mesh.colors);\r\n\r\n const features = new FeatureIndex();\r\n mesh.toFeatureIndex(features);\r\n\r\n let edges;\r\n if (mesh.edges) {\r\n edges = new MeshArgsEdges();\r\n edges.width = mesh.displayParams.width;\r\n edges.linePixels = mesh.displayParams.linePixels;\r\n edges.edges.init(mesh.edges);\r\n edges.silhouettes.init(mesh.edges);\r\n\r\n const polylines = [];\r\n for (const meshPolyline of mesh.edges.polylines) {\r\n const polyline = new PolylineData();\r\n if (polyline.init(meshPolyline))\r\n polylines.push(polyline);\r\n }\r\n\r\n edges.polylines.init(polylines);\r\n }\r\n\r\n return {\r\n vertIndices: mesh.triangles.indices,\r\n points: mesh.points,\r\n normals: !mesh.displayParams.ignoreLighting && mesh.normals.length > 0 ? mesh.normals : undefined,\r\n textureMapping,\r\n colors,\r\n features,\r\n material: mesh.displayParams.material,\r\n fillFlags: mesh.displayParams.fillFlags,\r\n isPlanar: mesh.isPlanar,\r\n is2d: mesh.is2d,\r\n hasBakedLighting: true === mesh.hasBakedLighting,\r\n hasFixedNormals: false,\r\n isVolumeClassifier: true === mesh.isVolumeClassifier,\r\n edges,\r\n auxChannels: mesh.auxChannels,\r\n };\r\n }\r\n}\r\n\r\n/** @internal */\r\nexport class Mesh {\r\n private readonly _data: TriangleList | MeshPolylineList;\r\n public readonly points: MeshPointList;\r\n public readonly normals: OctEncodedNormal[] = [];\r\n public readonly uvParams: Point2d[] = [];\r\n public readonly colorMap: ColorMap = new ColorMap(); // used to be called ColorTable\r\n public colors: number[] = [];\r\n public edges?: MeshEdges;\r\n public readonly features?: Mesh.Features;\r\n public readonly type: Mesh.PrimitiveType;\r\n public readonly is2d: boolean;\r\n public readonly isPlanar: boolean;\r\n public readonly hasBakedLighting: boolean;\r\n public readonly isVolumeClassifier: boolean;\r\n public displayParams: DisplayParams;\r\n private _auxChannels?: AuxChannel[];\r\n\r\n private constructor(props: Mesh.Props) {\r\n const { displayParams, features, type, range, is2d, isPlanar } = props;\r\n this._data = Mesh.PrimitiveType.Mesh === type ? new TriangleList() : new MeshPolylineList();\r\n this.displayParams = displayParams;\r\n this.features = features;\r\n this.type = type;\r\n this.is2d = is2d;\r\n this.isPlanar = isPlanar;\r\n this.hasBakedLighting = (true === props.hasBakedLighting);\r\n this.isVolumeClassifier = (true === props.isVolumeClassifier);\r\n if (props.quantizePositions) {\r\n this.points = new QPoint3dList(QParams3d.fromRange(range));\r\n } else {\r\n const points = [] as unknown as Point3dList;\r\n points.range = range;\r\n const center = range.center;\r\n points.add = (pt: Point3d) => {\r\n // assert(range.containsPoint(pt)); rounding error triggers this sometimes...\r\n points.push(pt.minus(center));\r\n };\r\n this.points = points;\r\n }\r\n }\r\n\r\n public static create(props: Mesh.Props): Mesh { return new Mesh(props); }\r\n\r\n public get triangles(): TriangleList | undefined {\r\n return Mesh.PrimitiveType.Mesh === this.type ? this._data as TriangleList : undefined;\r\n }\r\n\r\n public get polylines(): MeshPolylineList | undefined {\r\n return Mesh.PrimitiveType.Mesh !== this.type ? this._data as MeshPolylineList : undefined;\r\n }\r\n\r\n public get auxChannels(): ReadonlyArray<AuxChannel> | undefined {\r\n return this._auxChannels;\r\n }\r\n\r\n public addAuxChannels(channels: ReadonlyArray<AuxChannel>, srcIndex: number): void {\r\n // The native version of this function appears to assume that all polyfaces added to the Mesh will have\r\n // the same number + type of aux channels.\r\n // ###TODO We should really produce a separate Mesh for each unique combination. For now just bail on mismatch.\r\n if (this._auxChannels) {\r\n if (this._auxChannels.length !== channels.length)\r\n return;\r\n\r\n for (let i = 0; i < channels.length; i++) {\r\n const src = channels[i];\r\n const dst = this._auxChannels[i];\r\n if (src.dataType !== dst.dataType || src.name !== dst.name || src.inputName !== dst.inputName)\r\n return;\r\n }\r\n }\r\n\r\n if (!this._auxChannels) {\r\n // Copy the channels, leaving each AuxData's values array empty.\r\n this._auxChannels = channels.map((x) => new AuxChannel(x.data.map((y) => new AuxChannelData(y.input, [])), x.dataType, x.name, x.inputName));\r\n }\r\n\r\n // Append the value at srcIndex from each source channel's data to our channels.\r\n for (let channelIndex = 0; channelIndex < channels.length; channelIndex++) {\r\n const srcChannel = channels[channelIndex];\r\n const dstChannel = this._auxChannels[channelIndex];\r\n const dstIndex = dstChannel.valueCount;\r\n for (let dataIndex = 0; dataIndex < srcChannel.data.length; dataIndex++) {\r\n const dstData = dstChannel.data[dataIndex];\r\n dstData.copyValues(srcChannel.data[dataIndex], dstIndex, srcIndex, dstChannel.entriesPerValue);\r\n }\r\n }\r\n }\r\n\r\n public toFeatureIndex(index: FeatureIndex): void {\r\n if (undefined !== this.features)\r\n this.features.toFeatureIndex(index);\r\n }\r\n\r\n public toMeshArgs(): MeshArgs | undefined {\r\n return MeshArgs.fromMesh(this);\r\n }\r\n\r\n public toPolylineArgs(): PolylineArgs | undefined {\r\n return PolylineArgs.fromMesh(this);\r\n }\r\n\r\n public getGraphics(system: RenderSystem, instancesOrViewIndependentOrigin?: InstancedGraphicParams | Point3d): RenderGraphic | undefined {\r\n const meshArgs = this.toMeshArgs();\r\n if (meshArgs)\r\n return system.createTriMesh(meshArgs, instancesOrViewIndependentOrigin);\r\n\r\n const plArgs = this.toPolylineArgs();\r\n return plArgs ? system.createIndexedPolylines(plArgs, instancesOrViewIndependentOrigin) : undefined;\r\n }\r\n\r\n public addPolyline(poly: MeshPolyline): void {\r\n const { type, polylines } = this;\r\n\r\n assert(Mesh.PrimitiveType.Polyline === type || Mesh.PrimitiveType.Point === type);\r\n assert(undefined !== polylines);\r\n\r\n if (Mesh.PrimitiveType.Polyline === type && poly.indices.length < 2)\r\n return;\r\n\r\n if (undefined !== polylines)\r\n polylines.push(poly);\r\n }\r\n\r\n public addTriangle(triangle: Triangle): void {\r\n const { triangles, type } = this;\r\n\r\n assert(Mesh.PrimitiveType.Mesh === type);\r\n assert(undefined !== triangles);\r\n\r\n if (undefined !== triangles)\r\n triangles.addTriangle(triangle);\r\n }\r\n\r\n public addVertex(props: VertexKeyProps): number {\r\n const { position, normal, uvParam, fillColor } = props;\r\n\r\n this.points.add(position);\r\n\r\n if (undefined !== normal)\r\n this.normals.push(normal);\r\n\r\n if (undefined !== uvParam)\r\n this.uvParams.push(uvParam);\r\n\r\n // Don't allocate color indices until we have non-uniform colors\r\n if (0 === this.colorMap.length) {\r\n this.colorMap.insert(fillColor);\r\n assert(this.colorMap.isUniform);\r\n assert(0 === this.colorMap.indexOf(fillColor));\r\n } else if (!this.colorMap.isUniform || !this.colorMap.hasColor(fillColor)) {\r\n // Back-fill uniform value (index=0) for existing vertices if previously uniform\r\n if (0 === this.colors.length)\r\n this.colors.length = this.points.length - 1;\r\n\r\n this.colors.push(this.colorMap.insert(fillColor));\r\n assert(!this.colorMap.isUniform);\r\n }\r\n\r\n return this.points.length - 1;\r\n }\r\n}\r\n\r\n/** @internal */\r\nexport namespace Mesh { // eslint-disable-line no-redeclare\r\n export enum PrimitiveType {\r\n Mesh, // eslint-disable-line @typescript-eslint/no-shadow\r\n Polyline,\r\n Point,\r\n }\r\n\r\n export class Features {\r\n public readonly table: FeatureTable;\r\n public indices: number[] = [];\r\n public uniform = 0;\r\n public initialized = false;\r\n\r\n public constructor(table: FeatureTable) { this.table = table; }\r\n\r\n public add(feat: Feature, numVerts: number): void {\r\n const index = this.table.insert(feat);\r\n if (!this.initialized) {\r\n // First feature - uniform.\r\n this.uniform = index;\r\n this.initialized = true;\r\n } else if (0 < this.indices.length) {\r\n // Already non-uniform\r\n this.indices.push(index);\r\n } else {\r\n // Second feature - back-fill uniform for existing verts\r\n while (this.indices.length < numVerts - 1)\r\n this.indices.push(this.uniform);\r\n\r\n this.indices.push(index);\r\n }\r\n }\r\n\r\n public setIndices(indices: number[]) {\r\n this.indices.length = 0;\r\n this.uniform = 0;\r\n this.initialized = 0 < indices.length;\r\n\r\n assert(0 < indices.length);\r\n if (1 === indices.length)\r\n this.uniform = indices[0];\r\n else if (1 < indices.length)\r\n this.indices = indices;\r\n }\r\n\r\n public toFeatureIndex(index: FeatureIndex): void {\r\n if (!this.initialized) {\r\n index.type = FeatureIndexType.Empty;\r\n } else if (this.indices.length === 0) {\r\n index.type = FeatureIndexType.Uniform;\r\n index.featureID = this.uniform;\r\n } else {\r\n index.type = FeatureIndexType.NonUniform;\r\n index.featureIDs = new Uint32Array(this.indices);\r\n }\r\n }\r\n }\r\n\r\n export interface Props {\r\n displayParams: DisplayParams;\r\n features?: Mesh.Features;\r\n type: Mesh.PrimitiveType;\r\n range: Range3d;\r\n quantizePositions: boolean;\r\n is2d: boolean;\r\n isPlanar: boolean;\r\n hasBakedLighting?: boolean;\r\n isVolumeClassifier?: boolean;\r\n }\r\n}\r\n\r\n/** @internal */\r\nexport class MeshList extends Array<Mesh> {\r\n public readonly features?: FeatureTable;\r\n public readonly range?: Range3d;\r\n constructor(features?: FeatureTable, range?: Range3d) {\r\n super();\r\n this.features = features;\r\n this.range = range;\r\n }\r\n}\r\n"]}
1
+ {"version":3,"file":"MeshPrimitives.js","sourceRoot":"","sources":["../../../../../src/render/primitives/mesh/MeshPrimitives.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\r\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\r\n* See LICENSE.md in the project root for license terms and full copyright notice.\r\n*--------------------------------------------------------------------------------------------*/\r\n/** @packageDocumentation\r\n * @module Rendering\r\n */\r\n\r\nimport { assert } from \"@itwin/core-bentley\";\r\nimport { AuxChannel, AuxChannelData, Point2d, Point3d, Range3d } from \"@itwin/core-geometry\";\r\nimport {\r\n ColorIndex, EdgeArgs, Feature, FeatureIndex, FeatureIndexType, FeatureTable, FillFlags, LinePixels, MeshEdges, MeshPolyline, MeshPolylineList,\r\n OctEncodedNormal, PolylineData, PolylineEdgeArgs, PolylineFlags, QParams3d, QPoint3dList, RenderMaterial, RenderTexture, SilhouetteEdgeArgs,\r\n} from \"@itwin/core-common\";\r\nimport { InstancedGraphicParams } from \"../../InstancedGraphicParams\";\r\nimport { RenderGraphic } from \"../../RenderGraphic\";\r\nimport { RenderSystem } from \"../../RenderSystem\";\r\nimport { ColorMap } from \"../ColorMap\";\r\nimport { DisplayParams } from \"../DisplayParams\";\r\nimport { Triangle, TriangleList } from \"../Primitives\";\r\nimport { VertexKeyProps } from \"../VertexKey\";\r\n\r\n/** A Point3d[] with an [[add]] method used to enable compatibility with the [[MeshPointList]] union type.\r\n * It is provided a range to contain all of the points. Each point added to the list is transformed to be relative to\r\n * the center of that range.\r\n * In the finished graphic, a transform is applied to transform back from the range's center.\r\n * @internal\r\n */\r\nexport interface Point3dList extends Array<Point3d> {\r\n /** Identical to `push`, except it returns `void` instead of `number`; compatible with [QPoint3dList.add]($common). */\r\n add(point: Point3d): void;\r\n /** The range containing all of the points to be contained in the list, computed in advance. */\r\n range: Range3d;\r\n}\r\n\r\n/** The list of points associated with a [[Mesh]].\r\n * @see [[Mesh.Props.quantizePositions]] to specify whether points should be quantized or not.\r\n * @internal\r\n */\r\nexport type MeshPointList = Point3dList | QPoint3dList;\r\n\r\n/* Information needed to draw a set of indexed polylines using a shared vertex buffer.\r\n * @internal\r\n */\r\nexport interface PolylineArgs {\r\n colors: ColorIndex;\r\n features: FeatureIndex;\r\n width: number;\r\n linePixels: LinePixels;\r\n flags: PolylineFlags;\r\n points: QPoint3dList | Omit<Point3dList, \"add\">;\r\n polylines: PolylineData[];\r\n}\r\n\r\n/** @internal */\r\nexport namespace PolylineArgs {\r\n export function fromMesh(mesh: Mesh): PolylineArgs | undefined {\r\n if (!mesh.polylines || mesh.polylines.length === 0)\r\n return undefined;\r\n\r\n const polylines = [];\r\n for (const polyline of mesh.polylines) {\r\n const polylineData = new PolylineData();\r\n if (polylineData.init(polyline))\r\n polylines.push(polylineData);\r\n }\r\n\r\n if (polylines.length === 0)\r\n return undefined;\r\n\r\n const flags = new PolylineFlags(mesh.is2d, mesh.isPlanar);\r\n flags.isDisjoint = mesh.type === Mesh.PrimitiveType.Point;\r\n if (mesh.displayParams.regionEdgeType === DisplayParams.RegionEdgeType.Outline) {\r\n // This polyline is behaving as the edges of a region surface.\r\n if (!mesh.displayParams.gradient || mesh.displayParams.gradient.isOutlined)\r\n flags.setIsNormalEdge();\r\n else\r\n flags.setIsOutlineEdge(); // edges only displayed if fill undisplayed\r\n }\r\n\r\n const colors = new ColorIndex();\r\n mesh.colorMap.toColorIndex(colors, mesh.colors);\r\n\r\n const features = new FeatureIndex();\r\n mesh.toFeatureIndex(features);\r\n\r\n return {\r\n width: mesh.displayParams.width,\r\n linePixels: mesh.displayParams.linePixels,\r\n flags,\r\n polylines,\r\n points: mesh.points,\r\n colors,\r\n features,\r\n };\r\n }\r\n}\r\n\r\n/** The vertices of the edges are shared with those of the surface\r\n * @internal\r\n */\r\nexport class MeshArgsEdges {\r\n public edges = new EdgeArgs();\r\n public silhouettes = new SilhouetteEdgeArgs();\r\n public polylines = new PolylineEdgeArgs();\r\n public width = 0;\r\n public linePixels = LinePixels.Solid;\r\n\r\n public clear(): void {\r\n this.edges.clear();\r\n this.silhouettes.clear();\r\n this.polylines.clear();\r\n this.width = 0;\r\n this.linePixels = LinePixels.Solid;\r\n }\r\n public get isValid(): boolean { return this.edges.isValid || this.silhouettes.isValid || this.polylines.isValid; }\r\n}\r\n\r\n/* A carrier of information needed to describe a triangle mesh and its edges.\r\n * @internal\r\n */\r\nexport interface MeshArgs {\r\n edges?: MeshArgsEdges;\r\n vertIndices: number[];\r\n points: QPoint3dList | Omit<Point3dList, \"add\">;\r\n normals?: OctEncodedNormal[];\r\n colors: ColorIndex;\r\n features: FeatureIndex;\r\n fillFlags: FillFlags;\r\n isPlanar?: boolean;\r\n is2d?: boolean;\r\n hasBakedLighting?: boolean;\r\n isVolumeClassifier?: boolean;\r\n hasFixedNormals?: boolean;\r\n auxChannels?: ReadonlyArray<AuxChannel>;\r\n material?: RenderMaterial;\r\n textureMapping?: {\r\n texture: RenderTexture;\r\n uvParams: Point2d[];\r\n };\r\n}\r\n\r\n/** @internal */\r\nexport namespace MeshArgs {\r\n export function fromMesh(mesh: Mesh): MeshArgs | undefined {\r\n if (!mesh.triangles || mesh.triangles.isEmpty || mesh.points.length === 0)\r\n return undefined;\r\n\r\n const texture = mesh.displayParams.textureMapping?.texture;\r\n const textureMapping = texture && mesh.uvParams.length > 0 ? { texture, uvParams: mesh.uvParams } : undefined;\r\n\r\n const colors = new ColorIndex();\r\n mesh.colorMap.toColorIndex(colors, mesh.colors);\r\n\r\n const features = new FeatureIndex();\r\n mesh.toFeatureIndex(features);\r\n\r\n let edges;\r\n if (mesh.edges) {\r\n edges = new MeshArgsEdges();\r\n edges.width = mesh.displayParams.width;\r\n edges.linePixels = mesh.displayParams.linePixels;\r\n edges.edges.init(mesh.edges);\r\n edges.silhouettes.init(mesh.edges);\r\n\r\n const polylines = [];\r\n for (const meshPolyline of mesh.edges.polylines) {\r\n const polyline = new PolylineData();\r\n if (polyline.init(meshPolyline))\r\n polylines.push(polyline);\r\n }\r\n\r\n edges.polylines.init(polylines);\r\n }\r\n\r\n return {\r\n vertIndices: mesh.triangles.indices,\r\n points: mesh.points,\r\n normals: !mesh.displayParams.ignoreLighting && mesh.normals.length > 0 ? mesh.normals : undefined,\r\n textureMapping,\r\n colors,\r\n features,\r\n material: mesh.displayParams.material,\r\n fillFlags: mesh.displayParams.fillFlags,\r\n isPlanar: mesh.isPlanar,\r\n is2d: mesh.is2d,\r\n hasBakedLighting: true === mesh.hasBakedLighting,\r\n hasFixedNormals: false,\r\n isVolumeClassifier: true === mesh.isVolumeClassifier,\r\n edges,\r\n auxChannels: mesh.auxChannels,\r\n };\r\n }\r\n}\r\n\r\n/** @internal */\r\nexport class Mesh {\r\n private readonly _data: TriangleList | MeshPolylineList;\r\n public readonly points: MeshPointList;\r\n public readonly normals: OctEncodedNormal[] = [];\r\n public readonly uvParams: Point2d[] = [];\r\n public readonly colorMap: ColorMap = new ColorMap(); // used to be called ColorTable\r\n public colors: number[] = [];\r\n public edges?: MeshEdges;\r\n public readonly features?: Mesh.Features;\r\n public readonly type: Mesh.PrimitiveType;\r\n public readonly is2d: boolean;\r\n public readonly isPlanar: boolean;\r\n public readonly hasBakedLighting: boolean;\r\n public readonly isVolumeClassifier: boolean;\r\n public displayParams: DisplayParams;\r\n private _auxChannels?: AuxChannel[];\r\n\r\n private constructor(props: Mesh.Props) {\r\n const { displayParams, features, type, range, is2d, isPlanar } = props;\r\n this._data = Mesh.PrimitiveType.Mesh === type ? new TriangleList() : new MeshPolylineList();\r\n this.displayParams = displayParams;\r\n this.features = features;\r\n this.type = type;\r\n this.is2d = is2d;\r\n this.isPlanar = isPlanar;\r\n this.hasBakedLighting = (true === props.hasBakedLighting);\r\n this.isVolumeClassifier = (true === props.isVolumeClassifier);\r\n if (props.quantizePositions) {\r\n this.points = new QPoint3dList(QParams3d.fromRange(range));\r\n } else {\r\n const points = [] as unknown as Point3dList;\r\n points.range = range;\r\n const center = range.center;\r\n points.add = (pt: Point3d) => {\r\n // assert(range.containsPoint(pt)); rounding error triggers this sometimes...\r\n points.push(pt.minus(center));\r\n };\r\n this.points = points;\r\n }\r\n }\r\n\r\n public static create(props: Mesh.Props): Mesh { return new Mesh(props); }\r\n\r\n public get triangles(): TriangleList | undefined {\r\n return Mesh.PrimitiveType.Mesh === this.type ? this._data as TriangleList : undefined;\r\n }\r\n\r\n public get polylines(): MeshPolylineList | undefined {\r\n return Mesh.PrimitiveType.Mesh !== this.type ? this._data as MeshPolylineList : undefined;\r\n }\r\n\r\n public get auxChannels(): ReadonlyArray<AuxChannel> | undefined {\r\n return this._auxChannels;\r\n }\r\n\r\n public addAuxChannels(channels: ReadonlyArray<AuxChannel>, srcIndex: number): void {\r\n // The native version of this function appears to assume that all polyfaces added to the Mesh will have\r\n // the same number + type of aux channels.\r\n // ###TODO We should really produce a separate Mesh for each unique combination. For now just bail on mismatch.\r\n if (this._auxChannels) {\r\n if (this._auxChannels.length !== channels.length)\r\n return;\r\n\r\n for (let i = 0; i < channels.length; i++) {\r\n const src = channels[i];\r\n const dst = this._auxChannels[i];\r\n if (src.dataType !== dst.dataType || src.name !== dst.name || src.inputName !== dst.inputName)\r\n return;\r\n }\r\n }\r\n\r\n if (!this._auxChannels) {\r\n // Copy the channels, leaving each AuxData's values array empty.\r\n this._auxChannels = channels.map((x) => new AuxChannel(x.data.map((y) => new AuxChannelData(y.input, [])), x.dataType, x.name, x.inputName));\r\n }\r\n\r\n // Append the value at srcIndex from each source channel's data to our channels.\r\n for (let channelIndex = 0; channelIndex < channels.length; channelIndex++) {\r\n const srcChannel = channels[channelIndex];\r\n const dstChannel = this._auxChannels[channelIndex];\r\n const dstIndex = dstChannel.valueCount;\r\n for (let dataIndex = 0; dataIndex < srcChannel.data.length; dataIndex++) {\r\n const dstData = dstChannel.data[dataIndex];\r\n dstData.copyValues(srcChannel.data[dataIndex], dstIndex, srcIndex, dstChannel.entriesPerValue);\r\n }\r\n }\r\n }\r\n\r\n public toFeatureIndex(index: FeatureIndex): void {\r\n if (undefined !== this.features)\r\n this.features.toFeatureIndex(index);\r\n }\r\n\r\n public toMeshArgs(): MeshArgs | undefined {\r\n return MeshArgs.fromMesh(this);\r\n }\r\n\r\n public toPolylineArgs(): PolylineArgs | undefined {\r\n return PolylineArgs.fromMesh(this);\r\n }\r\n\r\n public getGraphics(system: RenderSystem, instancesOrViewIndependentOrigin?: InstancedGraphicParams | Point3d): RenderGraphic | undefined {\r\n const meshArgs = this.toMeshArgs();\r\n if (meshArgs)\r\n return system.createTriMesh(meshArgs, instancesOrViewIndependentOrigin);\r\n\r\n const plArgs = this.toPolylineArgs();\r\n return plArgs ? system.createIndexedPolylines(plArgs, instancesOrViewIndependentOrigin) : undefined;\r\n }\r\n\r\n public addPolyline(poly: MeshPolyline): void {\r\n const { type, polylines } = this;\r\n\r\n assert(Mesh.PrimitiveType.Polyline === type || Mesh.PrimitiveType.Point === type);\r\n assert(undefined !== polylines);\r\n\r\n if (Mesh.PrimitiveType.Polyline === type && poly.indices.length < 2)\r\n return;\r\n\r\n if (undefined !== polylines)\r\n polylines.push(poly);\r\n }\r\n\r\n public addTriangle(triangle: Triangle): void {\r\n const { triangles, type } = this;\r\n\r\n assert(Mesh.PrimitiveType.Mesh === type);\r\n assert(undefined !== triangles);\r\n\r\n if (undefined !== triangles)\r\n triangles.addTriangle(triangle);\r\n }\r\n\r\n public addVertex(props: VertexKeyProps): number {\r\n const { position, normal, uvParam, fillColor } = props;\r\n\r\n this.points.add(position);\r\n\r\n if (undefined !== normal)\r\n this.normals.push(normal);\r\n\r\n if (undefined !== uvParam)\r\n this.uvParams.push(uvParam);\r\n\r\n // Don't allocate color indices until we have non-uniform colors\r\n if (0 === this.colorMap.length) {\r\n this.colorMap.insert(fillColor);\r\n assert(this.colorMap.isUniform);\r\n assert(0 === this.colorMap.indexOf(fillColor));\r\n } else if (!this.colorMap.isUniform || !this.colorMap.hasColor(fillColor)) {\r\n // Back-fill uniform value (index=0) for existing vertices if previously uniform\r\n if (0 === this.colors.length)\r\n this.colors.length = this.points.length - 1;\r\n\r\n this.colors.push(this.colorMap.insert(fillColor));\r\n assert(!this.colorMap.isUniform);\r\n }\r\n\r\n return this.points.length - 1;\r\n }\r\n}\r\n\r\n/** @internal */\r\nexport namespace Mesh { // eslint-disable-line no-redeclare\r\n export enum PrimitiveType {\r\n Mesh, // eslint-disable-line @typescript-eslint/no-shadow\r\n Polyline,\r\n Point,\r\n }\r\n\r\n export class Features {\r\n public readonly table: FeatureTable;\r\n public indices: number[] = [];\r\n public uniform = 0;\r\n public initialized = false;\r\n\r\n public constructor(table: FeatureTable) { this.table = table; }\r\n\r\n public add(feat: Feature, numVerts: number): void {\r\n const index = this.table.insert(feat);\r\n if (!this.initialized) {\r\n // First feature - uniform.\r\n this.uniform = index;\r\n this.initialized = true;\r\n } else if (0 < this.indices.length) {\r\n // Already non-uniform\r\n this.indices.push(index);\r\n } else {\r\n // Second feature - back-fill uniform for existing verts\r\n while (this.indices.length < numVerts - 1)\r\n this.indices.push(this.uniform);\r\n\r\n this.indices.push(index);\r\n }\r\n }\r\n\r\n public setIndices(indices: number[]) {\r\n this.indices.length = 0;\r\n this.uniform = 0;\r\n this.initialized = 0 < indices.length;\r\n\r\n assert(0 < indices.length);\r\n if (1 === indices.length)\r\n this.uniform = indices[0];\r\n else if (1 < indices.length)\r\n this.indices = indices;\r\n }\r\n\r\n public toFeatureIndex(index: FeatureIndex): void {\r\n if (!this.initialized) {\r\n index.type = FeatureIndexType.Empty;\r\n } else if (this.indices.length === 0) {\r\n index.type = FeatureIndexType.Uniform;\r\n index.featureID = this.uniform;\r\n } else {\r\n index.type = FeatureIndexType.NonUniform;\r\n index.featureIDs = new Uint32Array(this.indices);\r\n }\r\n }\r\n }\r\n\r\n export interface Props {\r\n displayParams: DisplayParams;\r\n features?: Mesh.Features;\r\n type: Mesh.PrimitiveType;\r\n range: Range3d;\r\n /** @note Support for unquantized positions has been temporarily, partially reverted - graphics that use them\r\n * will not currently display properly.\r\n * For now, always specify `true`.\r\n */\r\n quantizePositions: boolean;\r\n is2d: boolean;\r\n isPlanar: boolean;\r\n hasBakedLighting?: boolean;\r\n isVolumeClassifier?: boolean;\r\n }\r\n}\r\n\r\n/** @internal */\r\nexport class MeshList extends Array<Mesh> {\r\n public readonly features?: FeatureTable;\r\n public readonly range?: Range3d;\r\n constructor(features?: FeatureTable, range?: Range3d) {\r\n super();\r\n this.features = features;\r\n this.range = range;\r\n }\r\n}\r\n"]}
@@ -14,7 +14,7 @@ const Instancing_1 = require("./Instancing");
14
14
  // NB: Color in color table has pre-multiplied alpha - revert it.
15
15
  const computeElementColor = `
16
16
  float colorTableStart = u_vertParams.z * u_vertParams.w; // num rgba per-vertex times num vertices
17
- float colorIndex = decodeUInt16(g_usesQuantizedPosition ? g_vertLutData[1].zw : g_vertLutData[4].xy);
17
+ float colorIndex = decodeUInt16(g_vertLutData1.zw);
18
18
  vec2 tc = computeLUTCoords(colorTableStart+colorIndex, u_vertParams.xy, g_vert_center, 1.0);
19
19
  vec4 lutColor = TEXTURE(u_vertLUT, tc);
20
20
  lutColor.rgb /= max(0.0001, lutColor.a);
@@ -1 +1 @@
1
- {"version":3,"file":"Color.js","sourceRoot":"","sources":["../../../../../src/render/webgl/glsl/Color.ts"],"names":[],"mappings":";AAAA;;;+FAG+F;AAC/F;;GAEG;;;AAGH,6CAAgD;AAEhD,SAAS;AACT,8GAA8G;AAC9G,iEAAiE;AACjE,MAAM,mBAAmB,GAAG;;;;;;;CAO3B,CAAC;AACF,MAAM,WAAW,GAAG;;CAEnB,CAAC;AACF,MAAM,kBAAkB,GAAG;;;CAG1B,CAAC;AAEF,MAAM,4BAA4B,GAAG,mBAAmB,GAAG,kBAAkB,CAAC;AAC9E,MAAM,YAAY,GAAG,mBAAmB,GAAG,WAAW,CAAC;AACvD,MAAM,qBAAqB,GAAG,4BAA4B,GAAG,WAAW,CAAC;AAEzE,SAAS,eAAe,CAAC,IAAyB;IAChD,IAAI,IAAI,CAAC,qBAAqB,EAAE;QAC9B,IAAA,6BAAgB,EAAC,IAAI,CAAC,CAAC;QACvB,OAAO,qBAAqB,CAAC;KAC9B;SAAM;QACL,OAAO,YAAY,CAAC;KACrB;AACH,CAAC;AAED,WAAW;AACX,MAAM,gBAAgB,GAAG,iBAAiB,CAAC;AAE3C,gBAAgB;AAChB,SAAgB,QAAQ,CAAC,OAAuB;IAC9C,OAAO,CAAC,IAAI,CAAC,UAAU,CAAC,SAAS,gBAAqB,CAAC,IAAI,EAAE,EAAE;QAC7D,IAAI,CAAC,iBAAiB,CAAC,SAAS,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;YACpD,MAAM,OAAO,GAAG,MAAM,CAAC,QAAQ,CAAC,KAAM,CAAC;YACvC,MAAM,KAAK,GAAG,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;YAC9C,IAAI,KAAK,CAAC,SAAS,EAAE;gBACnB,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;aAC7B;QACH,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IACH,eAAe,CAAC,OAAO,EAAE,eAAe,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC;AAC1D,CAAC;AAXD,4BAWC;AAED,gBAAgB;AAChB,SAAgB,eAAe,CAAC,OAAuB,EAAE,iBAAyB;IAChF,OAAO,CAAC,UAAU,CAAC,SAAS,eAAoB,CAAC;IACjD,OAAO,CAAC,IAAI,CAAC,GAAG,2BAAyC,iBAAiB,CAAC,CAAC;IAC5E,OAAO,CAAC,IAAI,CAAC,GAAG,2BAA2C,gBAAgB,CAAC,CAAC;AAC/E,CAAC;AAJD,0CAIC","sourcesContent":["/*---------------------------------------------------------------------------------------------\r\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\r\n* See LICENSE.md in the project root for license terms and full copyright notice.\r\n*--------------------------------------------------------------------------------------------*/\r\n/** @packageDocumentation\r\n * @module Rendering\r\n */\r\n\r\nimport { FragmentShaderComponent, ProgramBuilder, VariableType, VertexShaderBuilder, VertexShaderComponent } from \"../ShaderBuilder\";\r\nimport { addInstanceColor } from \"./Instancing\";\r\n\r\n// Vertex\r\n// Color table is appended to vertex data. Compute the index of the vertex one-past-the-end of the vertex data\r\n// NB: Color in color table has pre-multiplied alpha - revert it.\r\nconst computeElementColor = `\r\n float colorTableStart = u_vertParams.z * u_vertParams.w; // num rgba per-vertex times num vertices\r\n float colorIndex = decodeUInt16(g_usesQuantizedPosition ? g_vertLutData[1].zw : g_vertLutData[4].xy);\r\n vec2 tc = computeLUTCoords(colorTableStart+colorIndex, u_vertParams.xy, g_vert_center, 1.0);\r\n vec4 lutColor = TEXTURE(u_vertLUT, tc);\r\n lutColor.rgb /= max(0.0001, lutColor.a);\r\n vec4 color = (u_shaderFlags[kShaderBit_NonUniformColor] ? lutColor : u_color);\r\n`;\r\nconst returnColor = `\r\n return color;\r\n`;\r\nconst applyInstanceColor = `\r\n color.rgb = mix(color.rgb, a_instanceRgba.rgb / 255.0, u_applyInstanceColor * extractInstanceBit(kOvrBit_Rgb));\r\n color.a = mix(color.a, a_instanceRgba.a / 255.0, u_applyInstanceColor * extractInstanceBit(kOvrBit_Alpha));\r\n`;\r\n\r\nconst computeInstancedElementColor = computeElementColor + applyInstanceColor;\r\nconst computeColor = computeElementColor + returnColor;\r\nconst computeInstancedColor = computeInstancedElementColor + returnColor;\r\n\r\nfunction getComputeColor(vert: VertexShaderBuilder): string {\r\n if (vert.usesInstancedGeometry) {\r\n addInstanceColor(vert);\r\n return computeInstancedColor;\r\n } else {\r\n return computeColor;\r\n }\r\n}\r\n\r\n// Fragment\r\nconst computeBaseColor = \"return v_color;\";\r\n\r\n/** @internal */\r\nexport function addColor(builder: ProgramBuilder) {\r\n builder.vert.addUniform(\"u_color\", VariableType.Vec4, (prog) => {\r\n prog.addGraphicUniform(\"u_color\", (uniform, params) => {\r\n const lutGeom = params.geometry.asLUT!;\r\n const color = lutGeom.getColor(params.target);\r\n if (color.isUniform) {\r\n color.uniform.bind(uniform);\r\n }\r\n });\r\n });\r\n addVaryingColor(builder, getComputeColor(builder.vert));\r\n}\r\n\r\n/** @internal */\r\nexport function addVaryingColor(builder: ProgramBuilder, computeVertexBase: string) {\r\n builder.addVarying(\"v_color\", VariableType.Vec4);\r\n builder.vert.set(VertexShaderComponent.ComputeBaseColor, computeVertexBase);\r\n builder.frag.set(FragmentShaderComponent.ComputeBaseColor, computeBaseColor);\r\n}\r\n"]}
1
+ {"version":3,"file":"Color.js","sourceRoot":"","sources":["../../../../../src/render/webgl/glsl/Color.ts"],"names":[],"mappings":";AAAA;;;+FAG+F;AAC/F;;GAEG;;;AAGH,6CAAgD;AAEhD,SAAS;AACT,8GAA8G;AAC9G,iEAAiE;AACjE,MAAM,mBAAmB,GAAG;;;;;;;CAO3B,CAAC;AACF,MAAM,WAAW,GAAG;;CAEnB,CAAC;AACF,MAAM,kBAAkB,GAAG;;;CAG1B,CAAC;AAEF,MAAM,4BAA4B,GAAG,mBAAmB,GAAG,kBAAkB,CAAC;AAC9E,MAAM,YAAY,GAAG,mBAAmB,GAAG,WAAW,CAAC;AACvD,MAAM,qBAAqB,GAAG,4BAA4B,GAAG,WAAW,CAAC;AAEzE,SAAS,eAAe,CAAC,IAAyB;IAChD,IAAI,IAAI,CAAC,qBAAqB,EAAE;QAC9B,IAAA,6BAAgB,EAAC,IAAI,CAAC,CAAC;QACvB,OAAO,qBAAqB,CAAC;KAC9B;SAAM;QACL,OAAO,YAAY,CAAC;KACrB;AACH,CAAC;AAED,WAAW;AACX,MAAM,gBAAgB,GAAG,iBAAiB,CAAC;AAE3C,gBAAgB;AAChB,SAAgB,QAAQ,CAAC,OAAuB;IAC9C,OAAO,CAAC,IAAI,CAAC,UAAU,CAAC,SAAS,gBAAqB,CAAC,IAAI,EAAE,EAAE;QAC7D,IAAI,CAAC,iBAAiB,CAAC,SAAS,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;YACpD,MAAM,OAAO,GAAG,MAAM,CAAC,QAAQ,CAAC,KAAM,CAAC;YACvC,MAAM,KAAK,GAAG,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;YAC9C,IAAI,KAAK,CAAC,SAAS,EAAE;gBACnB,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;aAC7B;QACH,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IACH,eAAe,CAAC,OAAO,EAAE,eAAe,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC;AAC1D,CAAC;AAXD,4BAWC;AAED,gBAAgB;AAChB,SAAgB,eAAe,CAAC,OAAuB,EAAE,iBAAyB;IAChF,OAAO,CAAC,UAAU,CAAC,SAAS,eAAoB,CAAC;IACjD,OAAO,CAAC,IAAI,CAAC,GAAG,2BAAyC,iBAAiB,CAAC,CAAC;IAC5E,OAAO,CAAC,IAAI,CAAC,GAAG,2BAA2C,gBAAgB,CAAC,CAAC;AAC/E,CAAC;AAJD,0CAIC","sourcesContent":["/*---------------------------------------------------------------------------------------------\r\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\r\n* See LICENSE.md in the project root for license terms and full copyright notice.\r\n*--------------------------------------------------------------------------------------------*/\r\n/** @packageDocumentation\r\n * @module Rendering\r\n */\r\n\r\nimport { FragmentShaderComponent, ProgramBuilder, VariableType, VertexShaderBuilder, VertexShaderComponent } from \"../ShaderBuilder\";\r\nimport { addInstanceColor } from \"./Instancing\";\r\n\r\n// Vertex\r\n// Color table is appended to vertex data. Compute the index of the vertex one-past-the-end of the vertex data\r\n// NB: Color in color table has pre-multiplied alpha - revert it.\r\nconst computeElementColor = `\r\n float colorTableStart = u_vertParams.z * u_vertParams.w; // num rgba per-vertex times num vertices\r\n float colorIndex = decodeUInt16(g_vertLutData1.zw);\r\n vec2 tc = computeLUTCoords(colorTableStart+colorIndex, u_vertParams.xy, g_vert_center, 1.0);\r\n vec4 lutColor = TEXTURE(u_vertLUT, tc);\r\n lutColor.rgb /= max(0.0001, lutColor.a);\r\n vec4 color = (u_shaderFlags[kShaderBit_NonUniformColor] ? lutColor : u_color);\r\n`;\r\nconst returnColor = `\r\n return color;\r\n`;\r\nconst applyInstanceColor = `\r\n color.rgb = mix(color.rgb, a_instanceRgba.rgb / 255.0, u_applyInstanceColor * extractInstanceBit(kOvrBit_Rgb));\r\n color.a = mix(color.a, a_instanceRgba.a / 255.0, u_applyInstanceColor * extractInstanceBit(kOvrBit_Alpha));\r\n`;\r\n\r\nconst computeInstancedElementColor = computeElementColor + applyInstanceColor;\r\nconst computeColor = computeElementColor + returnColor;\r\nconst computeInstancedColor = computeInstancedElementColor + returnColor;\r\n\r\nfunction getComputeColor(vert: VertexShaderBuilder): string {\r\n if (vert.usesInstancedGeometry) {\r\n addInstanceColor(vert);\r\n return computeInstancedColor;\r\n } else {\r\n return computeColor;\r\n }\r\n}\r\n\r\n// Fragment\r\nconst computeBaseColor = \"return v_color;\";\r\n\r\n/** @internal */\r\nexport function addColor(builder: ProgramBuilder) {\r\n builder.vert.addUniform(\"u_color\", VariableType.Vec4, (prog) => {\r\n prog.addGraphicUniform(\"u_color\", (uniform, params) => {\r\n const lutGeom = params.geometry.asLUT!;\r\n const color = lutGeom.getColor(params.target);\r\n if (color.isUniform) {\r\n color.uniform.bind(uniform);\r\n }\r\n });\r\n });\r\n addVaryingColor(builder, getComputeColor(builder.vert));\r\n}\r\n\r\n/** @internal */\r\nexport function addVaryingColor(builder: ProgramBuilder, computeVertexBase: string) {\r\n builder.addVarying(\"v_color\", VariableType.Vec4);\r\n builder.vert.set(VertexShaderComponent.ComputeBaseColor, computeVertexBase);\r\n builder.frag.set(FragmentShaderComponent.ComputeBaseColor, computeBaseColor);\r\n}\r\n"]}
@@ -31,5 +31,6 @@ export declare function addUnpackAndNormalize2Bytes(builder: ShaderBuilder): voi
31
31
  * From https://github.com/CesiumGS/cesium/blob/main/Source/Shaders/Builtin/Functions/unpackFloat.glsl
32
32
  * @internal
33
33
  */
34
- export declare const decodeFloat32 = "\nfloat decodeFloat32(vec4 packedFloat) {\n float sign = 1.0 - step(128.0, packedFloat[3]) * 2.0;\n float exponent = 2.0 * mod(packedFloat[3], 128.0) + step(128.0, packedFloat[2]) - 127.0; \n if (exponent == -127.0)\n return 0.0;\n\n float mantissa = mod(packedFloat[2], 128.0) * 65536.0 + packedFloat[1] * 256.0 + packedFloat[0] + float(0x800000);\n float result = sign * exp2(exponent - 23.0) * mantissa;\n return result;\n}\n";
34
+ export declare const decodeFloat32 = "\nfloat decodeFloat32(vec4 packedFloat) {\n float sign = 1.0 - step(128.0, packedFloat[3]) * 2.0;\n float exponent = 2.0 * mod(packedFloat[3], 128.0) + step(128.0, packedFloat[2]) - 127.0;\n if (exponent == -127.0)\n return 0.0;\n\n float mantissa = mod(packedFloat[2], 128.0) * 65536.0 + packedFloat[1] * 256.0 + packedFloat[0] + float(0x800000);\n float result = sign * exp2(exponent - 23.0) * mantissa;\n return result;\n}\n";
35
+ export declare const decode3Float32 = "\n// This expects an array of 4 vec3s, where each vec4 contains a slice of all 3 of the packed floats in .xyz\n// pf0 is in [0].x, pf1 is in [0].y, and pf2 in [0].z\n// e.g.: packedFloat[0] = vec3(pf0.x, pf1.x, pf2.x)\n// likewise .y info is in [1], .z in [2], and .w in [3]\nvec3 decode3Float32(vec3 packedFloat[4]) {\n vec3 sign = 1.0 - step(128.0, packedFloat[3].xyz) * 2.0;\n vec3 exponent = 2.0 * mod(packedFloat[3].xyz, 128.0) + step(128.0, packedFloat[2].xyz) - 127.0;\n vec3 zeroFlag = vec3(notEqual(vec3(-127.0), exponent));\n vec3 mantissa = mod(packedFloat[2].xyz, 128.0) * 65536.0 + packedFloat[1].xyz * 256.0 + packedFloat[0].xyz + float(0x800000);\n vec3 result = sign * exp2(exponent - 23.0) * mantissa * zeroFlag;\n return result;\n}\n";
35
36
  //# sourceMappingURL=Decode.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"Decode.d.ts","sourceRoot":"","sources":["../../../../../src/render/webgl/glsl/Decode.ts"],"names":[],"mappings":"AAIA;;GAEG;AAEH,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAEjD,gBAAgB;AAChB,eAAO,MAAM,YAAY,gGAIxB,CAAC;AAEF,gBAAgB;AAChB,eAAO,MAAM,YAAY,2HAIxB,CAAC;AAEF,gBAAgB;AAChB,eAAO,MAAM,YAAY,gGAExB,CAAC;AAEF,gBAAgB;AAChB,eAAO,MAAM,YAAY,sIAGxB,CAAC;AAEF,gBAAgB;AAChB,eAAO,MAAM,cAAc,mGAE1B,CAAC;AAEF,gBAAgB;AAChB,eAAO,MAAM,cAAc,mWAU1B,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,UAAU,qEAItB,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,YAAY,mJAQxB,CAAC;AAEF,gBAAgB;AAChB,eAAO,MAAM,wBAAwB,uFAIpC,CAAC;AAEF,gBAAgB;AAChB,wBAAgB,2BAA2B,CAAC,OAAO,EAAE,aAAa,GAAG,IAAI,CAGxE;AAED;;;;GAIG;AACH,eAAO,MAAM,aAAa,6bAWzB,CAAC"}
1
+ {"version":3,"file":"Decode.d.ts","sourceRoot":"","sources":["../../../../../src/render/webgl/glsl/Decode.ts"],"names":[],"mappings":"AAIA;;GAEG;AAEH,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAEjD,gBAAgB;AAChB,eAAO,MAAM,YAAY,gGAIxB,CAAC;AAEF,gBAAgB;AAChB,eAAO,MAAM,YAAY,2HAIxB,CAAC;AAEF,gBAAgB;AAChB,eAAO,MAAM,YAAY,gGAExB,CAAC;AAEF,gBAAgB;AAChB,eAAO,MAAM,YAAY,sIAGxB,CAAC;AAEF,gBAAgB;AAChB,eAAO,MAAM,cAAc,mGAE1B,CAAC;AAEF,gBAAgB;AAChB,eAAO,MAAM,cAAc,mWAU1B,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,UAAU,qEAItB,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,YAAY,mJAQxB,CAAC;AAEF,gBAAgB;AAChB,eAAO,MAAM,wBAAwB,uFAIpC,CAAC;AAEF,gBAAgB;AAChB,wBAAgB,2BAA2B,CAAC,OAAO,EAAE,aAAa,GAAG,IAAI,CAGxE;AAED;;;;GAIG;AACH,eAAO,MAAM,aAAa,ybAWzB,CAAC;AAEF,eAAO,MAAM,cAAc,0vBAa1B,CAAC"}
@@ -7,7 +7,7 @@
7
7
  * @module WebGL
8
8
  */
9
9
  Object.defineProperty(exports, "__esModule", { value: true });
10
- exports.decodeFloat32 = exports.addUnpackAndNormalize2Bytes = exports.unpackAndNormalize2Bytes = exports.unpack2Bytes = exports.pack2Bytes = exports.encodeDepthRgb = exports.decodeDepthRgb = exports.unquantize2d = exports.unquantize3d = exports.decodeUint24 = exports.decodeUint16 = void 0;
10
+ exports.decode3Float32 = exports.decodeFloat32 = exports.addUnpackAndNormalize2Bytes = exports.unpackAndNormalize2Bytes = exports.unpack2Bytes = exports.pack2Bytes = exports.encodeDepthRgb = exports.decodeDepthRgb = exports.unquantize2d = exports.unquantize3d = exports.decodeUint24 = exports.decodeUint16 = void 0;
11
11
  /** @internal */
12
12
  exports.decodeUint16 = `
13
13
  float decodeUInt16(vec2 v) {
@@ -85,7 +85,7 @@ exports.addUnpackAndNormalize2Bytes = addUnpackAndNormalize2Bytes;
85
85
  exports.decodeFloat32 = `
86
86
  float decodeFloat32(vec4 packedFloat) {
87
87
  float sign = 1.0 - step(128.0, packedFloat[3]) * 2.0;
88
- float exponent = 2.0 * mod(packedFloat[3], 128.0) + step(128.0, packedFloat[2]) - 127.0;
88
+ float exponent = 2.0 * mod(packedFloat[3], 128.0) + step(128.0, packedFloat[2]) - 127.0;
89
89
  if (exponent == -127.0)
90
90
  return 0.0;
91
91
 
@@ -94,4 +94,18 @@ float decodeFloat32(vec4 packedFloat) {
94
94
  return result;
95
95
  }
96
96
  `;
97
+ exports.decode3Float32 = `
98
+ // This expects an array of 4 vec3s, where each vec4 contains a slice of all 3 of the packed floats in .xyz
99
+ // pf0 is in [0].x, pf1 is in [0].y, and pf2 in [0].z
100
+ // e.g.: packedFloat[0] = vec3(pf0.x, pf1.x, pf2.x)
101
+ // likewise .y info is in [1], .z in [2], and .w in [3]
102
+ vec3 decode3Float32(vec3 packedFloat[4]) {
103
+ vec3 sign = 1.0 - step(128.0, packedFloat[3].xyz) * 2.0;
104
+ vec3 exponent = 2.0 * mod(packedFloat[3].xyz, 128.0) + step(128.0, packedFloat[2].xyz) - 127.0;
105
+ vec3 zeroFlag = vec3(notEqual(vec3(-127.0), exponent));
106
+ vec3 mantissa = mod(packedFloat[2].xyz, 128.0) * 65536.0 + packedFloat[1].xyz * 256.0 + packedFloat[0].xyz + float(0x800000);
107
+ vec3 result = sign * exp2(exponent - 23.0) * mantissa * zeroFlag;
108
+ return result;
109
+ }
110
+ `;
97
111
  //# sourceMappingURL=Decode.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"Decode.js","sourceRoot":"","sources":["../../../../../src/render/webgl/glsl/Decode.ts"],"names":[],"mappings":";AAAA;;;+FAG+F;AAC/F;;GAEG;;;AAIH,gBAAgB;AACH,QAAA,YAAY,GAAG;;;;CAI3B,CAAC;AAEF,gBAAgB;AACH,QAAA,YAAY,GAAG;;;;CAI3B,CAAC;AAEF,gBAAgB;AACH,QAAA,YAAY,GAAG;;CAE3B,CAAC;AAEF,gBAAgB;AACH,QAAA,YAAY,GAAG;;;CAG3B,CAAC;AAEF,gBAAgB;AACH,QAAA,cAAc,GAAG;;CAE7B,CAAC;AAEF,gBAAgB;AACH,QAAA,cAAc,GAAG;;;;;;;;;;CAU7B,CAAC;AAEF;;GAEG;AACU,QAAA,UAAU,GAAG;;;;CAIzB,CAAC;AAEF;;GAEG;AACU,QAAA,YAAY,GAAG;;;;;;;;CAQ3B,CAAC;AAEF,gBAAgB;AACH,QAAA,wBAAwB,GAAG;;;;CAIvC,CAAC;AAEF,gBAAgB;AAChB,SAAgB,2BAA2B,CAAC,OAAsB;IAChE,OAAO,CAAC,WAAW,CAAC,oBAAY,CAAC,CAAC;IAClC,OAAO,CAAC,WAAW,CAAC,gCAAwB,CAAC,CAAC;AAChD,CAAC;AAHD,kEAGC;AAED;;;;GAIG;AACU,QAAA,aAAa,GAAG;;;;;;;;;;;CAW5B,CAAC","sourcesContent":["/*---------------------------------------------------------------------------------------------\r\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\r\n* See LICENSE.md in the project root for license terms and full copyright notice.\r\n*--------------------------------------------------------------------------------------------*/\r\n/** @packageDocumentation\r\n * @module WebGL\r\n */\r\n\r\nimport { ShaderBuilder } from \"../ShaderBuilder\";\r\n\r\n/** @internal */\r\nexport const decodeUint16 = `\r\nfloat decodeUInt16(vec2 v) {\r\n return dot(v, vec2(1.0, 256.0)); // v.x | (v.y << 8)\r\n}\r\n`;\r\n\r\n/** @internal */\r\nexport const decodeUint24 = `\r\nfloat decodeUInt24(vec3 v) {\r\n return dot(v, vec3(1.0, 256.0, 256.0*256.0)); // v.x | (v.y << 8) | (v.z << 16)\r\n}\r\n`;\r\n\r\n/** @internal */\r\nexport const unquantize3d = `\r\nvec3 unquantize3d(vec3 qpos, vec3 origin, vec3 scale) { return origin + scale * qpos; }\r\n`;\r\n\r\n/** @internal */\r\nexport const unquantize2d = `\r\n// params.xy = origin. params.zw = scale.\r\nvec2 unquantize2d(vec2 qpos, vec4 params) { return params.xy + params.zw * qpos; }\r\n`;\r\n\r\n/** @internal */\r\nexport const decodeDepthRgb = `\r\nfloat decodeDepthRgb(vec3 rgb) { return dot(rgb, vec3(1.0, 1.0 / 255.0, 1.0 / 65025.0)); }\r\n`;\r\n\r\n/** @internal */\r\nexport const encodeDepthRgb = `\r\nvec3 encodeDepthRgb(float depth) {\r\n // 1.0 must be reduced slightly; otherwise decoding will produce zero. It's the far plane, so we don't care (and decoding produces 1.0 anyway).\r\n depth = min(depth, 16777215.0/16777216.0);\r\n\r\n vec3 enc = vec3(1.0, 255.0, 65025.0) * depth;\r\n enc = fract(enc);\r\n enc.xy -= enc.yz / 255.0;\r\n return enc;\r\n}\r\n`;\r\n\r\n/** Pack 2 floats in the integer range [0..255] into a single float equal to v.x | (v.y << 8)\r\n * @internal\r\n */\r\nexport const pack2Bytes = `\r\nfloat pack2Bytes(vec2 v) {\r\n return v.x + (v.y * 256.0);\r\n}\r\n`;\r\n\r\n/** Unpack a float in the integer range [0..0xffff] into a vec2 containing 2 integers in the range [0..255]\r\n * @internal\r\n */\r\nexport const unpack2Bytes = `\r\nvec2 unpack2Bytes(float f) {\r\n f = floor(f + 0.5);\r\n vec2 v;\r\n v.y = floor(f / 256.0);\r\n v.x = floor(f - v.y * 256.0);\r\n return v;\r\n}\r\n`;\r\n\r\n/** @internal */\r\nexport const unpackAndNormalize2Bytes = `\r\nvec2 unpackAndNormalize2Bytes(float f) {\r\n return unpack2Bytes(f) / 255.0;\r\n}\r\n`;\r\n\r\n/** @internal */\r\nexport function addUnpackAndNormalize2Bytes(builder: ShaderBuilder): void {\r\n builder.addFunction(unpack2Bytes);\r\n builder.addFunction(unpackAndNormalize2Bytes);\r\n}\r\n\r\n/** Given an IEEE 32-bit float stuffed into a RGBA unsigned byte texture, extract the float.\r\n * The input vec4 components are in the integer range [0..255].\r\n * From https://github.com/CesiumGS/cesium/blob/main/Source/Shaders/Builtin/Functions/unpackFloat.glsl\r\n * @internal\r\n */\r\nexport const decodeFloat32 = `\r\nfloat decodeFloat32(vec4 packedFloat) {\r\n float sign = 1.0 - step(128.0, packedFloat[3]) * 2.0;\r\n float exponent = 2.0 * mod(packedFloat[3], 128.0) + step(128.0, packedFloat[2]) - 127.0; \r\n if (exponent == -127.0)\r\n return 0.0;\r\n\r\n float mantissa = mod(packedFloat[2], 128.0) * 65536.0 + packedFloat[1] * 256.0 + packedFloat[0] + float(0x800000);\r\n float result = sign * exp2(exponent - 23.0) * mantissa;\r\n return result;\r\n}\r\n`;\r\n"]}
1
+ {"version":3,"file":"Decode.js","sourceRoot":"","sources":["../../../../../src/render/webgl/glsl/Decode.ts"],"names":[],"mappings":";AAAA;;;+FAG+F;AAC/F;;GAEG;;;AAIH,gBAAgB;AACH,QAAA,YAAY,GAAG;;;;CAI3B,CAAC;AAEF,gBAAgB;AACH,QAAA,YAAY,GAAG;;;;CAI3B,CAAC;AAEF,gBAAgB;AACH,QAAA,YAAY,GAAG;;CAE3B,CAAC;AAEF,gBAAgB;AACH,QAAA,YAAY,GAAG;;;CAG3B,CAAC;AAEF,gBAAgB;AACH,QAAA,cAAc,GAAG;;CAE7B,CAAC;AAEF,gBAAgB;AACH,QAAA,cAAc,GAAG;;;;;;;;;;CAU7B,CAAC;AAEF;;GAEG;AACU,QAAA,UAAU,GAAG;;;;CAIzB,CAAC;AAEF;;GAEG;AACU,QAAA,YAAY,GAAG;;;;;;;;CAQ3B,CAAC;AAEF,gBAAgB;AACH,QAAA,wBAAwB,GAAG;;;;CAIvC,CAAC;AAEF,gBAAgB;AAChB,SAAgB,2BAA2B,CAAC,OAAsB;IAChE,OAAO,CAAC,WAAW,CAAC,oBAAY,CAAC,CAAC;IAClC,OAAO,CAAC,WAAW,CAAC,gCAAwB,CAAC,CAAC;AAChD,CAAC;AAHD,kEAGC;AAED;;;;GAIG;AACU,QAAA,aAAa,GAAG;;;;;;;;;;;CAW5B,CAAC;AAEW,QAAA,cAAc,GAAG;;;;;;;;;;;;;CAa7B,CAAC","sourcesContent":["/*---------------------------------------------------------------------------------------------\r\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\r\n* See LICENSE.md in the project root for license terms and full copyright notice.\r\n*--------------------------------------------------------------------------------------------*/\r\n/** @packageDocumentation\r\n * @module WebGL\r\n */\r\n\r\nimport { ShaderBuilder } from \"../ShaderBuilder\";\r\n\r\n/** @internal */\r\nexport const decodeUint16 = `\r\nfloat decodeUInt16(vec2 v) {\r\n return dot(v, vec2(1.0, 256.0)); // v.x | (v.y << 8)\r\n}\r\n`;\r\n\r\n/** @internal */\r\nexport const decodeUint24 = `\r\nfloat decodeUInt24(vec3 v) {\r\n return dot(v, vec3(1.0, 256.0, 256.0*256.0)); // v.x | (v.y << 8) | (v.z << 16)\r\n}\r\n`;\r\n\r\n/** @internal */\r\nexport const unquantize3d = `\r\nvec3 unquantize3d(vec3 qpos, vec3 origin, vec3 scale) { return origin + scale * qpos; }\r\n`;\r\n\r\n/** @internal */\r\nexport const unquantize2d = `\r\n// params.xy = origin. params.zw = scale.\r\nvec2 unquantize2d(vec2 qpos, vec4 params) { return params.xy + params.zw * qpos; }\r\n`;\r\n\r\n/** @internal */\r\nexport const decodeDepthRgb = `\r\nfloat decodeDepthRgb(vec3 rgb) { return dot(rgb, vec3(1.0, 1.0 / 255.0, 1.0 / 65025.0)); }\r\n`;\r\n\r\n/** @internal */\r\nexport const encodeDepthRgb = `\r\nvec3 encodeDepthRgb(float depth) {\r\n // 1.0 must be reduced slightly; otherwise decoding will produce zero. It's the far plane, so we don't care (and decoding produces 1.0 anyway).\r\n depth = min(depth, 16777215.0/16777216.0);\r\n\r\n vec3 enc = vec3(1.0, 255.0, 65025.0) * depth;\r\n enc = fract(enc);\r\n enc.xy -= enc.yz / 255.0;\r\n return enc;\r\n}\r\n`;\r\n\r\n/** Pack 2 floats in the integer range [0..255] into a single float equal to v.x | (v.y << 8)\r\n * @internal\r\n */\r\nexport const pack2Bytes = `\r\nfloat pack2Bytes(vec2 v) {\r\n return v.x + (v.y * 256.0);\r\n}\r\n`;\r\n\r\n/** Unpack a float in the integer range [0..0xffff] into a vec2 containing 2 integers in the range [0..255]\r\n * @internal\r\n */\r\nexport const unpack2Bytes = `\r\nvec2 unpack2Bytes(float f) {\r\n f = floor(f + 0.5);\r\n vec2 v;\r\n v.y = floor(f / 256.0);\r\n v.x = floor(f - v.y * 256.0);\r\n return v;\r\n}\r\n`;\r\n\r\n/** @internal */\r\nexport const unpackAndNormalize2Bytes = `\r\nvec2 unpackAndNormalize2Bytes(float f) {\r\n return unpack2Bytes(f) / 255.0;\r\n}\r\n`;\r\n\r\n/** @internal */\r\nexport function addUnpackAndNormalize2Bytes(builder: ShaderBuilder): void {\r\n builder.addFunction(unpack2Bytes);\r\n builder.addFunction(unpackAndNormalize2Bytes);\r\n}\r\n\r\n/** Given an IEEE 32-bit float stuffed into a RGBA unsigned byte texture, extract the float.\r\n * The input vec4 components are in the integer range [0..255].\r\n * From https://github.com/CesiumGS/cesium/blob/main/Source/Shaders/Builtin/Functions/unpackFloat.glsl\r\n * @internal\r\n */\r\nexport const decodeFloat32 = `\r\nfloat decodeFloat32(vec4 packedFloat) {\r\n float sign = 1.0 - step(128.0, packedFloat[3]) * 2.0;\r\n float exponent = 2.0 * mod(packedFloat[3], 128.0) + step(128.0, packedFloat[2]) - 127.0;\r\n if (exponent == -127.0)\r\n return 0.0;\r\n\r\n float mantissa = mod(packedFloat[2], 128.0) * 65536.0 + packedFloat[1] * 256.0 + packedFloat[0] + float(0x800000);\r\n float result = sign * exp2(exponent - 23.0) * mantissa;\r\n return result;\r\n}\r\n`;\r\n\r\nexport const decode3Float32 = `\r\n// This expects an array of 4 vec3s, where each vec4 contains a slice of all 3 of the packed floats in .xyz\r\n// pf0 is in [0].x, pf1 is in [0].y, and pf2 in [0].z\r\n// e.g.: packedFloat[0] = vec3(pf0.x, pf1.x, pf2.x)\r\n// likewise .y info is in [1], .z in [2], and .w in [3]\r\nvec3 decode3Float32(vec3 packedFloat[4]) {\r\n vec3 sign = 1.0 - step(128.0, packedFloat[3].xyz) * 2.0;\r\n vec3 exponent = 2.0 * mod(packedFloat[3].xyz, 128.0) + step(128.0, packedFloat[2].xyz) - 127.0;\r\n vec3 zeroFlag = vec3(notEqual(vec3(-127.0), exponent));\r\n vec3 mantissa = mod(packedFloat[2].xyz, 128.0) * 65536.0 + packedFloat[1].xyz * 256.0 + packedFloat[0].xyz + float(0x800000);\r\n vec3 result = sign * exp2(exponent - 23.0) * mantissa * zeroFlag;\r\n return result;\r\n}\r\n`;\r\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"Edge.d.ts","sourceRoot":"","sources":["../../../../../src/render/webgl/glsl/Edge.ts"],"names":[],"mappings":"AAIA;;GAEG;AAIH,OAAO,EAA2B,cAAc,EAAgB,mBAAmB,EAAyB,MAAM,kBAAkB,CAAC;AACrI,OAAO,EAAE,UAAU,EAAE,WAAW,EAAc,MAAM,mBAAmB,CAAC;AAcxE,oBAAY,eAAe,GAAG,aAAa,GAAG,YAAY,GAAG,aAAa,CAAC;AA6L3E,gBAAgB;AAChB,wBAAgB,eAAe,CAAC,IAAI,EAAE,mBAAmB,GAAG,IAAI,CAY/D;AAyFD,gBAAgB;AAChB,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,eAAe,EAAE,SAAS,EAAE,WAAW,EAAE,UAAU,EAAE,UAAU,GAAG,cAAc,CAOvH"}
1
+ {"version":3,"file":"Edge.d.ts","sourceRoot":"","sources":["../../../../../src/render/webgl/glsl/Edge.ts"],"names":[],"mappings":"AAIA;;GAEG;AAIH,OAAO,EAA2B,cAAc,EAAgB,mBAAmB,EAAyB,MAAM,kBAAkB,CAAC;AACrI,OAAO,EAAE,UAAU,EAAE,WAAW,EAAc,MAAM,mBAAmB,CAAC;AAcxE,oBAAY,eAAe,GAAG,aAAa,GAAG,YAAY,GAAG,aAAa,CAAC;AAoL3E,gBAAgB;AAChB,wBAAgB,eAAe,CAAC,IAAI,EAAE,mBAAmB,GAAG,IAAI,CAY/D;AAyFD,gBAAgB;AAChB,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,eAAe,EAAE,SAAS,EAAE,WAAW,EAAE,UAAU,EAAE,UAAU,GAAG,cAAc,CAOvH"}
@@ -24,20 +24,11 @@ const LookupTable_1 = require("./LookupTable");
24
24
  const FeatureSymbology_1 = require("./FeatureSymbology");
25
25
  const computeOtherPos = `
26
26
  vec2 tc = computeLUTCoords(g_otherIndex, u_vertParams.xy, g_vert_center, u_vertParams.z);
27
- if (g_usesQuantizedPosition) {
28
- vec4 enc1 = floor(TEXTURE(u_vertLUT, tc) * 255.0 + 0.5);
29
- tc.x += g_vert_stepX;
30
- vec4 enc2 = floor(TEXTURE(u_vertLUT, tc) * 255.0 + 0.5);
31
- vec3 qpos = vec3(decodeUInt16(enc1.xy), decodeUInt16(enc1.zw), decodeUInt16(enc2.xy));
32
- g_otherPos = unquantizePosition(qpos, u_qOrigin, u_qScale);
33
- } else {
34
- for (int i = 0; i < 3; i++) {
35
- g_otherPos[i] = decodeFloat32(floor(TEXTURE(u_vertLUT, tc) * 255.0 + 0.5));
36
- tc.x += g_vert_stepX;
37
- }
38
-
39
- g_otherPos.w = 1.0;
40
- }
27
+ vec4 enc0 = floor(TEXTURE(u_vertLUT, tc) * 255.0 + 0.5);
28
+ tc.x += g_vert_stepX;
29
+ vec4 enc1 = floor(TEXTURE(u_vertLUT, tc) * 255.0 + 0.5);
30
+ vec3 qpos = vec3(decodeUInt16(enc0.xy), decodeUInt16(enc0.zw), decodeUInt16(enc1.xy));
31
+ g_otherPos = unquantizePosition(qpos, u_qOrigin, u_qScale);
41
32
  `;
42
33
  const decodeEndPointAndQuadIndices = `
43
34
  g_otherIndex = decodeUInt24(a_endPointAndQuadIndices.xyz);
@@ -1 +1 @@
1
- {"version":3,"file":"Edge.js","sourceRoot":"","sources":["../../../../../src/render/webgl/glsl/Edge.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\r\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\r\n* See LICENSE.md in the project root for license terms and full copyright notice.\r\n*--------------------------------------------------------------------------------------------*/\r\n/** @packageDocumentation\r\n * @module WebGL\r\n */\r\n\r\nimport { assert } from \"@itwin/core-bentley\";\r\nimport { AttributeMap } from \"../AttributeMap\";\r\nimport { FragmentShaderComponent, ProgramBuilder, VariableType, VertexShaderBuilder, VertexShaderComponent } from \"../ShaderBuilder\";\r\nimport { IsAnimated, IsInstanced, IsThematic } from \"../TechniqueFlags\";\r\nimport { TechniqueId } from \"../TechniqueId\";\r\nimport { TextureUnit } from \"../RenderFlags\";\r\nimport { addAnimation } from \"./Animation\";\r\nimport { addColor } from \"./Color\";\r\nimport { addFrustum, addShaderFlags } from \"./Common\";\r\nimport { addWhiteOnWhiteReversal } from \"./Fragment\";\r\nimport { addAdjustWidth, addLineCode } from \"./Polyline\";\r\nimport { octDecodeNormal } from \"./Surface\";\r\nimport { addLineWeight, addModelViewMatrix, addNormalMatrix, addProjectionMatrix } from \"./Vertex\";\r\nimport { addModelToWindowCoordinates, addViewport } from \"./Viewport\";\r\nimport { addLookupTable } from \"./LookupTable\";\r\nimport { addRenderOrder, addRenderOrderConstants } from \"./FeatureSymbology\";\r\n\r\nexport type EdgeBuilderType = \"SegmentEdge\" | \"Silhouette\" | \"IndexedEdge\";\r\n\r\nconst computeOtherPos = `\r\n vec2 tc = computeLUTCoords(g_otherIndex, u_vertParams.xy, g_vert_center, u_vertParams.z);\r\n if (g_usesQuantizedPosition) {\r\n vec4 enc1 = floor(TEXTURE(u_vertLUT, tc) * 255.0 + 0.5);\r\n tc.x += g_vert_stepX;\r\n vec4 enc2 = floor(TEXTURE(u_vertLUT, tc) * 255.0 + 0.5);\r\n vec3 qpos = vec3(decodeUInt16(enc1.xy), decodeUInt16(enc1.zw), decodeUInt16(enc2.xy));\r\n g_otherPos = unquantizePosition(qpos, u_qOrigin, u_qScale);\r\n } else {\r\n for (int i = 0; i < 3; i++) {\r\n g_otherPos[i] = decodeFloat32(floor(TEXTURE(u_vertLUT, tc) * 255.0 + 0.5));\r\n tc.x += g_vert_stepX;\r\n }\r\n\r\n g_otherPos.w = 1.0;\r\n }\r\n`;\r\n\r\nconst decodeEndPointAndQuadIndices = `\r\n g_otherIndex = decodeUInt24(a_endPointAndQuadIndices.xyz);\r\n${computeOtherPos}\r\n g_quadIndex = a_endPointAndQuadIndices.w;\r\n`;\r\n\r\nconst animateEndPoint = `g_otherPos.xyz += computeAnimationDisplacement(g_otherIndex, u_animDispParams.x, u_animDispParams.y, u_animDispParams.z, u_qAnimDispOrigin, u_qAnimDispScale);`;\r\n\r\n// a_pos is a 24-bit index into edge lookup table.\r\n// First six bytes of lookup table entry are the pair of 24-bit indices identifying the endpoints of the edge in the vertex table.\r\n// Return the 24-bit index of \"this\" vertex in the vertex table encoded in a vec3.\r\nconst computeIndexedQuantizedPosition = `\r\n g_vertexId = gl_VertexID % 6;\r\n if (g_vertexId == 0)\r\n g_quadIndex = 0.0;\r\n else if (g_vertexId == 2 || g_vertexId == 3)\r\n g_quadIndex = 1.0;\r\n else if (g_vertexId == 1 || g_vertexId == 4)\r\n g_quadIndex = 2.0;\r\n else\r\n g_quadIndex = 3.0;\r\n\r\n // The following formula computes the texel index, but suffers from precision issues for large edge indices, so we must compute using integers instead.\r\n // float edgeBaseIndex = u_edgeParams.z * 1.5 + u_edgeParams.w * 0.25 + (edgeIndex - u_edgeParams.z) * 2.5);\r\n\r\n float fEdgeIndex = decodeUInt24(a_pos);\r\n g_isSilhouette = fEdgeIndex >= u_edgeParams.z;\r\n int edgeIndex = int(fEdgeIndex);\r\n bool isEven = 0 == (edgeIndex & 1);\r\n float edgeBaseIndex;\r\n if (!g_isSilhouette) {\r\n edgeBaseIndex = float(edgeIndex + (edgeIndex / 2));\r\n } else {\r\n // If both pad and edgeIndex produce a remainder (0.5 for each - pad is a multiple of 2), we must add one to the index to account for it.\r\n int shift = isEven ? 0 : 1;\r\n int pad = int(u_edgeParams.w);\r\n if (0 != (pad % 4)) {\r\n isEven = !isEven;\r\n shift = shift + 1;\r\n }\r\n\r\n // s = num segments p = num padding bytes i = edge index\r\n // texel index = 1.5s + .25p + 2.5(i - s) = 1.5s + .25p + 2.5i - 2.5s = 2.5i + .25p - s = i + i + i/2 + p/4 - s\r\n edgeBaseIndex = float(edgeIndex + edgeIndex + edgeIndex / 2 + pad / 4 - int(u_edgeParams.z) + shift / 2);\r\n }\r\n\r\n vec2 tc = compute_edge_coords(floor(edgeBaseIndex));\r\n vec4 s0 = floor(TEXTURE(u_edgeLUT, tc) * 255.0 + 0.5);\r\n tc.x += g_edge_stepX;\r\n vec4 s1 = floor(TEXTURE(u_edgeLUT, tc) * 255.0 + 0.5);\r\n tc.x += g_edge_stepX;\r\n vec4 s2 = floor(TEXTURE(u_edgeLUT, tc) * 255.0 + 0.5);\r\n\r\n vec3 i0 = isEven ? s0.xyz : vec3(s0.zw, s1.x);\r\n vec3 i1 = isEven ? vec3(s0.w, s1.xy) : s1.yzw;\r\n g_otherIndexIndex = g_quadIndex < 2.0 ? i1 : i0;\r\n\r\n g_normals = isEven ? vec4(s1.zw, s2.xy) : s2;\r\n\r\n return g_quadIndex < 2.0 ? i0 : i1;\r\n`;\r\n\r\nconst initializeIndexed = `\r\n g_otherIndex = decodeUInt24(g_otherIndexIndex);\r\n${computeOtherPos}\r\n`;\r\n\r\n// IndexedEdgeGeometry.renderOrder returns Edge or PlanarEdge. Adjust if silhouette for output to pick buffers.\r\nconst computeIndexedRenderOrder = `\r\n if (g_isSilhouette)\r\n v_renderOrder = kRenderOrder_Edge == u_renderOrder ? kRenderOrder_Silhouette : kRenderOrder_PlanarSilhouette;\r\n else\r\n v_renderOrder = u_renderOrder;\r\n`;\r\n\r\nconst checkForSilhouetteDiscard = `\r\n if (kFrustumType_Perspective != u_frustum.z) {\r\n float perpTol = 4.75e-6;\r\n return (n0.z * n1.z > perpTol); // orthographic.\r\n } else {\r\n float perpTol = 2.5e-4;\r\n vec4 viewPos = MAT_MV * rawPos; // perspective\r\n vec3 toEye = normalize(viewPos.xyz);\r\n float dot0 = dot(n0, toEye);\r\n float dot1 = dot(n1, toEye);\r\n\r\n if (dot0 * dot1 > perpTol)\r\n return true;\r\n\r\n // Need to discard if either is non-silhouette.\r\n vec4 otherPosition = g_otherPos;\r\n viewPos = MAT_MV * otherPosition;\r\n toEye = normalize(viewPos.xyz);\r\n dot0 = dot(n0, toEye);\r\n dot1 = dot(n1, toEye);\r\n\r\n return dot0 * dot1 > perpTol;\r\n }\r\n`;\r\n\r\nconst checkForSilhouetteDiscardNonIndexed = `\r\n vec3 n0 = MAT_NORM * octDecodeNormal(a_normals.xy);\r\n vec3 n1 = MAT_NORM * octDecodeNormal(a_normals.zw);\r\n${checkForSilhouetteDiscard}\r\n`;\r\n\r\nconst checkForSilhouetteDiscardIndexed = `\r\n if (!g_isSilhouette)\r\n return false;\r\n\r\n vec3 n0 = MAT_NORM * octDecodeNormal(g_normals.xy);\r\n vec3 n1 = MAT_NORM * octDecodeNormal(g_normals.zw);\r\n${checkForSilhouetteDiscard}\r\n`;\r\n\r\nconst computePosition = `\r\n v_lnInfo = vec4(0.0, 0.0, 0.0, 0.0); // init and set flag to false\r\n vec4 other = g_otherPos;\r\n float miterAdjust = 0.0;\r\n float weight = computeLineWeight();\r\n\r\n vec4 pos;\r\n g_windowPos = modelToWindowCoordinates(rawPos, other, pos, v_eyeSpace);\r\n if (g_windowPos.w == 0.0) // Clipped out.\r\n return g_windowPos;\r\n\r\n vec4 otherPos;\r\n vec3 otherMvPos;\r\n vec4 projOther = modelToWindowCoordinates(other, rawPos, otherPos, otherMvPos);\r\n\r\n g_windowDir = projOther.xy - g_windowPos.xy;\r\n\r\n adjustWidth(weight, g_windowDir, g_windowPos.xy);\r\n g_windowDir = normalize(g_windowDir);\r\n\r\n vec2 perp = vec2(-g_windowDir.y, g_windowDir.x);\r\n float perpDist = weight / 2.0;\r\n float alongDist = 0.0;\r\n\r\n perpDist *= sign(0.5 - float(g_quadIndex == 0.0 || g_quadIndex == 3.0)); // negate for index 0 and 3\r\n alongDist += distance(rawPos, other) * float(g_quadIndex >= 2.0); // index 2 and 3 correspond to 'far' endpoint of segment\r\n\r\n pos.x += perp.x * perpDist * 2.0 * pos.w / u_viewport.x;\r\n pos.y += perp.y * perpDist * 2.0 * pos.w / u_viewport.y;\r\n\r\n lineCodeEyePos = .5 * (rawPos + other);\r\n lineCodeDist = alongDist;\r\n\r\n return pos;\r\n`;\r\nconst lineCodeArgs = \"g_windowDir, g_windowPos, 0.0\";\r\n\r\nconst adjustContrast = `\r\n float bgi = u_bgIntensity;\r\n if (bgi < 0.0)\r\n return baseColor;\r\n\r\n float s;\r\n float rgbi = baseColor.r * 0.3 + baseColor.g * 0.59 + baseColor.b * 0.11;\r\n if (rgbi > 0.81)\r\n s = bgi > 0.57 ? 0.0 : 0.699;\r\n else if (rgbi > 0.57)\r\n s = bgi > 0.57 ? 0.0 : 1.0;\r\n else\r\n s = bgi < 0.81 ? 1.0 : 0.699;\r\n\r\n return vec4(vec3(s), baseColor.a);\r\n`;\r\n\r\n/** @internal */\r\nexport function addEdgeContrast(vert: VertexShaderBuilder): void {\r\n vert.addUniform(\"u_bgIntensity\", VariableType.Float, (prog) => {\r\n prog.addGraphicUniform(\"u_bgIntensity\", (uniform, params) => {\r\n let bgi = -1;\r\n if (params.geometry.isEdge && params.target.currentEdgeSettings.wantContrastingColor(params.target.currentViewFlags.renderMode))\r\n bgi = params.target.uniforms.style.backgroundIntensity;\r\n\r\n uniform.setUniform1f(bgi);\r\n });\r\n });\r\n\r\n vert.set(VertexShaderComponent.AdjustContrast, adjustContrast);\r\n}\r\n\r\nconst edgeLutParams = new Float32Array(4);\r\n\r\nfunction createBase(type: EdgeBuilderType, instanced: IsInstanced, isAnimated: IsAnimated): ProgramBuilder {\r\n const isInstanced = IsInstanced.Yes === instanced;\r\n const isSilhouette = \"Silhouette\" === type;\r\n const isIndexed = \"IndexedEdge\" === type;\r\n const techId = isSilhouette ? TechniqueId.SilhouetteEdge : (isIndexed ? TechniqueId.IndexedEdge : TechniqueId.Edge);\r\n const attrMap = AttributeMap.findAttributeMap(techId, isInstanced);\r\n\r\n const builder = new ProgramBuilder(attrMap, { maxRgbaPerVertex: 5, instanced: isInstanced });\r\n const vert = builder.vert;\r\n\r\n vert.addGlobal(\"g_otherPos\", VariableType.Vec4);\r\n vert.addGlobal(\"g_quadIndex\", VariableType.Float);\r\n vert.addGlobal(\"g_windowPos\", VariableType.Vec4);\r\n vert.addGlobal(\"g_windowDir\", VariableType.Vec2);\r\n vert.addGlobal(\"g_otherIndex\", VariableType.Float);\r\n\r\n if (isIndexed) {\r\n vert.addGlobal(\"g_vertexId\", VariableType.Int);\r\n vert.addGlobal(\"g_otherIndexIndex\", VariableType.Vec3);\r\n vert.addGlobal(\"g_isSilhouette\", VariableType.Boolean, \"false\");\r\n vert.addGlobal(\"g_normals\", VariableType.Vec4);\r\n\r\n const initLut = addLookupTable(vert, \"edge\", \"1.0\");\r\n vert.addUniform(\"u_edgeLUT\", VariableType.Sampler2D, (prog) => {\r\n prog.addGraphicUniform(\"u_edgeLUT\", (uniform, params) => {\r\n const edge = params.geometry.asIndexedEdge;\r\n assert(undefined !== edge);\r\n edge.edgeLut.texture.bindSampler(uniform, TextureUnit.EdgeLUT);\r\n });\r\n });\r\n\r\n vert.addUniform(\"u_edgeParams\", VariableType.Vec4, (prog) => {\r\n prog.addGraphicUniform(\"u_edgeParams\", (uniform, params) => {\r\n const edge = params.geometry.asIndexedEdge;\r\n assert(undefined !== edge);\r\n edgeLutParams[0] = edge.edgeLut.texture.width;\r\n edgeLutParams[1] = edge.edgeLut.texture.height;\r\n edgeLutParams[2] = edge.edgeLut.numSegments;\r\n edgeLutParams[3] = edge.edgeLut.silhouettePadding;\r\n uniform.setUniform4fv(edgeLutParams);\r\n });\r\n });\r\n\r\n vert.set(VertexShaderComponent.ComputeQuantizedPosition, `${initLut}\\n\\n${computeIndexedQuantizedPosition}`);\r\n vert.addInitializer(initializeIndexed);\r\n\r\n addRenderOrder(vert);\r\n addRenderOrderConstants(vert);\r\n builder.addInlineComputedVarying(\"v_renderOrder\", VariableType.Float, computeIndexedRenderOrder);\r\n builder.frag.set(FragmentShaderComponent.OverrideRenderOrder, \"return v_renderOrder;\");\r\n } else {\r\n vert.addInitializer(decodeEndPointAndQuadIndices);\r\n }\r\n\r\n if (isAnimated) {\r\n addAnimation(vert, false, IsThematic.No);\r\n vert.addInitializer(animateEndPoint);\r\n }\r\n\r\n vert.addGlobal(\"lineCodeEyePos\", VariableType.Vec4);\r\n vert.addGlobal(\"lineCodeDist\", VariableType.Float, \"0.0\");\r\n\r\n addModelToWindowCoordinates(vert); // adds u_mvp, u_viewportTransformation, and sets g_eyeSpace\r\n addProjectionMatrix(vert);\r\n addLineCode(builder, lineCodeArgs);\r\n builder.addVarying(\"v_eyeSpace\", VariableType.Vec3);\r\n vert.set(VertexShaderComponent.ComputePosition, computePosition);\r\n builder.addVarying(\"v_lnInfo\", VariableType.Vec4);\r\n addAdjustWidth(vert);\r\n\r\n addViewport(vert);\r\n addModelViewMatrix(vert);\r\n\r\n addLineWeight(vert);\r\n\r\n if (isSilhouette || isIndexed) {\r\n addNormalMatrix(vert, instanced);\r\n addFrustum(builder);\r\n vert.addFunction(octDecodeNormal);\r\n vert.set(VertexShaderComponent.CheckForEarlyDiscard, isSilhouette ? checkForSilhouetteDiscardNonIndexed : checkForSilhouetteDiscardIndexed);\r\n }\r\n\r\n return builder;\r\n}\r\n\r\n/** @internal */\r\nexport function createEdgeBuilder(type: EdgeBuilderType, instanced: IsInstanced, isAnimated: IsAnimated): ProgramBuilder {\r\n const builder = createBase(type, instanced, isAnimated);\r\n addShaderFlags(builder);\r\n addColor(builder);\r\n addEdgeContrast(builder.vert);\r\n addWhiteOnWhiteReversal(builder.frag);\r\n return builder;\r\n}\r\n"]}
1
+ {"version":3,"file":"Edge.js","sourceRoot":"","sources":["../../../../../src/render/webgl/glsl/Edge.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\r\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\r\n* See LICENSE.md in the project root for license terms and full copyright notice.\r\n*--------------------------------------------------------------------------------------------*/\r\n/** @packageDocumentation\r\n * @module WebGL\r\n */\r\n\r\nimport { assert } from \"@itwin/core-bentley\";\r\nimport { AttributeMap } from \"../AttributeMap\";\r\nimport { FragmentShaderComponent, ProgramBuilder, VariableType, VertexShaderBuilder, VertexShaderComponent } from \"../ShaderBuilder\";\r\nimport { IsAnimated, IsInstanced, IsThematic } from \"../TechniqueFlags\";\r\nimport { TechniqueId } from \"../TechniqueId\";\r\nimport { TextureUnit } from \"../RenderFlags\";\r\nimport { addAnimation } from \"./Animation\";\r\nimport { addColor } from \"./Color\";\r\nimport { addFrustum, addShaderFlags } from \"./Common\";\r\nimport { addWhiteOnWhiteReversal } from \"./Fragment\";\r\nimport { addAdjustWidth, addLineCode } from \"./Polyline\";\r\nimport { octDecodeNormal } from \"./Surface\";\r\nimport { addLineWeight, addModelViewMatrix, addNormalMatrix, addProjectionMatrix } from \"./Vertex\";\r\nimport { addModelToWindowCoordinates, addViewport } from \"./Viewport\";\r\nimport { addLookupTable } from \"./LookupTable\";\r\nimport { addRenderOrder, addRenderOrderConstants } from \"./FeatureSymbology\";\r\n\r\nexport type EdgeBuilderType = \"SegmentEdge\" | \"Silhouette\" | \"IndexedEdge\";\r\n\r\nconst computeOtherPos = `\r\n vec2 tc = computeLUTCoords(g_otherIndex, u_vertParams.xy, g_vert_center, u_vertParams.z);\r\n vec4 enc0 = floor(TEXTURE(u_vertLUT, tc) * 255.0 + 0.5);\r\n tc.x += g_vert_stepX;\r\n vec4 enc1 = floor(TEXTURE(u_vertLUT, tc) * 255.0 + 0.5);\r\n vec3 qpos = vec3(decodeUInt16(enc0.xy), decodeUInt16(enc0.zw), decodeUInt16(enc1.xy));\r\n g_otherPos = unquantizePosition(qpos, u_qOrigin, u_qScale);\r\n`;\r\n\r\nconst decodeEndPointAndQuadIndices = `\r\n g_otherIndex = decodeUInt24(a_endPointAndQuadIndices.xyz);\r\n${computeOtherPos}\r\n g_quadIndex = a_endPointAndQuadIndices.w;\r\n`;\r\n\r\nconst animateEndPoint = `g_otherPos.xyz += computeAnimationDisplacement(g_otherIndex, u_animDispParams.x, u_animDispParams.y, u_animDispParams.z, u_qAnimDispOrigin, u_qAnimDispScale);`;\r\n\r\n// a_pos is a 24-bit index into edge lookup table.\r\n// First six bytes of lookup table entry are the pair of 24-bit indices identifying the endpoints of the edge in the vertex table.\r\n// Return the 24-bit index of \"this\" vertex in the vertex table encoded in a vec3.\r\nconst computeIndexedQuantizedPosition = `\r\n g_vertexId = gl_VertexID % 6;\r\n if (g_vertexId == 0)\r\n g_quadIndex = 0.0;\r\n else if (g_vertexId == 2 || g_vertexId == 3)\r\n g_quadIndex = 1.0;\r\n else if (g_vertexId == 1 || g_vertexId == 4)\r\n g_quadIndex = 2.0;\r\n else\r\n g_quadIndex = 3.0;\r\n\r\n // The following formula computes the texel index, but suffers from precision issues for large edge indices, so we must compute using integers instead.\r\n // float edgeBaseIndex = u_edgeParams.z * 1.5 + u_edgeParams.w * 0.25 + (edgeIndex - u_edgeParams.z) * 2.5);\r\n\r\n float fEdgeIndex = decodeUInt24(a_pos);\r\n g_isSilhouette = fEdgeIndex >= u_edgeParams.z;\r\n int edgeIndex = int(fEdgeIndex);\r\n bool isEven = 0 == (edgeIndex & 1);\r\n float edgeBaseIndex;\r\n if (!g_isSilhouette) {\r\n edgeBaseIndex = float(edgeIndex + (edgeIndex / 2));\r\n } else {\r\n // If both pad and edgeIndex produce a remainder (0.5 for each - pad is a multiple of 2), we must add one to the index to account for it.\r\n int shift = isEven ? 0 : 1;\r\n int pad = int(u_edgeParams.w);\r\n if (0 != (pad % 4)) {\r\n isEven = !isEven;\r\n shift = shift + 1;\r\n }\r\n\r\n // s = num segments p = num padding bytes i = edge index\r\n // texel index = 1.5s + .25p + 2.5(i - s) = 1.5s + .25p + 2.5i - 2.5s = 2.5i + .25p - s = i + i + i/2 + p/4 - s\r\n edgeBaseIndex = float(edgeIndex + edgeIndex + edgeIndex / 2 + pad / 4 - int(u_edgeParams.z) + shift / 2);\r\n }\r\n\r\n vec2 tc = compute_edge_coords(floor(edgeBaseIndex));\r\n vec4 s0 = floor(TEXTURE(u_edgeLUT, tc) * 255.0 + 0.5);\r\n tc.x += g_edge_stepX;\r\n vec4 s1 = floor(TEXTURE(u_edgeLUT, tc) * 255.0 + 0.5);\r\n tc.x += g_edge_stepX;\r\n vec4 s2 = floor(TEXTURE(u_edgeLUT, tc) * 255.0 + 0.5);\r\n\r\n vec3 i0 = isEven ? s0.xyz : vec3(s0.zw, s1.x);\r\n vec3 i1 = isEven ? vec3(s0.w, s1.xy) : s1.yzw;\r\n g_otherIndexIndex = g_quadIndex < 2.0 ? i1 : i0;\r\n\r\n g_normals = isEven ? vec4(s1.zw, s2.xy) : s2;\r\n\r\n return g_quadIndex < 2.0 ? i0 : i1;\r\n`;\r\n\r\nconst initializeIndexed = `\r\n g_otherIndex = decodeUInt24(g_otherIndexIndex);\r\n${computeOtherPos}\r\n`;\r\n\r\n// IndexedEdgeGeometry.renderOrder returns Edge or PlanarEdge. Adjust if silhouette for output to pick buffers.\r\nconst computeIndexedRenderOrder = `\r\n if (g_isSilhouette)\r\n v_renderOrder = kRenderOrder_Edge == u_renderOrder ? kRenderOrder_Silhouette : kRenderOrder_PlanarSilhouette;\r\n else\r\n v_renderOrder = u_renderOrder;\r\n`;\r\n\r\nconst checkForSilhouetteDiscard = `\r\n if (kFrustumType_Perspective != u_frustum.z) {\r\n float perpTol = 4.75e-6;\r\n return (n0.z * n1.z > perpTol); // orthographic.\r\n } else {\r\n float perpTol = 2.5e-4;\r\n vec4 viewPos = MAT_MV * rawPos; // perspective\r\n vec3 toEye = normalize(viewPos.xyz);\r\n float dot0 = dot(n0, toEye);\r\n float dot1 = dot(n1, toEye);\r\n\r\n if (dot0 * dot1 > perpTol)\r\n return true;\r\n\r\n // Need to discard if either is non-silhouette.\r\n vec4 otherPosition = g_otherPos;\r\n viewPos = MAT_MV * otherPosition;\r\n toEye = normalize(viewPos.xyz);\r\n dot0 = dot(n0, toEye);\r\n dot1 = dot(n1, toEye);\r\n\r\n return dot0 * dot1 > perpTol;\r\n }\r\n`;\r\n\r\nconst checkForSilhouetteDiscardNonIndexed = `\r\n vec3 n0 = MAT_NORM * octDecodeNormal(a_normals.xy);\r\n vec3 n1 = MAT_NORM * octDecodeNormal(a_normals.zw);\r\n${checkForSilhouetteDiscard}\r\n`;\r\n\r\nconst checkForSilhouetteDiscardIndexed = `\r\n if (!g_isSilhouette)\r\n return false;\r\n\r\n vec3 n0 = MAT_NORM * octDecodeNormal(g_normals.xy);\r\n vec3 n1 = MAT_NORM * octDecodeNormal(g_normals.zw);\r\n${checkForSilhouetteDiscard}\r\n`;\r\n\r\nconst computePosition = `\r\n v_lnInfo = vec4(0.0, 0.0, 0.0, 0.0); // init and set flag to false\r\n vec4 other = g_otherPos;\r\n float miterAdjust = 0.0;\r\n float weight = computeLineWeight();\r\n\r\n vec4 pos;\r\n g_windowPos = modelToWindowCoordinates(rawPos, other, pos, v_eyeSpace);\r\n if (g_windowPos.w == 0.0) // Clipped out.\r\n return g_windowPos;\r\n\r\n vec4 otherPos;\r\n vec3 otherMvPos;\r\n vec4 projOther = modelToWindowCoordinates(other, rawPos, otherPos, otherMvPos);\r\n\r\n g_windowDir = projOther.xy - g_windowPos.xy;\r\n\r\n adjustWidth(weight, g_windowDir, g_windowPos.xy);\r\n g_windowDir = normalize(g_windowDir);\r\n\r\n vec2 perp = vec2(-g_windowDir.y, g_windowDir.x);\r\n float perpDist = weight / 2.0;\r\n float alongDist = 0.0;\r\n\r\n perpDist *= sign(0.5 - float(g_quadIndex == 0.0 || g_quadIndex == 3.0)); // negate for index 0 and 3\r\n alongDist += distance(rawPos, other) * float(g_quadIndex >= 2.0); // index 2 and 3 correspond to 'far' endpoint of segment\r\n\r\n pos.x += perp.x * perpDist * 2.0 * pos.w / u_viewport.x;\r\n pos.y += perp.y * perpDist * 2.0 * pos.w / u_viewport.y;\r\n\r\n lineCodeEyePos = .5 * (rawPos + other);\r\n lineCodeDist = alongDist;\r\n\r\n return pos;\r\n`;\r\nconst lineCodeArgs = \"g_windowDir, g_windowPos, 0.0\";\r\n\r\nconst adjustContrast = `\r\n float bgi = u_bgIntensity;\r\n if (bgi < 0.0)\r\n return baseColor;\r\n\r\n float s;\r\n float rgbi = baseColor.r * 0.3 + baseColor.g * 0.59 + baseColor.b * 0.11;\r\n if (rgbi > 0.81)\r\n s = bgi > 0.57 ? 0.0 : 0.699;\r\n else if (rgbi > 0.57)\r\n s = bgi > 0.57 ? 0.0 : 1.0;\r\n else\r\n s = bgi < 0.81 ? 1.0 : 0.699;\r\n\r\n return vec4(vec3(s), baseColor.a);\r\n`;\r\n\r\n/** @internal */\r\nexport function addEdgeContrast(vert: VertexShaderBuilder): void {\r\n vert.addUniform(\"u_bgIntensity\", VariableType.Float, (prog) => {\r\n prog.addGraphicUniform(\"u_bgIntensity\", (uniform, params) => {\r\n let bgi = -1;\r\n if (params.geometry.isEdge && params.target.currentEdgeSettings.wantContrastingColor(params.target.currentViewFlags.renderMode))\r\n bgi = params.target.uniforms.style.backgroundIntensity;\r\n\r\n uniform.setUniform1f(bgi);\r\n });\r\n });\r\n\r\n vert.set(VertexShaderComponent.AdjustContrast, adjustContrast);\r\n}\r\n\r\nconst edgeLutParams = new Float32Array(4);\r\n\r\nfunction createBase(type: EdgeBuilderType, instanced: IsInstanced, isAnimated: IsAnimated): ProgramBuilder {\r\n const isInstanced = IsInstanced.Yes === instanced;\r\n const isSilhouette = \"Silhouette\" === type;\r\n const isIndexed = \"IndexedEdge\" === type;\r\n const techId = isSilhouette ? TechniqueId.SilhouetteEdge : (isIndexed ? TechniqueId.IndexedEdge : TechniqueId.Edge);\r\n const attrMap = AttributeMap.findAttributeMap(techId, isInstanced);\r\n\r\n const builder = new ProgramBuilder(attrMap, { maxRgbaPerVertex: 5, instanced: isInstanced });\r\n const vert = builder.vert;\r\n\r\n vert.addGlobal(\"g_otherPos\", VariableType.Vec4);\r\n vert.addGlobal(\"g_quadIndex\", VariableType.Float);\r\n vert.addGlobal(\"g_windowPos\", VariableType.Vec4);\r\n vert.addGlobal(\"g_windowDir\", VariableType.Vec2);\r\n vert.addGlobal(\"g_otherIndex\", VariableType.Float);\r\n\r\n if (isIndexed) {\r\n vert.addGlobal(\"g_vertexId\", VariableType.Int);\r\n vert.addGlobal(\"g_otherIndexIndex\", VariableType.Vec3);\r\n vert.addGlobal(\"g_isSilhouette\", VariableType.Boolean, \"false\");\r\n vert.addGlobal(\"g_normals\", VariableType.Vec4);\r\n\r\n const initLut = addLookupTable(vert, \"edge\", \"1.0\");\r\n vert.addUniform(\"u_edgeLUT\", VariableType.Sampler2D, (prog) => {\r\n prog.addGraphicUniform(\"u_edgeLUT\", (uniform, params) => {\r\n const edge = params.geometry.asIndexedEdge;\r\n assert(undefined !== edge);\r\n edge.edgeLut.texture.bindSampler(uniform, TextureUnit.EdgeLUT);\r\n });\r\n });\r\n\r\n vert.addUniform(\"u_edgeParams\", VariableType.Vec4, (prog) => {\r\n prog.addGraphicUniform(\"u_edgeParams\", (uniform, params) => {\r\n const edge = params.geometry.asIndexedEdge;\r\n assert(undefined !== edge);\r\n edgeLutParams[0] = edge.edgeLut.texture.width;\r\n edgeLutParams[1] = edge.edgeLut.texture.height;\r\n edgeLutParams[2] = edge.edgeLut.numSegments;\r\n edgeLutParams[3] = edge.edgeLut.silhouettePadding;\r\n uniform.setUniform4fv(edgeLutParams);\r\n });\r\n });\r\n\r\n vert.set(VertexShaderComponent.ComputeQuantizedPosition, `${initLut}\\n\\n${computeIndexedQuantizedPosition}`);\r\n vert.addInitializer(initializeIndexed);\r\n\r\n addRenderOrder(vert);\r\n addRenderOrderConstants(vert);\r\n builder.addInlineComputedVarying(\"v_renderOrder\", VariableType.Float, computeIndexedRenderOrder);\r\n builder.frag.set(FragmentShaderComponent.OverrideRenderOrder, \"return v_renderOrder;\");\r\n } else {\r\n vert.addInitializer(decodeEndPointAndQuadIndices);\r\n }\r\n\r\n if (isAnimated) {\r\n addAnimation(vert, false, IsThematic.No);\r\n vert.addInitializer(animateEndPoint);\r\n }\r\n\r\n vert.addGlobal(\"lineCodeEyePos\", VariableType.Vec4);\r\n vert.addGlobal(\"lineCodeDist\", VariableType.Float, \"0.0\");\r\n\r\n addModelToWindowCoordinates(vert); // adds u_mvp, u_viewportTransformation, and sets g_eyeSpace\r\n addProjectionMatrix(vert);\r\n addLineCode(builder, lineCodeArgs);\r\n builder.addVarying(\"v_eyeSpace\", VariableType.Vec3);\r\n vert.set(VertexShaderComponent.ComputePosition, computePosition);\r\n builder.addVarying(\"v_lnInfo\", VariableType.Vec4);\r\n addAdjustWidth(vert);\r\n\r\n addViewport(vert);\r\n addModelViewMatrix(vert);\r\n\r\n addLineWeight(vert);\r\n\r\n if (isSilhouette || isIndexed) {\r\n addNormalMatrix(vert, instanced);\r\n addFrustum(builder);\r\n vert.addFunction(octDecodeNormal);\r\n vert.set(VertexShaderComponent.CheckForEarlyDiscard, isSilhouette ? checkForSilhouetteDiscardNonIndexed : checkForSilhouetteDiscardIndexed);\r\n }\r\n\r\n return builder;\r\n}\r\n\r\n/** @internal */\r\nexport function createEdgeBuilder(type: EdgeBuilderType, instanced: IsInstanced, isAnimated: IsAnimated): ProgramBuilder {\r\n const builder = createBase(type, instanced, isAnimated);\r\n addShaderFlags(builder);\r\n addColor(builder);\r\n addEdgeContrast(builder.vert);\r\n addWhiteOnWhiteReversal(builder.frag);\r\n return builder;\r\n}\r\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"FeatureSymbology.d.ts","sourceRoot":"","sources":["../../../../../src/render/webgl/glsl/FeatureSymbology.ts"],"names":[],"mappings":"AAIA;;GAEG;AAIH,OAAO,EACL,qBAAqB,EAA2B,cAAc,EAAE,aAAa,EAE9E,MAAM,kBAAkB,CAAC;AAE1B,OAAO,EAAE,WAAW,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAUhE,gBAAgB;AAChB,0BAAkB,uBAAuB;IACvC,IAAI,IAAI;IACR,MAAM,IAAS;IACf,QAAQ,IAAS;IACjB,YAAY,IAAS;IACrB,KAAK,IAAS;IACd,KAAK,KAAS;IAEd,OAAO,KAA+B;IACtC,KAAK,KAAwC;IAC7C,MAAM,KAAmD;CAC1D;AAED,gBAAgB;AAChB,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,aAAa,GAAG,IAAI,CAehE;AAwPD,wBAAgB,WAAW,CAAC,OAAO,EAAE,aAAa,GAAG,IAAI,CAIxD;AA4DD,gBAAgB;AAChB,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,cAAc,EAAE,UAAU,GAAE,OAAe,GAAG,IAAI,CAG5F;AAED,gBAAgB;AAChB,wBAAgB,UAAU,CAAC,OAAO,EAAE,cAAc,EAAE,UAAU,GAAE,OAAe,GAAG,IAAI,CAkBrF;AAkBD,gBAAgB;AAChB,eAAO,MAAM,iBAAiB,yLAM7B,CAAC;AAuEF,wBAAgB,uBAAuB,CAAC,OAAO,EAAE,aAAa,QAa7D;AAED,gBAAgB;AAChB,wBAAgB,cAAc,CAAC,OAAO,EAAE,aAAa,QAOpD;AAwBD,gBAAgB;AAChB,wBAAgB,YAAY,CAAC,OAAO,EAAE,cAAc,EAAE,aAAa,EAAE,OAAO,QAiB3E;AASD,gBAAgB;AAChB,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,cAAc,EAAE,KAAK,EAAE,cAAc,QA4D/E;AA4DD,eAAO,MAAM,eAAe,sOAIzB,CAAC;AAwCJ,gBAAgB;AAChB,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,qBAAqB,GAAG,IAAI,CAIpE;AAoBD,gBAAgB;AAChB,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,cAAc,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,uBAAuB,GAAG,IAAI,CAoBnH;AAED;;;GAGG;AACH,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,cAAc,GAAG,IAAI,CAG/D;AAED;;;;;;;;GAQG;AACH,wBAAgB,0BAA0B,CAAC,OAAO,EAAE,cAAc,EAAE,eAAe,EAAE,OAAO,GAAG,IAAI,CA0ClG"}
1
+ {"version":3,"file":"FeatureSymbology.d.ts","sourceRoot":"","sources":["../../../../../src/render/webgl/glsl/FeatureSymbology.ts"],"names":[],"mappings":"AAIA;;GAEG;AAIH,OAAO,EACL,qBAAqB,EAA2B,cAAc,EAAE,aAAa,EAE9E,MAAM,kBAAkB,CAAC;AAE1B,OAAO,EAAE,WAAW,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAUhE,gBAAgB;AAChB,0BAAkB,uBAAuB;IACvC,IAAI,IAAI;IACR,MAAM,IAAS;IACf,QAAQ,IAAS;IACjB,YAAY,IAAS;IACrB,KAAK,IAAS;IACd,KAAK,KAAS;IAEd,OAAO,KAA+B;IACtC,KAAK,KAAwC;IAC7C,MAAM,KAAmD;CAC1D;AAED,gBAAgB;AAChB,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,aAAa,GAAG,IAAI,CAehE;AAqPD,wBAAgB,WAAW,CAAC,OAAO,EAAE,aAAa,GAAG,IAAI,CAIxD;AA4DD,gBAAgB;AAChB,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,cAAc,EAAE,UAAU,GAAE,OAAe,GAAG,IAAI,CAG5F;AAED,gBAAgB;AAChB,wBAAgB,UAAU,CAAC,OAAO,EAAE,cAAc,EAAE,UAAU,GAAE,OAAe,GAAG,IAAI,CAkBrF;AAkBD,gBAAgB;AAChB,eAAO,MAAM,iBAAiB,yLAM7B,CAAC;AAuEF,wBAAgB,uBAAuB,CAAC,OAAO,EAAE,aAAa,QAa7D;AAED,gBAAgB;AAChB,wBAAgB,cAAc,CAAC,OAAO,EAAE,aAAa,QAOpD;AAwBD,gBAAgB;AAChB,wBAAgB,YAAY,CAAC,OAAO,EAAE,cAAc,EAAE,aAAa,EAAE,OAAO,QAiB3E;AASD,gBAAgB;AAChB,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,cAAc,EAAE,KAAK,EAAE,cAAc,QA4D/E;AA4DD,eAAO,MAAM,eAAe,sOAIzB,CAAC;AAwCJ,gBAAgB;AAChB,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,qBAAqB,GAAG,IAAI,CAIpE;AAoBD,gBAAgB;AAChB,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,cAAc,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,uBAAuB,GAAG,IAAI,CAoBnH;AAED;;;GAGG;AACH,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,cAAc,GAAG,IAAI,CAG/D;AAED;;;;;;;;GAQG;AACH,wBAAgB,0BAA0B,CAAC,OAAO,EAAE,cAAc,EAAE,eAAe,EAAE,OAAO,GAAG,IAAI,CA0ClG"}
@@ -111,8 +111,6 @@ function addFeatureIndex(vert) {
111
111
  vert.addGlobal("g_featureIndex", 4 /* Vec3 */);
112
112
  vert.addFunction(Decode_1.decodeUint24);
113
113
  vert.addFunction(getFeatureIndex(vert));
114
- if (vert.usesVertexTable && !vert.usesInstancedGeometry)
115
- (0, Vertex_1.addFeatureAndMaterialLookup)(vert);
116
114
  }
117
115
  // Discards vertex if feature is invisible; or rendering opaque during translucent pass or vice-versa
118
116
  // (The latter occurs when some translucent feature is overridden to be opaque, or vice-versa)