@itwin/core-frontend 3.0.0-dev.174 → 3.0.0-dev.178

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 (239) hide show
  1. package/lib/cjs/IModelApp.d.ts +1 -1
  2. package/lib/cjs/IModelApp.d.ts.map +1 -1
  3. package/lib/cjs/IModelApp.js.map +1 -1
  4. package/lib/cjs/SheetViewState.d.ts.map +1 -1
  5. package/lib/cjs/SheetViewState.js +1 -2
  6. package/lib/cjs/SheetViewState.js.map +1 -1
  7. package/lib/cjs/Viewport.d.ts +1 -0
  8. package/lib/cjs/Viewport.d.ts.map +1 -1
  9. package/lib/cjs/Viewport.js +10 -2
  10. package/lib/cjs/Viewport.js.map +1 -1
  11. package/lib/cjs/render/RenderSystem.d.ts.map +1 -1
  12. package/lib/cjs/render/RenderSystem.js +5 -6
  13. package/lib/cjs/render/RenderSystem.js.map +1 -1
  14. package/lib/cjs/render/RenderTexture.d.ts +2 -17
  15. package/lib/cjs/render/RenderTexture.d.ts.map +1 -1
  16. package/lib/cjs/render/RenderTexture.js +0 -17
  17. package/lib/cjs/render/RenderTexture.js.map +1 -1
  18. package/lib/cjs/render/webgl/BackgroundMapDrape.js +1 -1
  19. package/lib/cjs/render/webgl/BackgroundMapDrape.js.map +1 -1
  20. package/lib/cjs/render/webgl/CachedGeometry.d.ts +7 -6
  21. package/lib/cjs/render/webgl/CachedGeometry.d.ts.map +1 -1
  22. package/lib/cjs/render/webgl/CachedGeometry.js +7 -6
  23. package/lib/cjs/render/webgl/CachedGeometry.js.map +1 -1
  24. package/lib/cjs/render/webgl/DrawCommand.d.ts +2 -2
  25. package/lib/cjs/render/webgl/DrawCommand.d.ts.map +1 -1
  26. package/lib/cjs/render/webgl/DrawCommand.js +2 -2
  27. package/lib/cjs/render/webgl/DrawCommand.js.map +1 -1
  28. package/lib/cjs/render/webgl/EdgeGeometry.d.ts +3 -3
  29. package/lib/cjs/render/webgl/EdgeGeometry.d.ts.map +1 -1
  30. package/lib/cjs/render/webgl/EdgeGeometry.js +2 -2
  31. package/lib/cjs/render/webgl/EdgeGeometry.js.map +1 -1
  32. package/lib/cjs/render/webgl/IndexedEdgeGeometry.d.ts +1 -1
  33. package/lib/cjs/render/webgl/IndexedEdgeGeometry.d.ts.map +1 -1
  34. package/lib/cjs/render/webgl/IndexedEdgeGeometry.js +1 -1
  35. package/lib/cjs/render/webgl/IndexedEdgeGeometry.js.map +1 -1
  36. package/lib/cjs/render/webgl/InstancedGeometry.d.ts +1 -1
  37. package/lib/cjs/render/webgl/InstancedGeometry.d.ts.map +1 -1
  38. package/lib/cjs/render/webgl/InstancedGeometry.js +1 -1
  39. package/lib/cjs/render/webgl/InstancedGeometry.js.map +1 -1
  40. package/lib/cjs/render/webgl/MeshGeometry.d.ts +2 -2
  41. package/lib/cjs/render/webgl/MeshGeometry.d.ts.map +1 -1
  42. package/lib/cjs/render/webgl/MeshGeometry.js +4 -5
  43. package/lib/cjs/render/webgl/MeshGeometry.js.map +1 -1
  44. package/lib/cjs/render/webgl/PlanarClassifier.d.ts.map +1 -1
  45. package/lib/cjs/render/webgl/PlanarClassifier.js +2 -1
  46. package/lib/cjs/render/webgl/PlanarClassifier.js.map +1 -1
  47. package/lib/cjs/render/webgl/PlanarGrid.d.ts +2 -3
  48. package/lib/cjs/render/webgl/PlanarGrid.d.ts.map +1 -1
  49. package/lib/cjs/render/webgl/PlanarGrid.js +1 -1
  50. package/lib/cjs/render/webgl/PlanarGrid.js.map +1 -1
  51. package/lib/cjs/render/webgl/PointCloud.d.ts +2 -2
  52. package/lib/cjs/render/webgl/PointCloud.d.ts.map +1 -1
  53. package/lib/cjs/render/webgl/PointCloud.js +2 -2
  54. package/lib/cjs/render/webgl/PointCloud.js.map +1 -1
  55. package/lib/cjs/render/webgl/PointString.d.ts +2 -2
  56. package/lib/cjs/render/webgl/PointString.d.ts.map +1 -1
  57. package/lib/cjs/render/webgl/PointString.js +1 -1
  58. package/lib/cjs/render/webgl/PointString.js.map +1 -1
  59. package/lib/cjs/render/webgl/Polyline.d.ts +2 -2
  60. package/lib/cjs/render/webgl/Polyline.d.ts.map +1 -1
  61. package/lib/cjs/render/webgl/Polyline.js +6 -6
  62. package/lib/cjs/render/webgl/Polyline.js.map +1 -1
  63. package/lib/cjs/render/webgl/Primitive.d.ts +2 -2
  64. package/lib/cjs/render/webgl/Primitive.d.ts.map +1 -1
  65. package/lib/cjs/render/webgl/Primitive.js +5 -5
  66. package/lib/cjs/render/webgl/Primitive.js.map +1 -1
  67. package/lib/cjs/render/webgl/RealityMesh.d.ts +2 -2
  68. package/lib/cjs/render/webgl/RealityMesh.d.ts.map +1 -1
  69. package/lib/cjs/render/webgl/RealityMesh.js +4 -4
  70. package/lib/cjs/render/webgl/RealityMesh.js.map +1 -1
  71. package/lib/cjs/render/webgl/RenderCommands.d.ts +2 -2
  72. package/lib/cjs/render/webgl/RenderCommands.d.ts.map +1 -1
  73. package/lib/cjs/render/webgl/RenderCommands.js +49 -42
  74. package/lib/cjs/render/webgl/RenderCommands.js.map +1 -1
  75. package/lib/cjs/render/webgl/RenderFlags.d.ts +43 -0
  76. package/lib/cjs/render/webgl/RenderFlags.d.ts.map +1 -1
  77. package/lib/cjs/render/webgl/RenderFlags.js +58 -1
  78. package/lib/cjs/render/webgl/RenderFlags.js.map +1 -1
  79. package/lib/cjs/render/webgl/SceneCompositor.js +3 -3
  80. package/lib/cjs/render/webgl/SceneCompositor.js.map +1 -1
  81. package/lib/cjs/render/webgl/ShaderProgram.d.ts +1 -1
  82. package/lib/cjs/render/webgl/ShaderProgram.d.ts.map +1 -1
  83. package/lib/cjs/render/webgl/ShaderProgram.js +4 -4
  84. package/lib/cjs/render/webgl/ShaderProgram.js.map +1 -1
  85. package/lib/cjs/render/webgl/SolarShadowMap.d.ts.map +1 -1
  86. package/lib/cjs/render/webgl/SolarShadowMap.js +2 -2
  87. package/lib/cjs/render/webgl/SolarShadowMap.js.map +1 -1
  88. package/lib/cjs/render/webgl/SurfaceGeometry.d.ts +2 -2
  89. package/lib/cjs/render/webgl/SurfaceGeometry.d.ts.map +1 -1
  90. package/lib/cjs/render/webgl/SurfaceGeometry.js +16 -8
  91. package/lib/cjs/render/webgl/SurfaceGeometry.js.map +1 -1
  92. package/lib/cjs/render/webgl/System.d.ts.map +1 -1
  93. package/lib/cjs/render/webgl/System.js +15 -11
  94. package/lib/cjs/render/webgl/System.js.map +1 -1
  95. package/lib/cjs/render/webgl/Technique.d.ts.map +1 -1
  96. package/lib/cjs/render/webgl/Technique.js +1 -68
  97. package/lib/cjs/render/webgl/Technique.js.map +1 -1
  98. package/lib/cjs/render/webgl/Texture.d.ts +15 -12
  99. package/lib/cjs/render/webgl/Texture.d.ts.map +1 -1
  100. package/lib/cjs/render/webgl/Texture.js +26 -23
  101. package/lib/cjs/render/webgl/Texture.js.map +1 -1
  102. package/lib/cjs/render/webgl/glsl/AmbientOcclusion.d.ts.map +1 -1
  103. package/lib/cjs/render/webgl/glsl/AmbientOcclusion.js +82 -17
  104. package/lib/cjs/render/webgl/glsl/AmbientOcclusion.js.map +1 -1
  105. package/lib/cjs/render/webgl/glsl/FeatureSymbology.d.ts.map +1 -1
  106. package/lib/cjs/render/webgl/glsl/FeatureSymbology.js +9 -5
  107. package/lib/cjs/render/webgl/glsl/FeatureSymbology.js.map +1 -1
  108. package/lib/cjs/render/webgl/glsl/Surface.d.ts.map +1 -1
  109. package/lib/cjs/render/webgl/glsl/Surface.js +29 -7
  110. package/lib/cjs/render/webgl/glsl/Surface.js.map +1 -1
  111. package/lib/cjs/render/webgl/glsl/Vertex.js +1 -1
  112. package/lib/cjs/render/webgl/glsl/Vertex.js.map +1 -1
  113. package/lib/cjs/tile/GltfReader.d.ts.map +1 -1
  114. package/lib/cjs/tile/GltfReader.js +1 -2
  115. package/lib/cjs/tile/GltfReader.js.map +1 -1
  116. package/lib/cjs/tile/ImdlReader.d.ts +3 -1
  117. package/lib/cjs/tile/ImdlReader.d.ts.map +1 -1
  118. package/lib/cjs/tile/ImdlReader.js +1 -1
  119. package/lib/cjs/tile/ImdlReader.js.map +1 -1
  120. package/lib/esm/IModelApp.d.ts +1 -1
  121. package/lib/esm/IModelApp.d.ts.map +1 -1
  122. package/lib/esm/IModelApp.js.map +1 -1
  123. package/lib/esm/SheetViewState.d.ts.map +1 -1
  124. package/lib/esm/SheetViewState.js +1 -2
  125. package/lib/esm/SheetViewState.js.map +1 -1
  126. package/lib/esm/Viewport.d.ts +1 -0
  127. package/lib/esm/Viewport.d.ts.map +1 -1
  128. package/lib/esm/Viewport.js +10 -2
  129. package/lib/esm/Viewport.js.map +1 -1
  130. package/lib/esm/render/RenderSystem.d.ts.map +1 -1
  131. package/lib/esm/render/RenderSystem.js +6 -7
  132. package/lib/esm/render/RenderSystem.js.map +1 -1
  133. package/lib/esm/render/RenderTexture.d.ts +2 -17
  134. package/lib/esm/render/RenderTexture.d.ts.map +1 -1
  135. package/lib/esm/render/RenderTexture.js +1 -16
  136. package/lib/esm/render/RenderTexture.js.map +1 -1
  137. package/lib/esm/render/webgl/BackgroundMapDrape.js +2 -2
  138. package/lib/esm/render/webgl/BackgroundMapDrape.js.map +1 -1
  139. package/lib/esm/render/webgl/CachedGeometry.d.ts +7 -6
  140. package/lib/esm/render/webgl/CachedGeometry.d.ts.map +1 -1
  141. package/lib/esm/render/webgl/CachedGeometry.js +7 -6
  142. package/lib/esm/render/webgl/CachedGeometry.js.map +1 -1
  143. package/lib/esm/render/webgl/DrawCommand.d.ts +2 -2
  144. package/lib/esm/render/webgl/DrawCommand.d.ts.map +1 -1
  145. package/lib/esm/render/webgl/DrawCommand.js +2 -2
  146. package/lib/esm/render/webgl/DrawCommand.js.map +1 -1
  147. package/lib/esm/render/webgl/EdgeGeometry.d.ts +3 -3
  148. package/lib/esm/render/webgl/EdgeGeometry.d.ts.map +1 -1
  149. package/lib/esm/render/webgl/EdgeGeometry.js +2 -2
  150. package/lib/esm/render/webgl/EdgeGeometry.js.map +1 -1
  151. package/lib/esm/render/webgl/IndexedEdgeGeometry.d.ts +1 -1
  152. package/lib/esm/render/webgl/IndexedEdgeGeometry.d.ts.map +1 -1
  153. package/lib/esm/render/webgl/IndexedEdgeGeometry.js +1 -1
  154. package/lib/esm/render/webgl/IndexedEdgeGeometry.js.map +1 -1
  155. package/lib/esm/render/webgl/InstancedGeometry.d.ts +1 -1
  156. package/lib/esm/render/webgl/InstancedGeometry.d.ts.map +1 -1
  157. package/lib/esm/render/webgl/InstancedGeometry.js +1 -1
  158. package/lib/esm/render/webgl/InstancedGeometry.js.map +1 -1
  159. package/lib/esm/render/webgl/MeshGeometry.d.ts +2 -2
  160. package/lib/esm/render/webgl/MeshGeometry.d.ts.map +1 -1
  161. package/lib/esm/render/webgl/MeshGeometry.js +4 -5
  162. package/lib/esm/render/webgl/MeshGeometry.js.map +1 -1
  163. package/lib/esm/render/webgl/PlanarClassifier.d.ts.map +1 -1
  164. package/lib/esm/render/webgl/PlanarClassifier.js +3 -2
  165. package/lib/esm/render/webgl/PlanarClassifier.js.map +1 -1
  166. package/lib/esm/render/webgl/PlanarGrid.d.ts +2 -3
  167. package/lib/esm/render/webgl/PlanarGrid.d.ts.map +1 -1
  168. package/lib/esm/render/webgl/PlanarGrid.js +1 -1
  169. package/lib/esm/render/webgl/PlanarGrid.js.map +1 -1
  170. package/lib/esm/render/webgl/PointCloud.d.ts +2 -2
  171. package/lib/esm/render/webgl/PointCloud.d.ts.map +1 -1
  172. package/lib/esm/render/webgl/PointCloud.js +2 -2
  173. package/lib/esm/render/webgl/PointCloud.js.map +1 -1
  174. package/lib/esm/render/webgl/PointString.d.ts +2 -2
  175. package/lib/esm/render/webgl/PointString.d.ts.map +1 -1
  176. package/lib/esm/render/webgl/PointString.js +1 -1
  177. package/lib/esm/render/webgl/PointString.js.map +1 -1
  178. package/lib/esm/render/webgl/Polyline.d.ts +2 -2
  179. package/lib/esm/render/webgl/Polyline.d.ts.map +1 -1
  180. package/lib/esm/render/webgl/Polyline.js +6 -6
  181. package/lib/esm/render/webgl/Polyline.js.map +1 -1
  182. package/lib/esm/render/webgl/Primitive.d.ts +2 -2
  183. package/lib/esm/render/webgl/Primitive.d.ts.map +1 -1
  184. package/lib/esm/render/webgl/Primitive.js +5 -5
  185. package/lib/esm/render/webgl/Primitive.js.map +1 -1
  186. package/lib/esm/render/webgl/RealityMesh.d.ts +2 -2
  187. package/lib/esm/render/webgl/RealityMesh.d.ts.map +1 -1
  188. package/lib/esm/render/webgl/RealityMesh.js +4 -4
  189. package/lib/esm/render/webgl/RealityMesh.js.map +1 -1
  190. package/lib/esm/render/webgl/RenderCommands.d.ts +2 -2
  191. package/lib/esm/render/webgl/RenderCommands.d.ts.map +1 -1
  192. package/lib/esm/render/webgl/RenderCommands.js +49 -42
  193. package/lib/esm/render/webgl/RenderCommands.js.map +1 -1
  194. package/lib/esm/render/webgl/RenderFlags.d.ts +43 -0
  195. package/lib/esm/render/webgl/RenderFlags.d.ts.map +1 -1
  196. package/lib/esm/render/webgl/RenderFlags.js +57 -0
  197. package/lib/esm/render/webgl/RenderFlags.js.map +1 -1
  198. package/lib/esm/render/webgl/SceneCompositor.js +3 -3
  199. package/lib/esm/render/webgl/SceneCompositor.js.map +1 -1
  200. package/lib/esm/render/webgl/ShaderProgram.d.ts +1 -1
  201. package/lib/esm/render/webgl/ShaderProgram.d.ts.map +1 -1
  202. package/lib/esm/render/webgl/ShaderProgram.js +4 -4
  203. package/lib/esm/render/webgl/ShaderProgram.js.map +1 -1
  204. package/lib/esm/render/webgl/SolarShadowMap.d.ts.map +1 -1
  205. package/lib/esm/render/webgl/SolarShadowMap.js +3 -3
  206. package/lib/esm/render/webgl/SolarShadowMap.js.map +1 -1
  207. package/lib/esm/render/webgl/SurfaceGeometry.d.ts +2 -2
  208. package/lib/esm/render/webgl/SurfaceGeometry.d.ts.map +1 -1
  209. package/lib/esm/render/webgl/SurfaceGeometry.js +17 -9
  210. package/lib/esm/render/webgl/SurfaceGeometry.js.map +1 -1
  211. package/lib/esm/render/webgl/System.d.ts.map +1 -1
  212. package/lib/esm/render/webgl/System.js +16 -12
  213. package/lib/esm/render/webgl/System.js.map +1 -1
  214. package/lib/esm/render/webgl/Technique.d.ts.map +1 -1
  215. package/lib/esm/render/webgl/Technique.js +1 -68
  216. package/lib/esm/render/webgl/Technique.js.map +1 -1
  217. package/lib/esm/render/webgl/Texture.d.ts +15 -12
  218. package/lib/esm/render/webgl/Texture.d.ts.map +1 -1
  219. package/lib/esm/render/webgl/Texture.js +27 -24
  220. package/lib/esm/render/webgl/Texture.js.map +1 -1
  221. package/lib/esm/render/webgl/glsl/AmbientOcclusion.d.ts.map +1 -1
  222. package/lib/esm/render/webgl/glsl/AmbientOcclusion.js +83 -18
  223. package/lib/esm/render/webgl/glsl/AmbientOcclusion.js.map +1 -1
  224. package/lib/esm/render/webgl/glsl/FeatureSymbology.d.ts.map +1 -1
  225. package/lib/esm/render/webgl/glsl/FeatureSymbology.js +10 -6
  226. package/lib/esm/render/webgl/glsl/FeatureSymbology.js.map +1 -1
  227. package/lib/esm/render/webgl/glsl/Surface.d.ts.map +1 -1
  228. package/lib/esm/render/webgl/glsl/Surface.js +31 -9
  229. package/lib/esm/render/webgl/glsl/Surface.js.map +1 -1
  230. package/lib/esm/render/webgl/glsl/Vertex.js +2 -2
  231. package/lib/esm/render/webgl/glsl/Vertex.js.map +1 -1
  232. package/lib/esm/tile/GltfReader.d.ts.map +1 -1
  233. package/lib/esm/tile/GltfReader.js +2 -3
  234. package/lib/esm/tile/GltfReader.js.map +1 -1
  235. package/lib/esm/tile/ImdlReader.d.ts +3 -1
  236. package/lib/esm/tile/ImdlReader.d.ts.map +1 -1
  237. package/lib/esm/tile/ImdlReader.js +1 -1
  238. package/lib/esm/tile/ImdlReader.js.map +1 -1
  239. package/package.json +24 -23
