@babylonjs/core 7.42.0 → 7.44.0

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 (317) hide show
  1. package/Actions/actionEvent.d.ts +4 -4
  2. package/Animations/animation.js +1 -1
  3. package/Animations/animation.js.map +1 -1
  4. package/Buffers/bufferUtils.d.ts +8 -1
  5. package/Buffers/bufferUtils.js +15 -0
  6. package/Buffers/bufferUtils.js.map +1 -1
  7. package/Culling/Helper/boundingInfoHelper.d.ts +2 -9
  8. package/Culling/Helper/boundingInfoHelper.js +2 -9
  9. package/Culling/Helper/boundingInfoHelper.js.map +1 -1
  10. package/Culling/Helper/computeShaderBoundingHelper.js +3 -4
  11. package/Culling/Helper/computeShaderBoundingHelper.js.map +1 -1
  12. package/Culling/Helper/transformFeedbackBoundingHelper.js +27 -64
  13. package/Culling/Helper/transformFeedbackBoundingHelper.js.map +1 -1
  14. package/Engines/Extensions/engine.multiRender.js +3 -2
  15. package/Engines/Extensions/engine.multiRender.js.map +1 -1
  16. package/Engines/WebGPU/webgpuCacheRenderPipeline.d.ts +1 -0
  17. package/Engines/WebGPU/webgpuCacheRenderPipeline.js +5 -0
  18. package/Engines/WebGPU/webgpuCacheRenderPipeline.js.map +1 -1
  19. package/Engines/WebGPU/webgpuTextureManager.js +6 -1
  20. package/Engines/WebGPU/webgpuTextureManager.js.map +1 -1
  21. package/Engines/abstractEngine.js +2 -2
  22. package/Engines/abstractEngine.js.map +1 -1
  23. package/Engines/engine.d.ts +5 -2
  24. package/FlowGraph/flowGraphConnection.d.ts +1 -1
  25. package/FrameGraph/Node/Blocks/Layers/glowLayerBlock.d.ts +64 -0
  26. package/FrameGraph/Node/Blocks/Layers/glowLayerBlock.js +147 -0
  27. package/FrameGraph/Node/Blocks/Layers/glowLayerBlock.js.map +1 -0
  28. package/FrameGraph/Node/Blocks/PostProcesses/basePostProcessBlock.d.ts +42 -0
  29. package/FrameGraph/Node/Blocks/PostProcesses/basePostProcessBlock.js +78 -0
  30. package/FrameGraph/Node/Blocks/PostProcesses/basePostProcessBlock.js.map +1 -0
  31. package/FrameGraph/Node/Blocks/PostProcesses/blackAndWhitePostProcessBlock.d.ts +3 -19
  32. package/FrameGraph/Node/Blocks/PostProcesses/blackAndWhitePostProcessBlock.js +3 -49
  33. package/FrameGraph/Node/Blocks/PostProcesses/blackAndWhitePostProcessBlock.js.map +1 -1
  34. package/FrameGraph/Node/Blocks/PostProcesses/bloomPostProcessBlock.d.ts +3 -19
  35. package/FrameGraph/Node/Blocks/PostProcesses/bloomPostProcessBlock.js +3 -49
  36. package/FrameGraph/Node/Blocks/PostProcesses/bloomPostProcessBlock.js.map +1 -1
  37. package/FrameGraph/Node/Blocks/PostProcesses/blurPostProcessBlock.d.ts +3 -19
  38. package/FrameGraph/Node/Blocks/PostProcesses/blurPostProcessBlock.js +3 -49
  39. package/FrameGraph/Node/Blocks/PostProcesses/blurPostProcessBlock.js.map +1 -1
  40. package/FrameGraph/Node/Blocks/PostProcesses/circleOfConfusionPostProcessBlock.d.ts +2 -17
  41. package/FrameGraph/Node/Blocks/PostProcesses/circleOfConfusionPostProcessBlock.js +3 -45
  42. package/FrameGraph/Node/Blocks/PostProcesses/circleOfConfusionPostProcessBlock.js.map +1 -1
  43. package/FrameGraph/Node/Blocks/PostProcesses/depthOfFieldPostProcessBlock.d.ts +2 -17
  44. package/FrameGraph/Node/Blocks/PostProcesses/depthOfFieldPostProcessBlock.js +3 -44
  45. package/FrameGraph/Node/Blocks/PostProcesses/depthOfFieldPostProcessBlock.js.map +1 -1
  46. package/FrameGraph/Node/Blocks/PostProcesses/extractHighlightsPostProcessBlock.d.ts +3 -19
  47. package/FrameGraph/Node/Blocks/PostProcesses/extractHighlightsPostProcessBlock.js +3 -49
  48. package/FrameGraph/Node/Blocks/PostProcesses/extractHighlightsPostProcessBlock.js.map +1 -1
  49. package/FrameGraph/Node/Blocks/PostProcesses/passPostProcessBlock.d.ts +47 -0
  50. package/FrameGraph/Node/Blocks/PostProcesses/passPostProcessBlock.js +65 -0
  51. package/FrameGraph/Node/Blocks/PostProcesses/passPostProcessBlock.js.map +1 -0
  52. package/FrameGraph/Node/Blocks/Rendering/baseObjectRendererBlock.js +0 -15
  53. package/FrameGraph/Node/Blocks/Rendering/baseObjectRendererBlock.js.map +1 -1
  54. package/FrameGraph/Node/Blocks/Rendering/baseShadowGeneratorBlock.d.ts +4 -0
  55. package/FrameGraph/Node/Blocks/Rendering/baseShadowGeneratorBlock.js +9 -0
  56. package/FrameGraph/Node/Blocks/Rendering/baseShadowGeneratorBlock.js.map +1 -1
  57. package/FrameGraph/Node/Blocks/Rendering/csmShadowGeneratorBlock.d.ts +1 -6
  58. package/FrameGraph/Node/Blocks/Rendering/csmShadowGeneratorBlock.js +0 -13
  59. package/FrameGraph/Node/Blocks/Rendering/csmShadowGeneratorBlock.js.map +1 -1
  60. package/FrameGraph/Node/Blocks/Rendering/shadowGeneratorBlock.js +0 -1
  61. package/FrameGraph/Node/Blocks/Rendering/shadowGeneratorBlock.js.map +1 -1
  62. package/FrameGraph/Node/Blocks/index.d.ts +2 -0
  63. package/FrameGraph/Node/Blocks/index.js +2 -0
  64. package/FrameGraph/Node/Blocks/index.js.map +1 -1
  65. package/FrameGraph/Node/nodeRenderGraphBlock.js +17 -0
  66. package/FrameGraph/Node/nodeRenderGraphBlock.js.map +1 -1
  67. package/FrameGraph/Passes/renderPass.d.ts +0 -8
  68. package/FrameGraph/Passes/renderPass.js +0 -10
  69. package/FrameGraph/Passes/renderPass.js.map +1 -1
  70. package/FrameGraph/Tasks/Layers/glowLayerTask.d.ts +57 -0
  71. package/FrameGraph/Tasks/Layers/glowLayerTask.js +173 -0
  72. package/FrameGraph/Tasks/Layers/glowLayerTask.js.map +1 -0
  73. package/FrameGraph/Tasks/PostProcesses/bloomMergeTask.js +1 -1
  74. package/FrameGraph/Tasks/PostProcesses/bloomMergeTask.js.map +1 -1
  75. package/FrameGraph/Tasks/PostProcesses/bloomTask.js +7 -0
  76. package/FrameGraph/Tasks/PostProcesses/bloomTask.js.map +1 -1
  77. package/FrameGraph/Tasks/PostProcesses/circleOfConfusionTask.js +1 -1
  78. package/FrameGraph/Tasks/PostProcesses/circleOfConfusionTask.js.map +1 -1
  79. package/FrameGraph/Tasks/PostProcesses/depthOfFieldBlurTask.js +1 -1
  80. package/FrameGraph/Tasks/PostProcesses/depthOfFieldBlurTask.js.map +1 -1
  81. package/FrameGraph/Tasks/PostProcesses/depthOfFieldMergeTask.js +5 -5
  82. package/FrameGraph/Tasks/PostProcesses/depthOfFieldMergeTask.js.map +1 -1
  83. package/FrameGraph/Tasks/PostProcesses/depthOfFieldTask.js +12 -4
  84. package/FrameGraph/Tasks/PostProcesses/depthOfFieldTask.js.map +1 -1
  85. package/FrameGraph/Tasks/PostProcesses/passTask.d.ts +29 -0
  86. package/FrameGraph/Tasks/PostProcesses/passTask.js +31 -0
  87. package/FrameGraph/Tasks/PostProcesses/passTask.js.map +1 -0
  88. package/FrameGraph/Tasks/PostProcesses/postProcessTask.js +1 -1
  89. package/FrameGraph/Tasks/PostProcesses/postProcessTask.js.map +1 -1
  90. package/FrameGraph/Tasks/Rendering/csmShadowGeneratorTask.d.ts +0 -8
  91. package/FrameGraph/Tasks/Rendering/csmShadowGeneratorTask.js +1 -17
  92. package/FrameGraph/Tasks/Rendering/csmShadowGeneratorTask.js.map +1 -1
  93. package/FrameGraph/Tasks/Rendering/geometryRendererTask.js +3 -0
  94. package/FrameGraph/Tasks/Rendering/geometryRendererTask.js.map +1 -1
  95. package/FrameGraph/Tasks/Rendering/objectRendererTask.d.ts +4 -6
  96. package/FrameGraph/Tasks/Rendering/objectRendererTask.js +20 -22
  97. package/FrameGraph/Tasks/Rendering/objectRendererTask.js.map +1 -1
  98. package/FrameGraph/Tasks/Rendering/shadowGeneratorTask.d.ts +7 -1
  99. package/FrameGraph/Tasks/Rendering/shadowGeneratorTask.js +21 -5
  100. package/FrameGraph/Tasks/Rendering/shadowGeneratorTask.js.map +1 -1
  101. package/FrameGraph/Tasks/Rendering/taaObjectRendererTask.js +4 -6
  102. package/FrameGraph/Tasks/Rendering/taaObjectRendererTask.js.map +1 -1
  103. package/FrameGraph/Tasks/Texture/copyToTextureTask.js +1 -1
  104. package/FrameGraph/Tasks/Texture/copyToTextureTask.js.map +1 -1
  105. package/FrameGraph/frameGraph.js +22 -11
  106. package/FrameGraph/frameGraph.js.map +1 -1
  107. package/FrameGraph/frameGraphRenderContext.d.ts +2 -1
  108. package/FrameGraph/frameGraphRenderContext.js +2 -1
  109. package/FrameGraph/frameGraphRenderContext.js.map +1 -1
  110. package/FrameGraph/frameGraphTask.d.ts +11 -1
  111. package/FrameGraph/frameGraphTask.js +8 -0
  112. package/FrameGraph/frameGraphTask.js.map +1 -1
  113. package/FrameGraph/frameGraphTextureManager.d.ts +9 -3
  114. package/FrameGraph/frameGraphTextureManager.js +10 -4
  115. package/FrameGraph/frameGraphTextureManager.js.map +1 -1
  116. package/FrameGraph/index.d.ts +2 -0
  117. package/FrameGraph/index.js +2 -0
  118. package/FrameGraph/index.js.map +1 -1
  119. package/Gizmos/planeRotationGizmo.js +10 -0
  120. package/Gizmos/planeRotationGizmo.js.map +1 -1
  121. package/Inputs/scene.inputManager.js +2 -2
  122. package/Inputs/scene.inputManager.js.map +1 -1
  123. package/Layers/effectLayer.d.ts +32 -33
  124. package/Layers/effectLayer.js +144 -530
  125. package/Layers/effectLayer.js.map +1 -1
  126. package/Layers/glowLayer.d.ts +14 -41
  127. package/Layers/glowLayer.js +92 -178
  128. package/Layers/glowLayer.js.map +1 -1
  129. package/Layers/highlightLayer.d.ts +0 -1
  130. package/Layers/highlightLayer.js +0 -1
  131. package/Layers/highlightLayer.js.map +1 -1
  132. package/Layers/index.d.ts +2 -0
  133. package/Layers/index.js +2 -0
  134. package/Layers/index.js.map +1 -1
  135. package/Layers/thinEffectLayer.d.ts +230 -0
  136. package/Layers/thinEffectLayer.js +734 -0
  137. package/Layers/thinEffectLayer.js.map +1 -0
  138. package/Layers/thinGlowLayer.d.ts +141 -0
  139. package/Layers/thinGlowLayer.js +292 -0
  140. package/Layers/thinGlowLayer.js.map +1 -0
  141. package/Lights/Shadows/shadowGenerator.js +40 -19
  142. package/Lights/Shadows/shadowGenerator.js.map +1 -1
  143. package/Materials/GreasedLine/greasedLinePluginMaterial.d.ts +6 -2
  144. package/Materials/GreasedLine/greasedLinePluginMaterial.js +8 -2
  145. package/Materials/GreasedLine/greasedLinePluginMaterial.js.map +1 -1
  146. package/Materials/GreasedLine/greasedLinePluginMaterialShadersGLSL.js +17 -11
  147. package/Materials/GreasedLine/greasedLinePluginMaterialShadersGLSL.js.map +1 -1
  148. package/Materials/GreasedLine/greasedLinePluginMaterialShadersWGSL.js +29 -15
  149. package/Materials/GreasedLine/greasedLinePluginMaterialShadersWGSL.js.map +1 -1
  150. package/Materials/GreasedLine/greasedLineSimpleMaterial.d.ts +1 -0
  151. package/Materials/GreasedLine/greasedLineSimpleMaterial.js +1 -0
  152. package/Materials/GreasedLine/greasedLineSimpleMaterial.js.map +1 -1
  153. package/Materials/Node/Blocks/Input/inputBlock.js +34 -2
  154. package/Materials/Node/Blocks/Input/inputBlock.js.map +1 -1
  155. package/Materials/Node/Blocks/PBR/reflectionBlock.js +1 -3
  156. package/Materials/Node/Blocks/PBR/reflectionBlock.js.map +1 -1
  157. package/Materials/Node/Blocks/PBR/subSurfaceBlock.js +3 -3
  158. package/Materials/Node/Blocks/PBR/subSurfaceBlock.js.map +1 -1
  159. package/Materials/Node/Blocks/Vertex/morphTargetsBlock.js +34 -24
  160. package/Materials/Node/Blocks/Vertex/morphTargetsBlock.js.map +1 -1
  161. package/Materials/Node/nodeMaterial.d.ts +14 -2
  162. package/Materials/Node/nodeMaterial.js +19 -5
  163. package/Materials/Node/nodeMaterial.js.map +1 -1
  164. package/Materials/PBR/pbrBaseMaterial.d.ts +5 -0
  165. package/Materials/PBR/pbrBaseMaterial.js +6 -0
  166. package/Materials/PBR/pbrBaseMaterial.js.map +1 -1
  167. package/Materials/Textures/Filtering/hdrFiltering.js +1 -0
  168. package/Materials/Textures/Filtering/hdrFiltering.js.map +1 -1
  169. package/Materials/Textures/Filtering/hdrIrradianceFiltering.d.ts +69 -0
  170. package/Materials/Textures/Filtering/hdrIrradianceFiltering.js +187 -0
  171. package/Materials/Textures/Filtering/hdrIrradianceFiltering.js.map +1 -0
  172. package/Materials/Textures/hdrCubeTexture.d.ts +5 -1
  173. package/Materials/Textures/hdrCubeTexture.js +29 -3
  174. package/Materials/Textures/hdrCubeTexture.js.map +1 -1
  175. package/Materials/Textures/index.d.ts +4 -0
  176. package/Materials/Textures/index.js +4 -0
  177. package/Materials/Textures/index.js.map +1 -1
  178. package/Materials/Textures/renderTargetTexture.d.ts +12 -0
  179. package/Materials/Textures/renderTargetTexture.js +29 -8
  180. package/Materials/Textures/renderTargetTexture.js.map +1 -1
  181. package/Materials/materialHelper.functions.d.ts +17 -1
  182. package/Materials/materialHelper.functions.js +76 -4
  183. package/Materials/materialHelper.functions.js.map +1 -1
  184. package/Materials/shaderMaterial.d.ts +5 -4
  185. package/Materials/shaderMaterial.js +28 -51
  186. package/Materials/shaderMaterial.js.map +1 -1
  187. package/Materials/standardMaterial.d.ts +6 -2
  188. package/Materials/standardMaterial.js +5 -2
  189. package/Materials/standardMaterial.js.map +1 -1
  190. package/Meshes/Builders/greasedLineBuilder.d.ts +1 -1
  191. package/Meshes/Builders/planeBuilder.js +2 -2
  192. package/Meshes/Builders/planeBuilder.js.map +1 -1
  193. package/Meshes/Compression/dracoCodec.d.ts +4 -4
  194. package/Meshes/Compression/dracoCodec.js.map +1 -1
  195. package/Meshes/Compression/dracoCompression.d.ts +1 -1
  196. package/Meshes/Compression/dracoCompression.js.map +1 -1
  197. package/Meshes/Compression/dracoCompressionWorker.d.ts +16 -30
  198. package/Meshes/Compression/dracoCompressionWorker.js +128 -22
  199. package/Meshes/Compression/dracoCompressionWorker.js.map +1 -1
  200. package/Meshes/Compression/dracoDecoder.d.ts +4 -9
  201. package/Meshes/Compression/dracoDecoder.js +5 -5
  202. package/Meshes/Compression/dracoDecoder.js.map +1 -1
  203. package/Meshes/Compression/dracoDecoder.types.d.ts +52 -0
  204. package/Meshes/Compression/dracoDecoder.types.js +2 -0
  205. package/Meshes/Compression/dracoDecoder.types.js.map +1 -0
  206. package/Meshes/Compression/dracoEncoder.d.ts +91 -0
  207. package/Meshes/Compression/dracoEncoder.js +239 -0
  208. package/Meshes/Compression/dracoEncoder.js.map +1 -0
  209. package/Meshes/Compression/dracoEncoder.types.d.ts +82 -0
  210. package/Meshes/Compression/dracoEncoder.types.js +2 -0
  211. package/Meshes/Compression/dracoEncoder.types.js.map +1 -0
  212. package/Meshes/Compression/index.d.ts +1 -0
  213. package/Meshes/Compression/index.js +1 -0
  214. package/Meshes/Compression/index.js.map +1 -1
  215. package/Meshes/GaussianSplatting/gaussianSplattingMesh.d.ts +92 -2
  216. package/Meshes/GaussianSplatting/gaussianSplattingMesh.js +308 -32
  217. package/Meshes/GaussianSplatting/gaussianSplattingMesh.js.map +1 -1
  218. package/Meshes/GreasedLine/greasedLineBaseMesh.js +4 -1
  219. package/Meshes/GreasedLine/greasedLineBaseMesh.js.map +1 -1
  220. package/Meshes/GreasedLine/greasedLineRibbonMesh.js +1 -1
  221. package/Meshes/GreasedLine/greasedLineRibbonMesh.js.map +1 -1
  222. package/Meshes/Node/Blocks/Textures/geometryTextureBlock.d.ts +1 -1
  223. package/Meshes/abstractMesh.d.ts +1 -2
  224. package/Meshes/abstractMesh.js +1 -2
  225. package/Meshes/abstractMesh.js.map +1 -1
  226. package/Meshes/linesMesh.js +2 -2
  227. package/Meshes/linesMesh.js.map +1 -1
  228. package/Meshes/mesh.d.ts +32 -5
  229. package/Meshes/mesh.js +56 -29
  230. package/Meshes/mesh.js.map +1 -1
  231. package/Meshes/subMesh.js +16 -3
  232. package/Meshes/subMesh.js.map +1 -1
  233. package/Meshes/transformNode.js +2 -0
  234. package/Meshes/transformNode.js.map +1 -1
  235. package/Misc/decorators.serialization.js +2 -0
  236. package/Misc/decorators.serialization.js.map +1 -1
  237. package/Misc/fileTools.js +14 -7
  238. package/Misc/fileTools.js.map +1 -1
  239. package/Misc/greasedLineTools.d.ts +1 -1
  240. package/Misc/logger.d.ts +2 -1
  241. package/Misc/logger.js +2 -1
  242. package/Misc/logger.js.map +1 -1
  243. package/Morph/morphTargetManager.d.ts +21 -0
  244. package/Morph/morphTargetManager.js +37 -2
  245. package/Morph/morphTargetManager.js.map +1 -1
  246. package/Particles/pointsCloudSystem.d.ts +3 -3
  247. package/Physics/v2/Plugins/havokPlugin.d.ts +2 -2
  248. package/PostProcesses/index.d.ts +1 -0
  249. package/PostProcesses/index.js +1 -0
  250. package/PostProcesses/index.js.map +1 -1
  251. package/PostProcesses/passPostProcess.d.ts +2 -3
  252. package/PostProcesses/passPostProcess.js +36 -48
  253. package/PostProcesses/passPostProcess.js.map +1 -1
  254. package/PostProcesses/thinPassPostProcess.d.ts +48 -0
  255. package/PostProcesses/thinPassPostProcess.js +113 -0
  256. package/PostProcesses/thinPassPostProcess.js.map +1 -0
  257. package/PostProcesses/volumetricLightScatteringPostProcess.js +15 -16
  258. package/PostProcesses/volumetricLightScatteringPostProcess.js.map +1 -1
  259. package/Rendering/IBLShadows/iblShadowsVoxelTracingPass.js +1 -1
  260. package/Rendering/IBLShadows/iblShadowsVoxelTracingPass.js.map +1 -1
  261. package/Rendering/depthRenderer.js +13 -15
  262. package/Rendering/depthRenderer.js.map +1 -1
  263. package/Rendering/geometryBufferRenderer.js +13 -15
  264. package/Rendering/geometryBufferRenderer.js.map +1 -1
  265. package/Rendering/iblCdfGenerator.d.ts +13 -5
  266. package/Rendering/iblCdfGenerator.js +67 -10
  267. package/Rendering/iblCdfGenerator.js.map +1 -1
  268. package/Rendering/objectRenderer.d.ts +9 -2
  269. package/Rendering/objectRenderer.js +44 -7
  270. package/Rendering/objectRenderer.js.map +1 -1
  271. package/Rendering/outlineRenderer.js +13 -15
  272. package/Rendering/outlineRenderer.js.map +1 -1
  273. package/Shaders/ShadersInclude/gaussianSplatting.js +6 -6
  274. package/Shaders/ShadersInclude/gaussianSplatting.js.map +1 -1
  275. package/Shaders/ShadersInclude/morphTargetsVertex.js +16 -4
  276. package/Shaders/ShadersInclude/morphTargetsVertex.js.map +1 -1
  277. package/Shaders/ShadersInclude/pbrBlockReflection.js +13 -8
  278. package/Shaders/ShadersInclude/pbrBlockReflection.js.map +1 -1
  279. package/Shaders/gaussianSplatting.vertex.js +2 -1
  280. package/Shaders/gaussianSplatting.vertex.js.map +1 -1
  281. package/Shaders/hdrIrradianceFiltering.fragment.d.ts +9 -0
  282. package/Shaders/hdrIrradianceFiltering.fragment.js +25 -0
  283. package/Shaders/hdrIrradianceFiltering.fragment.js.map +1 -0
  284. package/Shaders/hdrIrradianceFiltering.vertex.d.ts +5 -0
  285. package/Shaders/hdrIrradianceFiltering.vertex.js +15 -0
  286. package/Shaders/hdrIrradianceFiltering.vertex.js.map +1 -0
  287. package/Shaders/pbr.fragment.js +1 -3
  288. package/Shaders/pbr.fragment.js.map +1 -1
  289. package/ShadersWGSL/ShadersInclude/morphTargetsVertex.js +17 -5
  290. package/ShadersWGSL/ShadersInclude/morphTargetsVertex.js.map +1 -1
  291. package/ShadersWGSL/ShadersInclude/pbrBlockReflection.js +13 -8
  292. package/ShadersWGSL/ShadersInclude/pbrBlockReflection.js.map +1 -1
  293. package/ShadersWGSL/greasedLine.fragment.js +9 -3
  294. package/ShadersWGSL/greasedLine.fragment.js.map +1 -1
  295. package/ShadersWGSL/greasedLine.vertex.js +12 -2
  296. package/ShadersWGSL/greasedLine.vertex.js.map +1 -1
  297. package/ShadersWGSL/hdrIrradianceFiltering.fragment.d.ts +9 -0
  298. package/ShadersWGSL/hdrIrradianceFiltering.fragment.js +26 -0
  299. package/ShadersWGSL/hdrIrradianceFiltering.fragment.js.map +1 -0
  300. package/ShadersWGSL/hdrIrradianceFiltering.vertex.d.ts +5 -0
  301. package/ShadersWGSL/hdrIrradianceFiltering.vertex.js +16 -0
  302. package/ShadersWGSL/hdrIrradianceFiltering.vertex.js.map +1 -0
  303. package/ShadersWGSL/outline.fragment.js +1 -1
  304. package/ShadersWGSL/outline.fragment.js.map +1 -1
  305. package/ShadersWGSL/passCube.fragment.js +1 -1
  306. package/ShadersWGSL/passCube.fragment.js.map +1 -1
  307. package/ShadersWGSL/pbr.fragment.js +1 -3
  308. package/ShadersWGSL/pbr.fragment.js.map +1 -1
  309. package/XR/features/WebXRDepthSensing.d.ts +24 -2
  310. package/XR/features/WebXRDepthSensing.js +320 -26
  311. package/XR/features/WebXRDepthSensing.js.map +1 -1
  312. package/assetContainer.d.ts +43 -0
  313. package/assetContainer.js +67 -0
  314. package/assetContainer.js.map +1 -1
  315. package/package.json +1 -1
  316. package/scene.js +19 -8
  317. package/scene.js.map +1 -1
