@babylonjs/core 7.37.0 → 7.37.1

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 (151) hide show
  1. package/Cameras/arcRotateCamera.d.ts +3 -1
  2. package/Cameras/arcRotateCamera.js +14 -3
  3. package/Cameras/arcRotateCamera.js.map +1 -1
  4. package/Engines/abstractEngine.js +2 -2
  5. package/Engines/abstractEngine.js.map +1 -1
  6. package/Materials/GaussianSplatting/gaussianSplattingMaterial.js +12 -2
  7. package/Materials/GaussianSplatting/gaussianSplattingMaterial.js.map +1 -1
  8. package/Materials/GreasedLine/greasedLineMaterialInterfaces.d.ts +5 -0
  9. package/Materials/GreasedLine/greasedLineMaterialInterfaces.js.map +1 -1
  10. package/Materials/GreasedLine/greasedLinePluginMaterial.d.ts +21 -5
  11. package/Materials/GreasedLine/greasedLinePluginMaterial.js +52 -176
  12. package/Materials/GreasedLine/greasedLinePluginMaterial.js.map +1 -1
  13. package/Materials/GreasedLine/greasedLinePluginMaterialShadersGLSL.d.ts +11 -0
  14. package/Materials/GreasedLine/greasedLinePluginMaterialShadersGLSL.js +158 -0
  15. package/Materials/GreasedLine/greasedLinePluginMaterialShadersGLSL.js.map +1 -0
  16. package/Materials/GreasedLine/greasedLinePluginMaterialShadersWGSL.d.ts +11 -0
  17. package/Materials/GreasedLine/greasedLinePluginMaterialShadersWGSL.js +177 -0
  18. package/Materials/GreasedLine/greasedLinePluginMaterialShadersWGSL.js.map +1 -0
  19. package/Materials/Node/Blocks/PBR/reflectionBlock.js +6 -0
  20. package/Materials/Node/Blocks/PBR/reflectionBlock.js.map +1 -1
  21. package/Materials/Node/Blocks/index.d.ts +1 -0
  22. package/Materials/Node/Blocks/index.js +1 -0
  23. package/Materials/Node/Blocks/index.js.map +1 -1
  24. package/Materials/Node/Blocks/matrixSplitterBlock.d.ts +56 -0
  25. package/Materials/Node/Blocks/matrixSplitterBlock.js +130 -0
  26. package/Materials/Node/Blocks/matrixSplitterBlock.js.map +1 -0
  27. package/Materials/PBR/pbrBaseMaterial.d.ts +1 -0
  28. package/Materials/PBR/pbrBaseMaterial.js +12 -0
  29. package/Materials/PBR/pbrBaseMaterial.js.map +1 -1
  30. package/Materials/effectRenderer.js +1 -1
  31. package/Materials/effectRenderer.js.map +1 -1
  32. package/Maths/math.scalar.d.ts +0 -1
  33. package/Maths/math.scalar.js +1 -2
  34. package/Maths/math.scalar.js.map +1 -1
  35. package/Meshes/Builders/greasedLineBuilder.js +2 -2
  36. package/Meshes/Builders/greasedLineBuilder.js.map +1 -1
  37. package/Meshes/GaussianSplatting/gaussianSplattingMesh.d.ts +15 -2
  38. package/Meshes/GaussianSplatting/gaussianSplattingMesh.js +68 -20
  39. package/Meshes/GaussianSplatting/gaussianSplattingMesh.js.map +1 -1
  40. package/Meshes/abstractMesh.hotSpot.d.ts +8 -1
  41. package/Meshes/abstractMesh.hotSpot.js +17 -0
  42. package/Meshes/abstractMesh.hotSpot.js.map +1 -1
  43. package/Meshes/linesMesh.js +1 -1
  44. package/Meshes/linesMesh.js.map +1 -1
  45. package/Misc/virtualJoystick.js +2 -0
  46. package/Misc/virtualJoystick.js.map +1 -1
  47. package/Rendering/IBLShadows/iblShadowsRenderPipeline.d.ts +3 -23
  48. package/Rendering/IBLShadows/iblShadowsRenderPipeline.js +30 -67
  49. package/Rendering/IBLShadows/iblShadowsRenderPipeline.js.map +1 -1
  50. package/Rendering/IBLShadows/iblShadowsVoxelTracingPass.d.ts +1 -1
  51. package/Rendering/IBLShadows/iblShadowsVoxelTracingPass.js +8 -4
  52. package/Rendering/IBLShadows/iblShadowsVoxelTracingPass.js.map +1 -1
  53. package/Rendering/{IBLShadows/iblShadowsImportanceSamplingRenderer.d.ts → iblCdfGenerator.d.ts} +15 -12
  54. package/Rendering/{IBLShadows/iblShadowsImportanceSamplingRenderer.js → iblCdfGenerator.js} +37 -27
  55. package/Rendering/iblCdfGenerator.js.map +1 -0
  56. package/Rendering/iblCdfGeneratorSceneComponent.d.ts +59 -0
  57. package/Rendering/iblCdfGeneratorSceneComponent.js +83 -0
  58. package/Rendering/iblCdfGeneratorSceneComponent.js.map +1 -0
  59. package/Rendering/index.d.ts +12 -10
  60. package/Rendering/index.js +12 -10
  61. package/Rendering/index.js.map +1 -1
  62. package/Shaders/ShadersInclude/gaussianSplatting.js +72 -2
  63. package/Shaders/ShadersInclude/gaussianSplatting.js.map +1 -1
  64. package/Shaders/ShadersInclude/gaussianSplattingVertexDeclaration.js +1 -1
  65. package/Shaders/ShadersInclude/gaussianSplattingVertexDeclaration.js.map +1 -1
  66. package/Shaders/ShadersInclude/hdrFilteringFunctions.js +29 -4
  67. package/Shaders/ShadersInclude/hdrFilteringFunctions.js.map +1 -1
  68. package/Shaders/ShadersInclude/pbrBlockReflection.js +9 -1
  69. package/Shaders/ShadersInclude/pbrBlockReflection.js.map +1 -1
  70. package/Shaders/ShadersInclude/pbrBlockSubSurface.js +9 -1
  71. package/Shaders/ShadersInclude/pbrBlockSubSurface.js.map +1 -1
  72. package/Shaders/ShadersInclude/pbrFragmentSamplersDeclaration.js +3 -0
  73. package/Shaders/ShadersInclude/pbrFragmentSamplersDeclaration.js.map +1 -1
  74. package/Shaders/gaussianSplatting.vertex.js +16 -2
  75. package/Shaders/gaussianSplatting.vertex.js.map +1 -1
  76. package/Shaders/{iblShadowsCdfy.fragment.d.ts → iblCdfx.fragment.d.ts} +1 -1
  77. package/Shaders/{iblShadowsCdfx.fragment.js → iblCdfx.fragment.js} +3 -3
  78. package/Shaders/iblCdfx.fragment.js.map +1 -0
  79. package/Shaders/{iblShadowsCdfx.fragment.d.ts → iblCdfy.fragment.d.ts} +1 -1
  80. package/Shaders/{iblShadowsCdfy.fragment.js → iblCdfy.fragment.js} +3 -3
  81. package/Shaders/iblCdfy.fragment.js.map +1 -0
  82. package/Shaders/{iblShadowsIcdfx.fragment.d.ts → iblIcdfx.fragment.d.ts} +1 -1
  83. package/Shaders/{iblShadowsIcdfx.fragment.js → iblIcdfx.fragment.js} +3 -3
  84. package/Shaders/iblIcdfx.fragment.js.map +1 -0
  85. package/Shaders/{iblShadowsIcdfy.fragment.d.ts → iblIcdfy.fragment.d.ts} +1 -1
  86. package/Shaders/{iblShadowsIcdfy.fragment.js → iblIcdfy.fragment.js} +3 -3
  87. package/Shaders/iblIcdfy.fragment.js.map +1 -0
  88. package/Shaders/importanceSamplingDebug.fragment.d.ts +5 -0
  89. package/Shaders/{iblShadowsImportanceSamplingDebug.fragment.js → importanceSamplingDebug.fragment.js} +3 -3
  90. package/Shaders/importanceSamplingDebug.fragment.js.map +1 -0
  91. package/Shaders/pbr.fragment.js +8 -0
  92. package/Shaders/pbr.fragment.js.map +1 -1
  93. package/ShadersWGSL/ShadersInclude/gaussianSplatting.js +77 -1
  94. package/ShadersWGSL/ShadersInclude/gaussianSplatting.js.map +1 -1
  95. package/ShadersWGSL/ShadersInclude/hdrFilteringFunctions.js +28 -4
  96. package/ShadersWGSL/ShadersInclude/hdrFilteringFunctions.js.map +1 -1
  97. package/ShadersWGSL/ShadersInclude/lightFragment.js +1 -1
  98. package/ShadersWGSL/ShadersInclude/lightFragment.js.map +1 -1
  99. package/ShadersWGSL/ShadersInclude/oitFragment.js +1 -1
  100. package/ShadersWGSL/ShadersInclude/oitFragment.js.map +1 -1
  101. package/ShadersWGSL/ShadersInclude/pbrBlockReflection.js +14 -1
  102. package/ShadersWGSL/ShadersInclude/pbrBlockReflection.js.map +1 -1
  103. package/ShadersWGSL/ShadersInclude/pbrBlockSubSurface.js +14 -1
  104. package/ShadersWGSL/ShadersInclude/pbrBlockSubSurface.js.map +1 -1
  105. package/ShadersWGSL/ShadersInclude/pbrFragmentSamplersDeclaration.js +3 -0
  106. package/ShadersWGSL/ShadersInclude/pbrFragmentSamplersDeclaration.js.map +1 -1
  107. package/ShadersWGSL/ShadersInclude/shadowsFragmentFunctions.js +1 -1
  108. package/ShadersWGSL/ShadersInclude/shadowsFragmentFunctions.js.map +1 -1
  109. package/ShadersWGSL/gaussianSplatting.vertex.js +18 -2
  110. package/ShadersWGSL/gaussianSplatting.vertex.js.map +1 -1
  111. package/ShadersWGSL/iblCdfx.fragment.d.ts +5 -0
  112. package/ShadersWGSL/{iblShadowsCdfx.fragment.js → iblCdfx.fragment.js} +3 -3
  113. package/ShadersWGSL/iblCdfx.fragment.js.map +1 -0
  114. package/ShadersWGSL/iblCdfy.fragment.d.ts +5 -0
  115. package/ShadersWGSL/{iblShadowsCdfy.fragment.js → iblCdfy.fragment.js} +3 -3
  116. package/ShadersWGSL/iblCdfy.fragment.js.map +1 -0
  117. package/ShadersWGSL/iblIcdfx.fragment.d.ts +5 -0
  118. package/ShadersWGSL/{iblShadowsIcdfx.fragment.js → iblIcdfx.fragment.js} +3 -3
  119. package/ShadersWGSL/iblIcdfx.fragment.js.map +1 -0
  120. package/ShadersWGSL/iblIcdfy.fragment.d.ts +5 -0
  121. package/ShadersWGSL/{iblShadowsIcdfy.fragment.js → iblIcdfy.fragment.js} +3 -3
  122. package/ShadersWGSL/iblIcdfy.fragment.js.map +1 -0
  123. package/ShadersWGSL/importanceSamplingDebug.fragment.d.ts +5 -0
  124. package/ShadersWGSL/{iblShadowsImportanceSamplingDebug.fragment.js → importanceSamplingDebug.fragment.js} +3 -3
  125. package/ShadersWGSL/importanceSamplingDebug.fragment.js.map +1 -0
  126. package/ShadersWGSL/pbr.fragment.js +12 -0
  127. package/ShadersWGSL/pbr.fragment.js.map +1 -1
  128. package/package.json +1 -1
  129. package/scene.d.ts +4 -0
  130. package/scene.js +6 -0
  131. package/scene.js.map +1 -1
  132. package/sceneComponent.d.ts +1 -1
  133. package/sceneComponent.js +1 -1
  134. package/sceneComponent.js.map +1 -1
  135. package/Rendering/IBLShadows/iblShadowsImportanceSamplingRenderer.js.map +0 -1
  136. package/Shaders/iblShadowsCdfx.fragment.js.map +0 -1
  137. package/Shaders/iblShadowsCdfy.fragment.js.map +0 -1
  138. package/Shaders/iblShadowsIcdfx.fragment.js.map +0 -1
  139. package/Shaders/iblShadowsIcdfy.fragment.js.map +0 -1
  140. package/Shaders/iblShadowsImportanceSamplingDebug.fragment.d.ts +0 -5
  141. package/Shaders/iblShadowsImportanceSamplingDebug.fragment.js.map +0 -1
  142. package/ShadersWGSL/iblShadowsCdfx.fragment.d.ts +0 -5
  143. package/ShadersWGSL/iblShadowsCdfx.fragment.js.map +0 -1
  144. package/ShadersWGSL/iblShadowsCdfy.fragment.d.ts +0 -5
  145. package/ShadersWGSL/iblShadowsCdfy.fragment.js.map +0 -1
  146. package/ShadersWGSL/iblShadowsIcdfx.fragment.d.ts +0 -5
  147. package/ShadersWGSL/iblShadowsIcdfx.fragment.js.map +0 -1
  148. package/ShadersWGSL/iblShadowsIcdfy.fragment.d.ts +0 -5
  149. package/ShadersWGSL/iblShadowsIcdfy.fragment.js.map +0 -1
  150. package/ShadersWGSL/iblShadowsImportanceSamplingDebug.fragment.d.ts +0 -5
  151. package/ShadersWGSL/iblShadowsImportanceSamplingDebug.fragment.js.map +0 -1
