@itwin/core-frontend 5.8.0-dev.14 → 5.8.0-dev.15

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 (122) hide show
  1. package/CHANGELOG.md +8 -1
  2. package/lib/cjs/common/gltf/GltfSchema.d.ts +11 -0
  3. package/lib/cjs/common/gltf/GltfSchema.d.ts.map +1 -1
  4. package/lib/cjs/common/gltf/GltfSchema.js.map +1 -1
  5. package/lib/cjs/common/imdl/ImdlModel.d.ts +1 -0
  6. package/lib/cjs/common/imdl/ImdlModel.d.ts.map +1 -1
  7. package/lib/cjs/common/imdl/ImdlModel.js.map +1 -1
  8. package/lib/cjs/common/imdl/ParseImdlDocument.d.ts.map +1 -1
  9. package/lib/cjs/common/imdl/ParseImdlDocument.js +2 -0
  10. package/lib/cjs/common/imdl/ParseImdlDocument.js.map +1 -1
  11. package/lib/cjs/common/internal/render/LineCode.d.ts +30 -2
  12. package/lib/cjs/common/internal/render/LineCode.d.ts.map +1 -1
  13. package/lib/cjs/common/internal/render/LineCode.js +105 -14
  14. package/lib/cjs/common/internal/render/LineCode.js.map +1 -1
  15. package/lib/cjs/common/internal/render/MeshPrimitives.d.ts +1 -0
  16. package/lib/cjs/common/internal/render/MeshPrimitives.d.ts.map +1 -1
  17. package/lib/cjs/common/internal/render/MeshPrimitives.js +2 -0
  18. package/lib/cjs/common/internal/render/MeshPrimitives.js.map +1 -1
  19. package/lib/cjs/common/internal/render/PolylineParams.d.ts +1 -0
  20. package/lib/cjs/common/internal/render/PolylineParams.d.ts.map +1 -1
  21. package/lib/cjs/common/internal/render/PolylineParams.js +1 -0
  22. package/lib/cjs/common/internal/render/PolylineParams.js.map +1 -1
  23. package/lib/cjs/common/internal/render/VertexTableBuilder.d.ts.map +1 -1
  24. package/lib/cjs/common/internal/render/VertexTableBuilder.js +87 -4
  25. package/lib/cjs/common/internal/render/VertexTableBuilder.js.map +1 -1
  26. package/lib/cjs/internal/render/webgl/CachedGeometry.d.ts +1 -0
  27. package/lib/cjs/internal/render/webgl/CachedGeometry.d.ts.map +1 -1
  28. package/lib/cjs/internal/render/webgl/CachedGeometry.js +1 -0
  29. package/lib/cjs/internal/render/webgl/CachedGeometry.js.map +1 -1
  30. package/lib/cjs/internal/render/webgl/LineCode.d.ts +4 -2
  31. package/lib/cjs/internal/render/webgl/LineCode.d.ts.map +1 -1
  32. package/lib/cjs/internal/render/webgl/LineCode.js +55 -22
  33. package/lib/cjs/internal/render/webgl/LineCode.js.map +1 -1
  34. package/lib/cjs/internal/render/webgl/Polyline.d.ts +2 -0
  35. package/lib/cjs/internal/render/webgl/Polyline.d.ts.map +1 -1
  36. package/lib/cjs/internal/render/webgl/Polyline.js +3 -0
  37. package/lib/cjs/internal/render/webgl/Polyline.js.map +1 -1
  38. package/lib/cjs/internal/render/webgl/System.d.ts +2 -0
  39. package/lib/cjs/internal/render/webgl/System.d.ts.map +1 -1
  40. package/lib/cjs/internal/render/webgl/System.js +15 -1
  41. package/lib/cjs/internal/render/webgl/System.js.map +1 -1
  42. package/lib/cjs/internal/render/webgl/Texture.d.ts +1 -1
  43. package/lib/cjs/internal/render/webgl/Texture.d.ts.map +1 -1
  44. package/lib/cjs/internal/render/webgl/Texture.js +2 -1
  45. package/lib/cjs/internal/render/webgl/Texture.js.map +1 -1
  46. package/lib/cjs/internal/render/webgl/glsl/Edge.js +1 -1
  47. package/lib/cjs/internal/render/webgl/glsl/Edge.js.map +1 -1
  48. package/lib/cjs/internal/render/webgl/glsl/Polyline.d.ts.map +1 -1
  49. package/lib/cjs/internal/render/webgl/glsl/Polyline.js +82 -13
  50. package/lib/cjs/internal/render/webgl/glsl/Polyline.js.map +1 -1
  51. package/lib/cjs/internal/tile/ImdlGraphicsCreator.d.ts.map +1 -1
  52. package/lib/cjs/internal/tile/ImdlGraphicsCreator.js +1 -0
  53. package/lib/cjs/internal/tile/ImdlGraphicsCreator.js.map +1 -1
  54. package/lib/cjs/render/PolylineArgs.d.ts +2 -0
  55. package/lib/cjs/render/PolylineArgs.d.ts.map +1 -1
  56. package/lib/cjs/render/PolylineArgs.js.map +1 -1
  57. package/lib/cjs/tile/GltfReader.d.ts +9 -2
  58. package/lib/cjs/tile/GltfReader.d.ts.map +1 -1
  59. package/lib/cjs/tile/GltfReader.js +104 -14
  60. package/lib/cjs/tile/GltfReader.js.map +1 -1
  61. package/lib/esm/common/gltf/GltfSchema.d.ts +11 -0
  62. package/lib/esm/common/gltf/GltfSchema.d.ts.map +1 -1
  63. package/lib/esm/common/gltf/GltfSchema.js.map +1 -1
  64. package/lib/esm/common/imdl/ImdlModel.d.ts +1 -0
  65. package/lib/esm/common/imdl/ImdlModel.d.ts.map +1 -1
  66. package/lib/esm/common/imdl/ImdlModel.js.map +1 -1
  67. package/lib/esm/common/imdl/ParseImdlDocument.d.ts.map +1 -1
  68. package/lib/esm/common/imdl/ParseImdlDocument.js +2 -0
  69. package/lib/esm/common/imdl/ParseImdlDocument.js.map +1 -1
  70. package/lib/esm/common/internal/render/LineCode.d.ts +30 -2
  71. package/lib/esm/common/internal/render/LineCode.d.ts.map +1 -1
  72. package/lib/esm/common/internal/render/LineCode.js +98 -14
  73. package/lib/esm/common/internal/render/LineCode.js.map +1 -1
  74. package/lib/esm/common/internal/render/MeshPrimitives.d.ts +1 -0
  75. package/lib/esm/common/internal/render/MeshPrimitives.d.ts.map +1 -1
  76. package/lib/esm/common/internal/render/MeshPrimitives.js +2 -0
  77. package/lib/esm/common/internal/render/MeshPrimitives.js.map +1 -1
  78. package/lib/esm/common/internal/render/PolylineParams.d.ts +1 -0
  79. package/lib/esm/common/internal/render/PolylineParams.d.ts.map +1 -1
  80. package/lib/esm/common/internal/render/PolylineParams.js +1 -0
  81. package/lib/esm/common/internal/render/PolylineParams.js.map +1 -1
  82. package/lib/esm/common/internal/render/VertexTableBuilder.d.ts.map +1 -1
  83. package/lib/esm/common/internal/render/VertexTableBuilder.js +87 -4
  84. package/lib/esm/common/internal/render/VertexTableBuilder.js.map +1 -1
  85. package/lib/esm/internal/render/webgl/CachedGeometry.d.ts +1 -0
  86. package/lib/esm/internal/render/webgl/CachedGeometry.d.ts.map +1 -1
  87. package/lib/esm/internal/render/webgl/CachedGeometry.js +1 -0
  88. package/lib/esm/internal/render/webgl/CachedGeometry.js.map +1 -1
  89. package/lib/esm/internal/render/webgl/LineCode.d.ts +4 -2
  90. package/lib/esm/internal/render/webgl/LineCode.d.ts.map +1 -1
  91. package/lib/esm/internal/render/webgl/LineCode.js +56 -23
  92. package/lib/esm/internal/render/webgl/LineCode.js.map +1 -1
  93. package/lib/esm/internal/render/webgl/Polyline.d.ts +2 -0
  94. package/lib/esm/internal/render/webgl/Polyline.d.ts.map +1 -1
  95. package/lib/esm/internal/render/webgl/Polyline.js +3 -0
  96. package/lib/esm/internal/render/webgl/Polyline.js.map +1 -1
  97. package/lib/esm/internal/render/webgl/System.d.ts +2 -0
  98. package/lib/esm/internal/render/webgl/System.d.ts.map +1 -1
  99. package/lib/esm/internal/render/webgl/System.js +16 -2
  100. package/lib/esm/internal/render/webgl/System.js.map +1 -1
  101. package/lib/esm/internal/render/webgl/Texture.d.ts +1 -1
  102. package/lib/esm/internal/render/webgl/Texture.d.ts.map +1 -1
  103. package/lib/esm/internal/render/webgl/Texture.js +1 -1
  104. package/lib/esm/internal/render/webgl/Texture.js.map +1 -1
  105. package/lib/esm/internal/render/webgl/glsl/Edge.js +1 -1
  106. package/lib/esm/internal/render/webgl/glsl/Edge.js.map +1 -1
  107. package/lib/esm/internal/render/webgl/glsl/Polyline.d.ts.map +1 -1
  108. package/lib/esm/internal/render/webgl/glsl/Polyline.js +82 -13
  109. package/lib/esm/internal/render/webgl/glsl/Polyline.js.map +1 -1
  110. package/lib/esm/internal/tile/ImdlGraphicsCreator.d.ts.map +1 -1
  111. package/lib/esm/internal/tile/ImdlGraphicsCreator.js +1 -0
  112. package/lib/esm/internal/tile/ImdlGraphicsCreator.js.map +1 -1
  113. package/lib/esm/render/PolylineArgs.d.ts +2 -0
  114. package/lib/esm/render/PolylineArgs.d.ts.map +1 -1
  115. package/lib/esm/render/PolylineArgs.js.map +1 -1
  116. package/lib/esm/tile/GltfReader.d.ts +9 -2
  117. package/lib/esm/tile/GltfReader.d.ts.map +1 -1
  118. package/lib/esm/tile/GltfReader.js +104 -14
  119. package/lib/esm/tile/GltfReader.js.map +1 -1
  120. package/lib/public/scripts/parse-imdl-worker.js +1 -1
  121. package/lib/workers/webpack/parse-imdl-worker.js +1 -1
  122. package/package.json +20 -20
@@ -18,6 +18,7 @@ const AttributeMap_1 = require("../AttributeMap");
18
18
  const RenderFlags_1 = require("../RenderFlags");
19
19
  const ShaderBuilder_1 = require("../ShaderBuilder");
20
20
  const System_1 = require("../System");
21
+ const LineCode_1 = require("../LineCode");
21
22
  const Color_1 = require("./Color");
22
23
  const Edge_1 = require("./Edge");
23
24
  const Common_1 = require("./Common");
@@ -48,7 +49,7 @@ const applyLineCode = `
48
49
  return baseColor;
49
50
  `;
50
51
  const computeTextureCoord = `
51
- vec2 computeLineCodeTextureCoords(vec2 windowDir, vec4 projPos, float adjust) {
52
+ vec2 computeLineCodeTextureCoords(vec2 windowDir, vec4 projPos, float adjust, float patternDist) {
52
53
  vec2 texc;
53
54
  float lineCode = computeLineCode();
54
55
  if (0.0 == lineCode) {
@@ -58,22 +59,65 @@ vec2 computeLineCodeTextureCoords(vec2 windowDir, vec4 projPos, float adjust) {
58
59
  const float imagesPerPixel = 1.0/32.0;
59
60
  const float textureCoordinateBase = 8192.0; // Temp workardound for clipping problem in perspective views (negative values don't seem to interpolate correctly).
60
61
 
61
- if (abs(windowDir.x) > abs(windowDir.y))
62
- texc.x = textureCoordinateBase + imagesPerPixel * (projPos.x + adjust * windowDir.x);
63
- else
64
- texc.x = textureCoordinateBase + imagesPerPixel * (projPos.y + adjust * windowDir.y);
62
+ float patternDistPixels;
63
+ if (u_useCumDist > 0.5) {
64
+ patternDistPixels = patternDist * u_pixelsPerWorld;
65
+ } else {
66
+ if (abs(windowDir.x) > abs(windowDir.y))
67
+ patternDistPixels = projPos.x + adjust * windowDir.x;
68
+ else
69
+ patternDistPixels = projPos.y + adjust * windowDir.y;
70
+ }
71
+ texc.x = textureCoordinateBase + imagesPerPixel * patternDistPixels;
65
72
 
66
- const float numLineCodes = 16.0; // NB: Actually only 10, but texture is 16px tall because it needs to be a power of 2.
67
- const float rowsPerCode = 1.0;
68
- const float numRows = numLineCodes*rowsPerCode;
69
- const float centerY = 0.5/numRows;
70
- const float stepY = rowsPerCode/numRows;
73
+ // Use uniform to support dynamic capacity based on System.maxTextureSize
74
+ float numRows = u_numLineCodes;
75
+ float centerY = 0.5 / numRows;
76
+ float stepY = 1.0 / numRows;
71
77
  texc.y = stepY * lineCode + centerY;
72
78
  }
73
79
 
74
80
  return texc;
75
81
  }
76
82
  `;
83
+ function addPixelsPerWorldUniform(prog) {
84
+ const addUniform = (shader) => {
85
+ shader.addUniform("u_pixelsPerWorld", 2 /* VariableType.Float */, (prg) => {
86
+ prg.addProgramUniform("u_pixelsPerWorld", (uniform, params) => {
87
+ // Calculate pixels per world unit from viewport
88
+ // For orthographic views this is constant and provides stable pattern scaling
89
+ const vp = params.target.viewRect;
90
+ // Default to 1.0 if we can't calculate (will use world units directly)
91
+ let pixelsPerWorld = 1.0;
92
+ // Get frustum planes: { top, bottom, left, right }
93
+ const planes = params.target.uniforms.frustum.planes;
94
+ const worldWidth = planes[3] - planes[2]; // right - left
95
+ if (worldWidth > 0) {
96
+ // worldWidth is the view width in world units
97
+ pixelsPerWorld = vp.width / worldWidth;
98
+ }
99
+ uniform.setUniform1f(pixelsPerWorld);
100
+ });
101
+ });
102
+ };
103
+ addUniform(prog.vert);
104
+ addUniform(prog.frag);
105
+ }
106
+ function addUseCumulativeDistanceUniform(prog) {
107
+ prog.vert.addUniform("u_useCumDist", 2 /* VariableType.Float */, (prg) => {
108
+ prg.addGraphicUniform("u_useCumDist", (uniform, params) => {
109
+ uniform.setUniform1f(params.geometry.hasCumulativeDistances ? 1.0 : 0.0);
110
+ });
111
+ });
112
+ }
113
+ function addNumLineCodesUniform(prog) {
114
+ prog.vert.addUniform("u_numLineCodes", 2 /* VariableType.Float */, (prg) => {
115
+ prg.addProgramUniform("u_numLineCodes", (uniform, _params) => {
116
+ // Pass the current LineCode capacity to the shader
117
+ uniform.setUniform1f(LineCode_1.LineCode.capacity());
118
+ });
119
+ });
120
+ }
77
121
  /** @internal */
78
122
  exports.adjustWidth = `
79
123
  void adjustWidth(inout float width, vec2 d2, vec2 org) {
@@ -156,6 +200,9 @@ function addLineCode(prog, args) {
156
200
  const vert = prog.vert;
157
201
  const frag = prog.frag;
158
202
  (0, Vertex_1.addLineCode)(vert);
203
+ addPixelsPerWorldUniform(prog);
204
+ addUseCumulativeDistanceUniform(prog);
205
+ addNumLineCodesUniform(prog); // Add uniform for dynamic capacity
159
206
  const funcCall = `computeLineCodeTextureCoords(${args})`;
160
207
  prog.addFunctionComputedVaryingWithArgs("v_texc", 3 /* VariableType.Vec2 */, funcCall, computeTextureCoord);
161
208
  (0, Common_1.addFrustum)(prog);
@@ -182,12 +229,14 @@ function addCommon(prog) {
182
229
  vert.addFunction(Decode_1.unquantize2d);
183
230
  (0, Vertex_1.addLineWeight)(vert);
184
231
  vert.addGlobal("miterAdjust", 2 /* VariableType.Float */, "0.0");
232
+ prog.addVarying("v_patternDistance", 2 /* VariableType.Float */);
185
233
  prog.addVarying("v_eyeSpace", 4 /* VariableType.Vec3 */);
186
- vert.set(10 /* VertexShaderComponent.ComputePosition */, computePosition);
234
+ vert.set(10 /* VertexShaderComponent.ComputePosition */, buildComputePosition(vert.positionType));
187
235
  prog.addVarying("v_lnInfo", 5 /* VariableType.Vec4 */);
188
236
  addAdjustWidth(vert);
189
237
  (0, Vertex_1.addSamplePosition)(vert);
190
238
  vert.addFunction(decodePosition);
239
+ vert.addFunction(decodeFloatFromBytes);
191
240
  }
192
241
  const decodePosition = `