@@ -36,6 +36,10 @@ export declare class MaterialGreasedLineDefines extends MaterialDefines {
36
36
  * True if the line is in camera facing mode
37
37
  */
38
38
  GREASED_LINE_CAMERA_FACING: boolean;
39
+ /**
40
+ * True if the line uses offsets
41
+ */
42
+ GREASED_LINE_USE_OFFSETS: boolean;
39
43
  }
40
44
  /**
41
45
  * GreasedLinePluginMaterial for GreasedLineMesh/GreasedLineRibbonMesh.
@@ -154,9 +158,9 @@ export declare class GreasedLinePluginMaterial extends MaterialPluginBase implem
154
158
  * Prepare the defines
155
159
  * @param defines
156
160
  * @param _scene
157
- * @param _mesh
161
+ * @param mesh
158
162
  */
159
- prepareDefines(defines: MaterialGreasedLineDefines, _scene: Scene, _mesh: AbstractMesh): void;
163
+ prepareDefines(defines: MaterialGreasedLineDefines, _scene: Scene, mesh: AbstractMesh): void;
160
164
  /**
161
165
  * Get the class name
162
166
  * @returns class name
@@ -38,6 +38,11 @@ export class MaterialGreasedLineDefines extends MaterialDefines {
38
38
  */
39
39
  // eslint-disable-next-line @typescript-eslint/naming-convention
40
40
  this.GREASED_LINE_CAMERA_FACING = true;
41
+ /**
42
+ * True if the line uses offsets
43
+ */
44
+ // eslint-disable-next-line @typescript-eslint/naming-convention
45
+ this.GREASED_LINE_USE_OFFSETS = false;
41
46
  }
42
47
  }
43
48
  /**
@@ -225,14 +230,15 @@ export class GreasedLinePluginMaterial extends MaterialPluginBase {
225
230
  * Prepare the defines
226
231
  * @param defines
227
232
  * @param _scene
228
- * @param _mesh
233
+ * @param mesh
229
234
  */
