@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.
- package/Buffers/buffer.d.ts +3 -1
- package/Buffers/buffer.js +20 -122
- package/Buffers/buffer.js.map +1 -1
- package/Buffers/bufferUtils.d.ts +32 -1
- package/Buffers/bufferUtils.js +221 -10
- package/Buffers/bufferUtils.js.map +1 -1
- package/Cameras/arcRotateCamera.d.ts +3 -1
- package/Cameras/arcRotateCamera.js +14 -3
- package/Cameras/arcRotateCamera.js.map +1 -1
- package/Engines/abstractEngine.js +2 -2
- package/Engines/abstractEngine.js.map +1 -1
- package/Engines/engine.js +0 -4
- package/Engines/engine.js.map +1 -1
- package/Engines/thinEngine.js +2 -2
- package/Engines/thinEngine.js.map +1 -1
- package/FrameGraph/Node/nodeRenderGraphBlock.js +1 -0
- package/FrameGraph/Node/nodeRenderGraphBlock.js.map +1 -1
- package/FrameGraph/Node/nodeRenderGraphBlockConnectionPoint.d.ts +2 -0
- package/FrameGraph/Node/nodeRenderGraphBlockConnectionPoint.js +3 -1
- package/FrameGraph/Node/nodeRenderGraphBlockConnectionPoint.js.map +1 -1
- package/Inputs/scene.inputManager.js +2 -0
- package/Inputs/scene.inputManager.js.map +1 -1
- package/Lights/IES/iesLoader.d.ts +19 -0
- package/Lights/IES/iesLoader.js +150 -0
- package/Lights/IES/iesLoader.js.map +1 -0
- package/Lights/index.d.ts +1 -0
- package/Lights/index.js +1 -0
- package/Lights/index.js.map +1 -1
- package/Materials/GaussianSplatting/gaussianSplattingMaterial.js +12 -2
- package/Materials/GaussianSplatting/gaussianSplattingMaterial.js.map +1 -1
- package/Materials/GreasedLine/greasedLineMaterialInterfaces.d.ts +5 -0
- package/Materials/GreasedLine/greasedLineMaterialInterfaces.js.map +1 -1
- package/Materials/GreasedLine/greasedLinePluginMaterial.d.ts +21 -5
- package/Materials/GreasedLine/greasedLinePluginMaterial.js +52 -176
- package/Materials/GreasedLine/greasedLinePluginMaterial.js.map +1 -1
- package/Materials/GreasedLine/greasedLinePluginMaterialShadersGLSL.d.ts +11 -0
- package/Materials/GreasedLine/greasedLinePluginMaterialShadersGLSL.js +158 -0
- package/Materials/GreasedLine/greasedLinePluginMaterialShadersGLSL.js.map +1 -0
- package/Materials/GreasedLine/greasedLinePluginMaterialShadersWGSL.d.ts +11 -0
- package/Materials/GreasedLine/greasedLinePluginMaterialShadersWGSL.js +177 -0
- package/Materials/GreasedLine/greasedLinePluginMaterialShadersWGSL.js.map +1 -0
- package/Materials/GreasedLine/greasedLineSimpleMaterial.d.ts +4 -2
- package/Materials/GreasedLine/greasedLineSimpleMaterial.js +45 -25
- package/Materials/GreasedLine/greasedLineSimpleMaterial.js.map +1 -1
- package/Materials/Node/Blocks/PBR/reflectionBlock.js +6 -0
- package/Materials/Node/Blocks/PBR/reflectionBlock.js.map +1 -1
- package/Materials/Node/Blocks/index.d.ts +1 -0
- package/Materials/Node/Blocks/index.js +1 -0
- package/Materials/Node/Blocks/index.js.map +1 -1
- package/Materials/Node/Blocks/matrixSplitterBlock.d.ts +56 -0
- package/Materials/Node/Blocks/matrixSplitterBlock.js +130 -0
- package/Materials/Node/Blocks/matrixSplitterBlock.js.map +1 -0
- package/Materials/Node/nodeMaterialBlock.js +1 -0
- package/Materials/Node/nodeMaterialBlock.js.map +1 -1
- package/Materials/Node/nodeMaterialBlockConnectionPoint.d.ts +2 -0
- package/Materials/Node/nodeMaterialBlockConnectionPoint.js +4 -1
- package/Materials/Node/nodeMaterialBlockConnectionPoint.js.map +1 -1
- package/Materials/PBR/pbrBaseMaterial.d.ts +1 -0
- package/Materials/PBR/pbrBaseMaterial.js +12 -0
- package/Materials/PBR/pbrBaseMaterial.js.map +1 -1
- package/Materials/Textures/Loaders/iesTextureLoader.d.ts +23 -0
- package/Materials/Textures/Loaders/iesTextureLoader.js +40 -0
- package/Materials/Textures/Loaders/iesTextureLoader.js.map +1 -0
- package/Materials/Textures/Loaders/index.d.ts +1 -0
- package/Materials/Textures/Loaders/index.js +1 -0
- package/Materials/Textures/Loaders/index.js.map +1 -1
- package/Materials/Textures/Loaders/textureLoaderManager.js +3 -0
- package/Materials/Textures/Loaders/textureLoaderManager.js.map +1 -1
- package/Materials/effectRenderer.js +1 -1
- package/Materials/effectRenderer.js.map +1 -1
- package/Materials/index.d.ts +4 -0
- package/Materials/index.js +5 -0
- package/Materials/index.js.map +1 -1
- package/Maths/math.scalar.d.ts +0 -1
- package/Maths/math.scalar.js +1 -2
- package/Maths/math.scalar.js.map +1 -1
- package/Meshes/Builders/greasedLineBuilder.js +2 -2
- package/Meshes/Builders/greasedLineBuilder.js.map +1 -1
- package/Meshes/GaussianSplatting/gaussianSplattingMesh.d.ts +15 -2
- package/Meshes/GaussianSplatting/gaussianSplattingMesh.js +68 -20
- package/Meshes/GaussianSplatting/gaussianSplattingMesh.js.map +1 -1
- package/Meshes/Node/Blocks/geometryInputBlock.d.ts +4 -0
- package/Meshes/Node/Blocks/geometryInputBlock.js +8 -0
- package/Meshes/Node/Blocks/geometryInputBlock.js.map +1 -1
- package/Meshes/Node/nodeGeometryBlock.js +1 -0
- package/Meshes/Node/nodeGeometryBlock.js.map +1 -1
- package/Meshes/Node/nodeGeometryBlockConnectionPoint.d.ts +2 -0
- package/Meshes/Node/nodeGeometryBlockConnectionPoint.js +3 -1
- package/Meshes/Node/nodeGeometryBlockConnectionPoint.js.map +1 -1
- package/Meshes/abstractMesh.hotSpot.d.ts +8 -1
- package/Meshes/abstractMesh.hotSpot.js +17 -0
- package/Meshes/abstractMesh.hotSpot.js.map +1 -1
- package/Meshes/linesMesh.js +1 -1
- package/Meshes/linesMesh.js.map +1 -1
- package/Misc/deepMerger.d.ts +6 -0
- package/Misc/deepMerger.js +26 -0
- package/Misc/deepMerger.js.map +1 -0
- package/Misc/index.d.ts +1 -0
- package/Misc/index.js +1 -0
- package/Misc/index.js.map +1 -1
- package/Misc/virtualJoystick.js +2 -0
- package/Misc/virtualJoystick.js.map +1 -1
- package/Rendering/IBLShadows/iblShadowsRenderPipeline.d.ts +3 -23
- package/Rendering/IBLShadows/iblShadowsRenderPipeline.js +30 -67
- package/Rendering/IBLShadows/iblShadowsRenderPipeline.js.map +1 -1
- package/Rendering/IBLShadows/iblShadowsVoxelTracingPass.d.ts +1 -1
- package/Rendering/IBLShadows/iblShadowsVoxelTracingPass.js +8 -4
- package/Rendering/IBLShadows/iblShadowsVoxelTracingPass.js.map +1 -1
- package/Rendering/boundingBoxRenderer.d.ts +63 -1
- package/Rendering/boundingBoxRenderer.js +224 -3
- package/Rendering/boundingBoxRenderer.js.map +1 -1
- package/Rendering/edgesRenderer.js +4 -1
- package/Rendering/edgesRenderer.js.map +1 -1
- package/Rendering/{IBLShadows/iblShadowsImportanceSamplingRenderer.d.ts → iblCdfGenerator.d.ts} +15 -12
- package/Rendering/{IBLShadows/iblShadowsImportanceSamplingRenderer.js → iblCdfGenerator.js} +37 -27
- package/Rendering/iblCdfGenerator.js.map +1 -0
- package/Rendering/iblCdfGeneratorSceneComponent.d.ts +59 -0
- package/Rendering/iblCdfGeneratorSceneComponent.js +83 -0
- package/Rendering/iblCdfGeneratorSceneComponent.js.map +1 -0
- package/Rendering/index.d.ts +12 -10
- package/Rendering/index.js +12 -10
- package/Rendering/index.js.map +1 -1
- package/Shaders/ShadersInclude/gaussianSplatting.js +72 -2
- package/Shaders/ShadersInclude/gaussianSplatting.js.map +1 -1
- package/Shaders/ShadersInclude/gaussianSplattingVertexDeclaration.js +1 -1
- package/Shaders/ShadersInclude/gaussianSplattingVertexDeclaration.js.map +1 -1
- package/Shaders/ShadersInclude/hdrFilteringFunctions.js +29 -4
- package/Shaders/ShadersInclude/hdrFilteringFunctions.js.map +1 -1
- package/Shaders/ShadersInclude/pbrBlockReflection.js +9 -1
- package/Shaders/ShadersInclude/pbrBlockReflection.js.map +1 -1
- package/Shaders/ShadersInclude/pbrBlockSubSurface.js +9 -1
- package/Shaders/ShadersInclude/pbrBlockSubSurface.js.map +1 -1
- package/Shaders/ShadersInclude/pbrFragmentSamplersDeclaration.js +3 -0
- package/Shaders/ShadersInclude/pbrFragmentSamplersDeclaration.js.map +1 -1
- package/Shaders/boundingBoxRenderer.vertex.js +7 -0
- package/Shaders/boundingBoxRenderer.vertex.js.map +1 -1
- package/Shaders/gaussianSplatting.vertex.js +16 -2
- package/Shaders/gaussianSplatting.vertex.js.map +1 -1
- package/Shaders/{iblShadowsCdfy.fragment.d.ts → iblCdfx.fragment.d.ts} +1 -1
- package/Shaders/{iblShadowsCdfx.fragment.js → iblCdfx.fragment.js} +3 -3
- package/Shaders/iblCdfx.fragment.js.map +1 -0
- package/Shaders/{iblShadowsCdfx.fragment.d.ts → iblCdfy.fragment.d.ts} +1 -1
- package/Shaders/{iblShadowsCdfy.fragment.js → iblCdfy.fragment.js} +3 -3
- package/Shaders/iblCdfy.fragment.js.map +1 -0
- package/Shaders/{iblShadowsIcdfx.fragment.d.ts → iblIcdfx.fragment.d.ts} +1 -1
- package/Shaders/{iblShadowsIcdfx.fragment.js → iblIcdfx.fragment.js} +3 -3
- package/Shaders/iblIcdfx.fragment.js.map +1 -0
- package/Shaders/{iblShadowsIcdfy.fragment.d.ts → iblIcdfy.fragment.d.ts} +1 -1
- package/Shaders/{iblShadowsIcdfy.fragment.js → iblIcdfy.fragment.js} +3 -3
- package/Shaders/iblIcdfy.fragment.js.map +1 -0
- package/Shaders/importanceSamplingDebug.fragment.d.ts +5 -0
- package/Shaders/{iblShadowsImportanceSamplingDebug.fragment.js → importanceSamplingDebug.fragment.js} +3 -3
- package/Shaders/importanceSamplingDebug.fragment.js.map +1 -0
- package/Shaders/pbr.fragment.js +8 -0
- package/Shaders/pbr.fragment.js.map +1 -1
- package/ShadersWGSL/ShadersInclude/gaussianSplatting.js +77 -1
- package/ShadersWGSL/ShadersInclude/gaussianSplatting.js.map +1 -1
- package/ShadersWGSL/ShadersInclude/hdrFilteringFunctions.js +28 -4
- package/ShadersWGSL/ShadersInclude/hdrFilteringFunctions.js.map +1 -1
- package/ShadersWGSL/ShadersInclude/lightFragment.js +1 -1
- package/ShadersWGSL/ShadersInclude/lightFragment.js.map +1 -1
- package/ShadersWGSL/ShadersInclude/oitFragment.js +1 -1
- package/ShadersWGSL/ShadersInclude/oitFragment.js.map +1 -1
- package/ShadersWGSL/ShadersInclude/pbrBlockReflection.js +14 -1
- package/ShadersWGSL/ShadersInclude/pbrBlockReflection.js.map +1 -1
- package/ShadersWGSL/ShadersInclude/pbrBlockSubSurface.js +14 -1
- package/ShadersWGSL/ShadersInclude/pbrBlockSubSurface.js.map +1 -1
- package/ShadersWGSL/ShadersInclude/pbrFragmentSamplersDeclaration.js +3 -0
- package/ShadersWGSL/ShadersInclude/pbrFragmentSamplersDeclaration.js.map +1 -1
- package/ShadersWGSL/ShadersInclude/shadowsFragmentFunctions.js +1 -1
- package/ShadersWGSL/ShadersInclude/shadowsFragmentFunctions.js.map +1 -1
- package/ShadersWGSL/boundingBoxRenderer.vertex.js +9 -1
- package/ShadersWGSL/boundingBoxRenderer.vertex.js.map +1 -1
- package/ShadersWGSL/gaussianSplatting.vertex.js +18 -2
- package/ShadersWGSL/gaussianSplatting.vertex.js.map +1 -1
- package/ShadersWGSL/greasedLine.fragment.d.ts +5 -0
- package/ShadersWGSL/greasedLine.fragment.js +25 -0
- package/ShadersWGSL/greasedLine.fragment.js.map +1 -0
- package/ShadersWGSL/greasedLine.vertex.d.ts +9 -0
- package/ShadersWGSL/greasedLine.vertex.js +43 -0
- package/ShadersWGSL/greasedLine.vertex.js.map +1 -0
- package/ShadersWGSL/iblCdfx.fragment.d.ts +5 -0
- package/ShadersWGSL/{iblShadowsCdfx.fragment.js → iblCdfx.fragment.js} +3 -3
- package/ShadersWGSL/iblCdfx.fragment.js.map +1 -0
- package/ShadersWGSL/iblCdfy.fragment.d.ts +5 -0
- package/ShadersWGSL/{iblShadowsCdfy.fragment.js → iblCdfy.fragment.js} +3 -3
- package/ShadersWGSL/iblCdfy.fragment.js.map +1 -0
- package/ShadersWGSL/iblIcdfx.fragment.d.ts +5 -0
- package/ShadersWGSL/{iblShadowsIcdfx.fragment.js → iblIcdfx.fragment.js} +3 -3
- package/ShadersWGSL/iblIcdfx.fragment.js.map +1 -0
- package/ShadersWGSL/iblIcdfy.fragment.d.ts +5 -0
- package/ShadersWGSL/{iblShadowsIcdfy.fragment.js → iblIcdfy.fragment.js} +3 -3
- package/ShadersWGSL/iblIcdfy.fragment.js.map +1 -0
- package/ShadersWGSL/importanceSamplingDebug.fragment.d.ts +5 -0
- package/ShadersWGSL/{iblShadowsImportanceSamplingDebug.fragment.js → importanceSamplingDebug.fragment.js} +3 -3
- package/ShadersWGSL/importanceSamplingDebug.fragment.js.map +1 -0
- package/ShadersWGSL/pbr.fragment.js +12 -0
- package/ShadersWGSL/pbr.fragment.js.map +1 -1
- package/package.json +1 -1
- package/scene.d.ts +4 -0
- package/scene.js +6 -0
- package/scene.js.map +1 -1
- package/sceneComponent.d.ts +1 -1
- package/sceneComponent.js +1 -1
- package/sceneComponent.js.map +1 -1
- package/Rendering/IBLShadows/iblShadowsImportanceSamplingRenderer.js.map +0 -1
- package/Shaders/iblShadowsCdfx.fragment.js.map +0 -1
- package/Shaders/iblShadowsCdfy.fragment.js.map +0 -1
- package/Shaders/iblShadowsIcdfx.fragment.js.map +0 -1
- package/Shaders/iblShadowsIcdfy.fragment.js.map +0 -1
- package/Shaders/iblShadowsImportanceSamplingDebug.fragment.d.ts +0 -5
- package/Shaders/iblShadowsImportanceSamplingDebug.fragment.js.map +0 -1
- package/ShadersWGSL/iblShadowsCdfx.fragment.d.ts +0 -5
- package/ShadersWGSL/iblShadowsCdfx.fragment.js.map +0 -1
- package/ShadersWGSL/iblShadowsCdfy.fragment.d.ts +0 -5
- package/ShadersWGSL/iblShadowsCdfy.fragment.js.map +0 -1
- package/ShadersWGSL/iblShadowsIcdfx.fragment.d.ts +0 -5
- package/ShadersWGSL/iblShadowsIcdfx.fragment.js.map +0 -1
- package/ShadersWGSL/iblShadowsIcdfy.fragment.d.ts +0 -5
- package/ShadersWGSL/iblShadowsIcdfy.fragment.js.map +0 -1
- package/ShadersWGSL/iblShadowsImportanceSamplingDebug.fragment.d.ts +0 -5
- 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 "
|
|
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
|
-
|
|
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
|