@@ -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 type { GreasedLineMaterialOptions, IGreasedLineMaterial } from \"./greasedLineMaterialInterfaces\";\r\nimport { GreasedLineMeshColorDistributionType, GreasedLineMeshColorMode } from \"./greasedLineMaterialInterfaces\";\r\nimport { GreasedLineMaterialDefaults } from \"./greasedLineMaterialDefaults\";\r\nimport { GreasedLineTools } from \"../../Misc/greasedLineTools\";\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 * 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 /**\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);\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 this._enable(true); // always enabled\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 * @returns uniforms\r\n */\r\n override getUniforms() {\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 return {\r\n ubo,\r\n vertex: this._cameraFacing\r\n ? `\r\n uniform vec4 grl_aspect_resolution_lineWidth;\r\n uniform mat4 grl_projection;\r\n `\r\n : \"\",\r\n fragment: `\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 // 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 const activeCamera = this._scene.activeCamera;\r\n\r\n if (activeCamera) {\r\n const projection = activeCamera.getProjectionMatrix();\r\n uniformBuffer.updateMatrix(\"grl_projection\", projection);\r\n } else {\r\n throw Error(\"GreasedLinePluginMaterial requires an active camera.\");\r\n }\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 * @returns shader code\r\n */\r\n override getCustomCode(shaderType: string): Nullable<{ [pointName: string]: string }> {\r\n if (shaderType === \"vertex\") {\r\n const obj: any = {\r\n // eslint-disable-next-line @typescript-eslint/naming-convention\r\n CUSTOM_VERTEX_DEFINITIONS: `\r\n attribute float grl_widths;\r\n attribute vec3 grl_offsets;\r\n attribute float grl_colorPointers;\r\n varying float grlCounters;\r\n varying float grlColorPointer;\r\n\r\n #ifdef GREASED_LINE_CAMERA_FACING\r\n attribute vec4 grl_previousAndSide;\r\n attribute vec4 grl_nextAndCounters;\r\n\r\n vec2 grlFix( vec4 i, float aspect ) {\r\n vec2 res = i.xy / i.w;\r\n res.x *= aspect;\r\n return res;\r\n }\r\n #else\r\n attribute vec3 grl_slopes;\r\n attribute float grl_counters;\r\n #endif\r\n `,\r\n // eslint-disable-next-line @typescript-eslint/naming-convention\r\n CUSTOM_VERTEX_UPDATE_POSITION: `\r\n #ifdef GREASED_LINE_CAMERA_FACING\r\n vec3 grlPositionOffset = grl_offsets;\r\n positionUpdated += grlPositionOffset;\r\n #else\r\n positionUpdated = (positionUpdated + grl_offsets) + (grl_slopes * grl_widths);\r\n #endif\r\n `,\r\n // eslint-disable-next-line @typescript-eslint/naming-convention\r\n CUSTOM_VERTEX_MAIN_END: `\r\n grlColorPointer = grl_colorPointers;\r\n\r\n #ifdef GREASED_LINE_CAMERA_FACING\r\n\r\n float grlAspect = grl_aspect_resolution_lineWidth.x;\r\n float grlBaseWidth = grl_aspect_resolution_lineWidth.w;\r\n\r\n\r\n vec3 grlPrevious = grl_previousAndSide.xyz;\r\n float grlSide = grl_previousAndSide.w;\r\n\r\n vec3 grlNext = grl_nextAndCounters.xyz;\r\n grlCounters = grl_nextAndCounters.w;\r\n\r\n mat4 grlMatrix = viewProjection * finalWorld;\r\n vec4 grlFinalPosition = grlMatrix * vec4( positionUpdated , 1.0 );\r\n vec4 grlPrevPos = grlMatrix * vec4( grlPrevious + grlPositionOffset, 1.0 );\r\n vec4 grlNextPos = grlMatrix * vec4( grlNext + grlPositionOffset, 1.0 );\r\n\r\n vec2 grlCurrentP = grlFix( grlFinalPosition, grlAspect );\r\n vec2 grlPrevP = grlFix( grlPrevPos, grlAspect );\r\n vec2 grlNextP = grlFix( grlNextPos, grlAspect );\r\n\r\n float grlWidth = grlBaseWidth * grl_widths;\r\n\r\n vec2 grlDir;\r\n if( grlNextP == grlCurrentP ) grlDir = normalize( grlCurrentP - grlPrevP );\r\n else if( grlPrevP == grlCurrentP ) grlDir = normalize( grlNextP - grlCurrentP );\r\n else {\r\n vec2 grlDir1 = normalize( grlCurrentP - grlPrevP );\r\n vec2 grlDir2 = normalize( grlNextP - grlCurrentP );\r\n grlDir = normalize( grlDir1 + grlDir2 );\r\n }\r\n vec4 grlNormal = vec4( -grlDir.y, grlDir.x, 0., 1. );\r\n #ifdef GREASED_LINE_RIGHT_HANDED_COORDINATE_SYSTEM\r\n grlNormal.xy *= -.5 * grlWidth;\r\n #else\r\n grlNormal.xy *= .5 * grlWidth;\r\n #endif\r\n\r\n grlNormal *= grl_projection;\r\n\r\n #ifdef GREASED_LINE_SIZE_ATTENUATION\r\n grlNormal.xy *= grlFinalPosition.w;\r\n grlNormal.xy /= ( vec4( grl_aspect_resolution_lineWidth.yz, 0., 1. ) * grl_projection ).xy;\r\n #endif\r\n\r\n grlFinalPosition.xy += grlNormal.xy * grlSide;\r\n gl_Position = grlFinalPosition;\r\n\r\n vPositionW = vec3(grlFinalPosition);\r\n #else\r\n grlCounters = grl_counters;\r\n #endif\r\n `,\r\n };\r\n this._cameraFacing && (obj[\"!gl_Position\\\\=viewProjection\\\\*worldPos;\"] = \"//\"); // not needed for camera facing GRL\r\n return obj;\r\n }\r\n\r\n if (shaderType === \"fragment\") {\r\n return {\r\n // eslint-disable-next-line @typescript-eslint/naming-convention\r\n CUSTOM_FRAGMENT_DEFINITIONS: `\r\n varying float grlCounters;\r\n varying float grlColorPointer;\r\n uniform sampler2D grl_colors;\r\n `,\r\n // eslint-disable-next-line @typescript-eslint/naming-convention\r\n CUSTOM_FRAGMENT_MAIN_END: `\r\n float grlColorMode = grl_colorMode_visibility_colorsWidth_useColors.x;\r\n float grlVisibility = grl_colorMode_visibility_colorsWidth_useColors.y;\r\n float grlColorsWidth = grl_colorMode_visibility_colorsWidth_useColors.z;\r\n float grlUseColors = grl_colorMode_visibility_colorsWidth_useColors.w;\r\n\r\n float grlUseDash = grl_dashOptions.x;\r\n float grlDashArray = grl_dashOptions.y;\r\n float grlDashOffset = grl_dashOptions.z;\r\n float grlDashRatio = grl_dashOptions.w;\r\n\r\n gl_FragColor.a *= step(grlCounters, grlVisibility);\r\n if( gl_FragColor.a == 0. ) discard;\r\n\r\n if(grlUseDash == 1.){\r\n gl_FragColor.a *= ceil(mod(grlCounters + grlDashOffset, grlDashArray) - (grlDashArray * grlDashRatio));\r\n if (gl_FragColor.a == 0.) discard;\r\n }\r\n\r\n #ifdef GREASED_LINE_HAS_COLOR\r\n if (grlColorMode == ${GreasedLineMeshColorMode.COLOR_MODE_SET}.) {\r\n gl_FragColor.rgb = grl_singleColor;\r\n } else if (grlColorMode == ${GreasedLineMeshColorMode.COLOR_MODE_ADD}.) {\r\n gl_FragColor.rgb += grl_singleColor;\r\n } else if (grlColorMode == ${GreasedLineMeshColorMode.COLOR_MODE_MULTIPLY}.) {\r\n gl_FragColor.rgb *= grl_singleColor;\r\n }\r\n #else\r\n if (grlUseColors == 1.) {\r\n #ifdef GREASED_LINE_COLOR_DISTRIBUTION_TYPE_LINE\r\n vec4 grlColor = texture2D(grl_colors, vec2(grlCounters, 0.), 0.);\r\n #else\r\n vec2 lookup = vec2(fract(grlColorPointer / grl_textureSize.x), 1.0 - floor(grlColorPointer / grl_textureSize.x) / max(grl_textureSize.y - 1.0, 1.0));\r\n vec4 grlColor = texture2D(grl_colors, lookup, 0.0);\r\n #endif\r\n if (grlColorMode == ${GreasedLineMeshColorMode.COLOR_MODE_SET}.) {\r\n gl_FragColor = grlColor;\r\n } else if (grlColorMode == ${GreasedLineMeshColorMode.COLOR_MODE_ADD}.) {\r\n gl_FragColor += grlColor;\r\n } else if (grlColorMode == ${GreasedLineMeshColorMode.COLOR_MODE_MULTIPLY}.) {\r\n gl_FragColor *= grlColor;\r\n }\r\n }\r\n #endif\r\n\r\n `,\r\n };\r\n }\r\n\r\n return null;\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\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\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 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"]}
@@ -0,0 +1,11 @@
1
+ import type { Nullable } from "../../types";
2
+ /**
3
+ * Returns GLSL custom shader code
4
+ * @param shaderType vertex or fragment
5
+ * @param cameraFacing is in camera facing mode?
6
+ * @returns GLSL custom shader code
7
+ */
8
+ /** @internal */
9
+ export declare function GetCustomCode(shaderType: string, cameraFacing: boolean): Nullable<{
10
+ [pointName: string]: string;
11
+ }>;
@@ -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"]}
@@ -338,6 +338,12 @@ export class ReflectionBlock extends ReflectionTextureBaseBlock {
338
338
  #endif
339
339
  #ifdef REALTIME_FILTERING
340
340
  , ${this._vReflectionFilteringInfoName}
341
+ #ifdef IBL_CDF_FILTERING
342
+ , icdfxSampler // ** not handled **
343
+ ${isWebGPU ? `, icdfxSamplerSampler` : ""}
344
+ , icdfySampler // ** not handled **
345
+ ${isWebGPU ? `, icdfySamplerSampler` : ""}
346
+ #endif
341
347
  #endif
342
348
  );
343
349
  #endif\n`;