@babylonjs/core 7.37.0 → 7.37.2

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 (222) hide show
  1. package/Buffers/buffer.d.ts +3 -1
  2. package/Buffers/buffer.js +20 -122
  3. package/Buffers/buffer.js.map +1 -1
  4. package/Buffers/bufferUtils.d.ts +32 -1
  5. package/Buffers/bufferUtils.js +221 -10
  6. package/Buffers/bufferUtils.js.map +1 -1
  7. package/Cameras/arcRotateCamera.d.ts +3 -1
  8. package/Cameras/arcRotateCamera.js +14 -3
  9. package/Cameras/arcRotateCamera.js.map +1 -1
  10. package/Engines/abstractEngine.js +2 -2
  11. package/Engines/abstractEngine.js.map +1 -1
  12. package/Engines/engine.js +0 -4
  13. package/Engines/engine.js.map +1 -1
  14. package/Engines/thinEngine.js +2 -2
  15. package/Engines/thinEngine.js.map +1 -1
  16. package/FrameGraph/Node/nodeRenderGraphBlock.js +1 -0
  17. package/FrameGraph/Node/nodeRenderGraphBlock.js.map +1 -1
  18. package/FrameGraph/Node/nodeRenderGraphBlockConnectionPoint.d.ts +2 -0
  19. package/FrameGraph/Node/nodeRenderGraphBlockConnectionPoint.js +3 -1
  20. package/FrameGraph/Node/nodeRenderGraphBlockConnectionPoint.js.map +1 -1
  21. package/Inputs/scene.inputManager.js +2 -0
  22. package/Inputs/scene.inputManager.js.map +1 -1
  23. package/Lights/IES/iesLoader.d.ts +19 -0
  24. package/Lights/IES/iesLoader.js +150 -0
  25. package/Lights/IES/iesLoader.js.map +1 -0
  26. package/Lights/index.d.ts +1 -0
  27. package/Lights/index.js +1 -0
  28. package/Lights/index.js.map +1 -1
  29. package/Materials/GaussianSplatting/gaussianSplattingMaterial.js +12 -2
  30. package/Materials/GaussianSplatting/gaussianSplattingMaterial.js.map +1 -1
  31. package/Materials/GreasedLine/greasedLineMaterialInterfaces.d.ts +5 -0
  32. package/Materials/GreasedLine/greasedLineMaterialInterfaces.js.map +1 -1
  33. package/Materials/GreasedLine/greasedLinePluginMaterial.d.ts +21 -5
  34. package/Materials/GreasedLine/greasedLinePluginMaterial.js +52 -176
  35. package/Materials/GreasedLine/greasedLinePluginMaterial.js.map +1 -1
  36. package/Materials/GreasedLine/greasedLinePluginMaterialShadersGLSL.d.ts +11 -0
  37. package/Materials/GreasedLine/greasedLinePluginMaterialShadersGLSL.js +158 -0
  38. package/Materials/GreasedLine/greasedLinePluginMaterialShadersGLSL.js.map +1 -0
  39. package/Materials/GreasedLine/greasedLinePluginMaterialShadersWGSL.d.ts +11 -0
  40. package/Materials/GreasedLine/greasedLinePluginMaterialShadersWGSL.js +177 -0
  41. package/Materials/GreasedLine/greasedLinePluginMaterialShadersWGSL.js.map +1 -0
  42. package/Materials/GreasedLine/greasedLineSimpleMaterial.d.ts +4 -2
  43. package/Materials/GreasedLine/greasedLineSimpleMaterial.js +45 -25
  44. package/Materials/GreasedLine/greasedLineSimpleMaterial.js.map +1 -1
  45. package/Materials/Node/Blocks/PBR/reflectionBlock.js +6 -0
  46. package/Materials/Node/Blocks/PBR/reflectionBlock.js.map +1 -1
  47. package/Materials/Node/Blocks/index.d.ts +1 -0
  48. package/Materials/Node/Blocks/index.js +1 -0
  49. package/Materials/Node/Blocks/index.js.map +1 -1
  50. package/Materials/Node/Blocks/matrixSplitterBlock.d.ts +56 -0
  51. package/Materials/Node/Blocks/matrixSplitterBlock.js +130 -0
  52. package/Materials/Node/Blocks/matrixSplitterBlock.js.map +1 -0
  53. package/Materials/Node/nodeMaterialBlock.js +1 -0
  54. package/Materials/Node/nodeMaterialBlock.js.map +1 -1
  55. package/Materials/Node/nodeMaterialBlockConnectionPoint.d.ts +2 -0
  56. package/Materials/Node/nodeMaterialBlockConnectionPoint.js +4 -1
  57. package/Materials/Node/nodeMaterialBlockConnectionPoint.js.map +1 -1
  58. package/Materials/PBR/pbrBaseMaterial.d.ts +1 -0
  59. package/Materials/PBR/pbrBaseMaterial.js +12 -0
  60. package/Materials/PBR/pbrBaseMaterial.js.map +1 -1
  61. package/Materials/Textures/Loaders/iesTextureLoader.d.ts +23 -0
  62. package/Materials/Textures/Loaders/iesTextureLoader.js +40 -0
  63. package/Materials/Textures/Loaders/iesTextureLoader.js.map +1 -0
  64. package/Materials/Textures/Loaders/index.d.ts +1 -0
  65. package/Materials/Textures/Loaders/index.js +1 -0
  66. package/Materials/Textures/Loaders/index.js.map +1 -1
  67. package/Materials/Textures/Loaders/textureLoaderManager.js +3 -0
  68. package/Materials/Textures/Loaders/textureLoaderManager.js.map +1 -1
  69. package/Materials/effectRenderer.js +1 -1
  70. package/Materials/effectRenderer.js.map +1 -1
  71. package/Materials/index.d.ts +4 -0
  72. package/Materials/index.js +5 -0
  73. package/Materials/index.js.map +1 -1
  74. package/Maths/math.scalar.d.ts +0 -1
  75. package/Maths/math.scalar.js +1 -2
  76. package/Maths/math.scalar.js.map +1 -1
  77. package/Meshes/Builders/greasedLineBuilder.js +2 -2
  78. package/Meshes/Builders/greasedLineBuilder.js.map +1 -1
  79. package/Meshes/GaussianSplatting/gaussianSplattingMesh.d.ts +15 -2
  80. package/Meshes/GaussianSplatting/gaussianSplattingMesh.js +68 -20
  81. package/Meshes/GaussianSplatting/gaussianSplattingMesh.js.map +1 -1
  82. package/Meshes/Node/Blocks/geometryInputBlock.d.ts +4 -0
  83. package/Meshes/Node/Blocks/geometryInputBlock.js +8 -0
  84. package/Meshes/Node/Blocks/geometryInputBlock.js.map +1 -1
  85. package/Meshes/Node/nodeGeometryBlock.js +1 -0
  86. package/Meshes/Node/nodeGeometryBlock.js.map +1 -1
  87. package/Meshes/Node/nodeGeometryBlockConnectionPoint.d.ts +2 -0
  88. package/Meshes/Node/nodeGeometryBlockConnectionPoint.js +3 -1
  89. package/Meshes/Node/nodeGeometryBlockConnectionPoint.js.map +1 -1
  90. package/Meshes/abstractMesh.hotSpot.d.ts +8 -1
  91. package/Meshes/abstractMesh.hotSpot.js +17 -0
  92. package/Meshes/abstractMesh.hotSpot.js.map +1 -1
  93. package/Meshes/linesMesh.js +1 -1
  94. package/Meshes/linesMesh.js.map +1 -1
  95. package/Misc/deepMerger.d.ts +6 -0
  96. package/Misc/deepMerger.js +26 -0
  97. package/Misc/deepMerger.js.map +1 -0
  98. package/Misc/index.d.ts +1 -0
  99. package/Misc/index.js +1 -0
  100. package/Misc/index.js.map +1 -1
  101. package/Misc/virtualJoystick.js +2 -0
  102. package/Misc/virtualJoystick.js.map +1 -1
  103. package/Rendering/IBLShadows/iblShadowsRenderPipeline.d.ts +3 -23
  104. package/Rendering/IBLShadows/iblShadowsRenderPipeline.js +30 -67
  105. package/Rendering/IBLShadows/iblShadowsRenderPipeline.js.map +1 -1
  106. package/Rendering/IBLShadows/iblShadowsVoxelTracingPass.d.ts +1 -1
  107. package/Rendering/IBLShadows/iblShadowsVoxelTracingPass.js +8 -4
  108. package/Rendering/IBLShadows/iblShadowsVoxelTracingPass.js.map +1 -1
  109. package/Rendering/boundingBoxRenderer.d.ts +63 -1
  110. package/Rendering/boundingBoxRenderer.js +224 -3
  111. package/Rendering/boundingBoxRenderer.js.map +1 -1
  112. package/Rendering/edgesRenderer.js +4 -1
  113. package/Rendering/edgesRenderer.js.map +1 -1
  114. package/Rendering/{IBLShadows/iblShadowsImportanceSamplingRenderer.d.ts → iblCdfGenerator.d.ts} +15 -12
  115. package/Rendering/{IBLShadows/iblShadowsImportanceSamplingRenderer.js → iblCdfGenerator.js} +37 -27
  116. package/Rendering/iblCdfGenerator.js.map +1 -0
  117. package/Rendering/iblCdfGeneratorSceneComponent.d.ts +59 -0
  118. package/Rendering/iblCdfGeneratorSceneComponent.js +83 -0
  119. package/Rendering/iblCdfGeneratorSceneComponent.js.map +1 -0
  120. package/Rendering/index.d.ts +12 -10
  121. package/Rendering/index.js +12 -10
  122. package/Rendering/index.js.map +1 -1
  123. package/Shaders/ShadersInclude/gaussianSplatting.js +72 -2
  124. package/Shaders/ShadersInclude/gaussianSplatting.js.map +1 -1
  125. package/Shaders/ShadersInclude/gaussianSplattingVertexDeclaration.js +1 -1
  126. package/Shaders/ShadersInclude/gaussianSplattingVertexDeclaration.js.map +1 -1
  127. package/Shaders/ShadersInclude/hdrFilteringFunctions.js +29 -4
  128. package/Shaders/ShadersInclude/hdrFilteringFunctions.js.map +1 -1
  129. package/Shaders/ShadersInclude/pbrBlockReflection.js +9 -1
  130. package/Shaders/ShadersInclude/pbrBlockReflection.js.map +1 -1
  131. package/Shaders/ShadersInclude/pbrBlockSubSurface.js +9 -1
  132. package/Shaders/ShadersInclude/pbrBlockSubSurface.js.map +1 -1
  133. package/Shaders/ShadersInclude/pbrFragmentSamplersDeclaration.js +3 -0
  134. package/Shaders/ShadersInclude/pbrFragmentSamplersDeclaration.js.map +1 -1
  135. package/Shaders/boundingBoxRenderer.vertex.js +7 -0
  136. package/Shaders/boundingBoxRenderer.vertex.js.map +1 -1
  137. package/Shaders/gaussianSplatting.vertex.js +16 -2
  138. package/Shaders/gaussianSplatting.vertex.js.map +1 -1
  139. package/Shaders/{iblShadowsCdfy.fragment.d.ts → iblCdfx.fragment.d.ts} +1 -1
  140. package/Shaders/{iblShadowsCdfx.fragment.js → iblCdfx.fragment.js} +3 -3
  141. package/Shaders/iblCdfx.fragment.js.map +1 -0
  142. package/Shaders/{iblShadowsCdfx.fragment.d.ts → iblCdfy.fragment.d.ts} +1 -1
  143. package/Shaders/{iblShadowsCdfy.fragment.js → iblCdfy.fragment.js} +3 -3
  144. package/Shaders/iblCdfy.fragment.js.map +1 -0
  145. package/Shaders/{iblShadowsIcdfx.fragment.d.ts → iblIcdfx.fragment.d.ts} +1 -1
  146. package/Shaders/{iblShadowsIcdfx.fragment.js → iblIcdfx.fragment.js} +3 -3
  147. package/Shaders/iblIcdfx.fragment.js.map +1 -0
  148. package/Shaders/{iblShadowsIcdfy.fragment.d.ts → iblIcdfy.fragment.d.ts} +1 -1
  149. package/Shaders/{iblShadowsIcdfy.fragment.js → iblIcdfy.fragment.js} +3 -3
  150. package/Shaders/iblIcdfy.fragment.js.map +1 -0
  151. package/Shaders/importanceSamplingDebug.fragment.d.ts +5 -0
  152. package/Shaders/{iblShadowsImportanceSamplingDebug.fragment.js → importanceSamplingDebug.fragment.js} +3 -3
  153. package/Shaders/importanceSamplingDebug.fragment.js.map +1 -0
  154. package/Shaders/pbr.fragment.js +8 -0
  155. package/Shaders/pbr.fragment.js.map +1 -1
  156. package/ShadersWGSL/ShadersInclude/gaussianSplatting.js +77 -1
  157. package/ShadersWGSL/ShadersInclude/gaussianSplatting.js.map +1 -1
  158. package/ShadersWGSL/ShadersInclude/hdrFilteringFunctions.js +28 -4
  159. package/ShadersWGSL/ShadersInclude/hdrFilteringFunctions.js.map +1 -1
  160. package/ShadersWGSL/ShadersInclude/lightFragment.js +1 -1
  161. package/ShadersWGSL/ShadersInclude/lightFragment.js.map +1 -1
  162. package/ShadersWGSL/ShadersInclude/oitFragment.js +1 -1
  163. package/ShadersWGSL/ShadersInclude/oitFragment.js.map +1 -1
  164. package/ShadersWGSL/ShadersInclude/pbrBlockReflection.js +14 -1
  165. package/ShadersWGSL/ShadersInclude/pbrBlockReflection.js.map +1 -1
  166. package/ShadersWGSL/ShadersInclude/pbrBlockSubSurface.js +14 -1
  167. package/ShadersWGSL/ShadersInclude/pbrBlockSubSurface.js.map +1 -1
  168. package/ShadersWGSL/ShadersInclude/pbrFragmentSamplersDeclaration.js +3 -0
  169. package/ShadersWGSL/ShadersInclude/pbrFragmentSamplersDeclaration.js.map +1 -1
  170. package/ShadersWGSL/ShadersInclude/shadowsFragmentFunctions.js +1 -1
  171. package/ShadersWGSL/ShadersInclude/shadowsFragmentFunctions.js.map +1 -1
  172. package/ShadersWGSL/boundingBoxRenderer.vertex.js +9 -1
  173. package/ShadersWGSL/boundingBoxRenderer.vertex.js.map +1 -1
  174. package/ShadersWGSL/gaussianSplatting.vertex.js +18 -2
  175. package/ShadersWGSL/gaussianSplatting.vertex.js.map +1 -1
  176. package/ShadersWGSL/greasedLine.fragment.d.ts +5 -0
  177. package/ShadersWGSL/greasedLine.fragment.js +25 -0
  178. package/ShadersWGSL/greasedLine.fragment.js.map +1 -0
  179. package/ShadersWGSL/greasedLine.vertex.d.ts +9 -0
  180. package/ShadersWGSL/greasedLine.vertex.js +43 -0
  181. package/ShadersWGSL/greasedLine.vertex.js.map +1 -0
  182. package/ShadersWGSL/iblCdfx.fragment.d.ts +5 -0
  183. package/ShadersWGSL/{iblShadowsCdfx.fragment.js → iblCdfx.fragment.js} +3 -3
  184. package/ShadersWGSL/iblCdfx.fragment.js.map +1 -0
  185. package/ShadersWGSL/iblCdfy.fragment.d.ts +5 -0
  186. package/ShadersWGSL/{iblShadowsCdfy.fragment.js → iblCdfy.fragment.js} +3 -3
  187. package/ShadersWGSL/iblCdfy.fragment.js.map +1 -0
  188. package/ShadersWGSL/iblIcdfx.fragment.d.ts +5 -0
  189. package/ShadersWGSL/{iblShadowsIcdfx.fragment.js → iblIcdfx.fragment.js} +3 -3
  190. package/ShadersWGSL/iblIcdfx.fragment.js.map +1 -0
  191. package/ShadersWGSL/iblIcdfy.fragment.d.ts +5 -0
  192. package/ShadersWGSL/{iblShadowsIcdfy.fragment.js → iblIcdfy.fragment.js} +3 -3
  193. package/ShadersWGSL/iblIcdfy.fragment.js.map +1 -0
  194. package/ShadersWGSL/importanceSamplingDebug.fragment.d.ts +5 -0
  195. package/ShadersWGSL/{iblShadowsImportanceSamplingDebug.fragment.js → importanceSamplingDebug.fragment.js} +3 -3
  196. package/ShadersWGSL/importanceSamplingDebug.fragment.js.map +1 -0
  197. package/ShadersWGSL/pbr.fragment.js +12 -0
  198. package/ShadersWGSL/pbr.fragment.js.map +1 -1
  199. package/package.json +1 -1
  200. package/scene.d.ts +4 -0
  201. package/scene.js +6 -0
  202. package/scene.js.map +1 -1
  203. package/sceneComponent.d.ts +1 -1
  204. package/sceneComponent.js +1 -1
  205. package/sceneComponent.js.map +1 -1
  206. package/Rendering/IBLShadows/iblShadowsImportanceSamplingRenderer.js.map +0 -1
  207. package/Shaders/iblShadowsCdfx.fragment.js.map +0 -1
  208. package/Shaders/iblShadowsCdfy.fragment.js.map +0 -1
  209. package/Shaders/iblShadowsIcdfx.fragment.js.map +0 -1
  210. package/Shaders/iblShadowsIcdfy.fragment.js.map +0 -1
  211. package/Shaders/iblShadowsImportanceSamplingDebug.fragment.d.ts +0 -5
  212. package/Shaders/iblShadowsImportanceSamplingDebug.fragment.js.map +0 -1
  213. package/ShadersWGSL/iblShadowsCdfx.fragment.d.ts +0 -5
  214. package/ShadersWGSL/iblShadowsCdfx.fragment.js.map +0 -1
  215. package/ShadersWGSL/iblShadowsCdfy.fragment.d.ts +0 -5
  216. package/ShadersWGSL/iblShadowsCdfy.fragment.js.map +0 -1
  217. package/ShadersWGSL/iblShadowsIcdfx.fragment.d.ts +0 -5
  218. package/ShadersWGSL/iblShadowsIcdfx.fragment.js.map +0 -1
  219. package/ShadersWGSL/iblShadowsIcdfy.fragment.d.ts +0 -5
  220. package/ShadersWGSL/iblShadowsIcdfy.fragment.js.map +0 -1
  221. package/ShadersWGSL/iblShadowsImportanceSamplingDebug.fragment.d.ts +0 -5
  222. package/ShadersWGSL/iblShadowsImportanceSamplingDebug.fragment.js.map +0 -1