230
- prepareDefines(defines, _scene, _mesh) {
235
+ prepareDefines(defines, _scene, mesh) {
231
236
  defines.GREASED_LINE_HAS_COLOR = !!this.color && !this.useColors;
232
237
  defines.GREASED_LINE_SIZE_ATTENUATION = this._sizeAttenuation;
233
238
  defines.GREASED_LINE_COLOR_DISTRIBUTION_TYPE_LINE = this._colorsDistributionType === 1 /* GreasedLineMeshColorDistributionType.COLOR_DISTRIBUTION_TYPE_LINE */;
234
239
  defines.GREASED_LINE_RIGHT_HANDED_COORDINATE_SYSTEM = _scene.useRightHandedSystem;
235
240
  defines.GREASED_LINE_CAMERA_FACING = this._cameraFacing;
241
+ defines.GREASED_LINE_USE_OFFSETS = !!mesh.offsets;
236
242
  }
237
243
  /**
238
244
  * Get the class name
@@ -1 +1 @@
1
- {"version":3,"file":"greasedLinePluginMaterial.js","sourceRoot":"","sources":["../../../../../dev/core/src/Materials/GreasedLine/greasedLinePluginMaterial.ts"],"names":[],"mappings":"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","sourcesContent":["import type { AbstractEngine } from \"../../Engines/abstractEngine\";\r\nimport { RawTexture } from \"../Textures/rawTexture\";\r\nimport { MaterialPluginBase } from \"../materialPluginBase\";\r\nimport type { Scene } from \"../../scene\";\r\nimport type { UniformBuffer } from \"../uniformBuffer\";\r\nimport { Vector2, TmpVectors } from \"../../Maths/math.vector\";\r\nimport type { Color3 } from \"../../Maths/math.color\";\r\nimport type { Nullable } from \"../../types\";\r\nimport type { Material } from \"../material\";\r\nimport { MaterialDefines } from \"../materialDefines\";\r\nimport type { AbstractMesh } from \"../../Meshes/abstractMesh\";\r\nimport type { BaseTexture } from \"../Textures/baseTexture\";\r\nimport { RegisterClass } from \"../../Misc/typeStore\";\r\nimport { ShaderLanguage } from \"../shaderLanguage\";\r\n\r\nimport type { GreasedLineMaterialOptions, IGreasedLineMaterial } from \"./greasedLineMaterialInterfaces\";\r\nimport { GreasedLineMeshColorDistributionType, GreasedLineMeshColorMode } from \"./greasedLineMaterialInterfaces\";\r\nimport { GreasedLineMaterialDefaults } from \"./greasedLineMaterialDefaults\";\r\nimport { GreasedLineTools } from \"../../Misc/greasedLineTools\";\r\nimport { GetCustomCode as getCustomCodeGLSL } from \"./greasedLinePluginMaterialShadersGLSL\";\r\nimport { GetCustomCode as getCustomCodeWGSL } from \"./greasedLinePluginMaterialShadersWGSL\";\r\n\r\n/**\r\n * @internal\r\n */\r\nexport class MaterialGreasedLineDefines extends MaterialDefines {\r\n /**\r\n * The material has a color option specified\r\n */\r\n // eslint-disable-next-line @typescript-eslint/naming-convention\r\n GREASED_LINE_HAS_COLOR = false;\r\n /**\r\n * The material's size attenuation optiom\r\n */\r\n // eslint-disable-next-line @typescript-eslint/naming-convention\r\n GREASED_LINE_SIZE_ATTENUATION = false;\r\n /**\r\n * The type of color distribution is set to line this value equals to true.\r\n */\r\n // eslint-disable-next-line @typescript-eslint/naming-convention\r\n GREASED_LINE_COLOR_DISTRIBUTION_TYPE_LINE = false;\r\n /**\r\n * True if scene is in right handed coordinate system.\r\n */\r\n // eslint-disable-next-line @typescript-eslint/naming-convention\r\n GREASED_LINE_RIGHT_HANDED_COORDINATE_SYSTEM = false;\r\n\r\n /**\r\n * True if the line is in camera facing mode\r\n */\r\n // eslint-disable-next-line @typescript-eslint/naming-convention\r\n GREASED_LINE_CAMERA_FACING = true;\r\n}\r\n\r\n/**\r\n * GreasedLinePluginMaterial for GreasedLineMesh/GreasedLineRibbonMesh.\r\n * Use the GreasedLineBuilder.CreateGreasedLineMaterial function to create and instance of this class.\r\n */\r\nexport class GreasedLinePluginMaterial extends MaterialPluginBase implements IGreasedLineMaterial {\r\n /**\r\n * Plugin name\r\n */\r\n public static readonly GREASED_LINE_MATERIAL_NAME = \"GreasedLinePluginMaterial\";\r\n\r\n /**\r\n * Force all the greased lines to compile to glsl even on WebGPU engines.\r\n * False by default. This is mostly meant for backward compatibility.\r\n */\r\n public static ForceGLSL = false;\r\n\r\n /**\r\n * Whether to use the colors option to colorize the line\r\n */\r\n public useColors: boolean;\r\n\r\n /**\r\n * Normalized value of how much of the line will be visible\r\n * 0 - 0% of the line will be visible\r\n * 1 - 100% of the line will be visible\r\n */\r\n public visibility: number;\r\n\r\n /**\r\n * Dash offset\r\n */\r\n public dashOffset: number;\r\n\r\n /**\r\n * Length of the dash. 0 to 1. 0.5 means half empty, half drawn.\r\n */\r\n public dashRatio: number;\r\n\r\n /**\r\n * Line base width. At each point the line width is calculated by widths[pointIndex] * width\r\n */\r\n public width: number;\r\n\r\n /**\r\n * The type of sampling of the colors texture. The values are the same when using with textures.\r\n */\r\n public colorsSampling: number;\r\n\r\n /**\r\n * Turns on/off dash mode\r\n */\r\n public useDash: boolean;\r\n\r\n /**\r\n * The mixing mode of the color paramater. Default value is GreasedLineMeshColorMode.SET\r\n * @see GreasedLineMeshColorMode\r\n */\r\n public colorMode: GreasedLineMeshColorMode;\r\n\r\n /**\r\n * You can provide a colorsTexture to use instead of one generated from the 'colors' option\r\n */\r\n public colorsTexture: Nullable<RawTexture> = null;\r\n\r\n private _scene: Scene;\r\n private _dashCount: number;\r\n private _dashArray: number;\r\n private _color: Nullable<Color3>;\r\n private _colors: Nullable<Color3[]>;\r\n private _colorsDistributionType: GreasedLineMeshColorDistributionType;\r\n private _resolution: Vector2;\r\n private _aspect: number;\r\n private _sizeAttenuation: boolean;\r\n\r\n private _cameraFacing: boolean;\r\n\r\n private _engine: AbstractEngine;\r\n\r\n private _forceGLSL = false;\r\n\r\n /**\r\n * Gets a boolean indicating that the plugin is compatible with a given shader language\r\n * @param _shaderLanguage The shader language to use\r\n * @returns true if the plugin is compatible with the shader language. Return always true since both GLSL and WGSL are supported\r\n */\r\n public override isCompatible(_shaderLanguage: ShaderLanguage): boolean {\r\n return true;\r\n }\r\n\r\n /**\r\n * Creates a new instance of the GreasedLinePluginMaterial\r\n * @param material Base material for the plugin\r\n * @param scene The scene\r\n * @param options Plugin options\r\n */\r\n constructor(material: Material, scene?: Scene, options?: GreasedLineMaterialOptions) {\r\n options = options || {\r\n color: GreasedLineMaterialDefaults.DEFAULT_COLOR,\r\n };\r\n\r\n const defines = new MaterialGreasedLineDefines();\r\n defines.GREASED_LINE_HAS_COLOR = !!options.color && !options.useColors;\r\n defines.GREASED_LINE_SIZE_ATTENUATION = options.sizeAttenuation ?? false;\r\n defines.GREASED_LINE_COLOR_DISTRIBUTION_TYPE_LINE = options.colorDistributionType === GreasedLineMeshColorDistributionType.COLOR_DISTRIBUTION_TYPE_LINE;\r\n defines.GREASED_LINE_RIGHT_HANDED_COORDINATE_SYSTEM = (scene ?? material.getScene()).useRightHandedSystem;\r\n defines.GREASED_LINE_CAMERA_FACING = options.cameraFacing ?? true;\r\n super(material, GreasedLinePluginMaterial.GREASED_LINE_MATERIAL_NAME, 200, defines, true, true);\r\n\r\n this._forceGLSL = options?.forceGLSL || GreasedLinePluginMaterial.ForceGLSL;\r\n\r\n this._scene = scene ?? material.getScene();\r\n this._engine = this._scene.getEngine();\r\n\r\n this._cameraFacing = options.cameraFacing ?? true;\r\n\r\n this.visibility = options.visibility ?? 1;\r\n this.useDash = options.useDash ?? false;\r\n this.dashRatio = options.dashRatio ?? 0.5;\r\n this.dashOffset = options.dashOffset ?? 0;\r\n this.width = options.width ? options.width : options.sizeAttenuation ? GreasedLineMaterialDefaults.DEFAULT_WIDTH_ATTENUATED : GreasedLineMaterialDefaults.DEFAULT_WIDTH;\r\n this._sizeAttenuation = options.sizeAttenuation ?? false;\r\n this.colorMode = options.colorMode ?? GreasedLineMeshColorMode.COLOR_MODE_SET;\r\n this._color = options.color ?? null;\r\n this.useColors = options.useColors ?? false;\r\n this._colorsDistributionType = options.colorDistributionType ?? GreasedLineMeshColorDistributionType.COLOR_DISTRIBUTION_TYPE_SEGMENT;\r\n this.colorsSampling = options.colorsSampling ?? RawTexture.NEAREST_NEAREST;\r\n this._colors = options.colors ?? null;\r\n\r\n this.dashCount = options.dashCount ?? 1; // calculate the _dashArray value, call the setter\r\n this.resolution = options.resolution ?? new Vector2(this._engine.getRenderWidth(), this._engine.getRenderHeight()); // calculate aspect call the setter\r\n\r\n if (options.colorsTexture) {\r\n this.colorsTexture = options.colorsTexture; // colorsTexture from options takes precedence\r\n } else {\r\n if (this._colors) {\r\n this.colorsTexture = GreasedLineTools.CreateColorsTexture(`${material.name}-colors-texture`, this._colors, this.colorsSampling, this._scene);\r\n } else {\r\n this._color = this._color ?? GreasedLineMaterialDefaults.DEFAULT_COLOR;\r\n GreasedLineTools.PrepareEmptyColorsTexture(this._scene);\r\n }\r\n }\r\n\r\n this._engine.onDisposeObservable.add(() => {\r\n GreasedLineTools.DisposeEmptyColorsTexture();\r\n });\r\n }\r\n\r\n /**\r\n * Get the shader attributes\r\n * @param attributes array which will be filled with the attributes\r\n */\r\n override getAttributes(attributes: string[]) {\r\n attributes.push(\"grl_offsets\");\r\n attributes.push(\"grl_widths\");\r\n attributes.push(\"grl_colorPointers\");\r\n attributes.push(\"grl_counters\");\r\n if (this._cameraFacing) {\r\n attributes.push(\"grl_previousAndSide\");\r\n attributes.push(\"grl_nextAndCounters\");\r\n } else {\r\n attributes.push(\"grl_slopes\");\r\n }\r\n }\r\n\r\n /**\r\n * Get the shader samplers\r\n * @param samplers\r\n */\r\n override getSamplers(samplers: string[]) {\r\n samplers.push(\"grl_colors\");\r\n }\r\n\r\n /**\r\n * Get the shader textures\r\n * @param activeTextures array which will be filled with the textures\r\n */\r\n public override getActiveTextures(activeTextures: BaseTexture[]): void {\r\n if (this.colorsTexture) {\r\n activeTextures.push(this.colorsTexture);\r\n }\r\n }\r\n\r\n /**\r\n * Get the shader uniforms\r\n * @param shaderLanguage The shader language to use\r\n * @returns uniforms\r\n */\r\n override getUniforms(shaderLanguage = ShaderLanguage.GLSL) {\r\n const ubo = [\r\n { name: \"grl_singleColor\", size: 3, type: \"vec3\" },\r\n { name: \"grl_textureSize\", size: 2, type: \"vec2\" },\r\n { name: \"grl_dashOptions\", size: 4, type: \"vec4\" },\r\n { name: \"grl_colorMode_visibility_colorsWidth_useColors\", size: 4, type: \"vec4\" },\r\n ];\r\n if (this._cameraFacing) {\r\n ubo.push({ name: \"grl_projection\", size: 16, type: \"mat4\" }, { name: \"grl_aspect_resolution_lineWidth\", size: 4, type: \"vec4\" });\r\n }\r\n\r\n if (shaderLanguage === ShaderLanguage.WGSL) {\r\n ubo.push({\r\n name: \"viewProjection\",\r\n size: 16,\r\n type: \"mat4\",\r\n });\r\n }\r\n\r\n return {\r\n ubo,\r\n vertex:\r\n this._cameraFacing && this._isGLSL(shaderLanguage)\r\n ? `\r\n uniform vec4 grl_aspect_resolution_lineWidth;\r\n uniform mat4 grl_projection;\r\n `\r\n : \"\",\r\n fragment: this._isGLSL(shaderLanguage)\r\n ? `\r\n uniform vec4 grl_dashOptions;\r\n uniform vec2 grl_textureSize;\r\n uniform vec4 grl_colorMode_visibility_colorsWidth_useColors;\r\n uniform vec3 grl_singleColor;\r\n `\r\n : \"\",\r\n };\r\n }\r\n\r\n // only getter, it doesn't make sense to use this plugin on a mesh other than GreasedLineMesh\r\n // and it doesn't make sense to disable it on the mesh\r\n get isEnabled() {\r\n return true;\r\n }\r\n\r\n /**\r\n * Bind the uniform buffer\r\n * @param uniformBuffer\r\n */\r\n override bindForSubMesh(uniformBuffer: UniformBuffer) {\r\n if (this._cameraFacing) {\r\n uniformBuffer.updateMatrix(\"grl_projection\", this._scene.getProjectionMatrix());\r\n !this._isGLSL(this._material.shaderLanguage) && uniformBuffer.updateMatrix(\"viewProjection\", this._scene.getTransformMatrix());\r\n\r\n const resolutionLineWidth = TmpVectors.Vector4[0];\r\n resolutionLineWidth.x = this._aspect;\r\n resolutionLineWidth.y = this._resolution.x;\r\n resolutionLineWidth.z = this._resolution.y;\r\n resolutionLineWidth.w = this.width;\r\n uniformBuffer.updateVector4(\"grl_aspect_resolution_lineWidth\", resolutionLineWidth);\r\n }\r\n\r\n const dashOptions = TmpVectors.Vector4[0];\r\n dashOptions.x = GreasedLineTools.BooleanToNumber(this.useDash);\r\n dashOptions.y = this._dashArray;\r\n dashOptions.z = this.dashOffset;\r\n dashOptions.w = this.dashRatio;\r\n uniformBuffer.updateVector4(\"grl_dashOptions\", dashOptions);\r\n\r\n const colorModeVisibilityColorsWidthUseColors = TmpVectors.Vector4[1];\r\n colorModeVisibilityColorsWidthUseColors.x = this.colorMode;\r\n colorModeVisibilityColorsWidthUseColors.y = this.visibility;\r\n colorModeVisibilityColorsWidthUseColors.z = this.colorsTexture ? this.colorsTexture.getSize().width : 0;\r\n colorModeVisibilityColorsWidthUseColors.w = GreasedLineTools.BooleanToNumber(this.useColors);\r\n uniformBuffer.updateVector4(\"grl_colorMode_visibility_colorsWidth_useColors\", colorModeVisibilityColorsWidthUseColors);\r\n\r\n if (this._color) {\r\n uniformBuffer.updateColor3(\"grl_singleColor\", this._color);\r\n }\r\n const texture = this.colorsTexture ?? GreasedLineMaterialDefaults.EmptyColorsTexture;\r\n uniformBuffer.setTexture(\"grl_colors\", texture);\r\n uniformBuffer.updateFloat2(\"grl_textureSize\", texture?.getSize().width ?? 1, texture?.getSize().height ?? 1);\r\n }\r\n\r\n /**\r\n * Prepare the defines\r\n * @param defines\r\n * @param _scene\r\n * @param _mesh\r\n */\r\n override prepareDefines(defines: MaterialGreasedLineDefines, _scene: Scene, _mesh: AbstractMesh) {\r\n defines.GREASED_LINE_HAS_COLOR = !!this.color && !this.useColors;\r\n defines.GREASED_LINE_SIZE_ATTENUATION = this._sizeAttenuation;\r\n defines.GREASED_LINE_COLOR_DISTRIBUTION_TYPE_LINE = this._colorsDistributionType === GreasedLineMeshColorDistributionType.COLOR_DISTRIBUTION_TYPE_LINE;\r\n defines.GREASED_LINE_RIGHT_HANDED_COORDINATE_SYSTEM = _scene.useRightHandedSystem;\r\n defines.GREASED_LINE_CAMERA_FACING = this._cameraFacing;\r\n }\r\n\r\n /**\r\n * Get the class name\r\n * @returns class name\r\n */\r\n override getClassName() {\r\n return GreasedLinePluginMaterial.GREASED_LINE_MATERIAL_NAME;\r\n }\r\n\r\n /**\r\n * Get shader code\r\n * @param shaderType vertex/fragment\r\n * @param shaderLanguage GLSL or WGSL\r\n * @returns shader code\r\n */\r\n override getCustomCode(shaderType: string, shaderLanguage = ShaderLanguage.GLSL): Nullable<{ [pointName: string]: string }> {\r\n if (this._isGLSL(shaderLanguage)) {\r\n return getCustomCodeGLSL(shaderType, this._cameraFacing);\r\n }\r\n return getCustomCodeWGSL(shaderType, this._cameraFacing);\r\n }\r\n\r\n /**\r\n * Disposes the plugin material.\r\n */\r\n public override dispose(): void {\r\n this.colorsTexture?.dispose();\r\n super.dispose();\r\n }\r\n\r\n /**\r\n * Returns the colors used to colorize the line\r\n */\r\n get colors() {\r\n return this._colors;\r\n }\r\n\r\n /**\r\n * Sets the colors used to colorize the line\r\n */\r\n set colors(value: Nullable<Color3[]>) {\r\n this.setColors(value);\r\n }\r\n\r\n /**\r\n * Creates or updates the colors texture\r\n * @param colors color table RGBA\r\n * @param lazy if lazy, the colors are not updated\r\n * @param forceNewTexture force creation of a new texture\r\n */\r\n public setColors(colors: Nullable<Color3[]>, lazy = false, forceNewTexture = false): void {\r\n const origColorsCount = this._colors?.length ?? 0;\r\n\r\n this._colors = colors;\r\n\r\n if (colors === null || colors.length === 0) {\r\n this.colorsTexture?.dispose();\r\n return;\r\n }\r\n\r\n if (lazy && !forceNewTexture) {\r\n return;\r\n }\r\n\r\n if (this.colorsTexture && origColorsCount === colors.length && !forceNewTexture) {\r\n const colorArray = GreasedLineTools.Color3toRGBAUint8(colors);\r\n this.colorsTexture.update(colorArray);\r\n } else {\r\n this.colorsTexture?.dispose();\r\n this.colorsTexture = GreasedLineTools.CreateColorsTexture(`${this._material.name}-colors-texture`, colors, this.colorsSampling, this._scene);\r\n }\r\n }\r\n\r\n /**\r\n * Updates the material. Use when material created in lazy mode.\r\n */\r\n public updateLazy() {\r\n if (this._colors) {\r\n this.setColors(this._colors, false, true);\r\n }\r\n }\r\n\r\n /**\r\n * Gets the number of dashes in the line\r\n */\r\n get dashCount() {\r\n return this._dashCount;\r\n }\r\n /**\r\n * Sets the number of dashes in the line\r\n * @param value dash\r\n */\r\n set dashCount(value: number) {\r\n this._dashCount = value;\r\n this._dashArray = 1 / value;\r\n }\r\n\r\n /**\r\n * If set to true the line will be rendered always with the same width regardless how far it is located from the camera.\r\n * Not supported for non camera facing lines.\r\n */\r\n get sizeAttenuation() {\r\n return this._sizeAttenuation;\r\n }\r\n\r\n /**\r\n * Turn on/off size attenuation of the width option and widths array.\r\n * Not supported for non camera facing lines.\r\n * @param value If set to true the line will be rendered always with the same width regardless how far it is located from the camera.\r\n */\r\n set sizeAttenuation(value: boolean) {\r\n this._sizeAttenuation = value;\r\n this.markAllDefinesAsDirty();\r\n }\r\n\r\n /**\r\n * Gets the color of the line\r\n */\r\n get color() {\r\n return this._color;\r\n }\r\n\r\n /**\r\n * Sets the color of the line\r\n * @param value Color3 or null to clear the color. You need to clear the color if you use colors and useColors = true\r\n */\r\n set color(value: Nullable<Color3>) {\r\n this.setColor(value);\r\n }\r\n\r\n /**\r\n * Sets the color of the line. If set the whole line will be mixed with this color according to the colorMode option.\r\n * @param value color\r\n * @param doNotMarkDirty if true, the material will not be marked as dirty\r\n */\r\n public setColor(value: Nullable<Color3>, doNotMarkDirty = false) {\r\n if ((this._color === null && value !== null) || (this._color !== null && value === null)) {\r\n this._color = value;\r\n !doNotMarkDirty && this.markAllDefinesAsDirty();\r\n } else {\r\n this._color = value;\r\n }\r\n }\r\n\r\n /**\r\n * Gets the color distributiopn type\r\n */\r\n get colorsDistributionType() {\r\n return this._colorsDistributionType;\r\n }\r\n\r\n /**\r\n * Sets the color distribution type\r\n * @see GreasedLineMeshColorDistributionType\r\n * @param value color distribution type\r\n */\r\n set colorsDistributionType(value: GreasedLineMeshColorDistributionType) {\r\n this._colorsDistributionType = value;\r\n this.markAllDefinesAsDirty();\r\n }\r\n\r\n /**\r\n * Gets the resolution\r\n */\r\n get resolution() {\r\n return this._resolution;\r\n }\r\n\r\n /**\r\n * Sets the resolution\r\n * @param value resolution of the screen for GreasedLine\r\n */\r\n set resolution(value: Vector2) {\r\n this._aspect = value.x / value.y;\r\n this._resolution = value;\r\n }\r\n\r\n /**\r\n * Serializes this plugin material\r\n * @returns serializationObjec\r\n */\r\n public override serialize(): any {\r\n const serializationObject = super.serialize();\r\n\r\n const greasedLineMaterialOptions: GreasedLineMaterialOptions = {\r\n colorDistributionType: this._colorsDistributionType,\r\n colorsSampling: this.colorsSampling,\r\n colorMode: this.colorMode,\r\n dashCount: this._dashCount,\r\n dashOffset: this.dashOffset,\r\n dashRatio: this.dashRatio,\r\n resolution: this._resolution,\r\n sizeAttenuation: this._sizeAttenuation,\r\n useColors: this.useColors,\r\n useDash: this.useDash,\r\n visibility: this.visibility,\r\n width: this.width,\r\n };\r\n\r\n this._colors && (greasedLineMaterialOptions.colors = this._colors);\r\n this._color && (greasedLineMaterialOptions.color = this._color);\r\n\r\n serializationObject.greasedLineMaterialOptions = greasedLineMaterialOptions;\r\n\r\n return serializationObject;\r\n }\r\n\r\n /**\r\n * Parses a serialized objects\r\n * @param source serialized object\r\n * @param scene scene\r\n * @param rootUrl root url for textures\r\n */\r\n public override parse(source: any, scene: Scene, rootUrl: string): void {\r\n super.parse(source, scene, rootUrl);\r\n const greasedLineMaterialOptions = <GreasedLineMaterialOptions>source.greasedLineMaterialOptions;\r\n\r\n this.colorsTexture?.dispose();\r\n\r\n greasedLineMaterialOptions.color && this.setColor(greasedLineMaterialOptions.color, true);\r\n greasedLineMaterialOptions.colorDistributionType && (this.colorsDistributionType = greasedLineMaterialOptions.colorDistributionType);\r\n greasedLineMaterialOptions.colors && (this.colors = greasedLineMaterialOptions.colors);\r\n greasedLineMaterialOptions.colorsSampling && (this.colorsSampling = greasedLineMaterialOptions.colorsSampling);\r\n greasedLineMaterialOptions.colorMode && (this.colorMode = greasedLineMaterialOptions.colorMode);\r\n greasedLineMaterialOptions.useColors && (this.useColors = greasedLineMaterialOptions.useColors);\r\n greasedLineMaterialOptions.visibility && (this.visibility = greasedLineMaterialOptions.visibility);\r\n greasedLineMaterialOptions.useDash && (this.useDash = greasedLineMaterialOptions.useDash);\r\n greasedLineMaterialOptions.dashCount && (this.dashCount = greasedLineMaterialOptions.dashCount);\r\n greasedLineMaterialOptions.dashRatio && (this.dashRatio = greasedLineMaterialOptions.dashRatio);\r\n greasedLineMaterialOptions.dashOffset && (this.dashOffset = greasedLineMaterialOptions.dashOffset);\r\n greasedLineMaterialOptions.width && (this.width = greasedLineMaterialOptions.width);\r\n greasedLineMaterialOptions.sizeAttenuation && (this.sizeAttenuation = greasedLineMaterialOptions.sizeAttenuation);\r\n greasedLineMaterialOptions.resolution && (this.resolution = greasedLineMaterialOptions.resolution);\r\n\r\n if (this.colors) {\r\n this.colorsTexture = GreasedLineTools.CreateColorsTexture(`${this._material.name}-colors-texture`, this.colors, this.colorsSampling, scene);\r\n } else {\r\n GreasedLineTools.PrepareEmptyColorsTexture(scene);\r\n }\r\n\r\n this.markAllDefinesAsDirty();\r\n }\r\n\r\n /**\r\n * Makes a duplicate of the current configuration into another one.\r\n * @param plugin define the config where to copy the info\r\n */\r\n public override copyTo(plugin: MaterialPluginBase): void {\r\n const dest = plugin as GreasedLinePluginMaterial;\r\n\r\n dest.colorsTexture?.dispose();\r\n\r\n if (this._colors) {\r\n dest.colorsTexture = GreasedLineTools.CreateColorsTexture(`${dest._material.name}-colors-texture`, this._colors, dest.colorsSampling, this._scene);\r\n }\r\n\r\n dest.setColor(this.color, true);\r\n dest.colorsDistributionType = this.colorsDistributionType;\r\n dest.colorsSampling = this.colorsSampling;\r\n dest.colorMode = this.colorMode;\r\n dest.useColors = this.useColors;\r\n dest.visibility = this.visibility;\r\n dest.useDash = this.useDash;\r\n dest.dashCount = this.dashCount;\r\n dest.dashRatio = this.dashRatio;\r\n dest.dashOffset = this.dashOffset;\r\n dest.width = this.width;\r\n dest.sizeAttenuation = this.sizeAttenuation;\r\n dest.resolution = this.resolution;\r\n\r\n dest.markAllDefinesAsDirty();\r\n }\r\n\r\n private _isGLSL(shaderLanguage: ShaderLanguage) {\r\n return shaderLanguage === ShaderLanguage.GLSL || this._forceGLSL;\r\n }\r\n}\r\n\r\nRegisterClass(`BABYLON.${GreasedLinePluginMaterial.GREASED_LINE_MATERIAL_NAME}`, GreasedLinePluginMaterial);\r\n"]}
1
+ {"version":3,"file":"greasedLinePluginMaterial.js","sourceRoot":"","sources":["../../../../../dev/core/src/Materials/GreasedLine/greasedLinePluginMaterial.ts"],"names":[],"mappings":"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","sourcesContent":["import type { AbstractEngine } from \"../../Engines/abstractEngine\";\r\nimport { RawTexture } from \"../Textures/rawTexture\";\r\nimport { MaterialPluginBase } from \"../materialPluginBase\";\r\nimport type { Scene } from \"../../scene\";\r\nimport type { UniformBuffer } from \"../uniformBuffer\";\r\nimport { Vector2, TmpVectors } from \"../../Maths/math.vector\";\r\nimport type { Color3 } from \"../../Maths/math.color\";\r\nimport type { Nullable } from \"../../types\";\r\nimport type { Material } from \"../material\";\r\nimport { MaterialDefines } from \"../materialDefines\";\r\nimport type { AbstractMesh } from \"../../Meshes/abstractMesh\";\r\nimport type { BaseTexture } from \"../Textures/baseTexture\";\r\nimport { RegisterClass } from \"../../Misc/typeStore\";\r\nimport { ShaderLanguage } from \"../shaderLanguage\";\r\n\r\nimport type { GreasedLineMaterialOptions, IGreasedLineMaterial } from \"./greasedLineMaterialInterfaces\";\r\nimport { GreasedLineMeshColorDistributionType, GreasedLineMeshColorMode } from \"./greasedLineMaterialInterfaces\";\r\nimport { GreasedLineMaterialDefaults } from \"./greasedLineMaterialDefaults\";\r\nimport { GreasedLineTools } from \"../../Misc/greasedLineTools\";\r\nimport { GetCustomCode as getCustomCodeGLSL } from \"./greasedLinePluginMaterialShadersGLSL\";\r\nimport { GetCustomCode as getCustomCodeWGSL } from \"./greasedLinePluginMaterialShadersWGSL\";\r\nimport type { GreasedLineBaseMesh } from \"../../Meshes\";\r\n\r\n/**\r\n * @internal\r\n */\r\nexport class MaterialGreasedLineDefines extends MaterialDefines {\r\n /**\r\n * The material has a color option specified\r\n */\r\n // eslint-disable-next-line @typescript-eslint/naming-convention\r\n GREASED_LINE_HAS_COLOR = false;\r\n /**\r\n * The material's size attenuation optiom\r\n */\r\n // eslint-disable-next-line @typescript-eslint/naming-convention\r\n GREASED_LINE_SIZE_ATTENUATION = false;\r\n /**\r\n * The type of color distribution is set to line this value equals to true.\r\n */\r\n // eslint-disable-next-line @typescript-eslint/naming-convention\r\n GREASED_LINE_COLOR_DISTRIBUTION_TYPE_LINE = false;\r\n /**\r\n * True if scene is in right handed coordinate system.\r\n */\r\n // eslint-disable-next-line @typescript-eslint/naming-convention\r\n GREASED_LINE_RIGHT_HANDED_COORDINATE_SYSTEM = false;\r\n\r\n /**\r\n * True if the line is in camera facing mode\r\n */\r\n // eslint-disable-next-line @typescript-eslint/naming-convention\r\n GREASED_LINE_CAMERA_FACING = true;\r\n\r\n /**\r\n * True if the line uses offsets\r\n */\r\n // eslint-disable-next-line @typescript-eslint/naming-convention\r\n GREASED_LINE_USE_OFFSETS = false;\r\n}\r\n\r\n/**\r\n * GreasedLinePluginMaterial for GreasedLineMesh/GreasedLineRibbonMesh.\r\n * Use the GreasedLineBuilder.CreateGreasedLineMaterial function to create and instance of this class.\r\n */\r\nexport class GreasedLinePluginMaterial extends MaterialPluginBase implements IGreasedLineMaterial {\r\n /**\r\n * Plugin name\r\n */\r\n public static readonly GREASED_LINE_MATERIAL_NAME = \"GreasedLinePluginMaterial\";\r\n\r\n /**\r\n * Force all the greased lines to compile to glsl even on WebGPU engines.\r\n * False by default. This is mostly meant for backward compatibility.\r\n */\r\n public static ForceGLSL = false;\r\n\r\n /**\r\n * Whether to use the colors option to colorize the line\r\n */\r\n public useColors: boolean;\r\n\r\n /**\r\n * Normalized value of how much of the line will be visible\r\n * 0 - 0% of the line will be visible\r\n * 1 - 100% of the line will be visible\r\n */\r\n public visibility: number;\r\n\r\n /**\r\n * Dash offset\r\n */\r\n public dashOffset: number;\r\n\r\n /**\r\n * Length of the dash. 0 to 1. 0.5 means half empty, half drawn.\r\n */\r\n public dashRatio: number;\r\n\r\n /**\r\n * Line base width. At each point the line width is calculated by widths[pointIndex] * width\r\n */\r\n public width: number;\r\n\r\n /**\r\n * The type of sampling of the colors texture. The values are the same when using with textures.\r\n */\r\n public colorsSampling: number;\r\n\r\n /**\r\n * Turns on/off dash mode\r\n */\r\n public useDash: boolean;\r\n\r\n /**\r\n * The mixing mode of the color paramater. Default value is GreasedLineMeshColorMode.SET\r\n * @see GreasedLineMeshColorMode\r\n */\r\n public colorMode: GreasedLineMeshColorMode;\r\n\r\n /**\r\n * You can provide a colorsTexture to use instead of one generated from the 'colors' option\r\n */\r\n public colorsTexture: Nullable<RawTexture> = null;\r\n\r\n private _scene: Scene;\r\n private _dashCount: number;\r\n private _dashArray: number;\r\n private _color: Nullable<Color3>;\r\n private _colors: Nullable<Color3[]>;\r\n private _colorsDistributionType: GreasedLineMeshColorDistributionType;\r\n private _resolution: Vector2;\r\n private _aspect: number;\r\n private _sizeAttenuation: boolean;\r\n\r\n private _cameraFacing: boolean;\r\n\r\n private _engine: AbstractEngine;\r\n\r\n private _forceGLSL = false;\r\n\r\n /**\r\n * Gets a boolean indicating that the plugin is compatible with a given shader language\r\n * @param _shaderLanguage The shader language to use\r\n * @returns true if the plugin is compatible with the shader language. Return always true since both GLSL and WGSL are supported\r\n */\r\n public override isCompatible(_shaderLanguage: ShaderLanguage): boolean {\r\n return true;\r\n }\r\n\r\n /**\r\n * Creates a new instance of the GreasedLinePluginMaterial\r\n * @param material Base material for the plugin\r\n * @param scene The scene\r\n * @param options Plugin options\r\n */\r\n constructor(material: Material, scene?: Scene, options?: GreasedLineMaterialOptions) {\r\n options = options || {\r\n color: GreasedLineMaterialDefaults.DEFAULT_COLOR,\r\n };\r\n\r\n const defines = new MaterialGreasedLineDefines();\r\n defines.GREASED_LINE_HAS_COLOR = !!options.color && !options.useColors;\r\n defines.GREASED_LINE_SIZE_ATTENUATION = options.sizeAttenuation ?? false;\r\n defines.GREASED_LINE_COLOR_DISTRIBUTION_TYPE_LINE = options.colorDistributionType === GreasedLineMeshColorDistributionType.COLOR_DISTRIBUTION_TYPE_LINE;\r\n defines.GREASED_LINE_RIGHT_HANDED_COORDINATE_SYSTEM = (scene ?? material.getScene()).useRightHandedSystem;\r\n defines.GREASED_LINE_CAMERA_FACING = options.cameraFacing ?? true;\r\n super(material, GreasedLinePluginMaterial.GREASED_LINE_MATERIAL_NAME, 200, defines, true, true);\r\n\r\n this._forceGLSL = options?.forceGLSL || GreasedLinePluginMaterial.ForceGLSL;\r\n\r\n this._scene = scene ?? material.getScene();\r\n this._engine = this._scene.getEngine();\r\n\r\n this._cameraFacing = options.cameraFacing ?? true;\r\n\r\n this.visibility = options.visibility ?? 1;\r\n this.useDash = options.useDash ?? false;\r\n this.dashRatio = options.dashRatio ?? 0.5;\r\n this.dashOffset = options.dashOffset ?? 0;\r\n this.width = options.width ? options.width : options.sizeAttenuation ? GreasedLineMaterialDefaults.DEFAULT_WIDTH_ATTENUATED : GreasedLineMaterialDefaults.DEFAULT_WIDTH;\r\n this._sizeAttenuation = options.sizeAttenuation ?? false;\r\n this.colorMode = options.colorMode ?? GreasedLineMeshColorMode.COLOR_MODE_SET;\r\n this._color = options.color ?? null;\r\n this.useColors = options.useColors ?? false;\r\n this._colorsDistributionType = options.colorDistributionType ?? GreasedLineMeshColorDistributionType.COLOR_DISTRIBUTION_TYPE_SEGMENT;\r\n this.colorsSampling = options.colorsSampling ?? RawTexture.NEAREST_NEAREST;\r\n this._colors = options.colors ?? null;\r\n\r\n this.dashCount = options.dashCount ?? 1; // calculate the _dashArray value, call the setter\r\n this.resolution = options.resolution ?? new Vector2(this._engine.getRenderWidth(), this._engine.getRenderHeight()); // calculate aspect call the setter\r\n\r\n if (options.colorsTexture) {\r\n this.colorsTexture = options.colorsTexture; // colorsTexture from options takes precedence\r\n } else {\r\n if (this._colors) {\r\n this.colorsTexture = GreasedLineTools.CreateColorsTexture(`${material.name}-colors-texture`, this._colors, this.colorsSampling, this._scene);\r\n } else {\r\n this._color = this._color ?? GreasedLineMaterialDefaults.DEFAULT_COLOR;\r\n GreasedLineTools.PrepareEmptyColorsTexture(this._scene);\r\n }\r\n }\r\n\r\n this._engine.onDisposeObservable.add(() => {\r\n GreasedLineTools.DisposeEmptyColorsTexture();\r\n });\r\n }\r\n\r\n /**\r\n * Get the shader attributes\r\n * @param attributes array which will be filled with the attributes\r\n */\r\n override getAttributes(attributes: string[]) {\r\n attributes.push(\"grl_offsets\");\r\n attributes.push(\"grl_widths\");\r\n attributes.push(\"grl_colorPointers\");\r\n attributes.push(\"grl_counters\");\r\n if (this._cameraFacing) {\r\n attributes.push(\"grl_previousAndSide\");\r\n attributes.push(\"grl_nextAndCounters\");\r\n } else {\r\n attributes.push(\"grl_slopes\");\r\n }\r\n }\r\n\r\n /**\r\n * Get the shader samplers\r\n * @param samplers\r\n */\r\n override getSamplers(samplers: string[]) {\r\n samplers.push(\"grl_colors\");\r\n }\r\n\r\n /**\r\n * Get the shader textures\r\n * @param activeTextures array which will be filled with the textures\r\n */\r\n public override getActiveTextures(activeTextures: BaseTexture[]): void {\r\n if (this.colorsTexture) {\r\n activeTextures.push(this.colorsTexture);\r\n }\r\n }\r\n\r\n /**\r\n * Get the shader uniforms\r\n * @param shaderLanguage The shader language to use\r\n * @returns uniforms\r\n */\r\n override getUniforms(shaderLanguage = ShaderLanguage.GLSL) {\r\n const ubo = [\r\n { name: \"grl_singleColor\", size: 3, type: \"vec3\" },\r\n { name: \"grl_textureSize\", size: 2, type: \"vec2\" },\r\n { name: \"grl_dashOptions\", size: 4, type: \"vec4\" },\r\n { name: \"grl_colorMode_visibility_colorsWidth_useColors\", size: 4, type: \"vec4\" },\r\n ];\r\n if (this._cameraFacing) {\r\n ubo.push({ name: \"grl_projection\", size: 16, type: \"mat4\" }, { name: \"grl_aspect_resolution_lineWidth\", size: 4, type: \"vec4\" });\r\n }\r\n\r\n if (shaderLanguage === ShaderLanguage.WGSL) {\r\n ubo.push({\r\n name: \"viewProjection\",\r\n size: 16,\r\n type: \"mat4\",\r\n });\r\n }\r\n\r\n return {\r\n ubo,\r\n vertex:\r\n this._cameraFacing && this._isGLSL(shaderLanguage)\r\n ? `\r\n uniform vec4 grl_aspect_resolution_lineWidth;\r\n uniform mat4 grl_projection;\r\n `\r\n : \"\",\r\n fragment: this._isGLSL(shaderLanguage)\r\n ? `\r\n uniform vec4 grl_dashOptions;\r\n uniform vec2 grl_textureSize;\r\n uniform vec4 grl_colorMode_visibility_colorsWidth_useColors;\r\n uniform vec3 grl_singleColor;\r\n `\r\n : \"\",\r\n };\r\n }\r\n\r\n // only getter, it doesn't make sense to use this plugin on a mesh other than GreasedLineMesh\r\n // and it doesn't make sense to disable it on the mesh\r\n get isEnabled() {\r\n return true;\r\n }\r\n\r\n /**\r\n * Bind the uniform buffer\r\n * @param uniformBuffer\r\n */\r\n override bindForSubMesh(uniformBuffer: UniformBuffer) {\r\n if (this._cameraFacing) {\r\n uniformBuffer.updateMatrix(\"grl_projection\", this._scene.getProjectionMatrix());\r\n !this._isGLSL(this._material.shaderLanguage) && uniformBuffer.updateMatrix(\"viewProjection\", this._scene.getTransformMatrix());\r\n\r\n const resolutionLineWidth = TmpVectors.Vector4[0];\r\n resolutionLineWidth.x = this._aspect;\r\n resolutionLineWidth.y = this._resolution.x;\r\n resolutionLineWidth.z = this._resolution.y;\r\n resolutionLineWidth.w = this.width;\r\n uniformBuffer.updateVector4(\"grl_aspect_resolution_lineWidth\", resolutionLineWidth);\r\n }\r\n\r\n const dashOptions = TmpVectors.Vector4[0];\r\n dashOptions.x = GreasedLineTools.BooleanToNumber(this.useDash);\r\n dashOptions.y = this._dashArray;\r\n dashOptions.z = this.dashOffset;\r\n dashOptions.w = this.dashRatio;\r\n uniformBuffer.updateVector4(\"grl_dashOptions\", dashOptions);\r\n\r\n const colorModeVisibilityColorsWidthUseColors = TmpVectors.Vector4[1];\r\n colorModeVisibilityColorsWidthUseColors.x = this.colorMode;\r\n colorModeVisibilityColorsWidthUseColors.y = this.visibility;\r\n colorModeVisibilityColorsWidthUseColors.z = this.colorsTexture ? this.colorsTexture.getSize().width : 0;\r\n colorModeVisibilityColorsWidthUseColors.w = GreasedLineTools.BooleanToNumber(this.useColors);\r\n uniformBuffer.updateVector4(\"grl_colorMode_visibility_colorsWidth_useColors\", colorModeVisibilityColorsWidthUseColors);\r\n\r\n if (this._color) {\r\n uniformBuffer.updateColor3(\"grl_singleColor\", this._color);\r\n }\r\n const texture = this.colorsTexture ?? GreasedLineMaterialDefaults.EmptyColorsTexture;\r\n uniformBuffer.setTexture(\"grl_colors\", texture);\r\n uniformBuffer.updateFloat2(\"grl_textureSize\", texture?.getSize().width ?? 1, texture?.getSize().height ?? 1);\r\n }\r\n\r\n /**\r\n * Prepare the defines\r\n * @param defines\r\n * @param _scene\r\n * @param mesh\r\n */\r\n override prepareDefines(defines: MaterialGreasedLineDefines, _scene: Scene, mesh: AbstractMesh) {\r\n defines.GREASED_LINE_HAS_COLOR = !!this.color && !this.useColors;\r\n defines.GREASED_LINE_SIZE_ATTENUATION = this._sizeAttenuation;\r\n defines.GREASED_LINE_COLOR_DISTRIBUTION_TYPE_LINE = this._colorsDistributionType === GreasedLineMeshColorDistributionType.COLOR_DISTRIBUTION_TYPE_LINE;\r\n defines.GREASED_LINE_RIGHT_HANDED_COORDINATE_SYSTEM = _scene.useRightHandedSystem;\r\n defines.GREASED_LINE_CAMERA_FACING = this._cameraFacing;\r\n defines.GREASED_LINE_USE_OFFSETS = !!(mesh as GreasedLineBaseMesh).offsets;\r\n }\r\n\r\n /**\r\n * Get the class name\r\n * @returns class name\r\n */\r\n override getClassName() {\r\n return GreasedLinePluginMaterial.GREASED_LINE_MATERIAL_NAME;\r\n }\r\n\r\n /**\r\n * Get shader code\r\n * @param shaderType vertex/fragment\r\n * @param shaderLanguage GLSL or WGSL\r\n * @returns shader code\r\n */\r\n override getCustomCode(shaderType: string, shaderLanguage = ShaderLanguage.GLSL): Nullable<{ [pointName: string]: string }> {\r\n if (this._isGLSL(shaderLanguage)) {\r\n return getCustomCodeGLSL(shaderType, this._cameraFacing);\r\n }\r\n return getCustomCodeWGSL(shaderType, this._cameraFacing);\r\n }\r\n\r\n /**\r\n * Disposes the plugin material.\r\n */\r\n public override dispose(): void {\r\n this.colorsTexture?.dispose();\r\n super.dispose();\r\n }\r\n\r\n /**\r\n * Returns the colors used to colorize the line\r\n */\r\n get colors() {\r\n return this._colors;\r\n }\r\n\r\n /**\r\n * Sets the colors used to colorize the line\r\n */\r\n set colors(value: Nullable<Color3[]>) {\r\n this.setColors(value);\r\n }\r\n\r\n /**\r\n * Creates or updates the colors texture\r\n * @param colors color table RGBA\r\n * @param lazy if lazy, the colors are not updated\r\n * @param forceNewTexture force creation of a new texture\r\n */\r\n public setColors(colors: Nullable<Color3[]>, lazy = false, forceNewTexture = false): void {\r\n const origColorsCount = this._colors?.length ?? 0;\r\n\r\n this._colors = colors;\r\n\r\n if (colors === null || colors.length === 0) {\r\n this.colorsTexture?.dispose();\r\n return;\r\n }\r\n\r\n if (lazy && !forceNewTexture) {\r\n return;\r\n }\r\n\r\n if (this.colorsTexture && origColorsCount === colors.length && !forceNewTexture) {\r\n const colorArray = GreasedLineTools.Color3toRGBAUint8(colors);\r\n this.colorsTexture.update(colorArray);\r\n } else {\r\n this.colorsTexture?.dispose();\r\n this.colorsTexture = GreasedLineTools.CreateColorsTexture(`${this._material.name}-colors-texture`, colors, this.colorsSampling, this._scene);\r\n }\r\n }\r\n\r\n /**\r\n * Updates the material. Use when material created in lazy mode.\r\n */\r\n public updateLazy() {\r\n if (this._colors) {\r\n this.setColors(this._colors, false, true);\r\n }\r\n }\r\n\r\n /**\r\n * Gets the number of dashes in the line\r\n */\r\n get dashCount() {\r\n return this._dashCount;\r\n }\r\n /**\r\n * Sets the number of dashes in the line\r\n * @param value dash\r\n */\r\n set dashCount(value: number) {\r\n this._dashCount = value;\r\n this._dashArray = 1 / value;\r\n }\r\n\r\n /**\r\n * If set to true the line will be rendered always with the same width regardless how far it is located from the camera.\r\n * Not supported for non camera facing lines.\r\n */\r\n get sizeAttenuation() {\r\n return this._sizeAttenuation;\r\n }\r\n\r\n /**\r\n * Turn on/off size attenuation of the width option and widths array.\r\n * Not supported for non camera facing lines.\r\n * @param value If set to true the line will be rendered always with the same width regardless how far it is located from the camera.\r\n */\r\n set sizeAttenuation(value: boolean) {\r\n this._sizeAttenuation = value;\r\n this.markAllDefinesAsDirty();\r\n }\r\n\r\n /**\r\n * Gets the color of the line\r\n */\r\n get color() {\r\n return this._color;\r\n }\r\n\r\n /**\r\n * Sets the color of the line\r\n * @param value Color3 or null to clear the color. You need to clear the color if you use colors and useColors = true\r\n */\r\n set color(value: Nullable<Color3>) {\r\n this.setColor(value);\r\n }\r\n\r\n /**\r\n * Sets the color of the line. If set the whole line will be mixed with this color according to the colorMode option.\r\n * @param value color\r\n * @param doNotMarkDirty if true, the material will not be marked as dirty\r\n */\r\n public setColor(value: Nullable<Color3>, doNotMarkDirty = false) {\r\n if ((this._color === null && value !== null) || (this._color !== null && value === null)) {\r\n this._color = value;\r\n !doNotMarkDirty && this.markAllDefinesAsDirty();\r\n } else {\r\n this._color = value;\r\n }\r\n }\r\n\r\n /**\r\n * Gets the color distributiopn type\r\n */\r\n get colorsDistributionType() {\r\n return this._colorsDistributionType;\r\n }\r\n\r\n /**\r\n * Sets the color distribution type\r\n * @see GreasedLineMeshColorDistributionType\r\n * @param value color distribution type\r\n */\r\n set colorsDistributionType(value: GreasedLineMeshColorDistributionType) {\r\n this._colorsDistributionType = value;\r\n this.markAllDefinesAsDirty();\r\n }\r\n\r\n /**\r\n * Gets the resolution\r\n */\r\n get resolution() {\r\n return this._resolution;\r\n }\r\n\r\n /**\r\n * Sets the resolution\r\n * @param value resolution of the screen for GreasedLine\r\n */\r\n set resolution(value: Vector2) {\r\n this._aspect = value.x / value.y;\r\n this._resolution = value;\r\n }\r\n\r\n /**\r\n * Serializes this plugin material\r\n * @returns serializationObjec\r\n */\r\n public override serialize(): any {\r\n const serializationObject = super.serialize();\r\n\r\n const greasedLineMaterialOptions: GreasedLineMaterialOptions = {\r\n colorDistributionType: this._colorsDistributionType,\r\n colorsSampling: this.colorsSampling,\r\n colorMode: this.colorMode,\r\n dashCount: this._dashCount,\r\n dashOffset: this.dashOffset,\r\n dashRatio: this.dashRatio,\r\n resolution: this._resolution,\r\n sizeAttenuation: this._sizeAttenuation,\r\n useColors: this.useColors,\r\n useDash: this.useDash,\r\n visibility: this.visibility,\r\n width: this.width,\r\n };\r\n\r\n this._colors && (greasedLineMaterialOptions.colors = this._colors);\r\n this._color && (greasedLineMaterialOptions.color = this._color);\r\n\r\n serializationObject.greasedLineMaterialOptions = greasedLineMaterialOptions;\r\n\r\n return serializationObject;\r\n }\r\n\r\n /**\r\n * Parses a serialized objects\r\n * @param source serialized object\r\n * @param scene scene\r\n * @param rootUrl root url for textures\r\n */\r\n public override parse(source: any, scene: Scene, rootUrl: string): void {\r\n super.parse(source, scene, rootUrl);\r\n const greasedLineMaterialOptions = <GreasedLineMaterialOptions>source.greasedLineMaterialOptions;\r\n\r\n this.colorsTexture?.dispose();\r\n\r\n greasedLineMaterialOptions.color && this.setColor(greasedLineMaterialOptions.color, true);\r\n greasedLineMaterialOptions.colorDistributionType && (this.colorsDistributionType = greasedLineMaterialOptions.colorDistributionType);\r\n greasedLineMaterialOptions.colors && (this.colors = greasedLineMaterialOptions.colors);\r\n greasedLineMaterialOptions.colorsSampling && (this.colorsSampling = greasedLineMaterialOptions.colorsSampling);\r\n greasedLineMaterialOptions.colorMode && (this.colorMode = greasedLineMaterialOptions.colorMode);\r\n greasedLineMaterialOptions.useColors && (this.useColors = greasedLineMaterialOptions.useColors);\r\n greasedLineMaterialOptions.visibility && (this.visibility = greasedLineMaterialOptions.visibility);\r\n greasedLineMaterialOptions.useDash && (this.useDash = greasedLineMaterialOptions.useDash);\r\n greasedLineMaterialOptions.dashCount && (this.dashCount = greasedLineMaterialOptions.dashCount);\r\n greasedLineMaterialOptions.dashRatio && (this.dashRatio = greasedLineMaterialOptions.dashRatio);\r\n greasedLineMaterialOptions.dashOffset && (this.dashOffset = greasedLineMaterialOptions.dashOffset);\r\n greasedLineMaterialOptions.width && (this.width = greasedLineMaterialOptions.width);\r\n greasedLineMaterialOptions.sizeAttenuation && (this.sizeAttenuation = greasedLineMaterialOptions.sizeAttenuation);\r\n greasedLineMaterialOptions.resolution && (this.resolution = greasedLineMaterialOptions.resolution);\r\n\r\n if (this.colors) {\r\n this.colorsTexture = GreasedLineTools.CreateColorsTexture(`${this._material.name}-colors-texture`, this.colors, this.colorsSampling, scene);\r\n } else {\r\n GreasedLineTools.PrepareEmptyColorsTexture(scene);\r\n }\r\n\r\n this.markAllDefinesAsDirty();\r\n }\r\n\r\n /**\r\n * Makes a duplicate of the current configuration into another one.\r\n * @param plugin define the config where to copy the info\r\n */\r\n public override copyTo(plugin: MaterialPluginBase): void {\r\n const dest = plugin as GreasedLinePluginMaterial;\r\n\r\n dest.colorsTexture?.dispose();\r\n\r\n if (this._colors) {\r\n dest.colorsTexture = GreasedLineTools.CreateColorsTexture(`${dest._material.name}-colors-texture`, this._colors, dest.colorsSampling, this._scene);\r\n }\r\n\r\n dest.setColor(this.color, true);\r\n dest.colorsDistributionType = this.colorsDistributionType;\r\n dest.colorsSampling = this.colorsSampling;\r\n dest.colorMode = this.colorMode;\r\n dest.useColors = this.useColors;\r\n dest.visibility = this.visibility;\r\n dest.useDash = this.useDash;\r\n dest.dashCount = this.dashCount;\r\n dest.dashRatio = this.dashRatio;\r\n dest.dashOffset = this.dashOffset;\r\n dest.width = this.width;\r\n dest.sizeAttenuation = this.sizeAttenuation;\r\n dest.resolution = this.resolution;\r\n\r\n dest.markAllDefinesAsDirty();\r\n }\r\n\r\n private _isGLSL(shaderLanguage: ShaderLanguage) {\r\n return shaderLanguage === ShaderLanguage.GLSL || this._forceGLSL;\r\n }\r\n}\r\n\r\nRegisterClass(`BABYLON.${GreasedLinePluginMaterial.GREASED_LINE_MATERIAL_NAME}`, GreasedLinePluginMaterial);\r\n"]}
@@ -102,11 +102,17 @@ export function GetCustomCode(shaderType, cameraFacing) {
102
102
  if (shaderType === "fragment") {
103
103
  return {
104
104
  CUSTOM_FRAGMENT_DEFINITIONS: `
105
+ #ifdef PBR
106
+ #define grlFinalColor finalColor
107
+ #else
108
+ #define grlFinalColor color
109
+ #endif
110
+
105
111
  varying float grlCounters;
106
112
  varying float grlColorPointer;
107
113
  uniform sampler2D grl_colors;
108
114
  `,
109
- CUSTOM_FRAGMENT_MAIN_END: `
115
+ CUSTOM_FRAGMENT_BEFORE_FRAGCOLOR: `
110
116
  float grlColorMode = grl_colorMode_visibility_colorsWidth_useColors.x;
111
117
  float grlVisibility = grl_colorMode_visibility_colorsWidth_useColors.y;
112
118
  float grlColorsWidth = grl_colorMode_visibility_colorsWidth_useColors.z;
@@ -117,21 +123,21 @@ export function GetCustomCode(shaderType, cameraFacing) {
117
123
  float grlDashOffset = grl_dashOptions.z;
118
124
  float grlDashRatio = grl_dashOptions.w;
119
125
 
120
- gl_FragColor.a *= step(grlCounters, grlVisibility);
121
- if(gl_FragColor.a == 0.) discard;
126
+ grlFinalColor.a *= step(grlCounters, grlVisibility);
127
+ if(grlFinalColor.a == 0.) discard;
122
128
 
123
129
  if(grlUseDash == 1.){
124
- gl_FragColor.a *= ceil(mod(grlCounters + grlDashOffset, grlDashArray) - (grlDashArray * grlDashRatio));
125
- if (gl_FragColor.a == 0.) discard;
130
+ grlFinalColor.a *= ceil(mod(grlCounters + grlDashOffset, grlDashArray) - (grlDashArray * grlDashRatio));
131
+ if (grlFinalColor.a == 0.) discard;
126
132
  }
127
133
 
128
134
  #ifdef GREASED_LINE_HAS_COLOR
129
135
  if (grlColorMode == ${0 /* GreasedLineMeshColorMode.COLOR_MODE_SET */}.) {
130
- gl_FragColor.rgb = grl_singleColor;
136
+ grlFinalColor.rgb = grl_singleColor;
131
137
  } else if (grlColorMode == ${1 /* GreasedLineMeshColorMode.COLOR_MODE_ADD */}.) {
132
- gl_FragColor.rgb += grl_singleColor;
138
+ grlFinalColor.rgb += grl_singleColor;
133
139
  } else if (grlColorMode == ${2 /* GreasedLineMeshColorMode.COLOR_MODE_MULTIPLY */}.) {
134
- gl_FragColor.rgb *= grl_singleColor;
140
+ grlFinalColor.rgb *= grl_singleColor;
135
141
  }
136
142
  #else
137
143
  if (grlUseColors == 1.) {
@@ -142,11 +148,11 @@ export function GetCustomCode(shaderType, cameraFacing) {
142
148
  vec4 grlColor = texture2D(grl_colors, lookup, 0.0);
143
149
  #endif
144
150
  if (grlColorMode == ${0 /* GreasedLineMeshColorMode.COLOR_MODE_SET */}.) {
145
- gl_FragColor = grlColor;
151
+ grlFinalColor = grlColor;
146
152
  } else if (grlColorMode == ${1 /* GreasedLineMeshColorMode.COLOR_MODE_ADD */}.) {
147
- gl_FragColor += grlColor;
153
+ grlFinalColor += grlColor;
148
154
  } else if (grlColorMode == ${2 /* GreasedLineMeshColorMode.COLOR_MODE_MULTIPLY */}.) {
149
- gl_FragColor *= grlColor;
155
+ grlFinalColor *= grlColor;
150
156
  }
151
157
  }
152
158
  #endif
@@ -1 +1 @@
1
- {"version":3,"file":"greasedLinePluginMaterialShadersGLSL.js","sourceRoot":"","sources":["../../../../../dev/core/src/Materials/GreasedLine/greasedLinePluginMaterialShadersGLSL.ts"],"names":[],"mappings":"AAGA;;;;;GAKG;AACH,gBAAgB;AAChB,MAAM,UAAU,aAAa,CAAC,UAAkB,EAAE,YAAqB;IACnE,IAAI,UAAU,KAAK,QAAQ,EAAE,CAAC;QAC1B,MAAM,GAAG,GAAQ;YACb,yBAAyB,EAAE;;;;;;;;;;;;;;;;;;;;iBAoBtB;YACL,6BAA6B,EAAE;;;;;;;iBAO1B;YACL,sBAAsB,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAyDnB;SACR,CAAC;QACF,YAAY,IAAI,CAAC,GAAG,CAAC,2CAA2C,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,mCAAmC;QAC9G,OAAO,GAAG,CAAC;IACf,CAAC;IAED,IAAI,UAAU,KAAK,UAAU,EAAE,CAAC;QAC5B,OAAO;YACH,2BAA2B,EAAE;;;;iBAIxB;YACL,wBAAwB,EAAE;;;;;;;;;;;;;;;;;;;;8CAoBQ,+CAAuC;;qDAEhC,+CAAuC;;qDAEvC,oDAA4C;;;;;;;;;;;kDAW/C,+CAAuC;;yDAEhC,+CAAuC;;yDAEvC,oDAA4C;;;;;iBAKpF;SACR,CAAC;IACN,CAAC;IAED,OAAO,IAAI,CAAC;AAChB,CAAC","sourcesContent":["import type { Nullable } from \"../../types\";\nimport { GreasedLineMeshColorMode } from \"./greasedLineMaterialInterfaces\";\n\n/**\n * Returns GLSL custom shader code\n * @param shaderType vertex or fragment\n * @param cameraFacing is in camera facing mode?\n * @returns GLSL custom shader code\n */\n/** @internal */\nexport function GetCustomCode(shaderType: string, cameraFacing: boolean): Nullable<{ [pointName: string]: string }> {\n if (shaderType === \"vertex\") {\n const obj: any = {\n CUSTOM_VERTEX_DEFINITIONS: `\n attribute float grl_widths;\n attribute vec3 grl_offsets;\n attribute float grl_colorPointers;\n varying float grlCounters;\n varying float grlColorPointer;\n\n #ifdef GREASED_LINE_CAMERA_FACING\n attribute vec4 grl_previousAndSide;\n attribute vec4 grl_nextAndCounters;\n\n vec2 grlFix( vec4 i, float aspect ) {\n vec2 res = i.xy / i.w;\n res.x *= aspect;\n return res;\n }\n #else\n attribute vec3 grl_slopes;\n attribute float grl_counters;\n #endif\n `,\n CUSTOM_VERTEX_UPDATE_POSITION: `\n #ifdef GREASED_LINE_CAMERA_FACING\n vec3 grlPositionOffset = grl_offsets;\n positionUpdated += grlPositionOffset;\n #else\n positionUpdated = (positionUpdated + grl_offsets) + (grl_slopes * grl_widths);\n #endif\n `,\n CUSTOM_VERTEX_MAIN_END: `\n grlColorPointer = grl_colorPointers;\n\n #ifdef GREASED_LINE_CAMERA_FACING\n\n float grlAspect = grl_aspect_resolution_lineWidth.x;\n float grlBaseWidth = grl_aspect_resolution_lineWidth.w;\n\n vec3 grlPrevious = grl_previousAndSide.xyz;\n float grlSide = grl_previousAndSide.w;\n\n vec3 grlNext = grl_nextAndCounters.xyz;\n grlCounters = grl_nextAndCounters.w;\n\n mat4 grlMatrix = viewProjection * finalWorld;\n vec4 grlFinalPosition = grlMatrix * vec4(positionUpdated, 1.0);\n vec4 grlPrevPos = grlMatrix * vec4(grlPrevious + grlPositionOffset, 1.0);\n vec4 grlNextPos = grlMatrix * vec4(grlNext + grlPositionOffset, 1.0);\n\n vec2 grlCurrentP = grlFix(grlFinalPosition, grlAspect);\n vec2 grlPrevP = grlFix(grlPrevPos, grlAspect);\n vec2 grlNextP = grlFix(grlNextPos, grlAspect);\n\n float grlWidth = grlBaseWidth * grl_widths;\n\n vec2 grlDir;\n if (grlNextP == grlCurrentP) {\n grlDir = normalize(grlCurrentP - grlPrevP);\n } else if (grlPrevP == grlCurrentP) {\n grlDir = normalize(grlNextP - grlCurrentP);\n } else {\n vec2 grlDir1 = normalize(grlCurrentP - grlPrevP);\n vec2 grlDir2 = normalize(grlNextP - grlCurrentP);\n grlDir = normalize(grlDir1 + grlDir2);\n }\n vec4 grlNormal = vec4(-grlDir.y, grlDir.x, 0., 1.);\n\n #ifdef GREASED_LINE_RIGHT_HANDED_COORDINATE_SYSTEM\n grlNormal.xy *= -.5 * grlWidth;\n #else\n grlNormal.xy *= .5 * grlWidth;\n #endif\n\n grlNormal *= grl_projection;\n\n #ifdef GREASED_LINE_SIZE_ATTENUATION\n grlNormal.xy *= grlFinalPosition.w;\n grlNormal.xy /= (vec4(grl_aspect_resolution_lineWidth.yz, 0., 1.) * grl_projection).xy;\n #endif\n\n grlFinalPosition.xy += grlNormal.xy * grlSide;\n gl_Position = grlFinalPosition;\n\n vPositionW = vec3(grlFinalPosition);\n #else\n grlCounters = grl_counters;\n #endif\n `,\n };\n cameraFacing && (obj[\"!gl_Position\\\\=viewProjection\\\\*worldPos;\"] = \"//\"); // not needed for camera facing GRL\n return obj;\n }\n\n if (shaderType === \"fragment\") {\n return {\n CUSTOM_FRAGMENT_DEFINITIONS: `\n varying float grlCounters;\n varying float grlColorPointer;\n uniform sampler2D grl_colors;\n `,\n CUSTOM_FRAGMENT_MAIN_END: `\n float grlColorMode = grl_colorMode_visibility_colorsWidth_useColors.x;\n float grlVisibility = grl_colorMode_visibility_colorsWidth_useColors.y;\n float grlColorsWidth = grl_colorMode_visibility_colorsWidth_useColors.z;\n float grlUseColors = grl_colorMode_visibility_colorsWidth_useColors.w;\n\n float grlUseDash = grl_dashOptions.x;\n float grlDashArray = grl_dashOptions.y;\n float grlDashOffset = grl_dashOptions.z;\n float grlDashRatio = grl_dashOptions.w;\n\n gl_FragColor.a *= step(grlCounters, grlVisibility);\n if(gl_FragColor.a == 0.) discard;\n\n if(grlUseDash == 1.){\n gl_FragColor.a *= ceil(mod(grlCounters + grlDashOffset, grlDashArray) - (grlDashArray * grlDashRatio));\n if (gl_FragColor.a == 0.) discard;\n }\n\n #ifdef GREASED_LINE_HAS_COLOR\n if (grlColorMode == ${GreasedLineMeshColorMode.COLOR_MODE_SET}.) {\n gl_FragColor.rgb = grl_singleColor;\n } else if (grlColorMode == ${GreasedLineMeshColorMode.COLOR_MODE_ADD}.) {\n gl_FragColor.rgb += grl_singleColor;\n } else if (grlColorMode == ${GreasedLineMeshColorMode.COLOR_MODE_MULTIPLY}.) {\n gl_FragColor.rgb *= grl_singleColor;\n }\n #else\n if (grlUseColors == 1.) {\n #ifdef GREASED_LINE_COLOR_DISTRIBUTION_TYPE_LINE\n vec4 grlColor = texture2D(grl_colors, vec2(grlCounters, 0.), 0.);\n #else\n vec2 lookup = vec2(fract(grlColorPointer / grl_textureSize.x), 1.0 - floor(grlColorPointer / grl_textureSize.x) / max(grl_textureSize.y - 1.0, 1.0));\n vec4 grlColor = texture2D(grl_colors, lookup, 0.0);\n #endif\n if (grlColorMode == ${GreasedLineMeshColorMode.COLOR_MODE_SET}.) {\n gl_FragColor = grlColor;\n } else if (grlColorMode == ${GreasedLineMeshColorMode.COLOR_MODE_ADD}.) {\n gl_FragColor += grlColor;\n } else if (grlColorMode == ${GreasedLineMeshColorMode.COLOR_MODE_MULTIPLY}.) {\n gl_FragColor *= grlColor;\n }\n }\n #endif\n `,\n };\n }\n\n return null;\n}\n"]}
1
+ {"version":3,"file":"greasedLinePluginMaterialShadersGLSL.js","sourceRoot":"","sources":["../../../../../dev/core/src/Materials/GreasedLine/greasedLinePluginMaterialShadersGLSL.ts"],"names":[],"mappings":"AAGA;;;;;GAKG;AACH,gBAAgB;AAChB,MAAM,UAAU,aAAa,CAAC,UAAkB,EAAE,YAAqB;IACnE,IAAI,UAAU,KAAK,QAAQ,EAAE,CAAC;QAC1B,MAAM,GAAG,GAAQ;YACb,yBAAyB,EAAE;;;;;;;;;;;;;;;;;;;;iBAoBtB;YACL,6BAA6B,EAAE;;;;;;;iBAO1B;YACL,sBAAsB,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAyDnB;SACR,CAAC;QACF,YAAY,IAAI,CAAC,GAAG,CAAC,2CAA2C,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,mCAAmC;QAC9G,OAAO,GAAG,CAAC;IACf,CAAC;IAED,IAAI,UAAU,KAAK,UAAU,EAAE,CAAC;QAC5B,OAAO;YACH,2BAA2B,EAAE;;;;;;;;;;iBAUxB;YACL,gCAAgC,EAAE;;;;;;;;;;;;;;;;;;;;8CAoBA,+CAAuC;;qDAEhC,+CAAuC;;qDAEvC,oDAA4C;;;;;;;;;;;kDAW/C,+CAAuC;;yDAEhC,+CAAuC;;yDAEvC,oDAA4C;;;;;iBAKpF;SACR,CAAC;IACN,CAAC;IAED,OAAO,IAAI,CAAC;AAChB,CAAC","sourcesContent":["import type { Nullable } from \"../../types\";\nimport { GreasedLineMeshColorMode } from \"./greasedLineMaterialInterfaces\";\n\n/**\n * Returns GLSL custom shader code\n * @param shaderType vertex or fragment\n * @param cameraFacing is in camera facing mode?\n * @returns GLSL custom shader code\n */\n/** @internal */\nexport function GetCustomCode(shaderType: string, cameraFacing: boolean): Nullable<{ [pointName: string]: string }> {\n if (shaderType === \"vertex\") {\n const obj: any = {\n CUSTOM_VERTEX_DEFINITIONS: `\n attribute float grl_widths;\n attribute vec3 grl_offsets;\n attribute float grl_colorPointers;\n varying float grlCounters;\n varying float grlColorPointer;\n\n #ifdef GREASED_LINE_CAMERA_FACING\n attribute vec4 grl_previousAndSide;\n attribute vec4 grl_nextAndCounters;\n\n vec2 grlFix( vec4 i, float aspect ) {\n vec2 res = i.xy / i.w;\n res.x *= aspect;\n return res;\n }\n #else\n attribute vec3 grl_slopes;\n attribute float grl_counters;\n #endif\n `,\n CUSTOM_VERTEX_UPDATE_POSITION: `\n #ifdef GREASED_LINE_CAMERA_FACING\n vec3 grlPositionOffset = grl_offsets;\n positionUpdated += grlPositionOffset;\n #else\n positionUpdated = (positionUpdated + grl_offsets) + (grl_slopes * grl_widths);\n #endif\n `,\n CUSTOM_VERTEX_MAIN_END: `\n grlColorPointer = grl_colorPointers;\n\n #ifdef GREASED_LINE_CAMERA_FACING\n\n float grlAspect = grl_aspect_resolution_lineWidth.x;\n float grlBaseWidth = grl_aspect_resolution_lineWidth.w;\n\n vec3 grlPrevious = grl_previousAndSide.xyz;\n float grlSide = grl_previousAndSide.w;\n\n vec3 grlNext = grl_nextAndCounters.xyz;\n grlCounters = grl_nextAndCounters.w;\n\n mat4 grlMatrix = viewProjection * finalWorld;\n vec4 grlFinalPosition = grlMatrix * vec4(positionUpdated, 1.0);\n vec4 grlPrevPos = grlMatrix * vec4(grlPrevious + grlPositionOffset, 1.0);\n vec4 grlNextPos = grlMatrix * vec4(grlNext + grlPositionOffset, 1.0);\n\n vec2 grlCurrentP = grlFix(grlFinalPosition, grlAspect);\n vec2 grlPrevP = grlFix(grlPrevPos, grlAspect);\n vec2 grlNextP = grlFix(grlNextPos, grlAspect);\n\n float grlWidth = grlBaseWidth * grl_widths;\n\n vec2 grlDir;\n if (grlNextP == grlCurrentP) {\n grlDir = normalize(grlCurrentP - grlPrevP);\n } else if (grlPrevP == grlCurrentP) {\n grlDir = normalize(grlNextP - grlCurrentP);\n } else {\n vec2 grlDir1 = normalize(grlCurrentP - grlPrevP);\n vec2 grlDir2 = normalize(grlNextP - grlCurrentP);\n grlDir = normalize(grlDir1 + grlDir2);\n }\n vec4 grlNormal = vec4(-grlDir.y, grlDir.x, 0., 1.);\n\n #ifdef GREASED_LINE_RIGHT_HANDED_COORDINATE_SYSTEM\n grlNormal.xy *= -.5 * grlWidth;\n #else\n grlNormal.xy *= .5 * grlWidth;\n #endif\n\n grlNormal *= grl_projection;\n\n #ifdef GREASED_LINE_SIZE_ATTENUATION\n grlNormal.xy *= grlFinalPosition.w;\n grlNormal.xy /= (vec4(grl_aspect_resolution_lineWidth.yz, 0., 1.) * grl_projection).xy;\n #endif\n\n grlFinalPosition.xy += grlNormal.xy * grlSide;\n gl_Position = grlFinalPosition;\n\n vPositionW = vec3(grlFinalPosition);\n #else\n grlCounters = grl_counters;\n #endif\n `,\n };\n cameraFacing && (obj[\"!gl_Position\\\\=viewProjection\\\\*worldPos;\"] = \"//\"); // not needed for camera facing GRL\n return obj;\n }\n\n if (shaderType === \"fragment\") {\n return {\n CUSTOM_FRAGMENT_DEFINITIONS: `\n #ifdef PBR\n #define grlFinalColor finalColor\n #else\n #define grlFinalColor color\n #endif\n\n varying float grlCounters;\n varying float grlColorPointer;\n uniform sampler2D grl_colors;\n `,\n CUSTOM_FRAGMENT_BEFORE_FRAGCOLOR: `\n float grlColorMode = grl_colorMode_visibility_colorsWidth_useColors.x;\n float grlVisibility = grl_colorMode_visibility_colorsWidth_useColors.y;\n float grlColorsWidth = grl_colorMode_visibility_colorsWidth_useColors.z;\n float grlUseColors = grl_colorMode_visibility_colorsWidth_useColors.w;\n\n float grlUseDash = grl_dashOptions.x;\n float grlDashArray = grl_dashOptions.y;\n float grlDashOffset = grl_dashOptions.z;\n float grlDashRatio = grl_dashOptions.w;\n\n grlFinalColor.a *= step(grlCounters, grlVisibility);\n if(grlFinalColor.a == 0.) discard;\n\n if(grlUseDash == 1.){\n grlFinalColor.a *= ceil(mod(grlCounters + grlDashOffset, grlDashArray) - (grlDashArray * grlDashRatio));\n if (grlFinalColor.a == 0.) discard;\n }\n\n #ifdef GREASED_LINE_HAS_COLOR\n if (grlColorMode == ${GreasedLineMeshColorMode.COLOR_MODE_SET}.) {\n grlFinalColor.rgb = grl_singleColor;\n } else if (grlColorMode == ${GreasedLineMeshColorMode.COLOR_MODE_ADD}.) {\n grlFinalColor.rgb += grl_singleColor;\n } else if (grlColorMode == ${GreasedLineMeshColorMode.COLOR_MODE_MULTIPLY}.) {\n grlFinalColor.rgb *= grl_singleColor;\n }\n #else\n if (grlUseColors == 1.) {\n #ifdef GREASED_LINE_COLOR_DISTRIBUTION_TYPE_LINE\n vec4 grlColor = texture2D(grl_colors, vec2(grlCounters, 0.), 0.);\n #else\n vec2 lookup = vec2(fract(grlColorPointer / grl_textureSize.x), 1.0 - floor(grlColorPointer / grl_textureSize.x) / max(grl_textureSize.y - 1.0, 1.0));\n vec4 grlColor = texture2D(grl_colors, lookup, 0.0);\n #endif\n if (grlColorMode == ${GreasedLineMeshColorMode.COLOR_MODE_SET}.) {\n grlFinalColor = grlColor;\n } else if (grlColorMode == ${GreasedLineMeshColorMode.COLOR_MODE_ADD}.) {\n grlFinalColor += grlColor;\n } else if (grlColorMode == ${GreasedLineMeshColorMode.COLOR_MODE_MULTIPLY}.) {\n grlFinalColor *= grlColor;\n }\n }\n #endif\n `,\n };\n }\n\n return null;\n}\n"]}
@@ -10,11 +10,14 @@ export function GetCustomCode(shaderType, cameraFacing) {
10
10
  const obj = {
11
11
  CUSTOM_VERTEX_DEFINITIONS: `
12
12
  attribute grl_widths: f32;
13
- attribute grl_offsets: vec3f;
14
13
  attribute grl_colorPointers: f32;
15
14
  varying grlCounters: f32;
16
15
  varying grlColorPointer: f32;
17
16
 
17
+ #ifdef GREASED_LINE_USE_OFFSETS
18
+ attribute grl_offsets: vec3f;
19
+ #endif
20
+
18
21
  #ifdef GREASED_LINE_CAMERA_FACING
19
22
  attribute grl_previousAndSide : vec4f;
20
23
  attribute grl_nextAndCounters : vec4f;
@@ -32,11 +35,16 @@ export function GetCustomCode(shaderType, cameraFacing) {
32
35
 
33
36
  `,
34
37
  CUSTOM_VERTEX_UPDATE_POSITION: `
35
- #ifdef GREASED_LINE_CAMERA_FACING
38
+ #ifdef GREASED_LINE_USE_OFFSETS
36
39
  var grlPositionOffset: vec3f = input.grl_offsets;
40
+ #else
41
+ var grlPositionOffset = vec3f(0.);
42
+ #endif
43
+
44
+ #ifdef GREASED_LINE_CAMERA_FACING
37
45
  positionUpdated += grlPositionOffset;
38
46
  #else
39
- positionUpdated = (positionUpdated + input.grl_offsets) + (input.grl_slopes * input.grl_widths);
47
+ positionUpdated = (positionUpdated + grlPositionOffset) + (input.grl_slopes * input.grl_widths);
40
48
  #endif
41
49
  `,
42
50
  CUSTOM_VERTEX_MAIN_END: `
@@ -92,7 +100,7 @@ export function GetCustomCode(shaderType, cameraFacing) {
92
100
  grlNormal.x *= grlFinalPosition.w;
93
101
  grlNormal.y *= grlFinalPosition.w;
94
102
 
95
- let pr: f32 = vec4f(uniforms.grl_aspect_resolution_lineWidth.yz, 0.0, 1.0) * uniforms.grl_projection;
103
+ let pr = vec4f(uniforms.grl_aspect_resolution_lineWidth.yz, 0.0, 1.0) * uniforms.grl_projection;
96
104
  grlNormal.x /= pr.x;
97
105
  grlNormal.y /= pr.y;
98
106
  #endif
@@ -111,13 +119,19 @@ export function GetCustomCode(shaderType, cameraFacing) {
111
119
  if (shaderType === "fragment") {
112
120
  return {
113
121
  CUSTOM_FRAGMENT_DEFINITIONS: `
122
+ #ifdef PBR
123
+ #define grlFinalColor finalColor
124
+ #else
125
+ #define grlFinalColor color
126
+ #endif
127
+
114
128
  varying grlCounters: f32;
115
129
  varying grlColorPointer: 32;
116
130
 
117
131
  var grl_colors: texture_2d<f32>;
118
132
  var grl_colorsSampler: sampler;
119
133
  `,
120
- CUSTOM_FRAGMENT_MAIN_END: `
134
+ CUSTOM_FRAGMENT_BEFORE_FRAGCOLOR: `
121
135
  let grlColorMode: f32 = uniforms.grl_colorMode_visibility_colorsWidth_useColors.x;
122
136
  let grlVisibility: f32 = uniforms.grl_colorMode_visibility_colorsWidth_useColors.y;
123
137
  let grlColorsWidth: f32 = uniforms.grl_colorMode_visibility_colorsWidth_useColors.z;
@@ -128,27 +142,27 @@ export function GetCustomCode(shaderType, cameraFacing) {
128
142
  let grlDashOffset: f32 = uniforms.grl_dashOptions.z;
129
143
  let grlDashRatio: f32 = uniforms.grl_dashOptions.w;
130
144
 
131
- fragmentOutputs.color.a *= step(fragmentInputs.grlCounters, grlVisibility);
132
- if (fragmentOutputs.color.a == 0.0) {
145
+ grlFinalColor.a *= step(fragmentInputs.grlCounters, grlVisibility);
146
+ if (grlFinalColor.a == 0.0) {
133
147
  discard;
134
148
  }
135
149
 
136
150
  if (grlUseDash == 1.0) {
137
151
  let dashPosition = (fragmentInputs.grlCounters + grlDashOffset) % grlDashArray;
138
- fragmentOutputs.color.a *= ceil(dashPosition - (grlDashArray * grlDashRatio));
152
+ grlFinalColor.a *= ceil(dashPosition - (grlDashArray * grlDashRatio));
139
153
 
140
- if (fragmentOutputs.color.a == 0.0) {
154
+ if (grlFinalColor.a == 0.0) {
141
155
  discard;
142
156
  }
143
157
  }
144
158
 
145
159
  #ifdef GREASED_LINE_HAS_COLOR
146
160
  if (grlColorMode == ${0 /* GreasedLineMeshColorMode.COLOR_MODE_SET */}.) {
147
- fragmentOutputs.color = vec4f(uniforms.grl_singleColor, fragmentOutputs.color.a);
161
+ grlFinalColor = vec4f(uniforms.grl_singleColor, grlFinalColor.a);
148
162
  } else if (grlColorMode == ${1 /* GreasedLineMeshColorMode.COLOR_MODE_ADD */}.) {
149
- fragmentOutputs.color += vec4f(uniforms.grl_singleColor, fragmentOutputs.color.a);
163
+ grlFinalColor += vec4f(uniforms.grl_singleColor, grlFinalColor.a);
150
164
  } else if (grlColorMode == ${2 /* GreasedLineMeshColorMode.COLOR_MODE_MULTIPLY */}.) {
151
- fragmentOutputs.color *= vec4f(uniforms.grl_singleColor, fragmentOutputs.color.a);
165
+ grlFinalColor *= vec4f(uniforms.grl_singleColor, grlFinalColor.a);
152
166
  }
153
167
  #else
154
168
  if (grlUseColors == 1.) {
@@ -159,11 +173,11 @@ export function GetCustomCode(shaderType, cameraFacing) {
159
173
  let grlColor: vec4f = textureSample(grl_colors, grl_colorsSampler, lookup);
160
174
  #endif
161
175
  if (grlColorMode == ${0 /* GreasedLineMeshColorMode.COLOR_MODE_SET */}.) {
162
- fragmentOutputs.color = grlColor;
176
+ grlFinalColor = grlColor;
163
177
  } else if (grlColorMode == ${1 /* GreasedLineMeshColorMode.COLOR_MODE_ADD */}.) {
164
- fragmentOutputs.color += grlColor;
178
+ grlFinalColor += grlColor;
165
179
  } else if (grlColorMode == ${2 /* GreasedLineMeshColorMode.COLOR_MODE_MULTIPLY */}.) {
166
- fragmentOutputs.color *= grlColor;
180
+ grlFinalColor *= grlColor;
167
181
  }
168
182
  }
169
183
  #endif
@@ -1 +1 @@
1
- {"version":3,"file":"greasedLinePluginMaterialShadersWGSL.js","sourceRoot":"","sources":["../../../../../dev/core/src/Materials/GreasedLine/greasedLinePluginMaterialShadersWGSL.ts"],"names":[],"mappings":"AAGA;;;;;GAKG;AACH,gBAAgB;AAChB,MAAM,UAAU,aAAa,CAAC,UAAkB,EAAE,YAAqB;IACnE,IAAI,UAAU,KAAK,QAAQ,EAAE,CAAC;QAC1B,MAAM,GAAG,GAAQ;YACb,yBAAyB,EAAE;;;;;;;;;;;;;;;;;;;;;;iBAsBtB;YACL,6BAA6B,EAAE;;;;;;;iBAO1B;YACL,sBAAsB,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAgEnB;SACR,CAAC;QAEF,YAAY,IAAI,CAAC,GAAG,CAAC,0EAA0E,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,mCAAmC;QAC7I,OAAO,GAAG,CAAC;IACf,CAAC;IAED,IAAI,UAAU,KAAK,UAAU,EAAE,CAAC;QAC5B,OAAO;YACH,2BAA2B,EAAE;;;;;;iBAMxB;YACL,wBAAwB,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;8CA0BQ,+CAAuC;;qDAEhC,+CAAuC;;qDAEvC,oDAA4C;;;;;;;;;;;kDAW/C,+CAAuC;;yDAEhC,+CAAuC;;yDAEvC,oDAA4C;;;;;;;iBAOpF;SACR,CAAC;IACN,CAAC;IAED,OAAO,IAAI,CAAC;AAChB,CAAC","sourcesContent":["import type { Nullable } from \"../../types\";\nimport { GreasedLineMeshColorMode } from \"./greasedLineMaterialInterfaces\";\n\n/**\n * Returns WGSL custom shader code\n * @param shaderType vertex or fragment\n * @param cameraFacing is in camera facing mode?\n * @returns WGSL custom shader code\n */\n/** @internal */\nexport function GetCustomCode(shaderType: string, cameraFacing: boolean): Nullable<{ [pointName: string]: string }> {\n if (shaderType === \"vertex\") {\n const obj: any = {\n CUSTOM_VERTEX_DEFINITIONS: `\n attribute grl_widths: f32;\n attribute grl_offsets: vec3f;\n attribute grl_colorPointers: f32;\n varying grlCounters: f32;\n varying grlColorPointer: f32;\n\n #ifdef GREASED_LINE_CAMERA_FACING\n attribute grl_previousAndSide : vec4f;\n attribute grl_nextAndCounters : vec4f;\n\n fn grlFix(i: vec4f, aspect: f32) -> vec2f {\n var res = i.xy / i.w;\n res.x *= aspect;\n return res;\n }\n #else\n attribute grl_slopes: f32;\n attribute grl_counters: f32;\n #endif\n\n\n `,\n CUSTOM_VERTEX_UPDATE_POSITION: `\n #ifdef GREASED_LINE_CAMERA_FACING\n var grlPositionOffset: vec3f = input.grl_offsets;\n positionUpdated += grlPositionOffset;\n #else\n positionUpdated = (positionUpdated + input.grl_offsets) + (input.grl_slopes * input.grl_widths);\n #endif\n `,\n CUSTOM_VERTEX_MAIN_END: `\n vertexOutputs.grlColorPointer = input.grl_colorPointers;\n\n #ifdef GREASED_LINE_CAMERA_FACING\n\n let grlAspect: f32 = uniforms.grl_aspect_resolution_lineWidth.x;\n let grlBaseWidth: f32 = uniforms.grl_aspect_resolution_lineWidth.w;\n\n let grlPrevious: vec3f = input.grl_previousAndSide.xyz;\n let grlSide: f32 = input.grl_previousAndSide.w;\n\n let grlNext: vec3f = input.grl_nextAndCounters.xyz;\n vertexOutputs.grlCounters = input.grl_nextAndCounters.w;\n\n let grlMatrix: mat4x4f = uniforms.viewProjection * finalWorld;\n var grlFinalPosition: vec4f = grlMatrix * vec4f(positionUpdated, 1.0);\n let grlPrevPos: vec4f = grlMatrix * vec4f(grlPrevious + grlPositionOffset, 1.0);\n let grlNextPos: vec4f = grlMatrix * vec4f(grlNext + grlPositionOffset, 1.0);\n\n let grlCurrentP: vec2f = grlFix(grlFinalPosition, grlAspect);\n let grlPrevP: vec2f = grlFix(grlPrevPos, grlAspect);\n let grlNextP: vec2f = grlFix(grlNextPos, grlAspect);\n\n let grlWidth: f32 = grlBaseWidth * input.grl_widths;\n\n var grlDir: vec2f;\n if (all(grlNextP == grlCurrentP)) {\n grlDir = normalize(grlCurrentP - grlPrevP);\n } else if (all(grlPrevP == grlCurrentP)) {\n grlDir = normalize(grlNextP - grlCurrentP);\n } else {\n let grlDir1: vec2f = normalize(grlCurrentP - grlPrevP);\n let grlDir2: vec2f = normalize(grlNextP - grlCurrentP);\n grlDir = normalize(grlDir1 + grlDir2);\n }\n\n var grlNormal: vec4f = vec4f(-grlDir.y, grlDir.x, 0.0, 1.0);\n\n let grlHalfWidth: f32 = 0.5 * grlWidth;\n #if defined(GREASED_LINE_RIGHT_HANDED_COORDINATE_SYSTEM)\n grlNormal.x *= -grlHalfWidth;\n grlNormal.y *= -grlHalfWidth;\n #else\n grlNormal.x *= grlHalfWidth;\n grlNormal.y *= grlHalfWidth;\n #endif\n\n grlNormal *= uniforms.grl_projection;\n\n #if defined(GREASED_LINE_SIZE_ATTENUATION)\n grlNormal.x *= grlFinalPosition.w;\n grlNormal.y *= grlFinalPosition.w;\n\n let pr: f32 = vec4f(uniforms.grl_aspect_resolution_lineWidth.yz, 0.0, 1.0) * uniforms.grl_projection;\n grlNormal.x /= pr.x;\n grlNormal.y /= pr.y;\n #endif\n\n vertexOutputs.position = vec4f(grlFinalPosition.xy + grlNormal.xy * grlSide, grlFinalPosition.z, grlFinalPosition.w);\n vertexOutputs.vPositionW = vertexOutputs.position.xyz;\n \n #else\n vertexOutputs.grlCounters = input.grl_counters;\n #endif\n `,\n };\n\n cameraFacing && (obj[\"!vertexOutputs\\\\.position\\\\s=\\\\sscene\\\\.viewProjection\\\\s\\\\*\\\\sworldPos;\"] = \"//\"); // not needed for camera facing GRL\n return obj;\n }\n\n if (shaderType === \"fragment\") {\n return {\n CUSTOM_FRAGMENT_DEFINITIONS: `\n varying grlCounters: f32;\n varying grlColorPointer: 32;\n\n var grl_colors: texture_2d<f32>;\n var grl_colorsSampler: sampler;\n `,\n CUSTOM_FRAGMENT_MAIN_END: `\n let grlColorMode: f32 = uniforms.grl_colorMode_visibility_colorsWidth_useColors.x;\n let grlVisibility: f32 = uniforms.grl_colorMode_visibility_colorsWidth_useColors.y;\n let grlColorsWidth: f32 = uniforms.grl_colorMode_visibility_colorsWidth_useColors.z;\n let grlUseColors: f32 = uniforms.grl_colorMode_visibility_colorsWidth_useColors.w;\n\n let grlUseDash: f32 = uniforms.grl_dashOptions.x;\n let grlDashArray: f32 = uniforms.grl_dashOptions.y;\n let grlDashOffset: f32 = uniforms.grl_dashOptions.z;\n let grlDashRatio: f32 = uniforms.grl_dashOptions.w;\n\n fragmentOutputs.color.a *= step(fragmentInputs.grlCounters, grlVisibility);\n if (fragmentOutputs.color.a == 0.0) {\n discard;\n }\n\n if (grlUseDash == 1.0) {\n let dashPosition = (fragmentInputs.grlCounters + grlDashOffset) % grlDashArray;\n fragmentOutputs.color.a *= ceil(dashPosition - (grlDashArray * grlDashRatio));\n\n if (fragmentOutputs.color.a == 0.0) {\n discard;\n }\n }\n\n #ifdef GREASED_LINE_HAS_COLOR\n if (grlColorMode == ${GreasedLineMeshColorMode.COLOR_MODE_SET}.) {\n fragmentOutputs.color = vec4f(uniforms.grl_singleColor, fragmentOutputs.color.a);\n } else if (grlColorMode == ${GreasedLineMeshColorMode.COLOR_MODE_ADD}.) {\n fragmentOutputs.color += vec4f(uniforms.grl_singleColor, fragmentOutputs.color.a);\n } else if (grlColorMode == ${GreasedLineMeshColorMode.COLOR_MODE_MULTIPLY}.) {\n fragmentOutputs.color *= vec4f(uniforms.grl_singleColor, fragmentOutputs.color.a);\n }\n #else\n if (grlUseColors == 1.) {\n #ifdef GREASED_LINE_COLOR_DISTRIBUTION_TYPE_LINE\n let grlColor: vec4f = textureSample(grl_colors, grl_colorsSampler, vec2f(fragmentInputs.grlCounters, 0.));\n #else\n let lookup: vec2f = vec2(fract(fragmentInputs.grlColorPointer / uniforms.grl_textureSize.x), 1.0 - floor(fragmentInputs.grlColorPointer / uniforms.grl_textureSize.x) / max(uniforms.grl_textureSize.y - 1.0, 1.0));\n let grlColor: vec4f = textureSample(grl_colors, grl_colorsSampler, lookup);\n #endif\n if (grlColorMode == ${GreasedLineMeshColorMode.COLOR_MODE_SET}.) {\n fragmentOutputs.color = grlColor;\n } else if (grlColorMode == ${GreasedLineMeshColorMode.COLOR_MODE_ADD}.) {\n fragmentOutputs.color += grlColor;\n } else if (grlColorMode == ${GreasedLineMeshColorMode.COLOR_MODE_MULTIPLY}.) {\n fragmentOutputs.color *= grlColor;\n }\n }\n #endif\n\n\n `,\n };\n }\n\n return null;\n}\n"]}
1
+ {"version":3,"file":"greasedLinePluginMaterialShadersWGSL.js","sourceRoot":"","sources":["../../../../../dev/core/src/Materials/GreasedLine/greasedLinePluginMaterialShadersWGSL.ts"],"names":[],"mappings":"AAGA;;;;;GAKG;AACH,gBAAgB;AAChB,MAAM,UAAU,aAAa,CAAC,UAAkB,EAAE,YAAqB;IACnE,IAAI,UAAU,KAAK,QAAQ,EAAE,CAAC;QAC1B,MAAM,GAAG,GAAQ;YACb,yBAAyB,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;iBAyBtB;YACL,6BAA6B,EAAE;;;;;;;;;;;;iBAY1B;YACL,sBAAsB,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAgEnB;SACR,CAAC;QAEF,YAAY,IAAI,CAAC,GAAG,CAAC,0EAA0E,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,mCAAmC;QAC7I,OAAO,GAAG,CAAC;IACf,CAAC;IAED,IAAI,UAAU,KAAK,UAAU,EAAE,CAAC;QAC5B,OAAO;YACH,2BAA2B,EAAE;;;;;;;;;;;;iBAYxB;YACL,gCAAgC,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;8CA0BA,+CAAuC;;qDAEhC,+CAAuC;;qDAEvC,oDAA4C;;;;;;;;;;;kDAW/C,+CAAuC;;yDAEhC,+CAAuC;;yDAEvC,oDAA4C;;;;;;;iBAOpF;SACR,CAAC;IACN,CAAC;IAED,OAAO,IAAI,CAAC;AAChB,CAAC","sourcesContent":["import type { Nullable } from \"../../types\";\nimport { GreasedLineMeshColorMode } from \"./greasedLineMaterialInterfaces\";\n\n/**\n * Returns WGSL custom shader code\n * @param shaderType vertex or fragment\n * @param cameraFacing is in camera facing mode?\n * @returns WGSL custom shader code\n */\n/** @internal */\nexport function GetCustomCode(shaderType: string, cameraFacing: boolean): Nullable<{ [pointName: string]: string }> {\n if (shaderType === \"vertex\") {\n const obj: any = {\n CUSTOM_VERTEX_DEFINITIONS: `\n attribute grl_widths: f32;\n attribute grl_colorPointers: f32;\n varying grlCounters: f32;\n varying grlColorPointer: f32;\n\n #ifdef GREASED_LINE_USE_OFFSETS\n attribute grl_offsets: vec3f; \n #endif\n\n #ifdef GREASED_LINE_CAMERA_FACING\n attribute grl_previousAndSide : vec4f;\n attribute grl_nextAndCounters : vec4f;\n\n fn grlFix(i: vec4f, aspect: f32) -> vec2f {\n var res = i.xy / i.w;\n res.x *= aspect;\n return res;\n }\n #else\n attribute grl_slopes: f32;\n attribute grl_counters: f32;\n #endif\n\n\n `,\n CUSTOM_VERTEX_UPDATE_POSITION: `\n #ifdef GREASED_LINE_USE_OFFSETS\n var grlPositionOffset: vec3f = input.grl_offsets;\n #else\n var grlPositionOffset = vec3f(0.);\n #endif\n\n #ifdef GREASED_LINE_CAMERA_FACING\n positionUpdated += grlPositionOffset;\n #else\n positionUpdated = (positionUpdated + grlPositionOffset) + (input.grl_slopes * input.grl_widths);\n #endif\n `,\n CUSTOM_VERTEX_MAIN_END: `\n vertexOutputs.grlColorPointer = input.grl_colorPointers;\n\n #ifdef GREASED_LINE_CAMERA_FACING\n\n let grlAspect: f32 = uniforms.grl_aspect_resolution_lineWidth.x;\n let grlBaseWidth: f32 = uniforms.grl_aspect_resolution_lineWidth.w;\n\n let grlPrevious: vec3f = input.grl_previousAndSide.xyz;\n let grlSide: f32 = input.grl_previousAndSide.w;\n\n let grlNext: vec3f = input.grl_nextAndCounters.xyz;\n vertexOutputs.grlCounters = input.grl_nextAndCounters.w;\n\n let grlMatrix: mat4x4f = uniforms.viewProjection * finalWorld;\n var grlFinalPosition: vec4f = grlMatrix * vec4f(positionUpdated, 1.0);\n let grlPrevPos: vec4f = grlMatrix * vec4f(grlPrevious + grlPositionOffset, 1.0);\n let grlNextPos: vec4f = grlMatrix * vec4f(grlNext + grlPositionOffset, 1.0);\n\n let grlCurrentP: vec2f = grlFix(grlFinalPosition, grlAspect);\n let grlPrevP: vec2f = grlFix(grlPrevPos, grlAspect);\n let grlNextP: vec2f = grlFix(grlNextPos, grlAspect);\n\n let grlWidth: f32 = grlBaseWidth * input.grl_widths;\n\n var grlDir: vec2f;\n if (all(grlNextP == grlCurrentP)) {\n grlDir = normalize(grlCurrentP - grlPrevP);\n } else if (all(grlPrevP == grlCurrentP)) {\n grlDir = normalize(grlNextP - grlCurrentP);\n } else {\n let grlDir1: vec2f = normalize(grlCurrentP - grlPrevP);\n let grlDir2: vec2f = normalize(grlNextP - grlCurrentP);\n grlDir = normalize(grlDir1 + grlDir2);\n }\n\n var grlNormal: vec4f = vec4f(-grlDir.y, grlDir.x, 0.0, 1.0);\n\n let grlHalfWidth: f32 = 0.5 * grlWidth;\n #if defined(GREASED_LINE_RIGHT_HANDED_COORDINATE_SYSTEM)\n grlNormal.x *= -grlHalfWidth;\n grlNormal.y *= -grlHalfWidth;\n #else\n grlNormal.x *= grlHalfWidth;\n grlNormal.y *= grlHalfWidth;\n #endif\n\n grlNormal *= uniforms.grl_projection;\n\n #if defined(GREASED_LINE_SIZE_ATTENUATION)\n grlNormal.x *= grlFinalPosition.w;\n grlNormal.y *= grlFinalPosition.w;\n\n let pr = vec4f(uniforms.grl_aspect_resolution_lineWidth.yz, 0.0, 1.0) * uniforms.grl_projection;\n grlNormal.x /= pr.x;\n grlNormal.y /= pr.y;\n #endif\n\n vertexOutputs.position = vec4f(grlFinalPosition.xy + grlNormal.xy * grlSide, grlFinalPosition.z, grlFinalPosition.w);\n vertexOutputs.vPositionW = vertexOutputs.position.xyz;\n \n #else\n vertexOutputs.grlCounters = input.grl_counters;\n #endif\n `,\n };\n\n cameraFacing && (obj[\"!vertexOutputs\\\\.position\\\\s=\\\\sscene\\\\.viewProjection\\\\s\\\\*\\\\sworldPos;\"] = \"//\"); // not needed for camera facing GRL\n return obj;\n }\n\n if (shaderType === \"fragment\") {\n return {\n CUSTOM_FRAGMENT_DEFINITIONS: `\n #ifdef PBR\n #define grlFinalColor finalColor\n #else\n #define grlFinalColor color\n #endif\n\n varying grlCounters: f32;\n varying grlColorPointer: 32;\n\n var grl_colors: texture_2d<f32>;\n var grl_colorsSampler: sampler;\n `,\n CUSTOM_FRAGMENT_BEFORE_FRAGCOLOR: `\n let grlColorMode: f32 = uniforms.grl_colorMode_visibility_colorsWidth_useColors.x;\n let grlVisibility: f32 = uniforms.grl_colorMode_visibility_colorsWidth_useColors.y;\n let grlColorsWidth: f32 = uniforms.grl_colorMode_visibility_colorsWidth_useColors.z;\n let grlUseColors: f32 = uniforms.grl_colorMode_visibility_colorsWidth_useColors.w;\n\n let grlUseDash: f32 = uniforms.grl_dashOptions.x;\n let grlDashArray: f32 = uniforms.grl_dashOptions.y;\n let grlDashOffset: f32 = uniforms.grl_dashOptions.z;\n let grlDashRatio: f32 = uniforms.grl_dashOptions.w;\n\n grlFinalColor.a *= step(fragmentInputs.grlCounters, grlVisibility);\n if (grlFinalColor.a == 0.0) {\n discard;\n }\n\n if (grlUseDash == 1.0) {\n let dashPosition = (fragmentInputs.grlCounters + grlDashOffset) % grlDashArray;\n grlFinalColor.a *= ceil(dashPosition - (grlDashArray * grlDashRatio));\n\n if (grlFinalColor.a == 0.0) {\n discard;\n }\n }\n\n #ifdef GREASED_LINE_HAS_COLOR\n if (grlColorMode == ${GreasedLineMeshColorMode.COLOR_MODE_SET}.) {\n grlFinalColor = vec4f(uniforms.grl_singleColor, grlFinalColor.a);\n } else if (grlColorMode == ${GreasedLineMeshColorMode.COLOR_MODE_ADD}.) {\n grlFinalColor += vec4f(uniforms.grl_singleColor, grlFinalColor.a);\n } else if (grlColorMode == ${GreasedLineMeshColorMode.COLOR_MODE_MULTIPLY}.) {\n grlFinalColor *= vec4f(uniforms.grl_singleColor, grlFinalColor.a);\n }\n #else\n if (grlUseColors == 1.) {\n #ifdef GREASED_LINE_COLOR_DISTRIBUTION_TYPE_LINE\n let grlColor: vec4f = textureSample(grl_colors, grl_colorsSampler, vec2f(fragmentInputs.grlCounters, 0.));\n #else\n let lookup: vec2f = vec2(fract(fragmentInputs.grlColorPointer / uniforms.grl_textureSize.x), 1.0 - floor(fragmentInputs.grlColorPointer / uniforms.grl_textureSize.x) / max(uniforms.grl_textureSize.y - 1.0, 1.0));\n let grlColor: vec4f = textureSample(grl_colors, grl_colorsSampler, lookup);\n #endif\n if (grlColorMode == ${GreasedLineMeshColorMode.COLOR_MODE_SET}.) {\n grlFinalColor = grlColor;\n } else if (grlColorMode == ${GreasedLineMeshColorMode.COLOR_MODE_ADD}.) {\n grlFinalColor += grlColor;\n } else if (grlColorMode == ${GreasedLineMeshColorMode.COLOR_MODE_MULTIPLY}.) {\n grlFinalColor *= grlColor;\n }\n }\n #endif\n\n\n `,\n };\n }\n\n return null;\n}\n"]}
@@ -6,6 +6,7 @@ import { Color3 } from "../../Maths/math.color";
6
6
  import { Vector2 } from "../../Maths/math.vector";
7
7
  import type { GreasedLineMaterialOptions, IGreasedLineMaterial } from "./greasedLineMaterialInterfaces";
8
8
  import { GreasedLineMeshColorDistributionType, GreasedLineMeshColorMode } from "./greasedLineMaterialInterfaces";
9
+ export declare const GreasedLineUseOffsetsSimpleMaterialDefine = "GREASED_LINE_USE_OFFSETS";
9
10
  /**
10
11
  * GreasedLineSimpleMaterial
11
12
  */
@@ -5,6 +5,7 @@ import { Vector2 } from "../../Maths/math.vector.js";
5
5
  import { TextureSampler } from "../Textures/textureSampler.js";
6
6
  import { GreasedLineTools } from "../../Misc/greasedLineTools.js";
7
7
  import { GreasedLineMaterialDefaults } from "./greasedLineMaterialDefaults.js";
8
+ export const GreasedLineUseOffsetsSimpleMaterialDefine = "GREASED_LINE_USE_OFFSETS";
8
9
  /**
9
10
  * GreasedLineSimpleMaterial
10
11
  */