193
242
  vec4 decodePosition(vec3 baseIndex) {
@@ -199,7 +248,18 @@ const decodeAdjacentPositions = `
199
248
  g_prevPos = decodePosition(a_prevIndex);
200
249
  g_nextPos = decodePosition(a_nextIndex);
201
250
  `;
202
- const computePosition = `
251
+ const decodeFloatFromBytes = `
252
+ float decodeFloatFromBytes(vec4 bytes) {
253
+ uvec4 b = uvec4(bytes);
254
+ uint u = b.x | (b.y << 8) | (b.z << 16) | (b.w << 24);
255
+ return uintBitsToFloat(u);
256
+ }
257
+ `;
258
+ function buildComputePosition(positionType) {
259
+ const cumDistExpr = positionType === "unquantized"
260
+ ? "((u_vertParams.z > 5.0) ? decodeFloatFromBytes(g_vertLutData5) : 0.0)"
261
+ : "((u_vertParams.z > 3.0) ? decodeFloatFromBytes(g_vertLutData3) : 0.0)";
262
+ return `
203
263
  const float kNone = 0.0,
204
264
  kSquare = 1.0*3.0,
205
265
  kMiter = 2.0*3.0,
@@ -224,9 +284,11 @@ const computePosition = `
224
284
  if (param >= kNoneAdjWt)
225
285
  param -= kNoneAdjWt;
226
286
 
287
+ bool isSegmentStart = true;
227
288
  if (param >= kNegateAlong) {
228
289
  directionScale = -directionScale;
229
290
  param -= kNegateAlong;
291
+ isSegmentStart = false;
230
292
  }
231
293
 
232
294
  if (param >= kNegatePerp) {
@@ -239,6 +301,11 @@ const computePosition = `
239
301
  vec4 projNext = modelToWindowCoordinates(next, rawPos, otherPos, otherMvPos);
240
302
  g_windowDir = projNext.xy - g_windowPos.xy;
241
303
 
304
+ if (u_useCumDist > 0.5)
305
+ v_patternDistance = ${cumDistExpr};
306
+ else
307
+ v_patternDistance = 0.0;
308
+
242
309
  if (param < kJointBase) {
243
310
  vec2 dir = (directionScale > 0.0) ? g_windowDir : -g_windowDir;
244
311
  vec2 pos = (directionScale > 0.0) ? g_windowPos.xy : projNext.xy;
@@ -306,7 +373,8 @@ const computePosition = `
306
373
 
307
374
  return pos;
308
375
  `;
309
- const lineCodeArgs = "g_windowDir, g_windowPos, miterAdjust";
376
+ }
377
+ const lineCodeArgs = "g_windowDir, g_windowPos, miterAdjust, v_patternDistance";
310
378
  /** @internal */
311
379
  function createPolylineBuilder(isInstanced, positionType) {
312
380
  const instanced = 1 /* IsInstanced.Yes */ === isInstanced;
@@ -326,6 +394,7 @@ function createPolylineHiliter(isInstanced, positionType) {
326
394
  const attrMap = AttributeMap_1.AttributeMap.findAttributeMap(1 /* TechniqueId.Polyline */, instanced);
327
395
  const builder = new ShaderBuilder_1.ProgramBuilder(attrMap, { positionType, instanced });
328
396
  addCommon(builder);
397
+ addUseCumulativeDistanceUniform(builder);
329
398
  (0, Common_1.addFrustum)(builder);
330
399
  (0, FeatureSymbology_1.addHiliter)(builder, true);
331
400
  return builder;
@@ -1 +1 @@
1
- {"version":3,"file":"Polyline.js","sourceRoot":"","sources":["../../../../../../src/internal/render/webgl/glsl/Polyline.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 { TextureUnit } from \"../RenderFlags\";\r\nimport {\r\n FragmentShaderBuilder, FragmentShaderComponent, ProgramBuilder, VariableType, VertexShaderBuilder, VertexShaderComponent,\r\n} from \"../ShaderBuilder\";\r\nimport { System } from \"../System\";\r\nimport { IsInstanced, PositionType } from \"../TechniqueFlags\";\r\nimport { TechniqueId } from \"../TechniqueId\";\r\nimport { addColor } from \"./Color\";\r\nimport { addEdgeContrast } from \"./Edge\";\r\nimport { addFrustum, addShaderFlags } from \"./Common\";\r\nimport { unquantize2d } from \"./Decode\";\r\nimport { addHiliter } from \"./FeatureSymbology\";\r\nimport { addWhiteOnWhiteReversal } from \"./Fragment\";\r\nimport {\r\n addLineCode as addLineCodeUniform, addLineWeight, addModelViewMatrix, addProjectionMatrix, addSamplePosition,\r\n} from \"./Vertex\";\r\nimport { addModelToWindowCoordinates, addViewport } from \"./Viewport\";\r\n\r\nconst checkForDiscard = \"return discardByLineCode;\";\r\n\r\nconst applyLineCode = `\r\n if (v_texc.x >= 0.0) { // v_texc = (-1,-1) for solid lines - don't bother with any of this\r\n vec4 texColor = TEXTURE(u_lineCodeTexture, v_texc);\r\n discardByLineCode = (0.0 == texColor.r);\r\n }\r\n\r\n if (v_lnInfo.w > 0.5) { // line needs pixel trimming\r\n // calculate pixel distance from pixel center to expected line center, opposite dir from major\r\n vec2 dxy = gl_FragCoord.xy - v_lnInfo.xy;\r\n if (v_lnInfo.w < 1.5) // not x-major\r\n dxy = dxy.yx;\r\n\r\n float dist = v_lnInfo.z * dxy.x - dxy.y;\r\n float distA = abs(dist);\r\n if (distA > 0.5 || (distA == 0.5 && dist < 0.0))\r\n discardByLineCode = true; // borrow this flag to force discard\r\n }\r\n\r\n return baseColor;\r\n`;\r\n\r\nconst computeTextureCoord = `\r\nvec2 computeLineCodeTextureCoords(vec2 windowDir, vec4 projPos, float adjust) {\r\n vec2 texc;\r\n float lineCode = computeLineCode();\r\n if (0.0 == lineCode) {\r\n // Solid line - tell frag shader not to bother.\r\n texc = vec2(-1.0, -1.0);\r\n } else {\r\n const float imagesPerPixel = 1.0/32.0;\r\n const float textureCoordinateBase = 8192.0; // Temp workardound for clipping problem in perspective views (negative values don't seem to interpolate correctly).\r\n\r\n if (abs(windowDir.x) > abs(windowDir.y))\r\n texc.x = textureCoordinateBase + imagesPerPixel * (projPos.x + adjust * windowDir.x);\r\n else\r\n texc.x = textureCoordinateBase + imagesPerPixel * (projPos.y + adjust * windowDir.y);\r\n\r\n const float numLineCodes = 16.0; // NB: Actually only 10, but texture is 16px tall because it needs to be a power of 2.\r\n const float rowsPerCode = 1.0;\r\n const float numRows = numLineCodes*rowsPerCode;\r\n const float centerY = 0.5/numRows;\r\n const float stepY = rowsPerCode/numRows;\r\n texc.y = stepY * lineCode + centerY;\r\n }\r\n\r\n return texc;\r\n}\r\n`;\r\n\r\n/** @internal */\r\nexport const adjustWidth = `\r\nvoid adjustWidth(inout float width, vec2 d2, vec2 org) {\r\n if (u_aaSamples > 1) {\r\n if (width < 5.0)\r\n width += (5.0 - width) * 0.125;\r\n return;\r\n }\r\n\r\n // calculate slope based width adjustment for non-AA lines, widths 1 to 4\r\n vec2 d2A = abs(d2);\r\n const float s_myFltEpsilon = 0.0001; // limit test resolution to 4 digits in case 24 bit (s16e7) is used in hardware\r\n if (d2A.y > s_myFltEpsilon && width < 4.5) {\r\n float len = length(d2A);\r\n float tan = d2A.x / d2A.y;\r\n\r\n if (width < 1.5) { // width 1\r\n if (tan <= 1.0)\r\n width = d2A.y;\r\n else\r\n width = d2A.x;\r\n // width 1 requires additional adjustment plus trimming in frag shader using v_lnInfo\r\n width *= 1.01;\r\n v_lnInfo.xy = org;\r\n v_lnInfo.w = 1.0; // set flag to do trimming\r\n // set slope in v_lnInfo.z\r\n if (d2A.x - d2A.y > s_myFltEpsilon) {\r\n v_lnInfo.z = d2.y / d2.x;\r\n v_lnInfo.w += 2.0; // add in x-major flag\r\n } else\r\n v_lnInfo.z = d2.x / d2.y;\r\n\r\n } else if (width < 2.5) { // width 2\r\n if (tan <= 0.5)\r\n width = 2.0 * d2A.y;\r\n else\r\n width = (d2A.y + 2.0 * d2A.x);\r\n\r\n } else if (width < 3.5) { // width 3\r\n if (tan <= 1.0)\r\n width = (3.0 * d2A.y + d2A.x);\r\n else\r\n width = (d2A.y + 3.0 * d2A.x);\r\n\r\n } else { // if (width < 4.5) // width 4\r\n if (tan <= 0.5)\r\n width = (4.0 * d2A.y + d2A.x);\r\n else if (tan <= 2.0)\r\n width = (3.0 * d2A.y + 3.0 * d2A.x);\r\n else\r\n width = (d2A.y + 4.0 * d2A.x);\r\n }\r\n width /= len;\r\n }\r\n}\r\n`;\r\n\r\n/** @internal */\r\nexport function addAdjustWidth(vert: VertexShaderBuilder) {\r\n vert.addUniform(\"u_aaSamples\", VariableType.Int, (prog) => {\r\n prog.addGraphicUniform(\"u_aaSamples\", (attr, params) => {\r\n const numSamples = System.instance.frameBufferStack.currentFbMultisampled ? params.target.compositor.antialiasSamples : 1;\r\n attr.setUniform1i(numSamples);\r\n });\r\n });\r\n vert.addFunction(adjustWidth);\r\n}\r\n\r\n/** @internal */\r\nexport function addLineCodeTexture(frag: FragmentShaderBuilder) {\r\n frag.addUniform(\"u_lineCodeTexture\", VariableType.Sampler2D, (prog) => {\r\n prog.addProgramUniform(\"u_lineCodeTexture\", (uniform) => {\r\n const lct = System.instance.lineCodeTexture;\r\n assert(undefined !== lct);\r\n if (undefined !== lct)\r\n lct.bindSampler(uniform, TextureUnit.LineCode);\r\n });\r\n });\r\n}\r\n\r\n/** @internal */\r\nexport function addLineCode(prog: ProgramBuilder, args: string) {\r\n const vert = prog.vert;\r\n const frag = prog.frag;\r\n\r\n addLineCodeUniform(vert);\r\n\r\n const funcCall: string = `computeLineCodeTextureCoords(${args})`;\r\n\r\n prog.addFunctionComputedVaryingWithArgs(\"v_texc\", VariableType.Vec2, funcCall, computeTextureCoord);\r\n\r\n addFrustum(prog);\r\n addLineCodeTexture(prog.frag);\r\n\r\n frag.set(FragmentShaderComponent.FinalizeBaseColor, applyLineCode);\r\n frag.set(FragmentShaderComponent.CheckForDiscard, checkForDiscard);\r\n frag.addGlobal(\"discardByLineCode\", VariableType.Boolean, \"false\");\r\n}\r\n\r\nfunction polylineAddLineCode(prog: ProgramBuilder) {\r\n addLineCode(prog, lineCodeArgs);\r\n addModelViewMatrix(prog.vert);\r\n}\r\n\r\nfunction addCommon(prog: ProgramBuilder) {\r\n const vert = prog.vert;\r\n addModelToWindowCoordinates(vert); // adds u_mvp, u_viewportTransformation\r\n addProjectionMatrix(vert);\r\n addModelViewMatrix(vert);\r\n addViewport(vert);\r\n\r\n vert.addGlobal(\"g_windowPos\", VariableType.Vec4);\r\n vert.addGlobal(\"g_prevPos\", VariableType.Vec4);\r\n vert.addGlobal(\"g_nextPos\", VariableType.Vec4);\r\n vert.addGlobal(\"g_windowDir\", VariableType.Vec2);\r\n vert.addInitializer(decodeAdjacentPositions);\r\n\r\n vert.addFunction(unquantize2d);\r\n\r\n addLineWeight(vert);\r\n\r\n vert.addGlobal(\"miterAdjust\", VariableType.Float, \"0.0\");\r\n prog.addVarying(\"v_eyeSpace\", VariableType.Vec3);\r\n vert.set(VertexShaderComponent.ComputePosition, computePosition);\r\n prog.addVarying(\"v_lnInfo\", VariableType.Vec4);\r\n addAdjustWidth(vert);\r\n\r\n addSamplePosition(vert);\r\n vert.addFunction(decodePosition);\r\n}\r\n\r\nconst decodePosition = `\r\nvec4 decodePosition(vec3 baseIndex) {\r\n float index = decodeUInt24(baseIndex);\r\n return samplePosition(index);\r\n}\r\n`;\r\n\r\nconst decodeAdjacentPositions = `\r\n g_prevPos = decodePosition(a_prevIndex);\r\n g_nextPos = decodePosition(a_nextIndex);\r\n`;\r\n\r\nconst computePosition = `\r\n const float kNone = 0.0,\r\n kSquare = 1.0*3.0,\r\n kMiter = 2.0*3.0,\r\n kMiterInsideOnly = 3.0*3.0,\r\n kJointBase = 4.0*3.0,\r\n kNegatePerp = 8.0*3.0,\r\n kNegateAlong = 16.0*3.0,\r\n kNoneAdjWt = 32.0*3.0;\r\n\r\n v_lnInfo = vec4(0.0, 0.0, 0.0, 0.0); // init and set flag to false\r\n\r\n vec4 next = g_nextPos;\r\n vec4 pos;\r\n g_windowPos = modelToWindowCoordinates(rawPos, next, pos, v_eyeSpace);\r\n if (g_windowPos.w == 0.0)\r\n return g_windowPos;\r\n\r\n float param = a_param;\r\n float weight = computeLineWeight();\r\n float scale = 1.0, directionScale = 1.0;\r\n\r\n if (param >= kNoneAdjWt)\r\n param -= kNoneAdjWt;\r\n\r\n if (param >= kNegateAlong) {\r\n directionScale = -directionScale;\r\n param -= kNegateAlong;\r\n }\r\n\r\n if (param >= kNegatePerp) {\r\n scale = -1.0;\r\n param -= kNegatePerp;\r\n }\r\n\r\n vec4 otherPos;\r\n vec3 otherMvPos;\r\n vec4 projNext = modelToWindowCoordinates(next, rawPos, otherPos, otherMvPos);\r\n g_windowDir = projNext.xy - g_windowPos.xy;\r\n\r\n if (param < kJointBase) {\r\n vec2 dir = (directionScale > 0.0) ? g_windowDir : -g_windowDir;\r\n vec2 pos = (directionScale > 0.0) ? g_windowPos.xy : projNext.xy;\r\n adjustWidth(weight, dir, pos);\r\n }\r\n\r\n if (kNone != param) {\r\n vec2 delta = vec2(0.0);\r\n vec4 prev = g_prevPos;\r\n vec4 projPrev = modelToWindowCoordinates(prev, rawPos, otherPos, otherMvPos);\r\n vec2 prevDir = g_windowPos.xy - projPrev.xy;\r\n float thisLength = sqrt(g_windowDir.x * g_windowDir.x + g_windowDir.y * g_windowDir.y);\r\n const float s_minNormalizeLength = 1.0E-5; // avoid normalizing zero length vectors.\r\n float dist = weight / 2.0;\r\n\r\n if (thisLength > s_minNormalizeLength) {\r\n g_windowDir /= thisLength;\r\n\r\n float prevLength = sqrt(prevDir.x * prevDir.x + prevDir.y * prevDir.y);\r\n\r\n if (prevLength > s_minNormalizeLength) {\r\n prevDir /= prevLength;\r\n const float s_minParallelDot= -.9999, s_maxParallelDot = .9999;\r\n float prevNextDot = dot(prevDir, g_windowDir);\r\n\r\n if (prevNextDot < s_minParallelDot || prevNextDot > s_maxParallelDot) // No miter if parallel or antiparallel.\r\n param = kSquare;\r\n } else\r\n param = kSquare;\r\n } else {\r\n g_windowDir = -normalize(prevDir);\r\n param = kSquare;\r\n }\r\n\r\n vec2 perp = scale * vec2(-g_windowDir.y, g_windowDir.x);\r\n\r\n if (param == kSquare) {\r\n delta = perp;\r\n } else {\r\n vec2 bisector = normalize(prevDir - g_windowDir);\r\n float dotP = dot (bisector, perp);\r\n\r\n if (dotP != 0.0) { // Should never occur - but avoid divide by zero.\r\n const float maxMiter = 3.0;\r\n float miterDistance = 1.0/dotP;\r\n\r\n if (param == kMiter) { // Straight miter.\r\n delta = (abs(miterDistance) > maxMiter) ? perp : bisector * miterDistance;\r\n\r\n } else if (param == kMiterInsideOnly) { // Miter at inside, square at outside (to make room for joint).\r\n delta = (dotP > 0.0 || abs(miterDistance) > maxMiter) ? perp : bisector * miterDistance;\r\n\r\n } else {\r\n const float jointTriangleCount = 3.0;\r\n float ratio = (param - kJointBase) / jointTriangleCount; // 3 triangles per half-joint as defined in Graphics.cpp\r\n delta = normalize((1.0 - ratio) * bisector + (dotP < 0.0 ? -ratio : ratio) * perp); // Miter/Straight combination.\r\n }\r\n }\r\n }\r\n\r\n miterAdjust = dot(g_windowDir, delta) * dist; // Not actually used for hilite shader but meh.\r\n pos.x += dist * delta.x * 2.0 * pos.w / u_viewport.x;\r\n pos.y += dist * delta.y * 2.0 * pos.w / u_viewport.y;\r\n }\r\n\r\n return pos;\r\n`;\r\n\r\nconst lineCodeArgs = \"g_windowDir, g_windowPos, miterAdjust\";\r\n\r\n/** @internal */\r\nexport function createPolylineBuilder(isInstanced: IsInstanced, positionType: PositionType): ProgramBuilder {\r\n const instanced = IsInstanced.Yes === isInstanced;\r\n const attrMap = AttributeMap.findAttributeMap(TechniqueId.Polyline, instanced);\r\n const builder = new ProgramBuilder(attrMap, { positionType, instanced });\r\n\r\n addShaderFlags(builder);\r\n\r\n addCommon(builder);\r\n\r\n polylineAddLineCode(builder);\r\n\r\n addColor(builder);\r\n addEdgeContrast(builder.vert);\r\n addWhiteOnWhiteReversal(builder.frag);\r\n\r\n return builder;\r\n}\r\n\r\n/** @internal */\r\nexport function createPolylineHiliter(isInstanced: IsInstanced, positionType: PositionType): ProgramBuilder {\r\n const instanced = IsInstanced.Yes === isInstanced;\r\n const attrMap = AttributeMap.findAttributeMap(TechniqueId.Polyline, instanced);\r\n const builder = new ProgramBuilder(attrMap, { positionType, instanced });\r\n\r\n addCommon(builder);\r\n addFrustum(builder);\r\n addHiliter(builder, true);\r\n return builder;\r\n}\r\n"]}
1
+ {"version":3,"file":"Polyline.js","sourceRoot":"","sources":["../../../../../../src/internal/render/webgl/glsl/Polyline.ts"],"names":[],"mappings":";AAAA;;;+FAG+F;AAC/F;;GAEG;;;AAsLH,wCAQC;AAGD,gDASC;AAGD,kCAmBC;AAsLD,sDAgBC;AAGD,sDAUC;AAjbD,sDAA6C;AAC7C,kDAA+C;AAC/C,gDAA6C;AAC7C,oDAE0B;AAC1B,sCAAmC;AACnC,0CAAuC;AAGvC,mCAAmC;AACnC,iCAAyC;AACzC,qCAAsD;AACtD,qCAAwC;AACxC,yDAAgD;AAChD,yCAAqD;AACrD,qCAEkB;AAClB,yCAAsE;AAEtE,MAAM,eAAe,GAAG,2BAA2B,CAAC;AAEpD,MAAM,aAAa,GAAG;;;;;;;;;;;;;;;;;;;CAmBrB,CAAC;AAEF,MAAM,mBAAmB,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA+B3B,CAAC;AAEF,SAAS,wBAAwB,CAAC,IAAoB;IACpD,MAAM,UAAU,GAAG,CAAC,MAAmD,EAAE,EAAE;QACzE,MAAM,CAAC,UAAU,CAAC,kBAAkB,8BAAsB,CAAC,GAAG,EAAE,EAAE;YAChE,GAAG,CAAC,iBAAiB,CAAC,kBAAkB,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;gBAC5D,gDAAgD;gBAChD,8EAA8E;gBAC9E,MAAM,EAAE,GAAG,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC;gBAElC,uEAAuE;gBACvE,IAAI,cAAc,GAAG,GAAG,CAAC;gBAEzB,mDAAmD;gBACnD,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,MAAM,CAAC;gBACrD,MAAM,UAAU,GAAG,MAAM,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,eAAe;gBACzD,IAAI,UAAU,GAAG,CAAC,EAAE,CAAC;oBACnB,8CAA8C;oBAC9C,cAAc,GAAG,EAAE,CAAC,KAAK,GAAG,UAAU,CAAC;gBACzC,CAAC;gBAED,OAAO,CAAC,YAAY,CAAC,cAAc,CAAC,CAAC;YACvC,CAAC,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;IACL,CAAC,CAAC;IAEF,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACtB,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACxB,CAAC;AAED,SAAS,+BAA+B,CAAC,IAAoB;IAC3D,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,cAAc,8BAAsB,CAAC,GAAG,EAAE,EAAE;QAC/D,GAAG,CAAC,iBAAiB,CAAC,cAAc,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;YACxD,OAAO,CAAC,YAAY,CAAC,MAAM,CAAC,QAAQ,CAAC,sBAAsB,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;QAC3E,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC;AAED,SAAS,sBAAsB,CAAC,IAAoB;IAClD,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,gBAAgB,8BAAsB,CAAC,GAAG,EAAE,EAAE;QACjE,GAAG,CAAC,iBAAiB,CAAC,gBAAgB,EAAE,CAAC,OAAO,EAAE,OAAO,EAAE,EAAE;YAC3D,mDAAmD;YACnD,OAAO,CAAC,YAAY,CAAC,mBAAQ,CAAC,QAAQ,EAAE,CAAC,CAAC;QAC5C,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC;AAED,gBAAgB;AACH,QAAA,WAAW,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAsD1B,CAAC;AAEF,gBAAgB;AAChB,SAAgB,cAAc,CAAC,IAAyB;IACtD,IAAI,CAAC,UAAU,CAAC,aAAa,4BAAoB,CAAC,IAAI,EAAE,EAAE;QACxD,IAAI,CAAC,iBAAiB,CAAC,aAAa,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE;YACrD,MAAM,UAAU,GAAG,eAAM,CAAC,QAAQ,CAAC,gBAAgB,CAAC,qBAAqB,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,UAAU,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAC,CAAC;YAC1H,IAAI,CAAC,YAAY,CAAC,UAAU,CAAC,CAAC;QAChC,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IACH,IAAI,CAAC,WAAW,CAAC,mBAAW,CAAC,CAAC;AAChC,CAAC;AAED,gBAAgB;AAChB,SAAgB,kBAAkB,CAAC,IAA2B;IAC5D,IAAI,CAAC,UAAU,CAAC,mBAAmB,kCAA0B,CAAC,IAAI,EAAE,EAAE;QACpE,IAAI,CAAC,iBAAiB,CAAC,mBAAmB,EAAE,CAAC,OAAO,EAAE,EAAE;YACtD,MAAM,GAAG,GAAG,eAAM,CAAC,QAAQ,CAAC,eAAe,CAAC;YAC5C,IAAA,qBAAM,EAAC,SAAS,KAAK,GAAG,CAAC,CAAC;YAC1B,IAAI,SAAS,KAAK,GAAG;gBACnB,GAAG,CAAC,WAAW,CAAC,OAAO,EAAE,yBAAW,CAAC,QAAQ,CAAC,CAAC;QACnD,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC;AAED,gBAAgB;AAChB,SAAgB,WAAW,CAAC,IAAoB,EAAE,IAAY;IAC5D,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC;IACvB,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC;IAEvB,IAAA,oBAAkB,EAAC,IAAI,CAAC,CAAC;IACzB,wBAAwB,CAAC,IAAI,CAAC,CAAC;IAC/B,+BAA+B,CAAC,IAAI,CAAC,CAAC;IACtC,sBAAsB,CAAC,IAAI,CAAC,CAAC,CAAC,mCAAmC;IAEjE,MAAM,QAAQ,GAAW,gCAAgC,IAAI,GAAG,CAAC;IAEjE,IAAI,CAAC,kCAAkC,CAAC,QAAQ,6BAAqB,QAAQ,EAAE,mBAAmB,CAAC,CAAC;IAEpG,IAAA,mBAAU,EAAC,IAAI,CAAC,CAAC;IACjB,kBAAkB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAE9B,IAAI,CAAC,GAAG,oDAA4C,aAAa,CAAC,CAAC;IACnE,IAAI,CAAC,GAAG,kDAA0C,eAAe,CAAC,CAAC;IACnE,IAAI,CAAC,SAAS,CAAC,mBAAmB,gCAAwB,OAAO,CAAC,CAAC;AACrE,CAAC;AAED,SAAS,mBAAmB,CAAC,IAAoB;IAC/C,WAAW,CAAC,IAAI,EAAE,YAAY,CAAC,CAAC;IAChC,IAAA,2BAAkB,EAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAChC,CAAC;AAED,SAAS,SAAS,CAAC,IAAoB;IACrC,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC;IACvB,IAAA,sCAA2B,EAAC,IAAI,CAAC,CAAC,CAAC,uCAAuC;IAC1E,IAAA,4BAAmB,EAAC,IAAI,CAAC,CAAC;IAC1B,IAAA,2BAAkB,EAAC,IAAI,CAAC,CAAC;IACzB,IAAA,sBAAW,EAAC,IAAI,CAAC,CAAC;IAElB,IAAI,CAAC,SAAS,CAAC,aAAa,4BAAoB,CAAC;IACjD,IAAI,CAAC,SAAS,CAAC,WAAW,4BAAoB,CAAC;IAC/C,IAAI,CAAC,SAAS,CAAC,WAAW,4BAAoB,CAAC;IAC/C,IAAI,CAAC,SAAS,CAAC,aAAa,4BAAoB,CAAC;IACjD,IAAI,CAAC,cAAc,CAAC,uBAAuB,CAAC,CAAC;IAE7C,IAAI,CAAC,WAAW,CAAC,qBAAY,CAAC,CAAC;IAE/B,IAAA,sBAAa,EAAC,IAAI,CAAC,CAAC;IAEpB,IAAI,CAAC,SAAS,CAAC,aAAa,8BAAsB,KAAK,CAAC,CAAC;IAEzD,IAAI,CAAC,UAAU,CAAC,mBAAmB,6BAAqB,CAAC;IAEzD,IAAI,CAAC,UAAU,CAAC,YAAY,4BAAoB,CAAC;IACjD,IAAI,CAAC,GAAG,iDAAwC,oBAAoB,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC;IACzF,IAAI,CAAC,UAAU,CAAC,UAAU,4BAAoB,CAAC;IAC/C,cAAc,CAAC,IAAI,CAAC,CAAC;IAErB,IAAA,0BAAiB,EAAC,IAAI,CAAC,CAAC;IACxB,IAAI,CAAC,WAAW,CAAC,cAAc,CAAC,CAAC;IACjC,IAAI,CAAC,WAAW,CAAC,oBAAoB,CAAC,CAAC;AACzC,CAAC;AAED,MAAM,cAAc,GAAG;;;;;CAKtB,CAAC;AAEF,MAAM,uBAAuB,GAAG;;;CAG/B,CAAC;AAEF,MAAM,oBAAoB,GAAG;;;;;;CAM5B,CAAC;AAEF,SAAS,oBAAoB,CAAC,YAA0B;IACtD,MAAM,WAAW,GAAG,YAAY,KAAK,aAAa;QAChD,CAAC,CAAC,uEAAuE;QACzE,CAAC,CAAC,uEAAuE,CAAC;IAE5E,OAAO;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;0BA2CiB,WAAW;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAsEpC,CAAC;AACF,CAAC;AAED,MAAM,YAAY,GAAG,0DAA0D,CAAC;AAEhF,gBAAgB;AAChB,SAAgB,qBAAqB,CAAC,WAAwB,EAAE,YAA0B;IACxF,MAAM,SAAS,GAAG,4BAAoB,WAAW,CAAC;IAClD,MAAM,OAAO,GAAG,2BAAY,CAAC,gBAAgB,+BAAuB,SAAS,CAAC,CAAC;IAC/E,MAAM,OAAO,GAAG,IAAI,8BAAc,CAAC,OAAO,EAAE,EAAE,YAAY,EAAE,SAAS,EAAE,CAAC,CAAC;IAEzE,IAAA,uBAAc,EAAC,OAAO,CAAC,CAAC;IAExB,SAAS,CAAC,OAAO,CAAC,CAAC;IAEnB,mBAAmB,CAAC,OAAO,CAAC,CAAC;IAE7B,IAAA,gBAAQ,EAAC,OAAO,CAAC,CAAC;IAClB,IAAA,sBAAe,EAAC,OAAO,CAAC,IAAI,CAAC,CAAC;IAC9B,IAAA,kCAAuB,EAAC,OAAO,CAAC,IAAI,CAAC,CAAC;IAEtC,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,gBAAgB;AAChB,SAAgB,qBAAqB,CAAC,WAAwB,EAAE,YAA0B;IACxF,MAAM,SAAS,GAAG,4BAAoB,WAAW,CAAC;IAClD,MAAM,OAAO,GAAG,2BAAY,CAAC,gBAAgB,+BAAuB,SAAS,CAAC,CAAC;IAC/E,MAAM,OAAO,GAAG,IAAI,8BAAc,CAAC,OAAO,EAAE,EAAE,YAAY,EAAE,SAAS,EAAE,CAAC,CAAC;IAEzE,SAAS,CAAC,OAAO,CAAC,CAAC;IACnB,+BAA+B,CAAC,OAAO,CAAC,CAAC;IACzC,IAAA,mBAAU,EAAC,OAAO,CAAC,CAAC;IACpB,IAAA,6BAAU,EAAC,OAAO,EAAE,IAAI,CAAC,CAAC;IAC1B,OAAO,OAAO,CAAC;AACjB,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 { assert } from \"@itwin/core-bentley\";\r\nimport { AttributeMap } from \"../AttributeMap\";\r\nimport { TextureUnit } from \"../RenderFlags\";\r\nimport {\r\n FragmentShaderBuilder, FragmentShaderComponent, ProgramBuilder, VariableType, VertexShaderBuilder, VertexShaderComponent,\r\n} from \"../ShaderBuilder\";\r\nimport { System } from \"../System\";\r\nimport { LineCode } from \"../LineCode\";\r\nimport { IsInstanced, PositionType } from \"../TechniqueFlags\";\r\nimport { TechniqueId } from \"../TechniqueId\";\r\nimport { addColor } from \"./Color\";\r\nimport { addEdgeContrast } from \"./Edge\";\r\nimport { addFrustum, addShaderFlags } from \"./Common\";\r\nimport { unquantize2d } from \"./Decode\";\r\nimport { addHiliter } from \"./FeatureSymbology\";\r\nimport { addWhiteOnWhiteReversal } from \"./Fragment\";\r\nimport {\r\n addLineCode as addLineCodeUniform, addLineWeight, addModelViewMatrix, addProjectionMatrix, addSamplePosition,\r\n} from \"./Vertex\";\r\nimport { addModelToWindowCoordinates, addViewport } from \"./Viewport\";\r\n\r\nconst checkForDiscard = \"return discardByLineCode;\";\r\n\r\nconst applyLineCode = `\r\n if (v_texc.x >= 0.0) { // v_texc = (-1,-1) for solid lines - don't bother with any of this\r\n vec4 texColor = TEXTURE(u_lineCodeTexture, v_texc);\r\n discardByLineCode = (0.0 == texColor.r);\r\n }\r\n\r\n if (v_lnInfo.w > 0.5) { // line needs pixel trimming\r\n // calculate pixel distance from pixel center to expected line center, opposite dir from major\r\n vec2 dxy = gl_FragCoord.xy - v_lnInfo.xy;\r\n if (v_lnInfo.w < 1.5) // not x-major\r\n dxy = dxy.yx;\r\n\r\n float dist = v_lnInfo.z * dxy.x - dxy.y;\r\n float distA = abs(dist);\r\n if (distA > 0.5 || (distA == 0.5 && dist < 0.0))\r\n discardByLineCode = true; // borrow this flag to force discard\r\n }\r\n\r\n return baseColor;\r\n`;\r\n\r\nconst computeTextureCoord = `\r\nvec2 computeLineCodeTextureCoords(vec2 windowDir, vec4 projPos, float adjust, float patternDist) {\r\n vec2 texc;\r\n float lineCode = computeLineCode();\r\n if (0.0 == lineCode) {\r\n // Solid line - tell frag shader not to bother.\r\n texc = vec2(-1.0, -1.0);\r\n } else {\r\n const float imagesPerPixel = 1.0/32.0;\r\n const float textureCoordinateBase = 8192.0; // Temp workardound for clipping problem in perspective views (negative values don't seem to interpolate correctly).\r\n\r\n float patternDistPixels;\r\n if (u_useCumDist > 0.5) {\r\n patternDistPixels = patternDist * u_pixelsPerWorld;\r\n } else {\r\n if (abs(windowDir.x) > abs(windowDir.y))\r\n patternDistPixels = projPos.x + adjust * windowDir.x;\r\n else\r\n patternDistPixels = projPos.y + adjust * windowDir.y;\r\n }\r\n texc.x = textureCoordinateBase + imagesPerPixel * patternDistPixels;\r\n\r\n // Use uniform to support dynamic capacity based on System.maxTextureSize\r\n float numRows = u_numLineCodes;\r\n float centerY = 0.5 / numRows;\r\n float stepY = 1.0 / numRows;\r\n texc.y = stepY * lineCode + centerY;\r\n }\r\n\r\n return texc;\r\n}\r\n`;\r\n\r\nfunction addPixelsPerWorldUniform(prog: ProgramBuilder): void {\r\n const addUniform = (shader: VertexShaderBuilder | FragmentShaderBuilder) => {\r\n shader.addUniform(\"u_pixelsPerWorld\", VariableType.Float, (prg) => {\r\n prg.addProgramUniform(\"u_pixelsPerWorld\", (uniform, params) => {\r\n // Calculate pixels per world unit from viewport\r\n // For orthographic views this is constant and provides stable pattern scaling\r\n const vp = params.target.viewRect;\r\n\r\n // Default to 1.0 if we can't calculate (will use world units directly)\r\n let pixelsPerWorld = 1.0;\r\n\r\n // Get frustum planes: { top, bottom, left, right }\r\n const planes = params.target.uniforms.frustum.planes;\r\n const worldWidth = planes[3] - planes[2]; // right - left\r\n if (worldWidth > 0) {\r\n // worldWidth is the view width in world units\r\n pixelsPerWorld = vp.width / worldWidth;\r\n }\r\n\r\n uniform.setUniform1f(pixelsPerWorld);\r\n });\r\n });\r\n };\r\n\r\n addUniform(prog.vert);\r\n addUniform(prog.frag);\r\n}\r\n\r\nfunction addUseCumulativeDistanceUniform(prog: ProgramBuilder): void {\r\n prog.vert.addUniform(\"u_useCumDist\", VariableType.Float, (prg) => {\r\n prg.addGraphicUniform(\"u_useCumDist\", (uniform, params) => {\r\n uniform.setUniform1f(params.geometry.hasCumulativeDistances ? 1.0 : 0.0);\r\n });\r\n });\r\n}\r\n\r\nfunction addNumLineCodesUniform(prog: ProgramBuilder): void {\r\n prog.vert.addUniform(\"u_numLineCodes\", VariableType.Float, (prg) => {\r\n prg.addProgramUniform(\"u_numLineCodes\", (uniform, _params) => {\r\n // Pass the current LineCode capacity to the shader\r\n uniform.setUniform1f(LineCode.capacity());\r\n });\r\n });\r\n}\r\n\r\n/** @internal */\r\nexport const adjustWidth = `\r\nvoid adjustWidth(inout float width, vec2 d2, vec2 org) {\r\n if (u_aaSamples > 1) {\r\n if (width < 5.0)\r\n width += (5.0 - width) * 0.125;\r\n return;\r\n }\r\n\r\n // calculate slope based width adjustment for non-AA lines, widths 1 to 4\r\n vec2 d2A = abs(d2);\r\n const float s_myFltEpsilon = 0.0001; // limit test resolution to 4 digits in case 24 bit (s16e7) is used in hardware\r\n if (d2A.y > s_myFltEpsilon && width < 4.5) {\r\n float len = length(d2A);\r\n float tan = d2A.x / d2A.y;\r\n\r\n if (width < 1.5) { // width 1\r\n if (tan <= 1.0)\r\n width = d2A.y;\r\n else\r\n width = d2A.x;\r\n // width 1 requires additional adjustment plus trimming in frag shader using v_lnInfo\r\n width *= 1.01;\r\n v_lnInfo.xy = org;\r\n v_lnInfo.w = 1.0; // set flag to do trimming\r\n // set slope in v_lnInfo.z\r\n if (d2A.x - d2A.y > s_myFltEpsilon) {\r\n v_lnInfo.z = d2.y / d2.x;\r\n v_lnInfo.w += 2.0; // add in x-major flag\r\n } else\r\n v_lnInfo.z = d2.x / d2.y;\r\n\r\n } else if (width < 2.5) { // width 2\r\n if (tan <= 0.5)\r\n width = 2.0 * d2A.y;\r\n else\r\n width = (d2A.y + 2.0 * d2A.x);\r\n\r\n } else if (width < 3.5) { // width 3\r\n if (tan <= 1.0)\r\n width = (3.0 * d2A.y + d2A.x);\r\n else\r\n width = (d2A.y + 3.0 * d2A.x);\r\n\r\n } else { // if (width < 4.5) // width 4\r\n if (tan <= 0.5)\r\n width = (4.0 * d2A.y + d2A.x);\r\n else if (tan <= 2.0)\r\n width = (3.0 * d2A.y + 3.0 * d2A.x);\r\n else\r\n width = (d2A.y + 4.0 * d2A.x);\r\n }\r\n width /= len;\r\n }\r\n}\r\n`;\r\n\r\n/** @internal */\r\nexport function addAdjustWidth(vert: VertexShaderBuilder) {\r\n vert.addUniform(\"u_aaSamples\", VariableType.Int, (prog) => {\r\n prog.addGraphicUniform(\"u_aaSamples\", (attr, params) => {\r\n const numSamples = System.instance.frameBufferStack.currentFbMultisampled ? params.target.compositor.antialiasSamples : 1;\r\n attr.setUniform1i(numSamples);\r\n });\r\n });\r\n vert.addFunction(adjustWidth);\r\n}\r\n\r\n/** @internal */\r\nexport function addLineCodeTexture(frag: FragmentShaderBuilder) {\r\n frag.addUniform(\"u_lineCodeTexture\", VariableType.Sampler2D, (prog) => {\r\n prog.addProgramUniform(\"u_lineCodeTexture\", (uniform) => {\r\n const lct = System.instance.lineCodeTexture;\r\n assert(undefined !== lct);\r\n if (undefined !== lct)\r\n lct.bindSampler(uniform, TextureUnit.LineCode);\r\n });\r\n });\r\n}\r\n\r\n/** @internal */\r\nexport function addLineCode(prog: ProgramBuilder, args: string) {\r\n const vert = prog.vert;\r\n const frag = prog.frag;\r\n\r\n addLineCodeUniform(vert);\r\n addPixelsPerWorldUniform(prog);\r\n addUseCumulativeDistanceUniform(prog);\r\n addNumLineCodesUniform(prog); // Add uniform for dynamic capacity\r\n\r\n const funcCall: string = `computeLineCodeTextureCoords(${args})`;\r\n\r\n prog.addFunctionComputedVaryingWithArgs(\"v_texc\", VariableType.Vec2, funcCall, computeTextureCoord);\r\n\r\n addFrustum(prog);\r\n addLineCodeTexture(prog.frag);\r\n\r\n frag.set(FragmentShaderComponent.FinalizeBaseColor, applyLineCode);\r\n frag.set(FragmentShaderComponent.CheckForDiscard, checkForDiscard);\r\n frag.addGlobal(\"discardByLineCode\", VariableType.Boolean, \"false\");\r\n}\r\n\r\nfunction polylineAddLineCode(prog: ProgramBuilder) {\r\n addLineCode(prog, lineCodeArgs);\r\n addModelViewMatrix(prog.vert);\r\n}\r\n\r\nfunction addCommon(prog: ProgramBuilder) {\r\n const vert = prog.vert;\r\n addModelToWindowCoordinates(vert); // adds u_mvp, u_viewportTransformation\r\n addProjectionMatrix(vert);\r\n addModelViewMatrix(vert);\r\n addViewport(vert);\r\n\r\n vert.addGlobal(\"g_windowPos\", VariableType.Vec4);\r\n vert.addGlobal(\"g_prevPos\", VariableType.Vec4);\r\n vert.addGlobal(\"g_nextPos\", VariableType.Vec4);\r\n vert.addGlobal(\"g_windowDir\", VariableType.Vec2);\r\n vert.addInitializer(decodeAdjacentPositions);\r\n\r\n vert.addFunction(unquantize2d);\r\n\r\n addLineWeight(vert);\r\n\r\n vert.addGlobal(\"miterAdjust\", VariableType.Float, \"0.0\");\r\n\r\n prog.addVarying(\"v_patternDistance\", VariableType.Float);\r\n\r\n prog.addVarying(\"v_eyeSpace\", VariableType.Vec3);\r\n vert.set(VertexShaderComponent.ComputePosition, buildComputePosition(vert.positionType));\r\n prog.addVarying(\"v_lnInfo\", VariableType.Vec4);\r\n addAdjustWidth(vert);\r\n\r\n addSamplePosition(vert);\r\n vert.addFunction(decodePosition);\r\n vert.addFunction(decodeFloatFromBytes);\r\n}\r\n\r\nconst decodePosition = `\r\nvec4 decodePosition(vec3 baseIndex) {\r\n float index = decodeUInt24(baseIndex);\r\n return samplePosition(index);\r\n}\r\n`;\r\n\r\nconst decodeAdjacentPositions = `\r\n g_prevPos = decodePosition(a_prevIndex);\r\n g_nextPos = decodePosition(a_nextIndex);\r\n`;\r\n\r\nconst decodeFloatFromBytes = `\r\nfloat decodeFloatFromBytes(vec4 bytes) {\r\n uvec4 b = uvec4(bytes);\r\n uint u = b.x | (b.y << 8) | (b.z << 16) | (b.w << 24);\r\n return uintBitsToFloat(u);\r\n}\r\n`;\r\n\r\nfunction buildComputePosition(positionType: PositionType): string {\r\n const cumDistExpr = positionType === \"unquantized\"\r\n ? \"((u_vertParams.z > 5.0) ? decodeFloatFromBytes(g_vertLutData5) : 0.0)\"\r\n : \"((u_vertParams.z > 3.0) ? decodeFloatFromBytes(g_vertLutData3) : 0.0)\";\r\n\r\n return `\r\n const float kNone = 0.0,\r\n kSquare = 1.0*3.0,\r\n kMiter = 2.0*3.0,\r\n kMiterInsideOnly = 3.0*3.0,\r\n kJointBase = 4.0*3.0,\r\n kNegatePerp = 8.0*3.0,\r\n kNegateAlong = 16.0*3.0,\r\n kNoneAdjWt = 32.0*3.0;\r\n\r\n v_lnInfo = vec4(0.0, 0.0, 0.0, 0.0); // init and set flag to false\r\n\r\n vec4 next = g_nextPos;\r\n vec4 pos;\r\n g_windowPos = modelToWindowCoordinates(rawPos, next, pos, v_eyeSpace);\r\n if (g_windowPos.w == 0.0)\r\n return g_windowPos;\r\n\r\n float param = a_param;\r\n float weight = computeLineWeight();\r\n float scale = 1.0, directionScale = 1.0;\r\n\r\n if (param >= kNoneAdjWt)\r\n param -= kNoneAdjWt;\r\n\r\n bool isSegmentStart = true;\r\n if (param >= kNegateAlong) {\r\n directionScale = -directionScale;\r\n param -= kNegateAlong;\r\n isSegmentStart = false;\r\n }\r\n\r\n if (param >= kNegatePerp) {\r\n scale = -1.0;\r\n param -= kNegatePerp;\r\n }\r\n\r\n vec4 otherPos;\r\n vec3 otherMvPos;\r\n vec4 projNext = modelToWindowCoordinates(next, rawPos, otherPos, otherMvPos);\r\n g_windowDir = projNext.xy - g_windowPos.xy;\r\n\r\n if (u_useCumDist > 0.5)\r\n v_patternDistance = ${cumDistExpr};\r\n else\r\n v_patternDistance = 0.0;\r\n\r\n if (param < kJointBase) {\r\n vec2 dir = (directionScale > 0.0) ? g_windowDir : -g_windowDir;\r\n vec2 pos = (directionScale > 0.0) ? g_windowPos.xy : projNext.xy;\r\n adjustWidth(weight, dir, pos);\r\n }\r\n\r\n if (kNone != param) {\r\n vec2 delta = vec2(0.0);\r\n vec4 prev = g_prevPos;\r\n vec4 projPrev = modelToWindowCoordinates(prev, rawPos, otherPos, otherMvPos);\r\n vec2 prevDir = g_windowPos.xy - projPrev.xy;\r\n float thisLength = sqrt(g_windowDir.x * g_windowDir.x + g_windowDir.y * g_windowDir.y);\r\n const float s_minNormalizeLength = 1.0E-5; // avoid normalizing zero length vectors.\r\n float dist = weight / 2.0;\r\n\r\n if (thisLength > s_minNormalizeLength) {\r\n g_windowDir /= thisLength;\r\n\r\n float prevLength = sqrt(prevDir.x * prevDir.x + prevDir.y * prevDir.y);\r\n\r\n if (prevLength > s_minNormalizeLength) {\r\n prevDir /= prevLength;\r\n const float s_minParallelDot= -.9999, s_maxParallelDot = .9999;\r\n float prevNextDot = dot(prevDir, g_windowDir);\r\n\r\n if (prevNextDot < s_minParallelDot || prevNextDot > s_maxParallelDot) // No miter if parallel or antiparallel.\r\n param = kSquare;\r\n } else\r\n param = kSquare;\r\n } else {\r\n g_windowDir = -normalize(prevDir);\r\n param = kSquare;\r\n }\r\n\r\n vec2 perp = scale * vec2(-g_windowDir.y, g_windowDir.x);\r\n\r\n if (param == kSquare) {\r\n delta = perp;\r\n } else {\r\n vec2 bisector = normalize(prevDir - g_windowDir);\r\n float dotP = dot (bisector, perp);\r\n\r\n if (dotP != 0.0) { // Should never occur - but avoid divide by zero.\r\n const float maxMiter = 3.0;\r\n float miterDistance = 1.0/dotP;\r\n\r\n if (param == kMiter) { // Straight miter.\r\n delta = (abs(miterDistance) > maxMiter) ? perp : bisector * miterDistance;\r\n\r\n } else if (param == kMiterInsideOnly) { // Miter at inside, square at outside (to make room for joint).\r\n delta = (dotP > 0.0 || abs(miterDistance) > maxMiter) ? perp : bisector * miterDistance;\r\n\r\n } else {\r\n const float jointTriangleCount = 3.0;\r\n float ratio = (param - kJointBase) / jointTriangleCount; // 3 triangles per half-joint as defined in Graphics.cpp\r\n delta = normalize((1.0 - ratio) * bisector + (dotP < 0.0 ? -ratio : ratio) * perp); // Miter/Straight combination.\r\n }\r\n }\r\n }\r\n\r\n miterAdjust = dot(g_windowDir, delta) * dist; // Not actually used for hilite shader but meh.\r\n pos.x += dist * delta.x * 2.0 * pos.w / u_viewport.x;\r\n pos.y += dist * delta.y * 2.0 * pos.w / u_viewport.y;\r\n }\r\n\r\n return pos;\r\n`;\r\n}\r\n\r\nconst lineCodeArgs = \"g_windowDir, g_windowPos, miterAdjust, v_patternDistance\";\r\n\r\n/** @internal */\r\nexport function createPolylineBuilder(isInstanced: IsInstanced, positionType: PositionType): ProgramBuilder {\r\n const instanced = IsInstanced.Yes === isInstanced;\r\n const attrMap = AttributeMap.findAttributeMap(TechniqueId.Polyline, instanced);\r\n const builder = new ProgramBuilder(attrMap, { positionType, instanced });\r\n\r\n addShaderFlags(builder);\r\n\r\n addCommon(builder);\r\n\r\n polylineAddLineCode(builder);\r\n\r\n addColor(builder);\r\n addEdgeContrast(builder.vert);\r\n addWhiteOnWhiteReversal(builder.frag);\r\n\r\n return builder;\r\n}\r\n\r\n/** @internal */\r\nexport function createPolylineHiliter(isInstanced: IsInstanced, positionType: PositionType): ProgramBuilder {\r\n const instanced = IsInstanced.Yes === isInstanced;\r\n const attrMap = AttributeMap.findAttributeMap(TechniqueId.Polyline, instanced);\r\n const builder = new ProgramBuilder(attrMap, { positionType, instanced });\r\n\r\n addCommon(builder);\r\n addUseCumulativeDistanceUniform(builder);\r\n addFrustum(builder);\r\n addHiliter(builder, true);\r\n return builder;\r\n}\r\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"ImdlGraphicsCreator.d.ts","sourceRoot":"","sources":["../../../../src/internal/tile/ImdlGraphicsCreator.ts"],"names":[],"mappings":"AAIA;;GAEG;AASH,OAAO,EAAE,SAAS,IAAI,IAAI,EAAE,MAAM,6BAA6B,CAAC;AAIhE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAC;AAEhE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AAE9D,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAC/D,OAAO,EAAE,kBAAkB,EAAE,MAAM,+CAA+C,CAAC;AAEnF,OAAO,EAAE,yBAAyB,EAAE,MAAM,+CAA+C,CAAC;AAI1F,OAAO,EAAE,eAAe,EAAE,MAAM,8BAA8B,CAAC;AAC/D,OAAO,EAAE,aAAa,EAAE,MAAM,gCAAgC,CAAC;AAE/D;GACG;AACH,MAAM,WAAW,iBAAiB;IAChC,QAAQ,EAAE,IAAI,CAAC,QAAQ,CAAC;IACxB,MAAM,EAAE,YAAY,CAAC;IACrB,MAAM,EAAE,gBAAgB,CAAC;IACzB,UAAU,CAAC,EAAE,MAAM,OAAO,CAAC;IAC3B,QAAQ,CAAC,EAAE,aAAa,CAAC;CAC1B;AAmXD,wBAAsB,kBAAkB,CAAC,OAAO,EAAE,iBAAiB,GAAG,OAAO,CAAC,aAAa,GAAG,SAAS,CAAC,CAuBvG;AAsDD,wBAAgB,oCAAoC,CAAC,KAAK,EAAE,kBAAkB,EAAE,OAAO,EAAE,yBAAyB,EAAE,MAAM,EAAE,YAAY,GAAG,eAAe,CA+CzJ;AAED,wBAAgB,4BAA4B,CAAC,KAAK,EAAE,kBAAkB,EAAE,OAAO,EAAE,yBAAyB,EAAE,MAAM,EAAE,YAAY,GAAG,aAAa,GAAG,SAAS,CAG3J"}
1
+ {"version":3,"file":"ImdlGraphicsCreator.d.ts","sourceRoot":"","sources":["../../../../src/internal/tile/ImdlGraphicsCreator.ts"],"names":[],"mappings":"AAIA;;GAEG;AASH,OAAO,EAAE,SAAS,IAAI,IAAI,EAAE,MAAM,6BAA6B,CAAC;AAIhE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAC;AAEhE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AAE9D,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAC/D,OAAO,EAAE,kBAAkB,EAAE,MAAM,+CAA+C,CAAC;AAEnF,OAAO,EAAE,yBAAyB,EAAE,MAAM,+CAA+C,CAAC;AAI1F,OAAO,EAAE,eAAe,EAAE,MAAM,8BAA8B,CAAC;AAC/D,OAAO,EAAE,aAAa,EAAE,MAAM,gCAAgC,CAAC;AAE/D;GACG;AACH,MAAM,WAAW,iBAAiB;IAChC,QAAQ,EAAE,IAAI,CAAC,QAAQ,CAAC;IACxB,MAAM,EAAE,YAAY,CAAC;IACrB,MAAM,EAAE,gBAAgB,CAAC;IACzB,UAAU,CAAC,EAAE,MAAM,OAAO,CAAC;IAC3B,QAAQ,CAAC,EAAE,aAAa,CAAC;CAC1B;AAoXD,wBAAsB,kBAAkB,CAAC,OAAO,EAAE,iBAAiB,GAAG,OAAO,CAAC,aAAa,GAAG,SAAS,CAAC,CAuBvG;AAsDD,wBAAgB,oCAAoC,CAAC,KAAK,EAAE,kBAAkB,EAAE,OAAO,EAAE,yBAAyB,EAAE,MAAM,EAAE,YAAY,GAAG,eAAe,CA+CzJ;AAED,wBAAgB,4BAA4B,CAAC,KAAK,EAAE,kBAAkB,EAAE,OAAO,EAAE,yBAAyB,EAAE,MAAM,EAAE,YAAY,GAAG,aAAa,GAAG,SAAS,CAG3J"}
@@ -210,6 +210,7 @@ function createPrimitiveGeometry(primitive, options, viOrigin) {
210
210
  indices: new VertexIndices_1.VertexIndices(primitive.params.polyline.indices),
211
211
  prevIndices: new VertexIndices_1.VertexIndices(primitive.params.polyline.prevIndices),
212
212
  },
213
+ hasCumulativeDistances: primitive.params.hasCumulativeDistances,
213
214
  }, viOrigin);
214
215
  case "mesh": {
215
216
  const surf = primitive.params.surface;
@@ -1 +1 @@
1
- {"version":3,"file":"ImdlGraphicsCreator.js","sourceRoot":"","sources":["../../../../src/internal/tile/ImdlGraphicsCreator.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 Tiles\r\n */\r\n\r\nimport { assert, Id64, JsonUtils } from \"@itwin/core-bentley\";\r\nimport { ClipVector, Point2d, Point3d, Range3d, Transform } from \"@itwin/core-geometry\";\r\nimport {\r\n ColorDef, Gradient, ImageSource, RenderMaterial, RenderMaterialParams, RenderTexture, RenderTextureParams, TextureMapping,\r\n} from \"@itwin/core-common\";\r\nimport { AuxChannelTable } from \"../../common/internal/render/AuxChannelTable\";\r\nimport { createSurfaceMaterial } from \"../../common/internal/render/SurfaceParams\";\r\nimport { ImdlModel as Imdl } from \"../../common/imdl/ImdlModel\";\r\nimport { ImdlColorDef, ImdlNamedTexture, ImdlTextureMapping } from \"../../common/imdl/ImdlSchema\";\r\nimport { convertFeatureTable, edgeParamsFromImdl, toMaterialParams, toVertexTable } from \"../../common/imdl/ParseImdlDocument\";\r\nimport { VertexIndices } from \"../../common/internal/render/VertexIndices\";\r\nimport type { RenderGraphic } from \"../../render/RenderGraphic\";\r\nimport { GraphicBranch } from \"../../render/GraphicBranch\";\r\nimport type { RenderSystem } from \"../../render/RenderSystem\";\r\nimport { InstancedGraphicParams } from \"../../common/render/InstancedGraphicParams\";\r\nimport type { IModelConnection } from \"../../IModelConnection\";\r\nimport { GraphicDescription } from \"../../common/render/GraphicDescriptionBuilder\";\r\nimport { GraphicDescriptionImpl, isGraphicDescription } from \"../../common/internal/render/GraphicDescriptionBuilderImpl\";\r\nimport { GraphicDescriptionContext } from \"../../common/render/GraphicDescriptionContext\";\r\nimport { _implementationProhibited, _textures } from \"../../common/internal/Symbols\";\r\nimport { RenderGeometry } from \"../../internal/render/RenderGeometry\";\r\nimport { createGraphicTemplate, GraphicTemplateBatch, GraphicTemplateBranch } from \"../../internal/render/GraphicTemplateImpl\";\r\nimport { GraphicTemplate } from \"../../render/GraphicTemplate\";\r\nimport { LayerTileData } from \"../render/webgl/MapLayerParams\";\r\n\r\n/** Options provided to [[decodeImdlContent]].\r\n */\r\nexport interface ImdlDecodeOptions {\r\n document: Imdl.Document;\r\n system: RenderSystem;\r\n iModel: IModelConnection;\r\n isCanceled?: () => boolean;\r\n tileData?: LayerTileData;\r\n}\r\n\r\nasync function loadNamedTexture(name: string, namedTex: ImdlNamedTexture, options: ImdlDecodeOptions): Promise<RenderTexture | undefined> {\r\n // Reasons a texture could be embedded in the tile content instead of requested separately from the backend:\r\n // - external textures are disabled\r\n // - the texture name is not a valid Id64 string\r\n // - the texture is below a certain backend-hardcoded size threshold\r\n // The bufferViewJson being defined signifies any of the above conditions. In that case, the image content\r\n // has been embedded in the tile contents. Otherwise, we will attempt to request the image content separately\r\n // from the backend.\r\n\r\n try {\r\n let textureType = RenderTexture.Type.Normal;\r\n const isGlyph = JsonUtils.asBool(namedTex.isGlyph);\r\n const isTileSection = !isGlyph && JsonUtils.asBool(namedTex.isTileSection);\r\n if (isGlyph)\r\n textureType = RenderTexture.Type.Glyph;\r\n else if (isTileSection)\r\n textureType = RenderTexture.Type.TileSection;\r\n\r\n // We produce unique tile sections for very large (> 8 megapixel) textures, and unique glyph atlases for raster text.\r\n // Neither should be cached.\r\n const cacheable = !isGlyph && !isTileSection;\r\n const ownership = cacheable ? { iModel: options.iModel, key: name } : undefined;\r\n\r\n const bufferViewId = JsonUtils.asString(namedTex.bufferView);\r\n const bufferViewJson = 0 !== bufferViewId.length ? options.document.json.bufferViews[bufferViewId] : undefined;\r\n\r\n if (undefined !== bufferViewJson) { // presence of bufferViewJson signifies we should read the texture from the tile content\r\n const byteOffset = JsonUtils.asInt(bufferViewJson.byteOffset);\r\n const byteLength = JsonUtils.asInt(bufferViewJson.byteLength);\r\n if (0 === byteLength)\r\n return undefined;\r\n\r\n const texBytes = options.document.binaryData.subarray(byteOffset, byteOffset + byteLength);\r\n const format = namedTex.format;\r\n const source = new ImageSource(texBytes, format);\r\n return await options.system.createTextureFromSource({ source, ownership, type: textureType, transparency: namedTex.transparency });\r\n }\r\n\r\n // bufferViewJson was undefined, so attempt to request the texture directly from the backend\r\n const params = new RenderTextureParams(cacheable ? name : undefined, textureType);\r\n return options.system.createTextureFromElement(name, options.iModel, params, namedTex.format);\r\n } catch {\r\n return undefined;\r\n }\r\n}\r\n\r\nasync function loadNamedTextures(options: ImdlDecodeOptions): Promise<Map<string, RenderTexture>> {\r\n const result = new Map<string, RenderTexture>();\r\n const namedTextures = options.document.json.namedTextures;\r\n if (!namedTextures)\r\n return result;\r\n\r\n const promises = new Array<Promise<void>>();\r\n for (const [name, namedTexture] of Object.entries(namedTextures)) {\r\n const texture = options.system.findTexture(name, options.iModel);\r\n if (texture) {\r\n result.set(name, texture);\r\n continue;\r\n } else if (namedTexture) {\r\n promises.push(loadNamedTexture(name, namedTexture, options).then((tx) => {\r\n if (tx)\r\n result.set(name, tx);\r\n }));\r\n }\r\n }\r\n\r\n if (promises.length > 0)\r\n await Promise.all(promises);\r\n\r\n return result;\r\n}\r\n\r\ninterface GraphicsOptions {\r\n document?: Imdl.Document;\r\n iModel?: IModelConnection;\r\n system: RenderSystem;\r\n isCanceled?: () => boolean;\r\n textures: Map<string, RenderTexture>;\r\n patterns: Map<string, RenderGeometry[]>;\r\n tileData?: LayerTileData;\r\n}\r\n\r\nfunction constantLodParamPropsFromJson(propsJson: { repetitions?: number, offset?: number[], minDistClamp?: number, maxDistClamp?: number } | undefined): TextureMapping.ConstantLodParamProps | undefined {\r\n if (undefined === propsJson)\r\n return undefined;\r\n\r\n const constantLodPops: TextureMapping.ConstantLodParamProps = {\r\n repetitions: JsonUtils.asDouble(propsJson.repetitions, 1.0),\r\n offset: { x: propsJson.offset ? JsonUtils.asDouble(propsJson.offset[0]) : 0.0, y: propsJson.offset ? JsonUtils.asDouble(propsJson.offset[1]) : 0.0 },\r\n minDistClamp: JsonUtils.asDouble(propsJson.minDistClamp, 1.0),\r\n maxDistClamp: JsonUtils.asDouble(propsJson.maxDistClamp, 4096.0 * 1024.0 * 1024.0),\r\n };\r\n return constantLodPops;\r\n}\r\n\r\nfunction textureMappingFromJson(json: ImdlTextureMapping | undefined, options: GraphicsOptions): TextureMapping | undefined {\r\n if (!json)\r\n return undefined;\r\n\r\n const texture = options.textures.get(JsonUtils.asString(json.name));\r\n if (!texture)\r\n return undefined;\r\n\r\n const paramsJson = json.params;\r\n const tf = paramsJson.transform;\r\n\r\n const paramProps: TextureMapping.ParamProps = {\r\n textureMat2x3: new TextureMapping.Trans2x3(tf[0][0], tf[0][1], tf[0][2], tf[1][0], tf[1][1], tf[1][2]),\r\n textureWeight: JsonUtils.asDouble(paramsJson.weight, 1.0),\r\n mapMode: JsonUtils.asInt(paramsJson.mode),\r\n worldMapping: JsonUtils.asBool(paramsJson.worldMapping),\r\n useConstantLod: JsonUtils.asBool(paramsJson.useConstantLod),\r\n constantLodProps: constantLodParamPropsFromJson(paramsJson.constantLodParams),\r\n };\r\n\r\n const textureMapping = new TextureMapping(texture, new TextureMapping.Params(paramProps));\r\n\r\n const normalMapJson = json.normalMapParams;\r\n if (normalMapJson) {\r\n let normalMap;\r\n const normalTexName = JsonUtils.asString(normalMapJson.textureName);\r\n if (normalTexName.length === 0 || undefined !== (normalMap = options.textures.get(normalTexName))) {\r\n textureMapping.normalMapParams = {\r\n normalMap,\r\n greenUp: JsonUtils.asBool(normalMapJson.greenUp),\r\n scale: JsonUtils.asDouble(normalMapJson.scale, 1),\r\n useConstantLod: JsonUtils.asBool(normalMapJson.useConstantLod),\r\n };\r\n }\r\n }\r\n\r\n return textureMapping;\r\n}\r\n\r\nfunction getMaterial(mat: string | Imdl.SurfaceMaterialParams, options: GraphicsOptions): RenderMaterial | undefined {\r\n if (typeof mat !== \"string\") {\r\n const args = toMaterialParams(mat);\r\n return options.system.createRenderMaterial(args);\r\n }\r\n\r\n if (!options.iModel) {\r\n return undefined;\r\n }\r\n\r\n const material = options.system.findMaterial(mat, options.iModel);\r\n if (material || !options.document?.json.renderMaterials)\r\n return material;\r\n\r\n const json = options.document.json.renderMaterials[mat];\r\n if (!json)\r\n return undefined;\r\n\r\n function colorDefFromJson(col: ImdlColorDef | undefined): ColorDef | undefined {\r\n return col ? ColorDef.from(col[0] * 255 + 0.5, col[1] * 255 + 0.5, col[2] * 255 + 0.5) : undefined;\r\n }\r\n\r\n const params = new RenderMaterialParams(mat);\r\n params.diffuseColor = colorDefFromJson(json.diffuseColor);\r\n if (json.diffuse !== undefined)\r\n params.diffuse = JsonUtils.asDouble(json.diffuse);\r\n\r\n params.specularColor = colorDefFromJson(json.specularColor);\r\n if (json.specular !== undefined)\r\n params.specular = JsonUtils.asDouble(json.specular);\r\n\r\n params.reflectColor = colorDefFromJson(json.reflectColor);\r\n if (json.reflect !== undefined)\r\n params.reflect = JsonUtils.asDouble(json.reflect);\r\n\r\n if (json.specularExponent !== undefined)\r\n params.specularExponent = json.specularExponent;\r\n\r\n if (undefined !== json.transparency)\r\n params.alpha = 1.0 - json.transparency;\r\n\r\n params.refract = JsonUtils.asDouble(json.refract);\r\n params.shadows = JsonUtils.asBool(json.shadows);\r\n params.ambient = JsonUtils.asDouble(json.ambient);\r\n\r\n if (undefined !== json.textureMapping)\r\n params.textureMapping = textureMappingFromJson(json.textureMapping.texture, options);\r\n\r\n return options.system.createRenderMaterial({\r\n diffuse: {color: params.diffuseColor, weight: params.diffuse},\r\n specular: {color: params.specularColor, weight: params.specular, exponent: params.specularExponent},\r\n alpha: params.alpha,\r\n textureMapping: params.textureMapping ? {\r\n texture: params.textureMapping.texture,\r\n transform: params.textureMapping.params.textureMatrix,\r\n mode: params.textureMapping.params.mode,\r\n weight: params.textureMapping.params.weight,\r\n worldMapping: params.textureMapping.params.worldMapping,\r\n useConstantLod: params.textureMapping.params.useConstantLod,\r\n constantLodProps: params.textureMapping.params.constantLodParams,\r\n normalMapParams: params.textureMapping.normalMapParams,\r\n } : undefined,\r\n });\r\n}\r\n\r\nfunction getModifiers(primitive: Imdl.Primitive): { viOrigin?: Point3d, instances?: InstancedGraphicParams } {\r\n const mod = primitive.modifier;\r\n switch (mod?.type) {\r\n case \"instances\":\r\n return { instances: InstancedGraphicParams.fromProps(mod) };\r\n case \"viewIndependentOrigin\":\r\n return {\r\n viOrigin: Point3d.fromJSON(mod.origin),\r\n };\r\n default:\r\n return {};\r\n }\r\n}\r\n\r\nfunction createPrimitiveGeometry(primitive: Imdl.Primitive, options: GraphicsOptions, viOrigin: Point3d | undefined): RenderGeometry | undefined {\r\n switch (primitive.type) {\r\n case \"point\":\r\n return options.system.createPointStringGeometry({\r\n ...primitive.params,\r\n vertices: toVertexTable(primitive.params.vertices),\r\n indices: new VertexIndices(primitive.params.indices),\r\n }, viOrigin);\r\n case \"polyline\":\r\n return options.system.createPolylineGeometry({\r\n ...primitive.params,\r\n vertices: toVertexTable(primitive.params.vertices),\r\n polyline: {\r\n ...primitive.params.polyline,\r\n indices: new VertexIndices(primitive.params.polyline.indices),\r\n prevIndices: new VertexIndices(primitive.params.polyline.prevIndices),\r\n },\r\n }, viOrigin);\r\n case \"mesh\": {\r\n const surf = primitive.params.surface;\r\n let material;\r\n if (surf.material) {\r\n if (!surf.material.isAtlas)\r\n material = createSurfaceMaterial(getMaterial(surf.material.material, options));\r\n else\r\n material = surf.material;\r\n }\r\n\r\n let textureMapping;\r\n if (surf.textureMapping) {\r\n let texture;\r\n if (typeof surf.textureMapping.texture === \"string\") {\r\n texture = options.textures.get(surf.textureMapping.texture);\r\n } else {\r\n const gradient = Gradient.Symb.fromJSON(surf.textureMapping.texture);\r\n texture = options.system.getGradientTexture(gradient, options.iModel);\r\n }\r\n\r\n if (texture)\r\n textureMapping = { texture, alwaysDisplayed: surf.textureMapping.alwaysDisplayed };\r\n }\r\n\r\n return options.system.createMeshGeometry({\r\n ...primitive.params,\r\n edges: primitive.params.edges ? edgeParamsFromImdl(primitive.params.edges) : undefined,\r\n vertices: toVertexTable(primitive.params.vertices),\r\n auxChannels: primitive.params.auxChannels ? AuxChannelTable.fromJSON(primitive.params.auxChannels) : undefined,\r\n surface: {\r\n ...primitive.params.surface,\r\n material,\r\n textureMapping,\r\n indices: new VertexIndices(primitive.params.surface.indices),\r\n },\r\n tileData: options.tileData,\r\n }, viOrigin);\r\n }\r\n }\r\n}\r\n\r\nfunction createPrimitiveGraphic(primitive: Imdl.Primitive, options: GraphicsOptions): RenderGraphic | undefined {\r\n const mods = getModifiers(primitive);\r\n const geometry = createPrimitiveGeometry(primitive, options, mods.viOrigin);\r\n return geometry ? options.system.createRenderGraphic(geometry, mods.instances) : undefined;\r\n}\r\n\r\nfunction createPatternGeometries(primitives: Imdl.Primitive[], options: GraphicsOptions): RenderGeometry[] {\r\n const geometries = [];\r\n for (const primitive of primitives) {\r\n const geometry = createPrimitiveGeometry(primitive, options, undefined);\r\n if (geometry)\r\n geometries.push(geometry);\r\n }\r\n\r\n return geometries;\r\n}\r\n\r\nfunction createPatternGraphic(params: Imdl.AreaPatternParams, options: GraphicsOptions): RenderGraphic | undefined {\r\n const geometries = options.patterns.get(params.symbolName);\r\n if (!geometries || geometries.length === 0)\r\n return undefined;\r\n\r\n const clip = ClipVector.fromJSON(params.clip);\r\n const clipVolume = clip?.isValid ? options.system.createClipVolume(clip) : undefined;\r\n if (!clipVolume)\r\n return undefined;\r\n\r\n const viewIndependentOrigin = params.viewIndependentOrigin ? Point3d.fromJSON(params.viewIndependentOrigin) : undefined;\r\n const pattern = options.system.createAreaPattern({\r\n xyOffsets: params.xyOffsets,\r\n featureId: params.featureId,\r\n orgTransform: Transform.fromJSON(params.orgTransform),\r\n origin: Point2d.fromJSON(params.origin),\r\n scale: params.scale,\r\n spacing: Point2d.fromJSON(params.spacing),\r\n patternToModel: Transform.fromJSON(params.modelTransform),\r\n range: Range3d.fromJSON(params.range),\r\n symbolTranslation: Point3d.fromJSON(params.symbolTranslation),\r\n viewIndependentOrigin,\r\n });\r\n\r\n if (!pattern)\r\n return undefined;\r\n\r\n const branch = new GraphicBranch(true);\r\n for (const geometry of geometries) {\r\n const graphic = options.system.createRenderGraphic(geometry, pattern);\r\n if (graphic)\r\n branch.add(graphic);\r\n }\r\n\r\n return branch.isEmpty ? undefined : options.system.createGraphicBranch(branch, Transform.createIdentity(), { clipVolume });\r\n}\r\n\r\nfunction createNodeGraphics(node: Imdl.Node, options: GraphicsOptions): RenderGraphic[] {\r\n if (undefined === node.groupId)\r\n return createPrimitivesNodeGraphics(node, options);\r\n\r\n const graphics: RenderGraphic[] = [];\r\n for (const child of node.nodes) {\r\n graphics.push(...createPrimitivesNodeGraphics(child, options));\r\n }\r\n\r\n if (graphics.length === 0)\r\n return graphics;\r\n\r\n const branch = new GraphicBranch(true);\r\n branch.groupNodeId = node.groupId;\r\n branch.entries.push(...graphics);\r\n return [options.system.createBranch(branch, Transform.createIdentity())];\r\n}\r\n\r\nfunction createPrimitivesNodeGraphics(node: Imdl.PrimitivesNode, options: GraphicsOptions): RenderGraphic[] {\r\n let graphics = [];\r\n for (const primitive of node.primitives) {\r\n const graphic = primitive.type === \"pattern\" ? createPatternGraphic(primitive.params, options) : createPrimitiveGraphic(primitive, options);\r\n if (graphic)\r\n graphics.push(graphic);\r\n }\r\n\r\n if (!graphics.length)\r\n return graphics;\r\n\r\n if (undefined !== node.layerId) {\r\n const layerGraphic = 1 === graphics.length ? graphics[0] : options.system.createGraphicList(graphics);\r\n graphics = [options.system.createGraphicLayer(layerGraphic, node.layerId)];\r\n } else if (undefined !== node.animationNodeId) {\r\n const branch = new GraphicBranch(true);\r\n branch.animationId = node.animationId;\r\n branch.animationNodeId = node.animationNodeId;\r\n branch.entries.push(...graphics);\r\n graphics = [options.system.createBranch(branch, Transform.createIdentity())];\r\n }\r\n\r\n return graphics;\r\n}\r\n\r\nexport async function decodeImdlGraphics(options: ImdlDecodeOptions): Promise<RenderGraphic | undefined> {\r\n const textures = await loadNamedTextures(options);\r\n if (options.isCanceled && options.isCanceled())\r\n return undefined;\r\n\r\n const patterns = new Map<string, RenderGeometry[]>();\r\n const graphicsOptions = { ...options, textures, patterns };\r\n graphicsOptions.tileData = options.tileData;\r\n\r\n for (const [name, primitives] of options.document.patterns)\r\n patterns.set(name, createPatternGeometries(primitives, graphicsOptions));\r\n\r\n const system = options.system;\r\n const graphics: RenderGraphic[] = [];\r\n for (const node of options.document.nodes) {\r\n graphics.push(...createNodeGraphics(node, graphicsOptions));\r\n }\r\n\r\n switch (graphics.length) {\r\n case 0: return undefined;\r\n case 1: return graphics[0];\r\n default: return system.createGraphicList(graphics);\r\n }\r\n}\r\n\r\nfunction remapGraphicDescription(descr: GraphicDescriptionImpl, context: GraphicDescriptionContext): void {\r\n if (descr.remapContext === context) {\r\n // Already remapped.\r\n return;\r\n } else if (descr.remapContext) {\r\n throw new Error(\"You cannot create a graphic from a GraphicDescription using two different contexts\");\r\n }\r\n\r\n descr.remapContext = context;\r\n\r\n const batch = descr.batch;\r\n if (!batch) {\r\n return;\r\n }\r\n\r\n if (Id64.isTransient(batch.modelId)) {\r\n const modelLocalId = context.remapTransientLocalId(Id64.getLocalId(batch.modelId));\r\n batch.modelId = Id64.fromLocalAndBriefcaseIds(modelLocalId, 0xffffff);\r\n }\r\n\r\n const data = batch.featureTable.data;\r\n const remapId = (offset: number) => {\r\n const hi = data[offset + 1];\r\n if (hi >= 0xffffff00) {\r\n const hi8 = hi & 0xff;\r\n const lo = data[offset];\r\n\r\n // Avoid bitwise operators because they truncate at 32 bits (we need 40) and are stupid about the sign bit.\r\n const sourceLocalId = lo + (hi8 * 0xffffffff);\r\n const localId = context.remapTransientLocalId(sourceLocalId);\r\n data[offset] = localId & 0xffffffff;\r\n data[offset + 1] = 0xffffff00 + hi8;\r\n }\r\n };\r\n\r\n const subCatsOffset = 3 * batch.featureTable.numFeatures;\r\n for (let i = 0; i < subCatsOffset; i += 3) {\r\n remapId(i);\r\n }\r\n\r\n const subCatsEnd = undefined !== batch.featureTable.numSubCategories ? subCatsOffset + 2 * batch.featureTable.numSubCategories : data.length;\r\n for (let i = subCatsOffset; i < subCatsEnd; i++) {\r\n remapId(i);\r\n }\r\n\r\n if (undefined !== batch.featureTable.numSubCategories) {\r\n for (let i = subCatsEnd; i < data.length; i++) {\r\n remapId(i + 1);\r\n }\r\n }\r\n}\r\n\r\nexport function createGraphicTemplateFromDescription(descr: GraphicDescription, context: GraphicDescriptionContext, system: RenderSystem): GraphicTemplate {\r\n if (!isGraphicDescription(descr)) {\r\n throw new Error(\"Invalid GraphicDescription\");\r\n }\r\n\r\n remapGraphicDescription(descr, context);\r\n\r\n const graphicsOptions: GraphicsOptions = {\r\n system,\r\n textures: context[_textures],\r\n patterns: new Map(),\r\n };\r\n\r\n const geometry: RenderGeometry[] = [];\r\n for (const primitive of descr.primitives) {\r\n const mods = getModifiers(primitive);\r\n\r\n // GraphicDescriptionBuilder providers no way to include instances in a GraphicDescription.\r\n assert(undefined === mods?.instances);\r\n\r\n const geom = createPrimitiveGeometry(primitive, graphicsOptions, mods.viOrigin);\r\n if (geom) {\r\n geometry.push(geom);\r\n }\r\n }\r\n\r\n let batch: GraphicTemplateBatch | undefined;\r\n if (descr.batch) {\r\n const featureTable = convertFeatureTable(descr.batch.featureTable, descr.batch.modelId);\r\n batch = {\r\n options: { ...descr.batch },\r\n range: Range3d.fromJSON(descr.batch.range),\r\n featureTable,\r\n };\r\n }\r\n\r\n let branch: GraphicTemplateBranch | undefined;\r\n if (descr.translation) {\r\n branch = { transform: Transform.createTranslation(Point3d.fromJSON(descr.translation)) };\r\n }\r\n\r\n return createGraphicTemplate({\r\n nodes: [{ geometry }],\r\n batch,\r\n branch,\r\n noDispose: true,\r\n });\r\n}\r\n\r\nexport function createGraphicFromDescription(descr: GraphicDescription, context: GraphicDescriptionContext, system: RenderSystem): RenderGraphic | undefined {\r\n const template = createGraphicTemplateFromDescription(descr, context, system);\r\n return system.createGraphicFromTemplate({ template });\r\n}\r\n"]}
1
+ {"version":3,"file":"ImdlGraphicsCreator.js","sourceRoot":"","sources":["../../../../src/internal/tile/ImdlGraphicsCreator.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 Tiles\r\n */\r\n\r\nimport { assert, Id64, JsonUtils } from \"@itwin/core-bentley\";\r\nimport { ClipVector, Point2d, Point3d, Range3d, Transform } from \"@itwin/core-geometry\";\r\nimport {\r\n ColorDef, Gradient, ImageSource, RenderMaterial, RenderMaterialParams, RenderTexture, RenderTextureParams, TextureMapping,\r\n} from \"@itwin/core-common\";\r\nimport { AuxChannelTable } from \"../../common/internal/render/AuxChannelTable\";\r\nimport { createSurfaceMaterial } from \"../../common/internal/render/SurfaceParams\";\r\nimport { ImdlModel as Imdl } from \"../../common/imdl/ImdlModel\";\r\nimport { ImdlColorDef, ImdlNamedTexture, ImdlTextureMapping } from \"../../common/imdl/ImdlSchema\";\r\nimport { convertFeatureTable, edgeParamsFromImdl, toMaterialParams, toVertexTable } from \"../../common/imdl/ParseImdlDocument\";\r\nimport { VertexIndices } from \"../../common/internal/render/VertexIndices\";\r\nimport type { RenderGraphic } from \"../../render/RenderGraphic\";\r\nimport { GraphicBranch } from \"../../render/GraphicBranch\";\r\nimport type { RenderSystem } from \"../../render/RenderSystem\";\r\nimport { InstancedGraphicParams } from \"../../common/render/InstancedGraphicParams\";\r\nimport type { IModelConnection } from \"../../IModelConnection\";\r\nimport { GraphicDescription } from \"../../common/render/GraphicDescriptionBuilder\";\r\nimport { GraphicDescriptionImpl, isGraphicDescription } from \"../../common/internal/render/GraphicDescriptionBuilderImpl\";\r\nimport { GraphicDescriptionContext } from \"../../common/render/GraphicDescriptionContext\";\r\nimport { _implementationProhibited, _textures } from \"../../common/internal/Symbols\";\r\nimport { RenderGeometry } from \"../../internal/render/RenderGeometry\";\r\nimport { createGraphicTemplate, GraphicTemplateBatch, GraphicTemplateBranch } from \"../../internal/render/GraphicTemplateImpl\";\r\nimport { GraphicTemplate } from \"../../render/GraphicTemplate\";\r\nimport { LayerTileData } from \"../render/webgl/MapLayerParams\";\r\n\r\n/** Options provided to [[decodeImdlContent]].\r\n */\r\nexport interface ImdlDecodeOptions {\r\n document: Imdl.Document;\r\n system: RenderSystem;\r\n iModel: IModelConnection;\r\n isCanceled?: () => boolean;\r\n tileData?: LayerTileData;\r\n}\r\n\r\nasync function loadNamedTexture(name: string, namedTex: ImdlNamedTexture, options: ImdlDecodeOptions): Promise<RenderTexture | undefined> {\r\n // Reasons a texture could be embedded in the tile content instead of requested separately from the backend:\r\n // - external textures are disabled\r\n // - the texture name is not a valid Id64 string\r\n // - the texture is below a certain backend-hardcoded size threshold\r\n // The bufferViewJson being defined signifies any of the above conditions. In that case, the image content\r\n // has been embedded in the tile contents. Otherwise, we will attempt to request the image content separately\r\n // from the backend.\r\n\r\n try {\r\n let textureType = RenderTexture.Type.Normal;\r\n const isGlyph = JsonUtils.asBool(namedTex.isGlyph);\r\n const isTileSection = !isGlyph && JsonUtils.asBool(namedTex.isTileSection);\r\n if (isGlyph)\r\n textureType = RenderTexture.Type.Glyph;\r\n else if (isTileSection)\r\n textureType = RenderTexture.Type.TileSection;\r\n\r\n // We produce unique tile sections for very large (> 8 megapixel) textures, and unique glyph atlases for raster text.\r\n // Neither should be cached.\r\n const cacheable = !isGlyph && !isTileSection;\r\n const ownership = cacheable ? { iModel: options.iModel, key: name } : undefined;\r\n\r\n const bufferViewId = JsonUtils.asString(namedTex.bufferView);\r\n const bufferViewJson = 0 !== bufferViewId.length ? options.document.json.bufferViews[bufferViewId] : undefined;\r\n\r\n if (undefined !== bufferViewJson) { // presence of bufferViewJson signifies we should read the texture from the tile content\r\n const byteOffset = JsonUtils.asInt(bufferViewJson.byteOffset);\r\n const byteLength = JsonUtils.asInt(bufferViewJson.byteLength);\r\n if (0 === byteLength)\r\n return undefined;\r\n\r\n const texBytes = options.document.binaryData.subarray(byteOffset, byteOffset + byteLength);\r\n const format = namedTex.format;\r\n const source = new ImageSource(texBytes, format);\r\n return await options.system.createTextureFromSource({ source, ownership, type: textureType, transparency: namedTex.transparency });\r\n }\r\n\r\n // bufferViewJson was undefined, so attempt to request the texture directly from the backend\r\n const params = new RenderTextureParams(cacheable ? name : undefined, textureType);\r\n return options.system.createTextureFromElement(name, options.iModel, params, namedTex.format);\r\n } catch {\r\n return undefined;\r\n }\r\n}\r\n\r\nasync function loadNamedTextures(options: ImdlDecodeOptions): Promise<Map<string, RenderTexture>> {\r\n const result = new Map<string, RenderTexture>();\r\n const namedTextures = options.document.json.namedTextures;\r\n if (!namedTextures)\r\n return result;\r\n\r\n const promises = new Array<Promise<void>>();\r\n for (const [name, namedTexture] of Object.entries(namedTextures)) {\r\n const texture = options.system.findTexture(name, options.iModel);\r\n if (texture) {\r\n result.set(name, texture);\r\n continue;\r\n } else if (namedTexture) {\r\n promises.push(loadNamedTexture(name, namedTexture, options).then((tx) => {\r\n if (tx)\r\n result.set(name, tx);\r\n }));\r\n }\r\n }\r\n\r\n if (promises.length > 0)\r\n await Promise.all(promises);\r\n\r\n return result;\r\n}\r\n\r\ninterface GraphicsOptions {\r\n document?: Imdl.Document;\r\n iModel?: IModelConnection;\r\n system: RenderSystem;\r\n isCanceled?: () => boolean;\r\n textures: Map<string, RenderTexture>;\r\n patterns: Map<string, RenderGeometry[]>;\r\n tileData?: LayerTileData;\r\n}\r\n\r\nfunction constantLodParamPropsFromJson(propsJson: { repetitions?: number, offset?: number[], minDistClamp?: number, maxDistClamp?: number } | undefined): TextureMapping.ConstantLodParamProps | undefined {\r\n if (undefined === propsJson)\r\n return undefined;\r\n\r\n const constantLodPops: TextureMapping.ConstantLodParamProps = {\r\n repetitions: JsonUtils.asDouble(propsJson.repetitions, 1.0),\r\n offset: { x: propsJson.offset ? JsonUtils.asDouble(propsJson.offset[0]) : 0.0, y: propsJson.offset ? JsonUtils.asDouble(propsJson.offset[1]) : 0.0 },\r\n minDistClamp: JsonUtils.asDouble(propsJson.minDistClamp, 1.0),\r\n maxDistClamp: JsonUtils.asDouble(propsJson.maxDistClamp, 4096.0 * 1024.0 * 1024.0),\r\n };\r\n return constantLodPops;\r\n}\r\n\r\nfunction textureMappingFromJson(json: ImdlTextureMapping | undefined, options: GraphicsOptions): TextureMapping | undefined {\r\n if (!json)\r\n return undefined;\r\n\r\n const texture = options.textures.get(JsonUtils.asString(json.name));\r\n if (!texture)\r\n return undefined;\r\n\r\n const paramsJson = json.params;\r\n const tf = paramsJson.transform;\r\n\r\n const paramProps: TextureMapping.ParamProps = {\r\n textureMat2x3: new TextureMapping.Trans2x3(tf[0][0], tf[0][1], tf[0][2], tf[1][0], tf[1][1], tf[1][2]),\r\n textureWeight: JsonUtils.asDouble(paramsJson.weight, 1.0),\r\n mapMode: JsonUtils.asInt(paramsJson.mode),\r\n worldMapping: JsonUtils.asBool(paramsJson.worldMapping),\r\n useConstantLod: JsonUtils.asBool(paramsJson.useConstantLod),\r\n constantLodProps: constantLodParamPropsFromJson(paramsJson.constantLodParams),\r\n };\r\n\r\n const textureMapping = new TextureMapping(texture, new TextureMapping.Params(paramProps));\r\n\r\n const normalMapJson = json.normalMapParams;\r\n if (normalMapJson) {\r\n let normalMap;\r\n const normalTexName = JsonUtils.asString(normalMapJson.textureName);\r\n if (normalTexName.length === 0 || undefined !== (normalMap = options.textures.get(normalTexName))) {\r\n textureMapping.normalMapParams = {\r\n normalMap,\r\n greenUp: JsonUtils.asBool(normalMapJson.greenUp),\r\n scale: JsonUtils.asDouble(normalMapJson.scale, 1),\r\n useConstantLod: JsonUtils.asBool(normalMapJson.useConstantLod),\r\n };\r\n }\r\n }\r\n\r\n return textureMapping;\r\n}\r\n\r\nfunction getMaterial(mat: string | Imdl.SurfaceMaterialParams, options: GraphicsOptions): RenderMaterial | undefined {\r\n if (typeof mat !== \"string\") {\r\n const args = toMaterialParams(mat);\r\n return options.system.createRenderMaterial(args);\r\n }\r\n\r\n if (!options.iModel) {\r\n return undefined;\r\n }\r\n\r\n const material = options.system.findMaterial(mat, options.iModel);\r\n if (material || !options.document?.json.renderMaterials)\r\n return material;\r\n\r\n const json = options.document.json.renderMaterials[mat];\r\n if (!json)\r\n return undefined;\r\n\r\n function colorDefFromJson(col: ImdlColorDef | undefined): ColorDef | undefined {\r\n return col ? ColorDef.from(col[0] * 255 + 0.5, col[1] * 255 + 0.5, col[2] * 255 + 0.5) : undefined;\r\n }\r\n\r\n const params = new RenderMaterialParams(mat);\r\n params.diffuseColor = colorDefFromJson(json.diffuseColor);\r\n if (json.diffuse !== undefined)\r\n params.diffuse = JsonUtils.asDouble(json.diffuse);\r\n\r\n params.specularColor = colorDefFromJson(json.specularColor);\r\n if (json.specular !== undefined)\r\n params.specular = JsonUtils.asDouble(json.specular);\r\n\r\n params.reflectColor = colorDefFromJson(json.reflectColor);\r\n if (json.reflect !== undefined)\r\n params.reflect = JsonUtils.asDouble(json.reflect);\r\n\r\n if (json.specularExponent !== undefined)\r\n params.specularExponent = json.specularExponent;\r\n\r\n if (undefined !== json.transparency)\r\n params.alpha = 1.0 - json.transparency;\r\n\r\n params.refract = JsonUtils.asDouble(json.refract);\r\n params.shadows = JsonUtils.asBool(json.shadows);\r\n params.ambient = JsonUtils.asDouble(json.ambient);\r\n\r\n if (undefined !== json.textureMapping)\r\n params.textureMapping = textureMappingFromJson(json.textureMapping.texture, options);\r\n\r\n return options.system.createRenderMaterial({\r\n diffuse: {color: params.diffuseColor, weight: params.diffuse},\r\n specular: {color: params.specularColor, weight: params.specular, exponent: params.specularExponent},\r\n alpha: params.alpha,\r\n textureMapping: params.textureMapping ? {\r\n texture: params.textureMapping.texture,\r\n transform: params.textureMapping.params.textureMatrix,\r\n mode: params.textureMapping.params.mode,\r\n weight: params.textureMapping.params.weight,\r\n worldMapping: params.textureMapping.params.worldMapping,\r\n useConstantLod: params.textureMapping.params.useConstantLod,\r\n constantLodProps: params.textureMapping.params.constantLodParams,\r\n normalMapParams: params.textureMapping.normalMapParams,\r\n } : undefined,\r\n });\r\n}\r\n\r\nfunction getModifiers(primitive: Imdl.Primitive): { viOrigin?: Point3d, instances?: InstancedGraphicParams } {\r\n const mod = primitive.modifier;\r\n switch (mod?.type) {\r\n case \"instances\":\r\n return { instances: InstancedGraphicParams.fromProps(mod) };\r\n case \"viewIndependentOrigin\":\r\n return {\r\n viOrigin: Point3d.fromJSON(mod.origin),\r\n };\r\n default:\r\n return {};\r\n }\r\n}\r\n\r\nfunction createPrimitiveGeometry(primitive: Imdl.Primitive, options: GraphicsOptions, viOrigin: Point3d | undefined): RenderGeometry | undefined {\r\n switch (primitive.type) {\r\n case \"point\":\r\n return options.system.createPointStringGeometry({\r\n ...primitive.params,\r\n vertices: toVertexTable(primitive.params.vertices),\r\n indices: new VertexIndices(primitive.params.indices),\r\n }, viOrigin);\r\n case \"polyline\":\r\n return options.system.createPolylineGeometry({\r\n ...primitive.params,\r\n vertices: toVertexTable(primitive.params.vertices),\r\n polyline: {\r\n ...primitive.params.polyline,\r\n indices: new VertexIndices(primitive.params.polyline.indices),\r\n prevIndices: new VertexIndices(primitive.params.polyline.prevIndices),\r\n },\r\n hasCumulativeDistances: primitive.params.hasCumulativeDistances,\r\n }, viOrigin);\r\n case \"mesh\": {\r\n const surf = primitive.params.surface;\r\n let material;\r\n if (surf.material) {\r\n if (!surf.material.isAtlas)\r\n material = createSurfaceMaterial(getMaterial(surf.material.material, options));\r\n else\r\n material = surf.material;\r\n }\r\n\r\n let textureMapping;\r\n if (surf.textureMapping) {\r\n let texture;\r\n if (typeof surf.textureMapping.texture === \"string\") {\r\n texture = options.textures.get(surf.textureMapping.texture);\r\n } else {\r\n const gradient = Gradient.Symb.fromJSON(surf.textureMapping.texture);\r\n texture = options.system.getGradientTexture(gradient, options.iModel);\r\n }\r\n\r\n if (texture)\r\n textureMapping = { texture, alwaysDisplayed: surf.textureMapping.alwaysDisplayed };\r\n }\r\n\r\n return options.system.createMeshGeometry({\r\n ...primitive.params,\r\n edges: primitive.params.edges ? edgeParamsFromImdl(primitive.params.edges) : undefined,\r\n vertices: toVertexTable(primitive.params.vertices),\r\n auxChannels: primitive.params.auxChannels ? AuxChannelTable.fromJSON(primitive.params.auxChannels) : undefined,\r\n surface: {\r\n ...primitive.params.surface,\r\n material,\r\n textureMapping,\r\n indices: new VertexIndices(primitive.params.surface.indices),\r\n },\r\n tileData: options.tileData,\r\n }, viOrigin);\r\n }\r\n }\r\n}\r\n\r\nfunction createPrimitiveGraphic(primitive: Imdl.Primitive, options: GraphicsOptions): RenderGraphic | undefined {\r\n const mods = getModifiers(primitive);\r\n const geometry = createPrimitiveGeometry(primitive, options, mods.viOrigin);\r\n return geometry ? options.system.createRenderGraphic(geometry, mods.instances) : undefined;\r\n}\r\n\r\nfunction createPatternGeometries(primitives: Imdl.Primitive[], options: GraphicsOptions): RenderGeometry[] {\r\n const geometries = [];\r\n for (const primitive of primitives) {\r\n const geometry = createPrimitiveGeometry(primitive, options, undefined);\r\n if (geometry)\r\n geometries.push(geometry);\r\n }\r\n\r\n return geometries;\r\n}\r\n\r\nfunction createPatternGraphic(params: Imdl.AreaPatternParams, options: GraphicsOptions): RenderGraphic | undefined {\r\n const geometries = options.patterns.get(params.symbolName);\r\n if (!geometries || geometries.length === 0)\r\n return undefined;\r\n\r\n const clip = ClipVector.fromJSON(params.clip);\r\n const clipVolume = clip?.isValid ? options.system.createClipVolume(clip) : undefined;\r\n if (!clipVolume)\r\n return undefined;\r\n\r\n const viewIndependentOrigin = params.viewIndependentOrigin ? Point3d.fromJSON(params.viewIndependentOrigin) : undefined;\r\n const pattern = options.system.createAreaPattern({\r\n xyOffsets: params.xyOffsets,\r\n featureId: params.featureId,\r\n orgTransform: Transform.fromJSON(params.orgTransform),\r\n origin: Point2d.fromJSON(params.origin),\r\n scale: params.scale,\r\n spacing: Point2d.fromJSON(params.spacing),\r\n patternToModel: Transform.fromJSON(params.modelTransform),\r\n range: Range3d.fromJSON(params.range),\r\n symbolTranslation: Point3d.fromJSON(params.symbolTranslation),\r\n viewIndependentOrigin,\r\n });\r\n\r\n if (!pattern)\r\n return undefined;\r\n\r\n const branch = new GraphicBranch(true);\r\n for (const geometry of geometries) {\r\n const graphic = options.system.createRenderGraphic(geometry, pattern);\r\n if (graphic)\r\n branch.add(graphic);\r\n }\r\n\r\n return branch.isEmpty ? undefined : options.system.createGraphicBranch(branch, Transform.createIdentity(), { clipVolume });\r\n}\r\n\r\nfunction createNodeGraphics(node: Imdl.Node, options: GraphicsOptions): RenderGraphic[] {\r\n if (undefined === node.groupId)\r\n return createPrimitivesNodeGraphics(node, options);\r\n\r\n const graphics: RenderGraphic[] = [];\r\n for (const child of node.nodes) {\r\n graphics.push(...createPrimitivesNodeGraphics(child, options));\r\n }\r\n\r\n if (graphics.length === 0)\r\n return graphics;\r\n\r\n const branch = new GraphicBranch(true);\r\n branch.groupNodeId = node.groupId;\r\n branch.entries.push(...graphics);\r\n return [options.system.createBranch(branch, Transform.createIdentity())];\r\n}\r\n\r\nfunction createPrimitivesNodeGraphics(node: Imdl.PrimitivesNode, options: GraphicsOptions): RenderGraphic[] {\r\n let graphics = [];\r\n for (const primitive of node.primitives) {\r\n const graphic = primitive.type === \"pattern\" ? createPatternGraphic(primitive.params, options) : createPrimitiveGraphic(primitive, options);\r\n if (graphic)\r\n graphics.push(graphic);\r\n }\r\n\r\n if (!graphics.length)\r\n return graphics;\r\n\r\n if (undefined !== node.layerId) {\r\n const layerGraphic = 1 === graphics.length ? graphics[0] : options.system.createGraphicList(graphics);\r\n graphics = [options.system.createGraphicLayer(layerGraphic, node.layerId)];\r\n } else if (undefined !== node.animationNodeId) {\r\n const branch = new GraphicBranch(true);\r\n branch.animationId = node.animationId;\r\n branch.animationNodeId = node.animationNodeId;\r\n branch.entries.push(...graphics);\r\n graphics = [options.system.createBranch(branch, Transform.createIdentity())];\r\n }\r\n\r\n return graphics;\r\n}\r\n\r\nexport async function decodeImdlGraphics(options: ImdlDecodeOptions): Promise<RenderGraphic | undefined> {\r\n const textures = await loadNamedTextures(options);\r\n if (options.isCanceled && options.isCanceled())\r\n return undefined;\r\n\r\n const patterns = new Map<string, RenderGeometry[]>();\r\n const graphicsOptions = { ...options, textures, patterns };\r\n graphicsOptions.tileData = options.tileData;\r\n\r\n for (const [name, primitives] of options.document.patterns)\r\n patterns.set(name, createPatternGeometries(primitives, graphicsOptions));\r\n\r\n const system = options.system;\r\n const graphics: RenderGraphic[] = [];\r\n for (const node of options.document.nodes) {\r\n graphics.push(...createNodeGraphics(node, graphicsOptions));\r\n }\r\n\r\n switch (graphics.length) {\r\n case 0: return undefined;\r\n case 1: return graphics[0];\r\n default: return system.createGraphicList(graphics);\r\n }\r\n}\r\n\r\nfunction remapGraphicDescription(descr: GraphicDescriptionImpl, context: GraphicDescriptionContext): void {\r\n if (descr.remapContext === context) {\r\n // Already remapped.\r\n return;\r\n } else if (descr.remapContext) {\r\n throw new Error(\"You cannot create a graphic from a GraphicDescription using two different contexts\");\r\n }\r\n\r\n descr.remapContext = context;\r\n\r\n const batch = descr.batch;\r\n if (!batch) {\r\n return;\r\n }\r\n\r\n if (Id64.isTransient(batch.modelId)) {\r\n const modelLocalId = context.remapTransientLocalId(Id64.getLocalId(batch.modelId));\r\n batch.modelId = Id64.fromLocalAndBriefcaseIds(modelLocalId, 0xffffff);\r\n }\r\n\r\n const data = batch.featureTable.data;\r\n const remapId = (offset: number) => {\r\n const hi = data[offset + 1];\r\n if (hi >= 0xffffff00) {\r\n const hi8 = hi & 0xff;\r\n const lo = data[offset];\r\n\r\n // Avoid bitwise operators because they truncate at 32 bits (we need 40) and are stupid about the sign bit.\r\n const sourceLocalId = lo + (hi8 * 0xffffffff);\r\n const localId = context.remapTransientLocalId(sourceLocalId);\r\n data[offset] = localId & 0xffffffff;\r\n data[offset + 1] = 0xffffff00 + hi8;\r\n }\r\n };\r\n\r\n const subCatsOffset = 3 * batch.featureTable.numFeatures;\r\n for (let i = 0; i < subCatsOffset; i += 3) {\r\n remapId(i);\r\n }\r\n\r\n const subCatsEnd = undefined !== batch.featureTable.numSubCategories ? subCatsOffset + 2 * batch.featureTable.numSubCategories : data.length;\r\n for (let i = subCatsOffset; i < subCatsEnd; i++) {\r\n remapId(i);\r\n }\r\n\r\n if (undefined !== batch.featureTable.numSubCategories) {\r\n for (let i = subCatsEnd; i < data.length; i++) {\r\n remapId(i + 1);\r\n }\r\n }\r\n}\r\n\r\nexport function createGraphicTemplateFromDescription(descr: GraphicDescription, context: GraphicDescriptionContext, system: RenderSystem): GraphicTemplate {\r\n if (!isGraphicDescription(descr)) {\r\n throw new Error(\"Invalid GraphicDescription\");\r\n }\r\n\r\n remapGraphicDescription(descr, context);\r\n\r\n const graphicsOptions: GraphicsOptions = {\r\n system,\r\n textures: context[_textures],\r\n patterns: new Map(),\r\n };\r\n\r\n const geometry: RenderGeometry[] = [];\r\n for (const primitive of descr.primitives) {\r\n const mods = getModifiers(primitive);\r\n\r\n // GraphicDescriptionBuilder providers no way to include instances in a GraphicDescription.\r\n assert(undefined === mods?.instances);\r\n\r\n const geom = createPrimitiveGeometry(primitive, graphicsOptions, mods.viOrigin);\r\n if (geom) {\r\n geometry.push(geom);\r\n }\r\n }\r\n\r\n let batch: GraphicTemplateBatch | undefined;\r\n if (descr.batch) {\r\n const featureTable = convertFeatureTable(descr.batch.featureTable, descr.batch.modelId);\r\n batch = {\r\n options: { ...descr.batch },\r\n range: Range3d.fromJSON(descr.batch.range),\r\n featureTable,\r\n };\r\n }\r\n\r\n let branch: GraphicTemplateBranch | undefined;\r\n if (descr.translation) {\r\n branch = { transform: Transform.createTranslation(Point3d.fromJSON(descr.translation)) };\r\n }\r\n\r\n return createGraphicTemplate({\r\n nodes: [{ geometry }],\r\n batch,\r\n branch,\r\n noDispose: true,\r\n });\r\n}\r\n\r\nexport function createGraphicFromDescription(descr: GraphicDescription, context: GraphicDescriptionContext, system: RenderSystem): RenderGraphic | undefined {\r\n const template = createGraphicTemplateFromDescription(descr, context, system);\r\n return system.createGraphicFromTemplate({ template });\r\n}\r\n"]}
@@ -27,5 +27,7 @@ export interface PolylineArgs {
27
27
  });
28
28
  /** The set of polylines. Each entry in the array describes a separate line string or point string as a series of indices into [[points]]. */
29
29
  polylines: PolylineIndices[];
30
+ /** Optional per-vertex cumulative distance from the start of the line string, in model/world units. */
31
+ cumulativeDistances?: Float32Array;
30
32
  }
31
33
  //# sourceMappingURL=PolylineArgs.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"PolylineArgs.d.ts","sourceRoot":"","sources":["../../../src/render/PolylineArgs.ts"],"names":[],"mappings":"AAIA;;GAEG;AAEH,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,UAAU,EAAE,aAAa,EAAE,eAAe,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AACxH,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,sBAAsB,CAAC;AAExD;;;;GAIG;AACH,MAAM,WAAW,YAAY;IAC3B,oCAAoC;IACpC,MAAM,EAAE,UAAU,CAAC;IACnB,gEAAgE;IAChE,QAAQ,EAAE,YAAY,CAAC;IACvB,iEAAiE;IACjE,KAAK,EAAE,MAAM,CAAC;IACd,sDAAsD;IACtD,UAAU,EAAE,UAAU,CAAC;IACvB,sDAAsD;IACtD,KAAK,EAAE,aAAa,CAAC;IACrB;;OAEG;IACH,MAAM,EAAE,YAAY,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,GAAG;QAAE,KAAK,EAAE,OAAO,CAAA;KAAE,CAAC,CAAC;IAC7D,6IAA6I;IAC7I,SAAS,EAAE,eAAe,EAAE,CAAC;CAC9B"}
1
+ {"version":3,"file":"PolylineArgs.d.ts","sourceRoot":"","sources":["../../../src/render/PolylineArgs.ts"],"names":[],"mappings":"AAIA;;GAEG;AAEH,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,UAAU,EAAE,aAAa,EAAE,eAAe,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AACxH,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,sBAAsB,CAAC;AAExD;;;;GAIG;AACH,MAAM,WAAW,YAAY;IAC3B,oCAAoC;IACpC,MAAM,EAAE,UAAU,CAAC;IACnB,gEAAgE;IAChE,QAAQ,EAAE,YAAY,CAAC;IACvB,iEAAiE;IACjE,KAAK,EAAE,MAAM,CAAC;IACd,sDAAsD;IACtD,UAAU,EAAE,UAAU,CAAC;IACvB,sDAAsD;IACtD,KAAK,EAAE,aAAa,CAAC;IACrB;;OAEG;IACH,MAAM,EAAE,YAAY,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,GAAG;QAAE,KAAK,EAAE,OAAO,CAAA;KAAE,CAAC,CAAC;IAC7D,6IAA6I;IAC7I,SAAS,EAAE,eAAe,EAAE,CAAC;IAC7B,uGAAuG;IACvG,mBAAmB,CAAC,EAAE,YAAY,CAAC;CACpC"}
@@ -1 +1 @@
1
- {"version":3,"file":"PolylineArgs.js","sourceRoot":"","sources":["../../../src/render/PolylineArgs.ts"],"names":[],"mappings":";AAAA;;;+FAG+F;AAC/F;;GAEG","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 { ColorIndex, FeatureIndex, LinePixels, PolylineFlags, PolylineIndices, QPoint3dList } from \"@itwin/core-common\";\r\nimport { Point3d, Range3d } from \"@itwin/core-geometry\";\r\n\r\n/** Arguments supplied to [[RenderSystem.createIndexedPolylines]] describing a set of \"polylines\" (i.e., line strings or point strings).\r\n * Line strings consist of two or more points, connected by segments between them with a width specified in pixels.\r\n * Point strings consist of one or more disconnected points, drawn as dots with a radius specified in pixels.\r\n * @public\r\n */\r\nexport interface PolylineArgs {\r\n /** The color(s) of the vertices. */\r\n colors: ColorIndex;\r\n /** The [Feature]($common)(s) contained in the [[polylines]]. */\r\n features: FeatureIndex;\r\n /** The width of the lines or radius of the points, in pixels. */\r\n width: number;\r\n /** The pixel pattern to apply to the line strings. */\r\n linePixels: LinePixels;\r\n /** Flags describing how to draw the [[polylines]]. */\r\n flags: PolylineFlags;\r\n /** The positions of the [[polylines]]' vertices. If the positions are not quantized, they must include\r\n * a precomputed [Range3d]($core-geometry) encompassing all of the points.\r\n */\r\n points: QPoint3dList | (Array<Point3d> & { range: Range3d });\r\n /** The set of polylines. Each entry in the array describes a separate line string or point string as a series of indices into [[points]]. */\r\n polylines: PolylineIndices[];\r\n}\r\n\r\n"]}
1
+ {"version":3,"file":"PolylineArgs.js","sourceRoot":"","sources":["../../../src/render/PolylineArgs.ts"],"names":[],"mappings":";AAAA;;;+FAG+F;AAC/F;;GAEG","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 { ColorIndex, FeatureIndex, LinePixels, PolylineFlags, PolylineIndices, QPoint3dList } from \"@itwin/core-common\";\r\nimport { Point3d, Range3d } from \"@itwin/core-geometry\";\r\n\r\n/** Arguments supplied to [[RenderSystem.createIndexedPolylines]] describing a set of \"polylines\" (i.e., line strings or point strings).\r\n * Line strings consist of two or more points, connected by segments between them with a width specified in pixels.\r\n * Point strings consist of one or more disconnected points, drawn as dots with a radius specified in pixels.\r\n * @public\r\n */\r\nexport interface PolylineArgs {\r\n /** The color(s) of the vertices. */\r\n colors: ColorIndex;\r\n /** The [Feature]($common)(s) contained in the [[polylines]]. */\r\n features: FeatureIndex;\r\n /** The width of the lines or radius of the points, in pixels. */\r\n width: number;\r\n /** The pixel pattern to apply to the line strings. */\r\n linePixels: LinePixels;\r\n /** Flags describing how to draw the [[polylines]]. */\r\n flags: PolylineFlags;\r\n /** The positions of the [[polylines]]' vertices. If the positions are not quantized, they must include\r\n * a precomputed [Range3d]($core-geometry) encompassing all of the points.\r\n */\r\n points: QPoint3dList | (Array<Point3d> & { range: Range3d });\r\n /** The set of polylines. Each entry in the array describes a separate line string or point string as a series of indices into [[points]]. */\r\n polylines: PolylineIndices[];\r\n /** Optional per-vertex cumulative distance from the start of the line string, in model/world units. */\r\n cumulativeDistances?: Float32Array;\r\n}\r\n\r\n"]}
@@ -2,7 +2,7 @@
2
2
  * @module Tiles