@@ -0,0 +1,158 @@
1
+ /**
2
+ * Returns GLSL custom shader code
3
+ * @param shaderType vertex or fragment
4
+ * @param cameraFacing is in camera facing mode?
5
+ * @returns GLSL custom shader code
6
+ */
7
+ /** @internal */
8
+ export function GetCustomCode(shaderType, cameraFacing) {
9
+ if (shaderType === "vertex") {
10
+ const obj = {
11
+ CUSTOM_VERTEX_DEFINITIONS: `
12
+ attribute float grl_widths;
13
+ attribute vec3 grl_offsets;
14
+ attribute float grl_colorPointers;
15
+ varying float grlCounters;
16
+ varying float grlColorPointer;
17
+
18
+ #ifdef GREASED_LINE_CAMERA_FACING
19
+ attribute vec4 grl_previousAndSide;
20
+ attribute vec4 grl_nextAndCounters;
21
+
22
+ vec2 grlFix( vec4 i, float aspect ) {
23
+ vec2 res = i.xy / i.w;
24
+ res.x *= aspect;
25
+ return res;
26
+ }
27
+ #else
28
+ attribute vec3 grl_slopes;
29
+ attribute float grl_counters;
30
+ #endif
31
+ `,
32
+ CUSTOM_VERTEX_UPDATE_POSITION: `
33
+ #ifdef GREASED_LINE_CAMERA_FACING
34
+ vec3 grlPositionOffset = grl_offsets;
35
+ positionUpdated += grlPositionOffset;
36
+ #else
37
+ positionUpdated = (positionUpdated + grl_offsets) + (grl_slopes * grl_widths);
38
+ #endif
39
+ `,
40
+ CUSTOM_VERTEX_MAIN_END: `
41
+ grlColorPointer = grl_colorPointers;
42
+
43
+ #ifdef GREASED_LINE_CAMERA_FACING
44
+
45
+ float grlAspect = grl_aspect_resolution_lineWidth.x;
46
+ float grlBaseWidth = grl_aspect_resolution_lineWidth.w;
47
+
48
+ vec3 grlPrevious = grl_previousAndSide.xyz;
49
+ float grlSide = grl_previousAndSide.w;
50
+
51
+ vec3 grlNext = grl_nextAndCounters.xyz;
52
+ grlCounters = grl_nextAndCounters.w;
53
+
54
+ mat4 grlMatrix = viewProjection * finalWorld;
55
+ vec4 grlFinalPosition = grlMatrix * vec4(positionUpdated, 1.0);
56
+ vec4 grlPrevPos = grlMatrix * vec4(grlPrevious + grlPositionOffset, 1.0);
57
+ vec4 grlNextPos = grlMatrix * vec4(grlNext + grlPositionOffset, 1.0);
58
+
59
+ vec2 grlCurrentP = grlFix(grlFinalPosition, grlAspect);
60
+ vec2 grlPrevP = grlFix(grlPrevPos, grlAspect);
61
+ vec2 grlNextP = grlFix(grlNextPos, grlAspect);
62
+
63
+ float grlWidth = grlBaseWidth * grl_widths;
64
+
65
+ vec2 grlDir;
66
+ if (grlNextP == grlCurrentP) {
67
+ grlDir = normalize(grlCurrentP - grlPrevP);
68
+ } else if (grlPrevP == grlCurrentP) {
69
+ grlDir = normalize(grlNextP - grlCurrentP);
70
+ } else {
71
+ vec2 grlDir1 = normalize(grlCurrentP - grlPrevP);
72
+ vec2 grlDir2 = normalize(grlNextP - grlCurrentP);
73
+ grlDir = normalize(grlDir1 + grlDir2);
74
+ }
75
+ vec4 grlNormal = vec4(-grlDir.y, grlDir.x, 0., 1.);
76
+
77
+ #ifdef GREASED_LINE_RIGHT_HANDED_COORDINATE_SYSTEM
78
+ grlNormal.xy *= -.5 * grlWidth;
79
+ #else
80
+ grlNormal.xy *= .5 * grlWidth;
81
+ #endif
82
+
83
+ grlNormal *= grl_projection;
84
+
85
+ #ifdef GREASED_LINE_SIZE_ATTENUATION
86
+ grlNormal.xy *= grlFinalPosition.w;
87
+ grlNormal.xy /= (vec4(grl_aspect_resolution_lineWidth.yz, 0., 1.) * grl_projection).xy;
88
+ #endif
89
+
90
+ grlFinalPosition.xy += grlNormal.xy * grlSide;
91
+ gl_Position = grlFinalPosition;
92
+
93
+ vPositionW = vec3(grlFinalPosition);
94
+ #else
95
+ grlCounters = grl_counters;
96
+ #endif
97
+ `,
98
+ };
99
+ cameraFacing && (obj["!gl_Position\\=viewProjection\\*worldPos;"] = "//"); // not needed for camera facing GRL
100
+ return obj;
101
+ }
102
+ if (shaderType === "fragment") {
103
+ return {
104
+ CUSTOM_FRAGMENT_DEFINITIONS: `
105
+ varying float grlCounters;
106
+ varying float grlColorPointer;
107
+ uniform sampler2D grl_colors;
108
+ `,
109
+ CUSTOM_FRAGMENT_MAIN_END: `
110
+ float grlColorMode = grl_colorMode_visibility_colorsWidth_useColors.x;
111
+ float grlVisibility = grl_colorMode_visibility_colorsWidth_useColors.y;
112
+ float grlColorsWidth = grl_colorMode_visibility_colorsWidth_useColors.z;
113
+ float grlUseColors = grl_colorMode_visibility_colorsWidth_useColors.w;
114
+
115
+ float grlUseDash = grl_dashOptions.x;
116
+ float grlDashArray = grl_dashOptions.y;
117
+ float grlDashOffset = grl_dashOptions.z;
118
+ float grlDashRatio = grl_dashOptions.w;
119
+
120
+ gl_FragColor.a *= step(grlCounters, grlVisibility);
121
+ if(gl_FragColor.a == 0.) discard;
122
+
123
+ if(grlUseDash == 1.){
124
+ gl_FragColor.a *= ceil(mod(grlCounters + grlDashOffset, grlDashArray) - (grlDashArray * grlDashRatio));
125
+ if (gl_FragColor.a == 0.) discard;
126
+ }
127
+
128
+ #ifdef GREASED_LINE_HAS_COLOR
129
+ if (grlColorMode == ${0 /* GreasedLineMeshColorMode.COLOR_MODE_SET */}.) {
130
+ gl_FragColor.rgb = grl_singleColor;
131
+ } else if (grlColorMode == ${1 /* GreasedLineMeshColorMode.COLOR_MODE_ADD */}.) {
132
+ gl_FragColor.rgb += grl_singleColor;
133
+ } else if (grlColorMode == ${2 /* GreasedLineMeshColorMode.COLOR_MODE_MULTIPLY */}.) {
134
+ gl_FragColor.rgb *= grl_singleColor;
135
+ }
136
+ #else
137
+ if (grlUseColors == 1.) {
138
+ #ifdef GREASED_LINE_COLOR_DISTRIBUTION_TYPE_LINE
139
+ vec4 grlColor = texture2D(grl_colors, vec2(grlCounters, 0.), 0.);
140
+ #else
141
+ vec2 lookup = vec2(fract(grlColorPointer / grl_textureSize.x), 1.0 - floor(grlColorPointer / grl_textureSize.x) / max(grl_textureSize.y - 1.0, 1.0));
142
+ vec4 grlColor = texture2D(grl_colors, lookup, 0.0);
143
+ #endif
144
+ if (grlColorMode == ${0 /* GreasedLineMeshColorMode.COLOR_MODE_SET */}.) {
145
+ gl_FragColor = grlColor;
146
+ } else if (grlColorMode == ${1 /* GreasedLineMeshColorMode.COLOR_MODE_ADD */}.) {
147
+ gl_FragColor += grlColor;
148
+ } else if (grlColorMode == ${2 /* GreasedLineMeshColorMode.COLOR_MODE_MULTIPLY */}.) {
149
+ gl_FragColor *= grlColor;
150
+ }
151
+ }
152
+ #endif
153
+ `,
154
+ };
155
+ }
156
+ return null;
157
+ }
158
+ //# sourceMappingURL=greasedLinePluginMaterialShadersGLSL.js.map
@@ -0,0 +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"]}
@@ -0,0 +1,11 @@
1
+ import type { Nullable } from "../../types";
2
+ /**
3
+ * Returns WGSL custom shader code
4
+ * @param shaderType vertex or fragment
5
+ * @param cameraFacing is in camera facing mode?
6
+ * @returns WGSL custom shader code
7
+ */
8
+ /** @internal */
9
+ export declare function GetCustomCode(shaderType: string, cameraFacing: boolean): Nullable<{
10
+ [pointName: string]: string;
11
+ }>;
@@ -0,0 +1,177 @@
1
+ /**
2
+ * Returns WGSL custom shader code
3
+ * @param shaderType vertex or fragment
4
+ * @param cameraFacing is in camera facing mode?
5
+ * @returns WGSL custom shader code
6
+ */
7
+ /** @internal */
8
+ export function GetCustomCode(shaderType, cameraFacing) {
9
+ if (shaderType === "vertex") {
10
+ const obj = {
11
+ CUSTOM_VERTEX_DEFINITIONS: `
12
+ attribute grl_widths: f32;
13
+ attribute grl_offsets: vec3f;
14
+ attribute grl_colorPointers: f32;
15
+ varying grlCounters: f32;
16
+ varying grlColorPointer: f32;
17
+
18
+ #ifdef GREASED_LINE_CAMERA_FACING
19
+ attribute grl_previousAndSide : vec4f;
20
+ attribute grl_nextAndCounters : vec4f;
21
+
22
+ fn grlFix(i: vec4f, aspect: f32) -> vec2f {
23
+ var res = i.xy / i.w;
24
+ res.x *= aspect;
25
+ return res;
26
+ }
27
+ #else
28
+ attribute grl_slopes: f32;
29
+ attribute grl_counters: f32;
30
+ #endif
31
+
32
+
33
+ `,
34
+ CUSTOM_VERTEX_UPDATE_POSITION: `
35
+ #ifdef GREASED_LINE_CAMERA_FACING
36
+ var grlPositionOffset: vec3f = input.grl_offsets;
37
+ positionUpdated += grlPositionOffset;
38
+ #else
39
+ positionUpdated = (positionUpdated + input.grl_offsets) + (input.grl_slopes * input.grl_widths);
40
+ #endif
41
+ `,
42
+ CUSTOM_VERTEX_MAIN_END: `
43
+ vertexOutputs.grlColorPointer = input.grl_colorPointers;
44
+
45
+ #ifdef GREASED_LINE_CAMERA_FACING
46
+
47
+ let grlAspect: f32 = uniforms.grl_aspect_resolution_lineWidth.x;
48
+ let grlBaseWidth: f32 = uniforms.grl_aspect_resolution_lineWidth.w;
49
+
50
+ let grlPrevious: vec3f = input.grl_previousAndSide.xyz;
51
+ let grlSide: f32 = input.grl_previousAndSide.w;
52
+
53
+ let grlNext: vec3f = input.grl_nextAndCounters.xyz;
54
+ vertexOutputs.grlCounters = input.grl_nextAndCounters.w;
55
+
56
+ let grlMatrix: mat4x4f = uniforms.viewProjection * finalWorld;
57
+ var grlFinalPosition: vec4f = grlMatrix * vec4f(positionUpdated, 1.0);
58
+ let grlPrevPos: vec4f = grlMatrix * vec4f(grlPrevious + grlPositionOffset, 1.0);
59
+ let grlNextPos: vec4f = grlMatrix * vec4f(grlNext + grlPositionOffset, 1.0);
60
+
61
+ let grlCurrentP: vec2f = grlFix(grlFinalPosition, grlAspect);
62
+ let grlPrevP: vec2f = grlFix(grlPrevPos, grlAspect);
63
+ let grlNextP: vec2f = grlFix(grlNextPos, grlAspect);
64
+
65
+ let grlWidth: f32 = grlBaseWidth * input.grl_widths;
66
+
67
+ var grlDir: vec2f;
68
+ if (all(grlNextP == grlCurrentP)) {
69
+ grlDir = normalize(grlCurrentP - grlPrevP);
70
+ } else if (all(grlPrevP == grlCurrentP)) {
71
+ grlDir = normalize(grlNextP - grlCurrentP);
72
+ } else {
73
+ let grlDir1: vec2f = normalize(grlCurrentP - grlPrevP);
74
+ let grlDir2: vec2f = normalize(grlNextP - grlCurrentP);
75
+ grlDir = normalize(grlDir1 + grlDir2);
76
+ }
77
+
78
+ var grlNormal: vec4f = vec4f(-grlDir.y, grlDir.x, 0.0, 1.0);
79
+
80
+ let grlHalfWidth: f32 = 0.5 * grlWidth;
81
+ #if defined(GREASED_LINE_RIGHT_HANDED_COORDINATE_SYSTEM)
82
+ grlNormal.x *= -grlHalfWidth;
83
+ grlNormal.y *= -grlHalfWidth;
84
+ #else
85
+ grlNormal.x *= grlHalfWidth;
86
+ grlNormal.y *= grlHalfWidth;
87
+ #endif
88
+
89
+ grlNormal *= uniforms.grl_projection;
90
+
91
+ #if defined(GREASED_LINE_SIZE_ATTENUATION)
92
+ grlNormal.x *= grlFinalPosition.w;
93
+ grlNormal.y *= grlFinalPosition.w;
94
+
95
+ let pr: f32 = vec4f(uniforms.grl_aspect_resolution_lineWidth.yz, 0.0, 1.0) * uniforms.grl_projection;
96
+ grlNormal.x /= pr.x;
97
+ grlNormal.y /= pr.y;
98
+ #endif
99
+
100
+ vertexOutputs.position = vec4f(grlFinalPosition.xy + grlNormal.xy * grlSide, grlFinalPosition.z, grlFinalPosition.w);
101
+ vertexOutputs.vPositionW = vertexOutputs.position.xyz;
102
+
103
+ #else
104
+ vertexOutputs.grlCounters = input.grl_counters;
105
+ #endif
106
+ `,
107
+ };
108
+ cameraFacing && (obj["!vertexOutputs\\.position\\s=\\sscene\\.viewProjection\\s\\*\\sworldPos;"] = "//"); // not needed for camera facing GRL
109
+ return obj;
110
+ }
111
+ if (shaderType === "fragment") {
112
+ return {
113
+ CUSTOM_FRAGMENT_DEFINITIONS: `
114
+ varying grlCounters: f32;
115
+ varying grlColorPointer: 32;
116
+
117
+ var grl_colors: texture_2d<f32>;
118
+ var grl_colorsSampler: sampler;
119
+ `,
120
+ CUSTOM_FRAGMENT_MAIN_END: `
121
+ let grlColorMode: f32 = uniforms.grl_colorMode_visibility_colorsWidth_useColors.x;
122
+ let grlVisibility: f32 = uniforms.grl_colorMode_visibility_colorsWidth_useColors.y;
123
+ let grlColorsWidth: f32 = uniforms.grl_colorMode_visibility_colorsWidth_useColors.z;
124
+ let grlUseColors: f32 = uniforms.grl_colorMode_visibility_colorsWidth_useColors.w;
125
+
126
+ let grlUseDash: f32 = uniforms.grl_dashOptions.x;
127
+ let grlDashArray: f32 = uniforms.grl_dashOptions.y;
128
+ let grlDashOffset: f32 = uniforms.grl_dashOptions.z;
129
+ let grlDashRatio: f32 = uniforms.grl_dashOptions.w;
130
+
131
+ fragmentOutputs.color.a *= step(fragmentInputs.grlCounters, grlVisibility);
132
+ if (fragmentOutputs.color.a == 0.0) {
133
+ discard;
134
+ }
135
+
136
+ if (grlUseDash == 1.0) {
137
+ let dashPosition = (fragmentInputs.grlCounters + grlDashOffset) % grlDashArray;
138
+ fragmentOutputs.color.a *= ceil(dashPosition - (grlDashArray * grlDashRatio));
139
+
140
+ if (fragmentOutputs.color.a == 0.0) {
141
+ discard;
142
+ }
143
+ }
144
+
145
+ #ifdef GREASED_LINE_HAS_COLOR
146
+ if (grlColorMode == ${0 /* GreasedLineMeshColorMode.COLOR_MODE_SET */}.) {
147
+ fragmentOutputs.color = vec4f(uniforms.grl_singleColor, fragmentOutputs.color.a);
148
+ } else if (grlColorMode == ${1 /* GreasedLineMeshColorMode.COLOR_MODE_ADD */}.) {
149
+ fragmentOutputs.color += vec4f(uniforms.grl_singleColor, fragmentOutputs.color.a);
150
+ } else if (grlColorMode == ${2 /* GreasedLineMeshColorMode.COLOR_MODE_MULTIPLY */}.) {
151
+ fragmentOutputs.color *= vec4f(uniforms.grl_singleColor, fragmentOutputs.color.a);
152
+ }
153
+ #else
154
+ if (grlUseColors == 1.) {
155
+ #ifdef GREASED_LINE_COLOR_DISTRIBUTION_TYPE_LINE
156
+ let grlColor: vec4f = textureSample(grl_colors, grl_colorsSampler, vec2f(fragmentInputs.grlCounters, 0.));
157
+ #else
158
+ 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));
159
+ let grlColor: vec4f = textureSample(grl_colors, grl_colorsSampler, lookup);
160
+ #endif
161
+ if (grlColorMode == ${0 /* GreasedLineMeshColorMode.COLOR_MODE_SET */}.) {
162
+ fragmentOutputs.color = grlColor;
163
+ } else if (grlColorMode == ${1 /* GreasedLineMeshColorMode.COLOR_MODE_ADD */}.) {
164
+ fragmentOutputs.color += grlColor;
165
+ } else if (grlColorMode == ${2 /* GreasedLineMeshColorMode.COLOR_MODE_MULTIPLY */}.) {
166
+ fragmentOutputs.color *= grlColor;
167
+ }
168
+ }
169
+ #endif
170
+
171
+
172
+ `,
173
+ };
174
+ }
175
+ return null;
176
+ }
177
+ //# sourceMappingURL=greasedLinePluginMaterialShadersWGSL.js.map
@@ -0,0 +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"]}
@@ -4,14 +4,16 @@ import { ShaderMaterial } from "../shaderMaterial";
4
4
  import type { Nullable } from "../../types";