@@ -51,22 +51,22 @@ export class PolylineGeometry extends LUTGeometry {
51
51
  _computeEdgePass(target, colorInfo) {
52
52
  const vf = target.currentViewFlags;
53
53
  if (RenderMode.SmoothShade === vf.renderMode && !vf.visibleEdges)
54
- return 255 /* None */;
54
+ return "none";
55
55
  // Only want to return Translucent for edges if rendering in Wireframe mode ###TODO: what about overrides?
56
56
  const isTranslucent = RenderMode.Wireframe === vf.renderMode && vf.transparency && colorInfo.hasTranslucency;
57
- return isTranslucent ? 7 /* Translucent */ : 2 /* OpaqueLinear */;
57
+ return isTranslucent ? "translucent" : "opaque-linear";
58
58
  }
59
- getRenderPass(target) {
59
+ getPass(target) {
60
60
  const vf = target.currentViewFlags;
61
61
  if (this.isEdge) {
62
62
  let pass = this._computeEdgePass(target, this.lut.colorInfo);
63
63
  // Only display the outline in wireframe if Fill is off...
64
- if (255 /* None */ !== pass && this.isOutlineEdge && RenderMode.Wireframe === vf.renderMode && vf.fill)
65
- pass = 255 /* None */;
64
+ if ("none" !== pass && this.isOutlineEdge && RenderMode.Wireframe === vf.renderMode && vf.fill)
65
+ pass = "none";
66
66
  return pass;
67
67
  }
68
68
  const isTranslucent = vf.transparency && this.lut.colorInfo.hasTranslucency;
69
- return isTranslucent ? 7 /* Translucent */ : 2 /* OpaqueLinear */;
69
+ return isTranslucent ? "translucent" : "opaque-linear";
70
70
  }
71
71
  get techniqueId() { return 1 /* Polyline */; }
72
72
  get isPlanar() { return this._isPlanar; }
@@ -1 +1 @@
1
- {"version":3,"file":"Polyline.js","sourceRoot":"","sources":["../../../../src/render/webgl/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 { dispose } from \"@itwin/core-bentley\";\r\nimport { Point3d } from \"@itwin/core-geometry\";\r\nimport { FeatureIndexType, PolylineTypeFlags, QParams3d, RenderMode } from \"@itwin/core-common\";\r\nimport { PolylineParams } from \"../primitives/PolylineParams\";\r\nimport { RenderMemory } from \"../RenderMemory\";\r\nimport { LUTGeometry, PolylineBuffers } from \"./CachedGeometry\";\r\nimport { ColorInfo } from \"./ColorInfo\";\r\nimport { ShaderProgramParams } from \"./DrawCommand\";\r\nimport { LineCode } from \"./LineCode\";\r\nimport { GL } from \"./GL\";\r\nimport { BuffersContainer } from \"./AttributeBuffers\";\r\nimport { RenderOrder, RenderPass } from \"./RenderFlags\";\r\nimport { System } from \"./System\";\r\nimport { Target } from \"./Target\";\r\nimport { TechniqueId } from \"./TechniqueId\";\r\nimport { VertexLUT } from \"./VertexLUT\";\r\n\r\n/** @internal */\r\nexport class PolylineGeometry extends LUTGeometry {\r\n public vertexParams: QParams3d;\r\n private readonly _hasFeatures: boolean;\r\n public lineWeight: number;\r\n public lineCode: number;\r\n public type: PolylineTypeFlags;\r\n private _isPlanar: boolean;\r\n public lut: VertexLUT;\r\n public numIndices: number;\r\n private _buffers: PolylineBuffers;\r\n\r\n public get lutBuffers() { return this._buffers.buffers; }\r\n\r\n private constructor(lut: VertexLUT, buffers: PolylineBuffers, params: PolylineParams, viOrigin: Point3d | undefined) {\r\n super(viOrigin);\r\n this.vertexParams = params.vertices.qparams;\r\n this._hasFeatures = FeatureIndexType.Empty !== params.vertices.featureIndexType;\r\n this.lineWeight = params.weight;\r\n this.lineCode = LineCode.valueFromLinePixels(params.linePixels);\r\n this.type = params.type;\r\n this._isPlanar = params.isPlanar;\r\n this.lut = lut;\r\n this.numIndices = params.polyline.indices.length;\r\n this._buffers = buffers;\r\n }\r\n\r\n public get isDisposed(): boolean { return this._buffers.isDisposed && this.lut.isDisposed; }\r\n\r\n public dispose() {\r\n dispose(this.lut);\r\n dispose(this._buffers);\r\n }\r\n\r\n public collectStatistics(stats: RenderMemory.Statistics): void {\r\n this._buffers.collectStatistics(stats, RenderMemory.BufferType.Polylines);\r\n stats.addVertexTable(this.lut.bytesUsed);\r\n }\r\n\r\n public get isAnyEdge(): boolean { return PolylineTypeFlags.Normal !== this.type; }\r\n public get isNormalEdge(): boolean { return PolylineTypeFlags.Edge === this.type; }\r\n public get isOutlineEdge(): boolean { return PolylineTypeFlags.Outline === this.type; }\r\n\r\n public get renderOrder(): RenderOrder {\r\n if (this.isAnyEdge)\r\n return this.isPlanar ? RenderOrder.PlanarEdge : RenderOrder.Edge;\r\n else\r\n return this.isPlanar ? RenderOrder.PlanarLinear : RenderOrder.Linear;\r\n }\r\n\r\n protected _wantWoWReversal(_target: Target): boolean { return true; }\r\n\r\n public override get polylineBuffers(): PolylineBuffers | undefined { return this._buffers; }\r\n\r\n private _computeEdgePass(target: Target, colorInfo: ColorInfo): RenderPass {\r\n const vf = target.currentViewFlags;\r\n if (RenderMode.SmoothShade === vf.renderMode && !vf.visibleEdges)\r\n return RenderPass.None;\r\n\r\n // Only want to return Translucent for edges if rendering in Wireframe mode ###TODO: what about overrides?\r\n const isTranslucent: boolean = RenderMode.Wireframe === vf.renderMode && vf.transparency && colorInfo.hasTranslucency;\r\n return isTranslucent ? RenderPass.Translucent : RenderPass.OpaqueLinear;\r\n }\r\n\r\n public getRenderPass(target: Target): RenderPass {\r\n const vf = target.currentViewFlags;\r\n if (this.isEdge) {\r\n let pass = this._computeEdgePass(target, this.lut.colorInfo);\r\n // Only display the outline in wireframe if Fill is off...\r\n if (RenderPass.None !== pass && this.isOutlineEdge && RenderMode.Wireframe === vf.renderMode && vf.fill)\r\n pass = RenderPass.None;\r\n return pass;\r\n }\r\n const isTranslucent: boolean = vf.transparency && this.lut.colorInfo.hasTranslucency;\r\n return isTranslucent ? RenderPass.Translucent : RenderPass.OpaqueLinear;\r\n }\r\n\r\n public get techniqueId(): TechniqueId { return TechniqueId.Polyline; }\r\n public get isPlanar(): boolean { return this._isPlanar; }\r\n public override get isEdge(): boolean { return this.isAnyEdge; }\r\n public override get qOrigin(): Float32Array { return this.lut.qOrigin; }\r\n public override get qScale(): Float32Array { return this.lut.qScale; }\r\n public get numRgbaPerVertex(): number { return this.lut.numRgbaPerVertex; }\r\n public override get hasFeatures() { return this._hasFeatures; }\r\n\r\n protected override _getLineWeight(params: ShaderProgramParams): number {\r\n return this.isEdge ? params.target.computeEdgeWeight(params.renderPass, this.lineWeight) : this.lineWeight;\r\n }\r\n protected override _getLineCode(params: ShaderProgramParams): number {\r\n return this.isEdge ? params.target.computeEdgeLineCode(params.renderPass, this.lineCode) : this.lineCode;\r\n }\r\n public override getColor(target: Target): ColorInfo {\r\n return this.isEdge ? target.computeEdgeColor(this.lut.colorInfo) : this.lut.colorInfo;\r\n }\r\n\r\n protected _draw(numInstances: number, instanceBuffersContainer?: BuffersContainer): void {\r\n const gl = System.instance;\r\n const bufs = instanceBuffersContainer !== undefined ? instanceBuffersContainer : this._buffers.buffers;\r\n\r\n bufs.bind();\r\n gl.drawArrays(GL.PrimitiveType.Triangles, 0, this.numIndices, numInstances);\r\n bufs.unbind();\r\n }\r\n\r\n public static create(params: PolylineParams, viewIndependentOrigin: Point3d | undefined): PolylineGeometry | undefined {\r\n const lut = VertexLUT.createFromVertexTable(params.vertices);\r\n if (undefined === lut)\r\n return undefined;\r\n\r\n const buffers = PolylineBuffers.create(params.polyline);\r\n if (undefined === buffers)\r\n return undefined;\r\n\r\n return new PolylineGeometry(lut, buffers, params, viewIndependentOrigin);\r\n }\r\n}\r\n"]}
1
+ {"version":3,"file":"Polyline.js","sourceRoot":"","sources":["../../../../src/render/webgl/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 { dispose } from \"@itwin/core-bentley\";\r\nimport { Point3d } from \"@itwin/core-geometry\";\r\nimport { FeatureIndexType, PolylineTypeFlags, QParams3d, RenderMode } from \"@itwin/core-common\";\r\nimport { PolylineParams } from \"../primitives/PolylineParams\";\r\nimport { RenderMemory } from \"../RenderMemory\";\r\nimport { LUTGeometry, PolylineBuffers } from \"./CachedGeometry\";\r\nimport { ColorInfo } from \"./ColorInfo\";\r\nimport { ShaderProgramParams } from \"./DrawCommand\";\r\nimport { LineCode } from \"./LineCode\";\r\nimport { GL } from \"./GL\";\r\nimport { BuffersContainer } from \"./AttributeBuffers\";\r\nimport { Pass, RenderOrder } from \"./RenderFlags\";\r\nimport { System } from \"./System\";\r\nimport { Target } from \"./Target\";\r\nimport { TechniqueId } from \"./TechniqueId\";\r\nimport { VertexLUT } from \"./VertexLUT\";\r\n\r\n/** @internal */\r\nexport class PolylineGeometry extends LUTGeometry {\r\n public vertexParams: QParams3d;\r\n private readonly _hasFeatures: boolean;\r\n public lineWeight: number;\r\n public lineCode: number;\r\n public type: PolylineTypeFlags;\r\n private _isPlanar: boolean;\r\n public lut: VertexLUT;\r\n public numIndices: number;\r\n private _buffers: PolylineBuffers;\r\n\r\n public get lutBuffers() { return this._buffers.buffers; }\r\n\r\n private constructor(lut: VertexLUT, buffers: PolylineBuffers, params: PolylineParams, viOrigin: Point3d | undefined) {\r\n super(viOrigin);\r\n this.vertexParams = params.vertices.qparams;\r\n this._hasFeatures = FeatureIndexType.Empty !== params.vertices.featureIndexType;\r\n this.lineWeight = params.weight;\r\n this.lineCode = LineCode.valueFromLinePixels(params.linePixels);\r\n this.type = params.type;\r\n this._isPlanar = params.isPlanar;\r\n this.lut = lut;\r\n this.numIndices = params.polyline.indices.length;\r\n this._buffers = buffers;\r\n }\r\n\r\n public get isDisposed(): boolean { return this._buffers.isDisposed && this.lut.isDisposed; }\r\n\r\n public dispose() {\r\n dispose(this.lut);\r\n dispose(this._buffers);\r\n }\r\n\r\n public collectStatistics(stats: RenderMemory.Statistics): void {\r\n this._buffers.collectStatistics(stats, RenderMemory.BufferType.Polylines);\r\n stats.addVertexTable(this.lut.bytesUsed);\r\n }\r\n\r\n public get isAnyEdge(): boolean { return PolylineTypeFlags.Normal !== this.type; }\r\n public get isNormalEdge(): boolean { return PolylineTypeFlags.Edge === this.type; }\r\n public get isOutlineEdge(): boolean { return PolylineTypeFlags.Outline === this.type; }\r\n\r\n public get renderOrder(): RenderOrder {\r\n if (this.isAnyEdge)\r\n return this.isPlanar ? RenderOrder.PlanarEdge : RenderOrder.Edge;\r\n else\r\n return this.isPlanar ? RenderOrder.PlanarLinear : RenderOrder.Linear;\r\n }\r\n\r\n protected _wantWoWReversal(_target: Target): boolean { return true; }\r\n\r\n public override get polylineBuffers(): PolylineBuffers | undefined { return this._buffers; }\r\n\r\n private _computeEdgePass(target: Target, colorInfo: ColorInfo): Pass {\r\n const vf = target.currentViewFlags;\r\n if (RenderMode.SmoothShade === vf.renderMode && !vf.visibleEdges)\r\n return \"none\";\r\n\r\n // Only want to return Translucent for edges if rendering in Wireframe mode ###TODO: what about overrides?\r\n const isTranslucent: boolean = RenderMode.Wireframe === vf.renderMode && vf.transparency && colorInfo.hasTranslucency;\r\n return isTranslucent ? \"translucent\" : \"opaque-linear\";\r\n }\r\n\r\n public override getPass(target: Target): Pass {\r\n const vf = target.currentViewFlags;\r\n if (this.isEdge) {\r\n let pass = this._computeEdgePass(target, this.lut.colorInfo);\r\n // Only display the outline in wireframe if Fill is off...\r\n if (\"none\" !== pass && this.isOutlineEdge && RenderMode.Wireframe === vf.renderMode && vf.fill)\r\n pass = \"none\";\r\n\r\n return pass;\r\n }\r\n\r\n const isTranslucent: boolean = vf.transparency && this.lut.colorInfo.hasTranslucency;\r\n return isTranslucent ? \"translucent\" : \"opaque-linear\";\r\n }\r\n\r\n public get techniqueId(): TechniqueId { return TechniqueId.Polyline; }\r\n public get isPlanar(): boolean { return this._isPlanar; }\r\n public override get isEdge(): boolean { return this.isAnyEdge; }\r\n public override get qOrigin(): Float32Array { return this.lut.qOrigin; }\r\n public override get qScale(): Float32Array { return this.lut.qScale; }\r\n public get numRgbaPerVertex(): number { return this.lut.numRgbaPerVertex; }\r\n public override get hasFeatures() { return this._hasFeatures; }\r\n\r\n protected override _getLineWeight(params: ShaderProgramParams): number {\r\n return this.isEdge ? params.target.computeEdgeWeight(params.renderPass, this.lineWeight) : this.lineWeight;\r\n }\r\n protected override _getLineCode(params: ShaderProgramParams): number {\r\n return this.isEdge ? params.target.computeEdgeLineCode(params.renderPass, this.lineCode) : this.lineCode;\r\n }\r\n public override getColor(target: Target): ColorInfo {\r\n return this.isEdge ? target.computeEdgeColor(this.lut.colorInfo) : this.lut.colorInfo;\r\n }\r\n\r\n protected _draw(numInstances: number, instanceBuffersContainer?: BuffersContainer): void {\r\n const gl = System.instance;\r\n const bufs = instanceBuffersContainer !== undefined ? instanceBuffersContainer : this._buffers.buffers;\r\n\r\n bufs.bind();\r\n gl.drawArrays(GL.PrimitiveType.Triangles, 0, this.numIndices, numInstances);\r\n bufs.unbind();\r\n }\r\n\r\n public static create(params: PolylineParams, viewIndependentOrigin: Point3d | undefined): PolylineGeometry | undefined {\r\n const lut = VertexLUT.createFromVertexTable(params.vertices);\r\n if (undefined === lut)\r\n return undefined;\r\n\r\n const buffers = PolylineBuffers.create(params.polyline);\r\n if (undefined === buffers)\r\n return undefined;\r\n\r\n return new PolylineGeometry(lut, buffers, params, viewIndependentOrigin);\r\n }\r\n}\r\n"]}
@@ -8,7 +8,7 @@ import { CachedGeometry } from "./CachedGeometry";
8
8
  import { Graphic } from "./Graphic";
9
9
  import { InstanceBuffers, PatternBuffers } from "./InstancedGeometry";
10
10
  import { RenderCommands } from "./RenderCommands";
11
- import { RenderOrder, RenderPass } from "./RenderFlags";
11
+ import { Pass, RenderOrder, RenderPass } from "./RenderFlags";
12
12
  import { ShaderProgramExecutor } from "./ShaderProgram";
13
13
  import { Target } from "./Target";
14
14
  import { TechniqueId } from "./TechniqueId";
@@ -23,7 +23,7 @@ export declare class Primitive extends Graphic {
23
23
  get isPickable(): boolean;
24
24
  dispose(): void;
25
25
  collectStatistics(stats: RenderMemory.Statistics): void;
26
- getRenderPass(target: Target): RenderPass;
26
+ getPass(target: Target): Pass;
27
27
  get hasFeatures(): boolean;
28
28
  addCommands(commands: RenderCommands): void;
29
29
  addHiliteCommands(commands: RenderCommands, pass: RenderPass): void;
@@ -1 +1 @@
1
- {"version":3,"file":"Primitive.d.ts","sourceRoot":"","sources":["../../../../src/render/webgl/Primitive.ts"],"names":[],"mappings":"AAIA;;GAEG;AAGH,OAAO,EAAE,sBAAsB,EAAE,MAAM,2BAA2B,CAAC;AACnE,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAE/C,OAAO,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AACpD,OAAO,EAAE,cAAc,EAA8C,MAAM,kBAAkB,CAAC;AAE9F,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,eAAe,EAA+C,cAAc,EAAE,MAAM,qBAAqB,CAAC;AACnH,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAClD,OAAO,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AACxD,OAAO,EAAE,qBAAqB,EAAE,MAAM,iBAAiB,CAAC;AAExD,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAClC,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAE5C,gBAAgB;AAChB,qBAAa,SAAU,SAAQ,OAAO;IAC7B,cAAc,EAAE,cAAc,CAAC;IAC/B,WAAW,EAAE,OAAO,CAAS;IAEpC,SAAS,aAAa,UAAU,EAAE,cAAc;WAElC,MAAM,CAAC,IAAI,EAAE,cAAc,GAAG,SAAS,EAAE,SAAS,CAAC,EAAE,sBAAsB,GAAG,iBAAiB,GAAG,SAAS,GAAG,SAAS;WAsBvH,YAAY,CAAC,IAAI,EAAE,cAAc,GAAG,SAAS,EAAE,SAAS,CAAC,EAAE,eAAe,GAAG,cAAc,GAAG,SAAS,GAAG,SAAS;IAejI,IAAW,UAAU,IAAI,OAAO,CAA2C;IAC3E,IAAW,UAAU,YAAoB;IAElC,OAAO;IAIP,iBAAiB,CAAC,KAAK,EAAE,YAAY,CAAC,UAAU,GAAG,IAAI;IAIvD,aAAa,CAAC,MAAM,EAAE,MAAM;IAkBnC,IAAW,WAAW,IAAI,OAAO,CAA4C;IAEtE,WAAW,CAAC,QAAQ,EAAE,cAAc,GAAG,IAAI;IAElC,iBAAiB,CAAC,QAAQ,EAAE,cAAc,EAAE,IAAI,EAAE,UAAU,GAAG,IAAI;IAOnF,IAAW,YAAY,IAAI,OAAO,CAA6C;IAC/E,IAAW,WAAW,IAAI,OAAO,CAA4C;IAC7E,IAAW,KAAK,IAAI,OAAO,CAA6C;IACxE,IAAW,MAAM,IAAI,OAAO,CAAuC;IACnE,IAAW,WAAW,IAAI,WAAW,CAA4C;IACjF,IAAW,gBAAgB,IAAI,OAAO,CAAiD;IAEvE,WAAW,IAAI,SAAS;IAExC,OAAO,CAAC,MAAM,CAAC,WAAW,CAAC,CAAa;WAE1B,UAAU,IAAI,IAAI;IAEzB,IAAI,CAAC,MAAM,EAAE,qBAAqB,GAAG,IAAI;IAUhD,IAAW,WAAW,IAAI,WAAW,CAA4C;CAClF;AAED,gBAAgB;AAChB,qBAAa,gBAAiB,SAAQ,SAAS;gBAC1B,UAAU,EAAE,cAAc;IAE7B,IAAI,CAAC,MAAM,EAAE,qBAAqB,GAAG,IAAI;CAa1D;AAED,gBAAgB;AAChB,qBAAa,kBAAmB,SAAQ,SAAS;gBAC5B,UAAU,EAAE,cAAc;IAK7B,IAAI,CAAC,MAAM,EAAE,qBAAqB,GAAG,IAAI;CAI1D"}
1
+ {"version":3,"file":"Primitive.d.ts","sourceRoot":"","sources":["../../../../src/render/webgl/Primitive.ts"],"names":[],"mappings":"AAIA;;GAEG;AAGH,OAAO,EAAE,sBAAsB,EAAE,MAAM,2BAA2B,CAAC;AACnE,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAE/C,OAAO,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AACpD,OAAO,EAAE,cAAc,EAA8C,MAAM,kBAAkB,CAAC;AAE9F,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,eAAe,EAA+C,cAAc,EAAE,MAAM,qBAAqB,CAAC;AACnH,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAClD,OAAO,EAAE,IAAI,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAC9D,OAAO,EAAE,qBAAqB,EAAE,MAAM,iBAAiB,CAAC;AAExD,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAClC,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAE5C,gBAAgB;AAChB,qBAAa,SAAU,SAAQ,OAAO;IAC7B,cAAc,EAAE,cAAc,CAAC;IAC/B,WAAW,EAAE,OAAO,CAAS;IAEpC,SAAS,aAAa,UAAU,EAAE,cAAc;WAElC,MAAM,CAAC,IAAI,EAAE,cAAc,GAAG,SAAS,EAAE,SAAS,CAAC,EAAE,sBAAsB,GAAG,iBAAiB,GAAG,SAAS,GAAG,SAAS;WAsBvH,YAAY,CAAC,IAAI,EAAE,cAAc,GAAG,SAAS,EAAE,SAAS,CAAC,EAAE,eAAe,GAAG,cAAc,GAAG,SAAS,GAAG,SAAS;IAejI,IAAW,UAAU,IAAI,OAAO,CAA2C;IAC3E,IAAW,UAAU,YAAoB;IAElC,OAAO;IAIP,iBAAiB,CAAC,KAAK,EAAE,YAAY,CAAC,UAAU,GAAG,IAAI;IAIvD,OAAO,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI;IAkBpC,IAAW,WAAW,IAAI,OAAO,CAA4C;IAEtE,WAAW,CAAC,QAAQ,EAAE,cAAc,GAAG,IAAI;IAElC,iBAAiB,CAAC,QAAQ,EAAE,cAAc,EAAE,IAAI,EAAE,UAAU,GAAG,IAAI;IAOnF,IAAW,YAAY,IAAI,OAAO,CAA6C;IAC/E,IAAW,WAAW,IAAI,OAAO,CAA4C;IAC7E,IAAW,KAAK,IAAI,OAAO,CAA6C;IACxE,IAAW,MAAM,IAAI,OAAO,CAAuC;IACnE,IAAW,WAAW,IAAI,WAAW,CAA4C;IACjF,IAAW,gBAAgB,IAAI,OAAO,CAAiD;IAEvE,WAAW,IAAI,SAAS;IAExC,OAAO,CAAC,MAAM,CAAC,WAAW,CAAC,CAAa;WAE1B,UAAU,IAAI,IAAI;IAEzB,IAAI,CAAC,MAAM,EAAE,qBAAqB,GAAG,IAAI;IAUhD,IAAW,WAAW,IAAI,WAAW,CAA4C;CAClF;AAED,gBAAgB;AAChB,qBAAa,gBAAiB,SAAQ,SAAS;gBAC1B,UAAU,EAAE,cAAc;IAE7B,IAAI,CAAC,MAAM,EAAE,qBAAqB,GAAG,IAAI;CAa1D;AAED,gBAAgB;AAChB,qBAAa,kBAAmB,SAAQ,SAAS;gBAC5B,UAAU,EAAE,cAAc;IAK7B,IAAI,CAAC,MAAM,EAAE,qBAAqB,GAAG,IAAI;CAI1D"}
@@ -58,20 +58,20 @@ export class Primitive extends Graphic {
58
58
  collectStatistics(stats) {
59
59
  this.cachedGeometry.collectStatistics(stats);
60
60
  }
61
- getRenderPass(target) {
61
+ getPass(target) {
62
62
  if (this.isPixelMode)
63
- return 12 /* ViewOverlay */;
63
+ return "view-overlay";
64
64
  switch (target.primitiveVisibility) {
65
65
  case PrimitiveVisibility.Uninstanced:
66
66
  if (this.cachedGeometry.isInstanced)
67
- return 255 /* None */;
67
+ return "none";
68
68
  break;
69
69
  case PrimitiveVisibility.Instanced:
70
70
  if (!this.cachedGeometry.isInstanced)
71
- return 255 /* None */;
71
+ return "none";
72
72
  break;
73
73
  }
74
- return this.cachedGeometry.getRenderPass(target);
74
+ return this.cachedGeometry.getPass(target);
75
75
  }
76
76
  get hasFeatures() { return this.cachedGeometry.hasFeatures; }
77
77
  addCommands(commands) { commands.addPrimitive(this); }
@@ -1 +1 @@
1
- {"version":3,"file":"Primitive.js","sourceRoot":"","sources":["../../../../src/render/webgl/Primitive.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, dispose } from \"@itwin/core-bentley\";\r\nimport { InstancedGraphicParams } from \"../InstancedGraphicParams\";\r\nimport { RenderMemory } from \"../RenderMemory\";\r\nimport { PrimitiveVisibility } from \"../RenderTarget\";\r\nimport { RenderAreaPattern } from \"../RenderSystem\";\r\nimport { CachedGeometry, LUTGeometry, SkySphereViewportQuadGeometry } from \"./CachedGeometry\";\r\nimport { DrawParams, PrimitiveCommand } from \"./DrawCommand\";\r\nimport { Graphic } from \"./Graphic\";\r\nimport { InstanceBuffers, InstancedGeometry, isInstancedGraphicParams, PatternBuffers } from \"./InstancedGeometry\";\r\nimport { RenderCommands } from \"./RenderCommands\";\r\nimport { RenderOrder, RenderPass } from \"./RenderFlags\";\r\nimport { ShaderProgramExecutor } from \"./ShaderProgram\";\r\nimport { System } from \"./System\";\r\nimport { Target } from \"./Target\";\r\nimport { TechniqueId } from \"./TechniqueId\";\r\n\r\n/** @internal */\r\nexport class Primitive extends Graphic {\r\n public cachedGeometry: CachedGeometry;\r\n public isPixelMode: boolean = false;\r\n\r\n protected constructor(cachedGeom: CachedGeometry) { super(); this.cachedGeometry = cachedGeom; }\r\n\r\n public static create(geom: CachedGeometry | undefined, instances?: InstancedGraphicParams | RenderAreaPattern): Primitive | undefined {\r\n if (!geom)\r\n return undefined;\r\n\r\n if (instances) {\r\n assert(geom instanceof LUTGeometry, \"Invalid geometry type for instancing\");\r\n if (instances instanceof PatternBuffers) {\r\n geom = InstancedGeometry.createPattern(geom, true, instances);\r\n } else {\r\n assert(isInstancedGraphicParams(instances));\r\n const range = InstanceBuffers.computeRange(geom.computeRange(), instances.transforms, instances.transformCenter);\r\n const instanceBuffers = InstanceBuffers.create(instances, range);\r\n if (!instanceBuffers)\r\n return undefined;\r\n\r\n geom = InstancedGeometry.create(geom, true, instanceBuffers);\r\n }\r\n }\r\n\r\n return new this(geom);\r\n }\r\n\r\n public static createShared(geom: CachedGeometry | undefined, instances?: InstanceBuffers | PatternBuffers): Primitive | undefined {\r\n if (!geom)\r\n return undefined;\r\n\r\n if (instances) {\r\n assert(geom instanceof LUTGeometry, \"Invalid geometry type for instancing\");\r\n if (instances instanceof InstanceBuffers)\r\n geom = InstancedGeometry.create(geom, false, instances);\r\n else\r\n geom = InstancedGeometry.createPattern(geom, false, instances);\r\n }\r\n\r\n return new this(geom);\r\n }\r\n\r\n public get isDisposed(): boolean { return this.cachedGeometry.isDisposed; }\r\n public get isPickable() { return false; }\r\n\r\n public dispose() {\r\n dispose(this.cachedGeometry);\r\n }\r\n\r\n public collectStatistics(stats: RenderMemory.Statistics): void {\r\n this.cachedGeometry.collectStatistics(stats);\r\n }\r\n\r\n public getRenderPass(target: Target) {\r\n if (this.isPixelMode)\r\n return RenderPass.ViewOverlay;\r\n\r\n switch (target.primitiveVisibility) {\r\n case PrimitiveVisibility.Uninstanced:\r\n if (this.cachedGeometry.isInstanced)\r\n return RenderPass.None;\r\n break;\r\n case PrimitiveVisibility.Instanced:\r\n if (!this.cachedGeometry.isInstanced)\r\n return RenderPass.None;\r\n break;\r\n }\r\n\r\n return this.cachedGeometry.getRenderPass(target);\r\n }\r\n\r\n public get hasFeatures(): boolean { return this.cachedGeometry.hasFeatures; }\r\n\r\n public addCommands(commands: RenderCommands): void { commands.addPrimitive(this); }\r\n\r\n public override addHiliteCommands(commands: RenderCommands, pass: RenderPass): void {\r\n // Edges do not contribute to hilite pass.\r\n // Note that IsEdge() does not imply geom->ToEdge() => true...polylines can be edges too...\r\n if (!this.isEdge)\r\n commands.getCommands(pass).push(new PrimitiveCommand(this));\r\n }\r\n\r\n public get hasAnimation(): boolean { return this.cachedGeometry.hasAnimation; }\r\n public get isInstanced(): boolean { return this.cachedGeometry.isInstanced; }\r\n public get isLit(): boolean { return this.cachedGeometry.isLitSurface; }\r\n public get isEdge(): boolean { return this.cachedGeometry.isEdge; }\r\n public get renderOrder(): RenderOrder { return this.cachedGeometry.renderOrder; }\r\n public get hasMaterialAtlas(): boolean { return this.cachedGeometry.hasMaterialAtlas; }\r\n\r\n public override toPrimitive(): Primitive { return this; }\r\n\r\n private static _drawParams?: DrawParams;\r\n\r\n public static freeParams(): void { Primitive._drawParams = undefined; }\r\n\r\n public draw(shader: ShaderProgramExecutor): void {\r\n // ###TODO: local to world should be pushed before we're invoked...we shouldn't need to pass (or copy) it\r\n if (undefined === Primitive._drawParams)\r\n Primitive._drawParams = new DrawParams();\r\n\r\n const drawParams = Primitive._drawParams;\r\n drawParams.init(shader.params, this.cachedGeometry);\r\n shader.draw(drawParams);\r\n }\r\n\r\n public get techniqueId(): TechniqueId { return this.cachedGeometry.techniqueId; }\r\n}\r\n\r\n/** @internal */\r\nexport class SkyCubePrimitive extends Primitive {\r\n public constructor(cachedGeom: CachedGeometry) { super(cachedGeom); }\r\n\r\n public override draw(shader: ShaderProgramExecutor): void {\r\n // Alter viewport to maintain square aspect ratio of skybox images even as viewRect resizes\r\n const vh = shader.target.viewRect.height;\r\n const vw = shader.target.viewRect.width;\r\n if (vw > vh)\r\n System.instance.context.viewport(0, -(vw - vh) / 2, vw, vw);\r\n else\r\n System.instance.context.viewport(-(vh - vw) / 2, 0, vh, vh);\r\n\r\n super.draw(shader); // Draw the skybox cubemap\r\n\r\n System.instance.context.viewport(0, 0, vw, vh); // Restore viewport\r\n }\r\n}\r\n\r\n/** @internal */\r\nexport class SkySpherePrimitive extends Primitive {\r\n public constructor(cachedGeom: CachedGeometry) {\r\n super(cachedGeom);\r\n assert(cachedGeom instanceof SkySphereViewportQuadGeometry);\r\n }\r\n\r\n public override draw(shader: ShaderProgramExecutor): void {\r\n (this.cachedGeometry as SkySphereViewportQuadGeometry).initWorldPos(shader.target);\r\n super.draw(shader); // Draw the skybox sphere\r\n }\r\n}\r\n"]}
1
+ {"version":3,"file":"Primitive.js","sourceRoot":"","sources":["../../../../src/render/webgl/Primitive.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, dispose } from \"@itwin/core-bentley\";\r\nimport { InstancedGraphicParams } from \"../InstancedGraphicParams\";\r\nimport { RenderMemory } from \"../RenderMemory\";\r\nimport { PrimitiveVisibility } from \"../RenderTarget\";\r\nimport { RenderAreaPattern } from \"../RenderSystem\";\r\nimport { CachedGeometry, LUTGeometry, SkySphereViewportQuadGeometry } from \"./CachedGeometry\";\r\nimport { DrawParams, PrimitiveCommand } from \"./DrawCommand\";\r\nimport { Graphic } from \"./Graphic\";\r\nimport { InstanceBuffers, InstancedGeometry, isInstancedGraphicParams, PatternBuffers } from \"./InstancedGeometry\";\r\nimport { RenderCommands } from \"./RenderCommands\";\r\nimport { Pass, RenderOrder, RenderPass } from \"./RenderFlags\";\r\nimport { ShaderProgramExecutor } from \"./ShaderProgram\";\r\nimport { System } from \"./System\";\r\nimport { Target } from \"./Target\";\r\nimport { TechniqueId } from \"./TechniqueId\";\r\n\r\n/** @internal */\r\nexport class Primitive extends Graphic {\r\n public cachedGeometry: CachedGeometry;\r\n public isPixelMode: boolean = false;\r\n\r\n protected constructor(cachedGeom: CachedGeometry) { super(); this.cachedGeometry = cachedGeom; }\r\n\r\n public static create(geom: CachedGeometry | undefined, instances?: InstancedGraphicParams | RenderAreaPattern): Primitive | undefined {\r\n if (!geom)\r\n return undefined;\r\n\r\n if (instances) {\r\n assert(geom instanceof LUTGeometry, \"Invalid geometry type for instancing\");\r\n if (instances instanceof PatternBuffers) {\r\n geom = InstancedGeometry.createPattern(geom, true, instances);\r\n } else {\r\n assert(isInstancedGraphicParams(instances));\r\n const range = InstanceBuffers.computeRange(geom.computeRange(), instances.transforms, instances.transformCenter);\r\n const instanceBuffers = InstanceBuffers.create(instances, range);\r\n if (!instanceBuffers)\r\n return undefined;\r\n\r\n geom = InstancedGeometry.create(geom, true, instanceBuffers);\r\n }\r\n }\r\n\r\n return new this(geom);\r\n }\r\n\r\n public static createShared(geom: CachedGeometry | undefined, instances?: InstanceBuffers | PatternBuffers): Primitive | undefined {\r\n if (!geom)\r\n return undefined;\r\n\r\n if (instances) {\r\n assert(geom instanceof LUTGeometry, \"Invalid geometry type for instancing\");\r\n if (instances instanceof InstanceBuffers)\r\n geom = InstancedGeometry.create(geom, false, instances);\r\n else\r\n geom = InstancedGeometry.createPattern(geom, false, instances);\r\n }\r\n\r\n return new this(geom);\r\n }\r\n\r\n public get isDisposed(): boolean { return this.cachedGeometry.isDisposed; }\r\n public get isPickable() { return false; }\r\n\r\n public dispose() {\r\n dispose(this.cachedGeometry);\r\n }\r\n\r\n public collectStatistics(stats: RenderMemory.Statistics): void {\r\n this.cachedGeometry.collectStatistics(stats);\r\n }\r\n\r\n public getPass(target: Target): Pass {\r\n if (this.isPixelMode)\r\n return \"view-overlay\";\r\n\r\n switch (target.primitiveVisibility) {\r\n case PrimitiveVisibility.Uninstanced:\r\n if (this.cachedGeometry.isInstanced)\r\n return \"none\";\r\n break;\r\n case PrimitiveVisibility.Instanced:\r\n if (!this.cachedGeometry.isInstanced)\r\n return \"none\";\r\n break;\r\n }\r\n\r\n return this.cachedGeometry.getPass(target);\r\n }\r\n\r\n public get hasFeatures(): boolean { return this.cachedGeometry.hasFeatures; }\r\n\r\n public addCommands(commands: RenderCommands): void { commands.addPrimitive(this); }\r\n\r\n public override addHiliteCommands(commands: RenderCommands, pass: RenderPass): void {\r\n // Edges do not contribute to hilite pass.\r\n // Note that IsEdge() does not imply geom->ToEdge() => true...polylines can be edges too...\r\n if (!this.isEdge)\r\n commands.getCommands(pass).push(new PrimitiveCommand(this));\r\n }\r\n\r\n public get hasAnimation(): boolean { return this.cachedGeometry.hasAnimation; }\r\n public get isInstanced(): boolean { return this.cachedGeometry.isInstanced; }\r\n public get isLit(): boolean { return this.cachedGeometry.isLitSurface; }\r\n public get isEdge(): boolean { return this.cachedGeometry.isEdge; }\r\n public get renderOrder(): RenderOrder { return this.cachedGeometry.renderOrder; }\r\n public get hasMaterialAtlas(): boolean { return this.cachedGeometry.hasMaterialAtlas; }\r\n\r\n public override toPrimitive(): Primitive { return this; }\r\n\r\n private static _drawParams?: DrawParams;\r\n\r\n public static freeParams(): void { Primitive._drawParams = undefined; }\r\n\r\n public draw(shader: ShaderProgramExecutor): void {\r\n // ###TODO: local to world should be pushed before we're invoked...we shouldn't need to pass (or copy) it\r\n if (undefined === Primitive._drawParams)\r\n Primitive._drawParams = new DrawParams();\r\n\r\n const drawParams = Primitive._drawParams;\r\n drawParams.init(shader.params, this.cachedGeometry);\r\n shader.draw(drawParams);\r\n }\r\n\r\n public get techniqueId(): TechniqueId { return this.cachedGeometry.techniqueId; }\r\n}\r\n\r\n/** @internal */\r\nexport class SkyCubePrimitive extends Primitive {\r\n public constructor(cachedGeom: CachedGeometry) { super(cachedGeom); }\r\n\r\n public override draw(shader: ShaderProgramExecutor): void {\r\n // Alter viewport to maintain square aspect ratio of skybox images even as viewRect resizes\r\n const vh = shader.target.viewRect.height;\r\n const vw = shader.target.viewRect.width;\r\n if (vw > vh)\r\n System.instance.context.viewport(0, -(vw - vh) / 2, vw, vw);\r\n else\r\n System.instance.context.viewport(-(vh - vw) / 2, 0, vh, vh);\r\n\r\n super.draw(shader); // Draw the skybox cubemap\r\n\r\n System.instance.context.viewport(0, 0, vw, vh); // Restore viewport\r\n }\r\n}\r\n\r\n/** @internal */\r\nexport class SkySpherePrimitive extends Primitive {\r\n public constructor(cachedGeom: CachedGeometry) {\r\n super(cachedGeom);\r\n assert(cachedGeom instanceof SkySphereViewportQuadGeometry);\r\n }\r\n\r\n public override draw(shader: ShaderProgramExecutor): void {\r\n (this.cachedGeometry as SkySphereViewportQuadGeometry).initWorldPos(shader.target);\r\n super.draw(shader); // Draw the skybox sphere\r\n }\r\n}\r\n"]}
@@ -12,7 +12,7 @@ import { TerrainMeshPrimitive } from "../primitives/mesh/TerrainMeshPrimitive";
12
12
  import { RenderGraphic } from "../RenderGraphic";
13
13
  import { RenderMemory } from "../RenderMemory";
14
14
  import { RenderSystem, TerrainTexture } from "../RenderSystem";
15
- import { RenderOrder, RenderPass } from "./RenderFlags";
15
+ import { RenderOrder } from "./RenderFlags";
16
16
  import { Target } from "./Target";
17
17
  import { TechniqueId } from "./TechniqueId";
18
18
  /** @internal */
@@ -56,7 +56,7 @@ export declare class RealityMeshGeometry extends IndexedGeometry implements IDis
56
56
  static createGraphic(system: RenderSystem, realityMesh: RealityMeshGeometry, featureTable: PackedFeatureTable, tileId: string | undefined, baseColor: ColorDef | undefined, baseTransparent: boolean, textures?: TerrainTexture[]): RenderGraphic | undefined;
57
57
  collectStatistics(stats: RenderMemory.Statistics): void;
58
58
  get techniqueId(): TechniqueId;
59
- getRenderPass(target: Target): RenderPass;
59
+ getPass(target: Target): "none" | "opaque" | "translucent";
60
60
  get renderOrder(): RenderOrder;
61
61
  draw(): void;
62
62
  }
@@ -1 +1 @@
1
- {"version":3,"file":"RealityMesh.d.ts","sourceRoot":"","sources":["../../../../src/render/webgl/RealityMesh.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"RealityMesh.d.ts","sourceRoot":"","sources":["../../../../src/render/webgl/RealityMesh.ts"],"names":[],"mappings":"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"}
@@ -196,12 +196,12 @@ export class RealityMeshGeometry extends IndexedGeometry {
196
196
  this._isTerrain ? stats.addTerrain(this._realityMeshParams.bytesUsed) : stats.addRealityMesh(this._realityMeshParams.bytesUsed);
197
197
  }
198
198
  get techniqueId() { return 7 /* RealityMesh */; }
199
- getRenderPass(target) {
199
+ getPass(target) {
200
200
  if (target.isDrawingShadowMap)
201
- return 255 /* None */;
201
+ return "none";
202
202
  if (this._baseIsTransparent || (target.wantThematicDisplay && target.uniforms.thematic.wantIsoLines))
203
- return 7 /* Translucent */;
204
- return 4 /* OpaqueGeneral */;
203
+ return "translucent";
204
+ return "opaque";
205
205
  }
206
206
  get renderOrder() { return 3 /* UnlitSurface */; }
207
207
  draw() {
@@ -1 +1 @@
1
- {"version":3,"file":"RealityMesh.js","sourceRoot":"","sources":["../../../../src/render/webgl/RealityMesh.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\r\n/** @packageDocumentation\r\n * @module WebGL\r\n */\r\n\r\nimport { assert, dispose, IDisposable } from \"@itwin/core-bentley\";\r\nimport { Range2d, Range3d, Transform, Vector2d } from \"@itwin/core-geometry\";\r\nimport { ColorDef, PackedFeatureTable, Quantization, RenderTexture } from \"@itwin/core-common\";\r\nimport { AttributeMap } from \"./AttributeMap\";\r\nimport { BufferHandle, BufferParameters, QBufferHandle2d, QBufferHandle3d } from \"./AttributeBuffers\";\r\nimport { IndexedGeometry, IndexedGeometryParams } from \"./CachedGeometry\";\r\nimport { Matrix4 } from \"./Matrix\";\r\nimport { GraphicBranch } from \"../GraphicBranch\";\r\nimport { RealityMeshPrimitive } from \"../primitives/mesh/RealityMeshPrimitive\";\r\nimport { TerrainMeshPrimitive } from \"../primitives/mesh/TerrainMeshPrimitive\";\r\nimport { RenderGraphic } from \"../RenderGraphic\";\r\nimport { RenderMemory } from \"../RenderMemory\";\r\nimport { RenderSystem, TerrainTexture } from \"../RenderSystem\";\r\nimport { GL } from \"./GL\";\r\nimport { Primitive } from \"./Primitive\";\r\nimport { RenderOrder, RenderPass } from \"./RenderFlags\";\r\nimport { System } from \"./System\";\r\nimport { Target } from \"./Target\";\r\nimport { TechniqueId } from \"./TechniqueId\";\r\n\r\nconst scratchOverlapRange = Range2d.createNull();\r\n\r\n/** @internal */\r\nexport class RealityTextureParams {\r\n\r\n constructor(public matrices: Matrix4[], public textures: RenderTexture[]) { }\r\n public static create(terrainTextures: TerrainTexture[]) {\r\n const maxTexturesPerMesh = System.instance.maxRealityImageryLayers;\r\n assert(terrainTextures.length <= maxTexturesPerMesh);\r\n\r\n const renderTextures = [];\r\n const matrices = new Array<Matrix4>();\r\n for (const terrainTexture of terrainTextures) {\r\n const matrix = new Matrix4(); // Published as Mat4.\r\n renderTextures.push(terrainTexture.texture);\r\n assert(terrainTexture.texture !== undefined, \"Texture not defined in TerrainTextureParams constructor\");\r\n matrix.data[0] = terrainTexture.translate.x;\r\n matrix.data[1] = terrainTexture.translate.y;\r\n matrix.data[2] = terrainTexture.scale.x;\r\n matrix.data[3] = terrainTexture.scale.y;\r\n\r\n if (terrainTexture.clipRectangle) {\r\n matrix.data[4] = terrainTexture.clipRectangle.low.x;\r\n matrix.data[5] = terrainTexture.clipRectangle.low.y;\r\n matrix.data[6] = terrainTexture.clipRectangle.high.x;\r\n matrix.data[7] = terrainTexture.clipRectangle.high.y;\r\n } else {\r\n matrix.data[4] = matrix.data[5] = 0;\r\n matrix.data[6] = matrix.data[7] = 1;\r\n }\r\n matrix.data[8] = (1.0 - terrainTexture.transparency);\r\n matrix.data[9] = terrainTexture.featureId;\r\n matrices.push(matrix);\r\n }\r\n\r\n for (let i = terrainTextures.length; i < maxTexturesPerMesh; i++) {\r\n const matrix = new Matrix4();\r\n matrix.data[0] = matrix.data[1] = 0.0;\r\n matrix.data[2] = matrix.data[3] = 1.0;\r\n matrix.data[4] = matrix.data[5] = 1;\r\n matrix.data[6] = matrix.data[7] = -1;\r\n matrices.push(matrix);\r\n }\r\n return new RealityTextureParams(matrices, renderTextures);\r\n }\r\n}\r\n\r\n/** @internal */\r\n\r\nexport class RealityMeshGeometryParams extends IndexedGeometryParams {\r\n public readonly uvParams: QBufferHandle2d;\r\n public readonly featureID?: number;\r\n public readonly normals?: BufferHandle;\r\n\r\n protected constructor(positions: QBufferHandle3d, normals: BufferHandle | undefined, uvParams: QBufferHandle2d, indices: BufferHandle, numIndices: number, featureID?: number) {\r\n super(positions, indices, numIndices);\r\n let attrParams = AttributeMap.findAttribute(\"a_uvParam\", TechniqueId.RealityMesh, false);\r\n assert(attrParams !== undefined);\r\n this.buffers.addBuffer(uvParams, [BufferParameters.create(attrParams.location, 2, GL.DataType.UnsignedShort, false, 0, 0, false)]);\r\n this.uvParams = uvParams;\r\n\r\n if (undefined !== normals) {\r\n attrParams = AttributeMap.findAttribute(\"a_norm\", TechniqueId.RealityMesh, false);\r\n assert(attrParams !== undefined);\r\n if (normals.bytesUsed > 0)\r\n this.buffers.addBuffer(normals, [BufferParameters.create(attrParams.location, 2, GL.DataType.UnsignedByte, false, 0, 0, false)]);\r\n this.normals = normals;\r\n }\r\n\r\n this.featureID = featureID;\r\n }\r\n\r\n private static createFromBuffers(posBuf: QBufferHandle3d, uvParamBuf: QBufferHandle2d, indices: Uint16Array, normBuf: BufferHandle | undefined, featureID: number) {\r\n const indBuf = BufferHandle.createBuffer(GL.Buffer.Target.ElementArrayBuffer, indices);\r\n\r\n if (undefined === indBuf)\r\n return undefined;\r\n\r\n return new RealityMeshGeometryParams(posBuf, normBuf, uvParamBuf, indBuf, indices.length, featureID);\r\n\r\n }\r\n\r\n public static createFromRealityMesh(mesh: RealityMeshPrimitive) {\r\n const posBuf = QBufferHandle3d.create(mesh.pointQParams, mesh.points);\r\n const uvParamBuf = QBufferHandle2d.create(mesh.uvQParams, mesh.uvs);\r\n const normalBuf = mesh.normals ? BufferHandle.createArrayBuffer(mesh.normals) : undefined;\r\n return (undefined === posBuf || undefined === uvParamBuf) ? undefined : this.createFromBuffers(posBuf, uvParamBuf, mesh.indices, normalBuf, mesh.featureID);\r\n }\r\n\r\n public override get isDisposed(): boolean {\r\n return super.isDisposed && this.uvParams.isDisposed;\r\n }\r\n public get bytesUsed(): number { return this.positions.bytesUsed + (undefined === this.normals ? 0 : this.normals.bytesUsed) + this.uvParams.bytesUsed + this.indices.bytesUsed; }\r\n\r\n public override dispose() {\r\n super.dispose();\r\n dispose(this.uvParams);\r\n }\r\n}\r\n\r\n/** @internal */\r\nexport class RealityMeshGeometry extends IndexedGeometry implements IDisposable, RenderMemory.Consumer {\r\n public override get asRealityMesh(): RealityMeshGeometry | undefined { return this; }\r\n public override get isDisposed(): boolean { return this._realityMeshParams.isDisposed; }\r\n public get uvQParams() { return this._realityMeshParams.uvParams.params; }\r\n public override get hasFeatures(): boolean { return this._realityMeshParams.featureID !== undefined; }\r\n public override get supportsThematicDisplay() { return true; }\r\n public get overrideColorMix() { return .5; } // This could be a setting from either the mesh or the override if required.\r\n\r\n private constructor(private _realityMeshParams: RealityMeshGeometryParams, public textureParams: RealityTextureParams | undefined, private readonly _transform: Transform | undefined, public readonly baseColor: ColorDef | undefined, private _baseIsTransparent: boolean, private _isTerrain: boolean) {\r\n super(_realityMeshParams);\r\n }\r\n\r\n public override dispose() {\r\n super.dispose();\r\n dispose(this._realityMeshParams);\r\n }\r\n\r\n public static createFromTerrainMesh(terrainMesh: TerrainMeshPrimitive, transform: Transform | undefined) {\r\n const params = RealityMeshGeometryParams.createFromRealityMesh(terrainMesh);\r\n return params ? new RealityMeshGeometry(params, undefined, transform, undefined, false, true) : undefined;\r\n }\r\n\r\n public static createFromRealityMesh(realityMesh: RealityMeshPrimitive): RealityMeshGeometry | undefined {\r\n const params = RealityMeshGeometryParams.createFromRealityMesh(realityMesh);\r\n if (!params)\r\n return undefined;\r\n const texture = realityMesh.texture ? new TerrainTexture(realityMesh.texture, realityMesh.featureID, Vector2d.create(1.0, -1.0), Vector2d.create(0.0, 1.0), Range2d.createXYXY(0, 0, 1, 1), 0, 0) : undefined;\r\n\r\n return new RealityMeshGeometry(params, texture ? RealityTextureParams.create([texture]) : undefined, undefined, undefined, false, false);\r\n }\r\n\r\n public getRange(): Range3d {\r\n return Range3d.createXYZXYZ(this.qOrigin[0], this.qOrigin[1], this.qOrigin[2], this.qOrigin[0] + Quantization.rangeScale16 * this.qScale[0], this.qOrigin[1] + Quantization.rangeScale16 * this.qScale[1], this.qOrigin[2] + Quantization.rangeScale16 * this.qScale[2]);\r\n }\r\n\r\n public static createGraphic(system: RenderSystem, realityMesh: RealityMeshGeometry, featureTable: PackedFeatureTable, tileId: string | undefined, baseColor: ColorDef | undefined, baseTransparent: boolean, textures?: TerrainTexture[]): RenderGraphic | undefined {\r\n const meshes = [];\r\n if (textures === undefined)\r\n textures = [];\r\n\r\n const texturesPerMesh = System.instance.maxRealityImageryLayers;\r\n const layers = new Array<TerrainTexture[]>();\r\n let layerCount = 0;\r\n for (const texture of textures) {\r\n const layer = layers[texture.layerIndex];\r\n if (layer) {\r\n layer.push(texture);\r\n } else {\r\n layerCount++;\r\n layers[texture.layerIndex] = [texture];\r\n }\r\n }\r\n if (layerCount < 2) {\r\n // If only there is not more than one layer then we can group all of the textures into a single draw call.\r\n meshes.push(new RealityMeshGeometry(realityMesh._realityMeshParams, RealityTextureParams.create(textures), realityMesh._transform, baseColor, baseTransparent, realityMesh._isTerrain));\r\n } else {\r\n const primaryLayer = layers.shift()!;\r\n for (const primaryTexture of primaryLayer) {\r\n const targetRectangle = primaryTexture.targetRectangle;\r\n const overlapMinimum = 1.0E-5 * (targetRectangle.high.x - targetRectangle.low.x) * (targetRectangle.high.y - targetRectangle.low.y);\r\n const layerTextures = [primaryTexture];\r\n for (const secondaryLayer of layers) {\r\n if (!secondaryLayer)\r\n continue;\r\n for (const secondaryTexture of secondaryLayer) {\r\n const secondaryRectangle = secondaryTexture.targetRectangle;\r\n const overlap = targetRectangle.intersect(secondaryRectangle, scratchOverlapRange);\r\n if (!overlap.isNull && (overlap.high.x - overlap.low.x) * (overlap.high.y - overlap.low.y) > overlapMinimum) {\r\n const textureRange = Range2d.createXYXY(overlap.low.x, overlap.low.y, overlap.high.x, overlap.high.y);\r\n secondaryRectangle.worldToLocal(textureRange.low, textureRange.low);\r\n secondaryRectangle.worldToLocal(textureRange.high, textureRange.high);\r\n\r\n if (secondaryTexture.clipRectangle)\r\n textureRange.intersect(secondaryTexture.clipRectangle, textureRange);\r\n\r\n if (!textureRange.isNull)\r\n layerTextures.push(new TerrainTexture(secondaryTexture.texture, secondaryTexture.featureId, secondaryTexture.scale, secondaryTexture.translate, secondaryTexture.targetRectangle, secondaryTexture.layerIndex, secondaryTexture.transparency, textureRange));\r\n }\r\n }\r\n }\r\n layerTextures.length = Math.min(layerTextures.length, texturesPerMesh);\r\n meshes.push(new RealityMeshGeometry(realityMesh._realityMeshParams, RealityTextureParams.create(layerTextures), realityMesh._transform, baseColor, baseTransparent, realityMesh._isTerrain));\r\n }\r\n }\r\n\r\n if (meshes.length === 0)\r\n return undefined;\r\n\r\n const branch = new GraphicBranch(true);\r\n for (const mesh of meshes) {\r\n const primitive = Primitive.create(mesh);\r\n branch.add(system.createBatch(primitive!, featureTable, mesh.getRange(), { tileId }));\r\n }\r\n\r\n return system.createBranch(branch, realityMesh._transform ? realityMesh._transform : Transform.createIdentity());\r\n }\r\n\r\n public collectStatistics(stats: RenderMemory.Statistics): void {\r\n this._isTerrain ? stats.addTerrain(this._realityMeshParams.bytesUsed) : stats.addRealityMesh(this._realityMeshParams.bytesUsed);\r\n }\r\n\r\n public get techniqueId(): TechniqueId { return TechniqueId.RealityMesh; }\r\n\r\n public getRenderPass(target: Target): RenderPass {\r\n if (target.isDrawingShadowMap)\r\n return RenderPass.None;\r\n\r\n if (this._baseIsTransparent || (target.wantThematicDisplay && target.uniforms.thematic.wantIsoLines))\r\n return RenderPass.Translucent;\r\n\r\n return RenderPass.OpaqueGeneral;\r\n }\r\n public get renderOrder(): RenderOrder { return RenderOrder.UnlitSurface; }\r\n\r\n public override draw(): void {\r\n this._params.buffers.bind();\r\n System.instance.context.drawElements(GL.PrimitiveType.Triangles, this._params.numIndices, GL.DataType.UnsignedShort, 0);\r\n this._params.buffers.unbind();\r\n }\r\n}\r\n"]}
1
+ {"version":3,"file":"RealityMesh.js","sourceRoot":"","sources":["../../../../src/render/webgl/RealityMesh.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\r\n/** @packageDocumentation\r\n * @module WebGL\r\n */\r\n\r\nimport { assert, dispose, IDisposable } from \"@itwin/core-bentley\";\r\nimport { Range2d, Range3d, Transform, Vector2d } from \"@itwin/core-geometry\";\r\nimport { ColorDef, PackedFeatureTable, Quantization, RenderTexture } from \"@itwin/core-common\";\r\nimport { AttributeMap } from \"./AttributeMap\";\r\nimport { BufferHandle, BufferParameters, QBufferHandle2d, QBufferHandle3d } from \"./AttributeBuffers\";\r\nimport { IndexedGeometry, IndexedGeometryParams } from \"./CachedGeometry\";\r\nimport { Matrix4 } from \"./Matrix\";\r\nimport { GraphicBranch } from \"../GraphicBranch\";\r\nimport { RealityMeshPrimitive } from \"../primitives/mesh/RealityMeshPrimitive\";\r\nimport { TerrainMeshPrimitive } from \"../primitives/mesh/TerrainMeshPrimitive\";\r\nimport { RenderGraphic } from \"../RenderGraphic\";\r\nimport { RenderMemory } from \"../RenderMemory\";\r\nimport { RenderSystem, TerrainTexture } from \"../RenderSystem\";\r\nimport { GL } from \"./GL\";\r\nimport { Primitive } from \"./Primitive\";\r\nimport { RenderOrder } from \"./RenderFlags\";\r\nimport { System } from \"./System\";\r\nimport { Target } from \"./Target\";\r\nimport { TechniqueId } from \"./TechniqueId\";\r\n\r\nconst scratchOverlapRange = Range2d.createNull();\r\n\r\n/** @internal */\r\nexport class RealityTextureParams {\r\n\r\n constructor(public matrices: Matrix4[], public textures: RenderTexture[]) { }\r\n public static create(terrainTextures: TerrainTexture[]) {\r\n const maxTexturesPerMesh = System.instance.maxRealityImageryLayers;\r\n assert(terrainTextures.length <= maxTexturesPerMesh);\r\n\r\n const renderTextures = [];\r\n const matrices = new Array<Matrix4>();\r\n for (const terrainTexture of terrainTextures) {\r\n const matrix = new Matrix4(); // Published as Mat4.\r\n renderTextures.push(terrainTexture.texture);\r\n assert(terrainTexture.texture !== undefined, \"Texture not defined in TerrainTextureParams constructor\");\r\n matrix.data[0] = terrainTexture.translate.x;\r\n matrix.data[1] = terrainTexture.translate.y;\r\n matrix.data[2] = terrainTexture.scale.x;\r\n matrix.data[3] = terrainTexture.scale.y;\r\n\r\n if (terrainTexture.clipRectangle) {\r\n matrix.data[4] = terrainTexture.clipRectangle.low.x;\r\n matrix.data[5] = terrainTexture.clipRectangle.low.y;\r\n matrix.data[6] = terrainTexture.clipRectangle.high.x;\r\n matrix.data[7] = terrainTexture.clipRectangle.high.y;\r\n } else {\r\n matrix.data[4] = matrix.data[5] = 0;\r\n matrix.data[6] = matrix.data[7] = 1;\r\n }\r\n matrix.data[8] = (1.0 - terrainTexture.transparency);\r\n matrix.data[9] = terrainTexture.featureId;\r\n matrices.push(matrix);\r\n }\r\n\r\n for (let i = terrainTextures.length; i < maxTexturesPerMesh; i++) {\r\n const matrix = new Matrix4();\r\n matrix.data[0] = matrix.data[1] = 0.0;\r\n matrix.data[2] = matrix.data[3] = 1.0;\r\n matrix.data[4] = matrix.data[5] = 1;\r\n matrix.data[6] = matrix.data[7] = -1;\r\n matrices.push(matrix);\r\n }\r\n return new RealityTextureParams(matrices, renderTextures);\r\n }\r\n}\r\n\r\n/** @internal */\r\n\r\nexport class RealityMeshGeometryParams extends IndexedGeometryParams {\r\n public readonly uvParams: QBufferHandle2d;\r\n public readonly featureID?: number;\r\n public readonly normals?: BufferHandle;\r\n\r\n protected constructor(positions: QBufferHandle3d, normals: BufferHandle | undefined, uvParams: QBufferHandle2d, indices: BufferHandle, numIndices: number, featureID?: number) {\r\n super(positions, indices, numIndices);\r\n let attrParams = AttributeMap.findAttribute(\"a_uvParam\", TechniqueId.RealityMesh, false);\r\n assert(attrParams !== undefined);\r\n this.buffers.addBuffer(uvParams, [BufferParameters.create(attrParams.location, 2, GL.DataType.UnsignedShort, false, 0, 0, false)]);\r\n this.uvParams = uvParams;\r\n\r\n if (undefined !== normals) {\r\n attrParams = AttributeMap.findAttribute(\"a_norm\", TechniqueId.RealityMesh, false);\r\n assert(attrParams !== undefined);\r\n if (normals.bytesUsed > 0)\r\n this.buffers.addBuffer(normals, [BufferParameters.create(attrParams.location, 2, GL.DataType.UnsignedByte, false, 0, 0, false)]);\r\n this.normals = normals;\r\n }\r\n\r\n this.featureID = featureID;\r\n }\r\n\r\n private static createFromBuffers(posBuf: QBufferHandle3d, uvParamBuf: QBufferHandle2d, indices: Uint16Array, normBuf: BufferHandle | undefined, featureID: number) {\r\n const indBuf = BufferHandle.createBuffer(GL.Buffer.Target.ElementArrayBuffer, indices);\r\n\r\n if (undefined === indBuf)\r\n return undefined;\r\n\r\n return new RealityMeshGeometryParams(posBuf, normBuf, uvParamBuf, indBuf, indices.length, featureID);\r\n\r\n }\r\n\r\n public static createFromRealityMesh(mesh: RealityMeshPrimitive) {\r\n const posBuf = QBufferHandle3d.create(mesh.pointQParams, mesh.points);\r\n const uvParamBuf = QBufferHandle2d.create(mesh.uvQParams, mesh.uvs);\r\n const normalBuf = mesh.normals ? BufferHandle.createArrayBuffer(mesh.normals) : undefined;\r\n return (undefined === posBuf || undefined === uvParamBuf) ? undefined : this.createFromBuffers(posBuf, uvParamBuf, mesh.indices, normalBuf, mesh.featureID);\r\n }\r\n\r\n public override get isDisposed(): boolean {\r\n return super.isDisposed && this.uvParams.isDisposed;\r\n }\r\n public get bytesUsed(): number { return this.positions.bytesUsed + (undefined === this.normals ? 0 : this.normals.bytesUsed) + this.uvParams.bytesUsed + this.indices.bytesUsed; }\r\n\r\n public override dispose() {\r\n super.dispose();\r\n dispose(this.uvParams);\r\n }\r\n}\r\n\r\n/** @internal */\r\nexport class RealityMeshGeometry extends IndexedGeometry implements IDisposable, RenderMemory.Consumer {\r\n public override get asRealityMesh(): RealityMeshGeometry | undefined { return this; }\r\n public override get isDisposed(): boolean { return this._realityMeshParams.isDisposed; }\r\n public get uvQParams() { return this._realityMeshParams.uvParams.params; }\r\n public override get hasFeatures(): boolean { return this._realityMeshParams.featureID !== undefined; }\r\n public override get supportsThematicDisplay() { return true; }\r\n public get overrideColorMix() { return .5; } // This could be a setting from either the mesh or the override if required.\r\n\r\n private constructor(private _realityMeshParams: RealityMeshGeometryParams, public textureParams: RealityTextureParams | undefined, private readonly _transform: Transform | undefined, public readonly baseColor: ColorDef | undefined, private _baseIsTransparent: boolean, private _isTerrain: boolean) {\r\n super(_realityMeshParams);\r\n }\r\n\r\n public override dispose() {\r\n super.dispose();\r\n dispose(this._realityMeshParams);\r\n }\r\n\r\n public static createFromTerrainMesh(terrainMesh: TerrainMeshPrimitive, transform: Transform | undefined) {\r\n const params = RealityMeshGeometryParams.createFromRealityMesh(terrainMesh);\r\n return params ? new RealityMeshGeometry(params, undefined, transform, undefined, false, true) : undefined;\r\n }\r\n\r\n public static createFromRealityMesh(realityMesh: RealityMeshPrimitive): RealityMeshGeometry | undefined {\r\n const params = RealityMeshGeometryParams.createFromRealityMesh(realityMesh);\r\n if (!params)\r\n return undefined;\r\n const texture = realityMesh.texture ? new TerrainTexture(realityMesh.texture, realityMesh.featureID, Vector2d.create(1.0, -1.0), Vector2d.create(0.0, 1.0), Range2d.createXYXY(0, 0, 1, 1), 0, 0) : undefined;\r\n\r\n return new RealityMeshGeometry(params, texture ? RealityTextureParams.create([texture]) : undefined, undefined, undefined, false, false);\r\n }\r\n\r\n public getRange(): Range3d {\r\n return Range3d.createXYZXYZ(this.qOrigin[0], this.qOrigin[1], this.qOrigin[2], this.qOrigin[0] + Quantization.rangeScale16 * this.qScale[0], this.qOrigin[1] + Quantization.rangeScale16 * this.qScale[1], this.qOrigin[2] + Quantization.rangeScale16 * this.qScale[2]);\r\n }\r\n\r\n public static createGraphic(system: RenderSystem, realityMesh: RealityMeshGeometry, featureTable: PackedFeatureTable, tileId: string | undefined, baseColor: ColorDef | undefined, baseTransparent: boolean, textures?: TerrainTexture[]): RenderGraphic | undefined {\r\n const meshes = [];\r\n if (textures === undefined)\r\n textures = [];\r\n\r\n const texturesPerMesh = System.instance.maxRealityImageryLayers;\r\n const layers = new Array<TerrainTexture[]>();\r\n let layerCount = 0;\r\n for (const texture of textures) {\r\n const layer = layers[texture.layerIndex];\r\n if (layer) {\r\n layer.push(texture);\r\n } else {\r\n layerCount++;\r\n layers[texture.layerIndex] = [texture];\r\n }\r\n }\r\n if (layerCount < 2) {\r\n // If only there is not more than one layer then we can group all of the textures into a single draw call.\r\n meshes.push(new RealityMeshGeometry(realityMesh._realityMeshParams, RealityTextureParams.create(textures), realityMesh._transform, baseColor, baseTransparent, realityMesh._isTerrain));\r\n } else {\r\n const primaryLayer = layers.shift()!;\r\n for (const primaryTexture of primaryLayer) {\r\n const targetRectangle = primaryTexture.targetRectangle;\r\n const overlapMinimum = 1.0E-5 * (targetRectangle.high.x - targetRectangle.low.x) * (targetRectangle.high.y - targetRectangle.low.y);\r\n const layerTextures = [primaryTexture];\r\n for (const secondaryLayer of layers) {\r\n if (!secondaryLayer)\r\n continue;\r\n for (const secondaryTexture of secondaryLayer) {\r\n const secondaryRectangle = secondaryTexture.targetRectangle;\r\n const overlap = targetRectangle.intersect(secondaryRectangle, scratchOverlapRange);\r\n if (!overlap.isNull && (overlap.high.x - overlap.low.x) * (overlap.high.y - overlap.low.y) > overlapMinimum) {\r\n const textureRange = Range2d.createXYXY(overlap.low.x, overlap.low.y, overlap.high.x, overlap.high.y);\r\n secondaryRectangle.worldToLocal(textureRange.low, textureRange.low);\r\n secondaryRectangle.worldToLocal(textureRange.high, textureRange.high);\r\n\r\n if (secondaryTexture.clipRectangle)\r\n textureRange.intersect(secondaryTexture.clipRectangle, textureRange);\r\n\r\n if (!textureRange.isNull)\r\n layerTextures.push(new TerrainTexture(secondaryTexture.texture, secondaryTexture.featureId, secondaryTexture.scale, secondaryTexture.translate, secondaryTexture.targetRectangle, secondaryTexture.layerIndex, secondaryTexture.transparency, textureRange));\r\n }\r\n }\r\n }\r\n layerTextures.length = Math.min(layerTextures.length, texturesPerMesh);\r\n meshes.push(new RealityMeshGeometry(realityMesh._realityMeshParams, RealityTextureParams.create(layerTextures), realityMesh._transform, baseColor, baseTransparent, realityMesh._isTerrain));\r\n }\r\n }\r\n\r\n if (meshes.length === 0)\r\n return undefined;\r\n\r\n const branch = new GraphicBranch(true);\r\n for (const mesh of meshes) {\r\n const primitive = Primitive.create(mesh);\r\n branch.add(system.createBatch(primitive!, featureTable, mesh.getRange(), { tileId }));\r\n }\r\n\r\n return system.createBranch(branch, realityMesh._transform ? realityMesh._transform : Transform.createIdentity());\r\n }\r\n\r\n public collectStatistics(stats: RenderMemory.Statistics): void {\r\n this._isTerrain ? stats.addTerrain(this._realityMeshParams.bytesUsed) : stats.addRealityMesh(this._realityMeshParams.bytesUsed);\r\n }\r\n\r\n public get techniqueId(): TechniqueId { return TechniqueId.RealityMesh; }\r\n\r\n public override getPass(target: Target) {\r\n if (target.isDrawingShadowMap)\r\n return \"none\";\r\n\r\n if (this._baseIsTransparent || (target.wantThematicDisplay && target.uniforms.thematic.wantIsoLines))\r\n return \"translucent\";\r\n\r\n return \"opaque\";\r\n }\r\n public get renderOrder(): RenderOrder { return RenderOrder.UnlitSurface; }\r\n\r\n public override draw(): void {\r\n this._params.buffers.bind();\r\n System.instance.context.drawElements(GL.PrimitiveType.Triangles, this._params.numIndices, GL.DataType.UnsignedShort, 0);\r\n this._params.buffers.unbind();\r\n }\r\n}\r\n"]}
@@ -10,7 +10,7 @@ import { DrawCommands, PrimitiveCommand } from "./DrawCommand";
10
10
  import { Batch, Branch, Graphic } from "./Graphic";
11
11
  import { Layer, LayerContainer } from "./Layer";
12
12
  import { Primitive } from "./Primitive";
13
- import { CompositeFlags, RenderPass } from "./RenderFlags";
13
+ import { CompositeFlags, Pass, RenderPass } from "./RenderFlags";
14
14
  import { TargetGraphics } from "./TargetGraphics";
15
15
  import { Target } from "./Target";
16
16
  /** A list of DrawCommands to be rendered, ordered by render pass.
@@ -52,7 +52,7 @@ export declare class RenderCommands implements Iterable<DrawCommands> {
52
52
  private addPickableDecorations;
53
53
  addBackground(gf?: Graphic): void;
54
54
  addSkyBox(gf?: Graphic): void;
55
- addPrimitiveCommand(command: PrimitiveCommand, pass?: RenderPass): void;
55
+ addPrimitiveCommand(command: PrimitiveCommand, pass?: Pass): void;
56
56
  getCommands(pass: RenderPass): DrawCommands;
57
57
  replaceCommands(pass: RenderPass, cmds: DrawCommands): void;
58
58
  addHiliteBranch(branch: Branch, pass: RenderPass): void;
@@ -1 +1 @@
1
- {"version":3,"file":"RenderCommands.d.ts","sourceRoot":"","sources":["../../../../src/render/webgl/RenderCommands.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"RenderCommands.d.ts","sourceRoot":"","sources":["../../../../src/render/webgl/RenderCommands.ts"],"names":[],"mappings":"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"}
@@ -13,6 +13,7 @@ import { PopBatchCommand, PopBranchCommand, PopClipCommand, PrimitiveCommand, Pu
13
13
  import { Branch, GraphicsArray } from "./Graphic";
14
14
  import { LayerCommandLists } from "./LayerCommands";
15
15
  import { MeshGraphic } from "./Mesh";
16
+ import { Pass } from "./RenderFlags";
16
17
  /** A list of DrawCommands to be rendered, ordered by render pass.
17
18
  * @internal
18
19
  */
@@ -148,67 +149,73 @@ export class RenderCommands {
148
149
  }
149
150
  addPrimitiveCommand(command, pass) {
150
151
  if (undefined === pass)
151
- pass = command.getRenderPass(this.target);
152
- if (255 /* None */ === pass) // Edges will return none if they don't want to draw at all (edges not turned on).
152
+ pass = command.getPass(this.target);
153
+ if ("none" === pass) // Edges will return none if they don't want to draw at all (edges not turned on).
153
154
  return;
154
155
  if (255 /* None */ !== this._forcedRenderPass) {
155
156
  // Add the command to the forced render pass (background).
156
157
  this.getCommands(this._forcedRenderPass).push(command);
157
158
  return;
158
159
  }
160
+ if (!command.hasFeatures) {
161
+ // Draw in general opaque pass so they are not in pick data.
162
+ switch (pass) {
163
+ case "opaque-linear":
164
+ case "opaque-planar":
165
+ pass = "opaque";
166
+ break;
167
+ case "opaque-planar-translucent":
168
+ pass = "opaque-translucent";
169
+ break;
170
+ }
171
+ }
159
172
  const haveFeatureOverrides = (this._opaqueOverrides || this._translucentOverrides) && command.opcode && command.hasFeatures;
160
- if (7 /* Translucent */ === pass && this._addTranslucentAsOpaque) {
173
+ if (Pass.rendersTranslucent(pass) && this._addTranslucentAsOpaque) {
161
174
  switch (command.renderOrder) {
162
175
  case 12 /* PlanarLitSurface */:
163
176
  case 11 /* PlanarUnlitSurface */:
164
177
  case 2 /* BlankingRegion */:
165
- pass = 3 /* OpaquePlanar */;
178
+ pass = "opaque-planar";
166
179
  break;
167
180
  case 4 /* LitSurface */:
168
181
  case 3 /* UnlitSurface */:
169
- pass = 4 /* OpaqueGeneral */;
182
+ pass = "opaque";
170
183
  break;
171
184
  default:
172
- pass = 2 /* OpaqueLinear */;
185
+ pass = "opaque-linear";
173
186
  break;
174
187
  }
175
188
  }
176
- switch (pass) {
177
- // If this command ordinarily renders translucent, but some features have been overridden to be opaque, must draw in both passes
178
- case 7 /* Translucent */:
179
- if (this._opaqueOverrides && haveFeatureOverrides && !command.primitive.cachedGeometry.alwaysRenderTranslucent) {
180
- let opaquePass;
181
- switch (command.renderOrder) {
182
- case 12 /* PlanarLitSurface */:
183
- case 11 /* PlanarUnlitSurface */:
184
- case 2 /* BlankingRegion */:
185
- opaquePass = 3 /* OpaquePlanar */;
186
- break;
187
- case 4 /* LitSurface */:
188
- case 3 /* UnlitSurface */:
189
- opaquePass = 4 /* OpaqueGeneral */;
190
- break;
191
- default:
192
- opaquePass = 2 /* OpaqueLinear */;
193
- break;
194
- }
195
- this.getCommands(opaquePass).push(command);
189
+ const isDoublePass = Pass.rendersOpaqueAndTranslucent(pass);
190
+ const renderTranslucentDuringOpaque = isDoublePass || (this._opaqueOverrides && haveFeatureOverrides);
191
+ if (renderTranslucentDuringOpaque && Pass.rendersTranslucent(pass) && !command.primitive.cachedGeometry.alwaysRenderTranslucent) {
192
+ let opaquePass;
193
+ if (Pass.rendersOpaqueAndTranslucent(pass)) {
194
+ opaquePass = Pass.toOpaquePass(pass);
195
+ }
196
+ else {
197
+ switch (command.renderOrder) {
198
+ case 12 /* PlanarLitSurface */:
199
+ case 11 /* PlanarUnlitSurface */:
200
+ case 2 /* BlankingRegion */:
201
+ opaquePass = 3 /* OpaquePlanar */;
202
+ break;
203
+ case 4 /* LitSurface */:
204
+ case 3 /* UnlitSurface */:
205
+ opaquePass = 4 /* OpaqueGeneral */;
206
+ break;
207
+ default:
208
+ opaquePass = 2 /* OpaqueLinear */;
209
+ break;
196
210
  }
197
- break;
198
- // If this command ordinarily renders opaque, but some features have been overridden to be translucent,
199
- // must draw in both passes unless we are overriding translucent geometry to draw in the opaque pass for _ReadPixels.
200
- case 2 /* OpaqueLinear */:
201
- case 3 /* OpaquePlanar */:
202
- // Want these items to draw in general opaque pass so they are not in pick data.
203
- if (!command.hasFeatures)
204
- pass = 4 /* OpaqueGeneral */;
205
- /* falls through */
206
- case 4 /* OpaqueGeneral */:
207
- if (this._translucentOverrides && haveFeatureOverrides && !this._addTranslucentAsOpaque)
208
- this.getCommands(7 /* Translucent */).push(command);
209
- break;
211
+ }
212
+ this.getCommands(opaquePass).push(command);
210
213
  }
211
- this.getCommands(pass).push(command);
214
+ const renderOpaqueDuringTranslucent = isDoublePass || (this._translucentOverrides && haveFeatureOverrides);
215
+ if (renderOpaqueDuringTranslucent && Pass.rendersOpaque(pass) && !this._addTranslucentAsOpaque)
216
+ this.getCommands(7 /* Translucent */).push(command);
217
+ if (!Pass.rendersOpaqueAndTranslucent(pass))
218
+ this.getCommands(Pass.toRenderPass(pass)).push(command);
212
219
  }
213
220
  getCommands(pass) {
214
221
  let idx = pass;
@@ -437,7 +444,7 @@ export class RenderCommands {
437
444
  // if (this.target.isGeometryOutsideActiveVolume(prim.cachedGeometry))
438
445
  // return;
439
446
  if (undefined !== this._frustumPlanes) { // See if we can cull this primitive.
440
- if (5 /* Classification */ === prim.getRenderPass(this.target)) {
447
+ if ("classification" === prim.getPass(this.target)) {
441
448
  const geom = prim.cachedGeometry;
442
449
  geom.computeRange(this._scratchRange);
443
450
  let frustum = Frustum.fromRange(this._scratchRange, this._scratchFrustum);
@@ -452,7 +459,7 @@ export class RenderCommands {
452
459
  if (255 /* None */ === this._forcedRenderPass && prim.isEdge) {
453
460
  const vf = this.target.currentViewFlags;
454
461
  if (vf.renderMode !== RenderMode.Wireframe && vf.hiddenEdges)
455
- this.addPrimitiveCommand(command, 8 /* HiddenEdge */);
462
+ this.getCommands(8 /* HiddenEdge */).push(command);
456
463
  }
457
464
  }
458
465
  addBranch(branch) {