3
3
  */
4
4
  import { Point3d, Range2d, Range3d, Transform, Vector3d } from "@itwin/core-geometry";
5
- import { AxisAlignedBox3d, BatchType, ElementAlignedBox3d, Feature, FeatureTable, MeshPolylineList, QParams2d, QParams3d, RenderTexture, TextureMapping, TileReadStatus, ViewFlagOverrides } from "@itwin/core-common";
5
+ import { AxisAlignedBox3d, BatchType, ElementAlignedBox3d, Feature, FeatureTable, LinePixels, MeshPolylineList, QParams2d, QParams3d, RenderTexture, TextureMapping, TileReadStatus, ViewFlagOverrides } from "@itwin/core-common";
6
6
  import { IModelConnection } from "../IModelConnection";
7
7
  import { InstancedGraphicParams } from "../common/render/InstancedGraphicParams";
8
8
  import { Mesh } from "../common/internal/render/MeshPrimitives";
@@ -95,6 +95,7 @@ export declare class GltfMeshData {
95
95
  uvs?: Uint16Array;
96
96
  uvRange?: Range2d;
97
97
  indices?: Uint8Array | Uint16Array | Uint32Array;
98
+ cumulativeDistances?: Float32Array;
98
99
  readonly type: "mesh";
99
100
  constructor(props: Mesh);
100
101
  }