5
5
  import { Color3 } from "../../Maths/math.color";
6
6
  import { Vector2 } from "../../Maths/math.vector";
7
- import "../../Shaders/greasedLine.fragment";
8
- import "../../Shaders/greasedLine.vertex";
9
7
  import type { GreasedLineMaterialOptions, IGreasedLineMaterial } from "./greasedLineMaterialInterfaces";
10
8
  import { GreasedLineMeshColorDistributionType, GreasedLineMeshColorMode } from "./greasedLineMaterialInterfaces";
11
9
  /**
12
10
  * GreasedLineSimpleMaterial
13
11
  */
14
12
  export declare class GreasedLineSimpleMaterial extends ShaderMaterial implements IGreasedLineMaterial {
13
+ /**
14
+ * Force to use GLSL in WebGPU
15
+ */
16
+ static ForceGLSL: boolean;
15
17
  private _visibility;
16
18
  private _width;
17
19
  private _useDash;
@@ -2,8 +2,7 @@ import { RawTexture } from "../Textures/rawTexture.js";
2
2
  import { ShaderMaterial } from "../shaderMaterial.js";
3
3
  import { Color3 } from "../../Maths/math.color.js";
4
4
  import { Vector2 } from "../../Maths/math.vector.js";
5
- import "../../Shaders/greasedLine.fragment.js";
6
- import "../../Shaders/greasedLine.vertex.js";
5
+ import { TextureSampler } from "../Textures/textureSampler.js";
7
6
  import { GreasedLineTools } from "../../Misc/greasedLineTools.js";
8
7
  import { GreasedLineMaterialDefaults } from "./greasedLineMaterialDefaults.js";
9
8
  /**
@@ -17,6 +16,8 @@ export class GreasedLineSimpleMaterial extends ShaderMaterial {
17
16
  * @param options material options
18
17
  */
19
18
  constructor(name, scene, options) {
19
+ const engine = scene.getEngine();
20
+ const isWGSL = engine.isWebGPU && !(options.forceGLSL || GreasedLineSimpleMaterial.ForceGLSL);
20
21
  const defines = [
21
22
  `COLOR_DISTRIBUTION_TYPE_LINE ${1 /* GreasedLineMeshColorDistributionType.COLOR_DISTRIBUTION_TYPE_LINE */}.`,
22
23
  `COLOR_DISTRIBUTION_TYPE_SEGMENT ${0 /* GreasedLineMeshColorDistributionType.COLOR_DISTRIBUTION_TYPE_SEGMENT */}.`,
@@ -24,8 +25,8 @@ export class GreasedLineSimpleMaterial extends ShaderMaterial {
24
25
  `COLOR_MODE_ADD ${1 /* GreasedLineMeshColorMode.COLOR_MODE_ADD */}.`,
25
26
  `COLOR_MODE_MULTIPLY ${2 /* GreasedLineMeshColorMode.COLOR_MODE_MULTIPLY */}.`,
26
27
  ];
27
- const attributes = ["position", "grl_widths", "grl_offsets", "grl_colorPointers"];
28
28
  scene.useRightHandedSystem && defines.push("GREASED_LINE_RIGHT_HANDED_COORDINATE_SYSTEM");
29
+ const attributes = ["position", "grl_widths", "grl_offsets", "grl_colorPointers"];
29
30
  if (options.cameraFacing) {
30
31
  defines.push("GREASED_LINE_CAMERA_FACING");
31
32
  attributes.push("grl_previousAndSide", "grl_nextAndCounters");
@@ -34,32 +35,43 @@ export class GreasedLineSimpleMaterial extends ShaderMaterial {
34
35
  attributes.push("grl_slopes");
35
36
  attributes.push("grl_counters");
36
37
  }
38
+ const uniforms = [
39
+ "grlColorsWidth",
40
+ "grlUseColors",
41
+ "grlWidth",
42
+ "grlColor",
43
+ "grl_colorModeAndColorDistributionType",
44
+ "grlResolution",
45
+ "grlAspect",
46
+ "grlAizeAttenuation",
47
+ "grlDashArray",
48
+ "grlDashOffset",
49
+ "grlDashRatio",
50
+ "grlUseDash",
51
+ "grlVisibility",
52
+ "grlColors",
53
+ ];
54
+ if (!isWGSL) {
55
+ uniforms.push("world", "viewProjection", "view", "projection");
56
+ }
37
57
  super(name, scene, {
38
58
  vertex: "greasedLine",
39
59
  fragment: "greasedLine",
40
60
  }, {
61
+ uniformBuffers: isWGSL ? ["Scene", "Mesh"] : undefined,
41
62
  attributes,
42
- uniforms: [
43
- "world",
44
- "viewProjection",
45
- "view",
46
- "projection",
47
- "grlColorsWidth",
48
- "grlUseColors",
49
- "grlWidth",
50
- "grlColor",
51
- "grl_colorModeAndColorDistributionType",
52
- "grlResolution",
53
- "grlAspect",
54
- "grlAizeAttenuation",
55
- "grlDashArray",
56
- "grlDashOffset",
57
- "grlDashRatio",
58
- "grlUseDash",
59
- "grlVisibility",
60
- ],
61
- samplers: ["grlColors"],
63
+ uniforms,
64
+ samplers: isWGSL ? [] : ["grlColors"],
62
65
  defines,
66
+ extraInitializationsAsync: async () => {
67
+ if (isWGSL) {
68
+ await Promise.all([import("../../ShadersWGSL/greasedLine.vertex.js"), import("../../ShadersWGSL/greasedLine.fragment.js")]);
69
+ }
70
+ else {
71
+ await Promise.all([import("../../Shaders/greasedLine.vertex.js"), import("../../Shaders/greasedLine.fragment.js")]);
72
+ }
73
+ },
74
+ shaderLanguage: isWGSL ? 1 /* ShaderLanguage.WGSL */ : 0 /* ShaderLanguage.GLSL */,
63
75
  });
64
76
  this._color = Color3.White();
65
77
  this._colorsDistributionType = 0 /* GreasedLineMeshColorDistributionType.COLOR_DISTRIBUTION_TYPE_SEGMENT */;
@@ -67,7 +79,6 @@ export class GreasedLineSimpleMaterial extends ShaderMaterial {
67
79
  options = options || {
68
80
  color: GreasedLineMaterialDefaults.DEFAULT_COLOR,
69
81
  };
70
- const engine = scene.getEngine();
71
82
  this.visibility = options.visibility ?? 1;
72
83
  this.useDash = options.useDash ?? false;
73
84
  this.dashRatio = options.dashRatio ?? 0.5;
@@ -98,6 +109,12 @@ export class GreasedLineSimpleMaterial extends ShaderMaterial {
98
109
  this.colorsTexture = GreasedLineTools.CreateColorsTexture(`${this.name}-colors-texture`, this._colors, this.colorsSampling, scene);
99
110
  }
100
111
  }
112
+ if (isWGSL) {
113
+ const sampler = new TextureSampler();
114
+ sampler.setParameters(); // use the default values
115
+ sampler.samplingMode = this.colorsSampling;
116
+ this.setTextureSampler("grlColorsSampler", sampler);
117
+ }
101
118
  engine.onDisposeObservable.add(() => {
102
119
  GreasedLineTools.DisposeEmptyColorsTexture();
103
120
  });
@@ -389,7 +406,6 @@ export class GreasedLineSimpleMaterial extends ShaderMaterial {
389
406
  * @param _rootUrl root url for textures
390
407
  */
391
408
  parse(source, scene, _rootUrl) {
392
- // TODO: super.parse?
393
409
  const greasedLineMaterialOptions = source.greasedLineMaterialOptions;
394
410
  this._colorsTexture?.dispose();
395
411
  greasedLineMaterialOptions.color && (this.color = greasedLineMaterialOptions.color);
@@ -415,4 +431,8 @@ export class GreasedLineSimpleMaterial extends ShaderMaterial {
415
431
  this.setDefine("GREASED_LINE_CAMERA_FACING", this._cameraFacing);
416
432
  }
417
433
  }
434
+ /**
435
+ * Force to use GLSL in WebGPU
436
+ */
437
+ GreasedLineSimpleMaterial.ForceGLSL = false;
418
438
  //# sourceMappingURL=greasedLineSimpleMaterial.js.map