@@ -107,6 +108,10 @@ type GltfPrimitiveData = GltfMeshData | GltfPointCloud;
107
108
  * @internal
108
109
  */
109
110
  export type ShouldAbortReadGltf = (reader: GltfReader) => boolean;
111
+ interface MaterialLineStyle {
112
+ width?: number;
113
+ linePixels?: LinePixels;
114
+ }
110
115
  /** Arguments to [[GltfReader]] constructor.
111
116
  * @internal
112
117
  */
@@ -244,7 +249,9 @@ export declare abstract class GltfReader {
244
249
  private extractTextureId;
245
250
  private extractNormalMapId;
246
251
  private isMaterialTransparent;
247
- protected createDisplayParams(material: GltfMaterial, hasBakedLighting: boolean, isPointPrimitive?: boolean): DisplayParams | undefined;
252
+ private getMaterialLineStyle;
253
+ private readCumulativeDistances;
254
+ protected createDisplayParams(material: GltfMaterial, hasBakedLighting: boolean, isPointPrimitive?: boolean, lineStyle?: MaterialLineStyle): DisplayParams | undefined;
248
255
  private readMeshPrimitives;
249
256
  protected readMeshPrimitive(primitive: GltfMeshPrimitive, featureTable?: FeatureTable, pseudoRtcBias?: Vector3d): GltfPrimitiveData | undefined;
250
257
  private getEdgeAppearance;