super-three 0.155.0 → 0.157.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (268) hide show
  1. package/build/three.cjs +361 -324
  2. package/build/three.js +361 -324
  3. package/build/three.min.js +2 -2
  4. package/build/three.module.js +354 -323
  5. package/build/three.module.min.js +1 -1
  6. package/examples/jsm/capabilities/WebGL.js +17 -0
  7. package/examples/jsm/controls/DragControls.js +3 -2
  8. package/examples/jsm/controls/OrbitControls.js +13 -5
  9. package/examples/jsm/csm/CSMShader.js +59 -21
  10. package/examples/jsm/exporters/EXRExporter.js +102 -24
  11. package/examples/jsm/exporters/GLTFExporter.js +1 -1
  12. package/examples/jsm/libs/rhino3dm/rhino3dm.js +8726 -4
  13. package/examples/jsm/libs/rhino3dm/rhino3dm.module.js +8737 -4
  14. package/examples/jsm/libs/rhino3dm/rhino3dm.wasm +0 -0
  15. package/examples/jsm/libs/tween.module.js +790 -735
  16. package/examples/jsm/libs/utif.module.js +1644 -1558
  17. package/examples/jsm/lights/LightProbeGenerator.js +37 -3
  18. package/examples/jsm/lines/LineMaterial.js +90 -156
  19. package/examples/jsm/loaders/3DMLoader.js +378 -104
  20. package/examples/jsm/loaders/DDSLoader.js +46 -3
  21. package/examples/jsm/loaders/EXRLoader.js +4 -4
  22. package/examples/jsm/loaders/FBXLoader.js +2 -0
  23. package/examples/jsm/loaders/GLTFLoader.js +18 -8
  24. package/examples/jsm/loaders/KTX2Loader.js +126 -77
  25. package/examples/jsm/loaders/LDrawLoader.js +22 -16
  26. package/examples/jsm/loaders/LogLuvLoader.js +2 -2
  27. package/examples/jsm/loaders/MMDLoader.js +10 -7
  28. package/examples/jsm/loaders/RGBELoader.js +48 -66
  29. package/examples/jsm/loaders/STLLoader.js +7 -0
  30. package/examples/jsm/loaders/USDZLoader.js +215 -12
  31. package/examples/jsm/materials/MeshGouraudMaterial.js +22 -18
  32. package/examples/jsm/nodes/Nodes.js +8 -1
  33. package/examples/jsm/nodes/accessors/BitangentNode.js +1 -1
  34. package/examples/jsm/nodes/accessors/BufferAttributeNode.js +30 -4
  35. package/examples/jsm/nodes/accessors/BufferNode.js +1 -1
  36. package/examples/jsm/nodes/accessors/CameraNode.js +1 -1
  37. package/examples/jsm/nodes/accessors/CubeTextureNode.js +19 -4
  38. package/examples/jsm/nodes/accessors/ExtendedMaterialNode.js +4 -5
  39. package/examples/jsm/nodes/accessors/InstanceNode.js +2 -2
  40. package/examples/jsm/nodes/accessors/LineMaterialNode.js +29 -0
  41. package/examples/jsm/nodes/accessors/MaterialNode.js +23 -13
  42. package/examples/jsm/nodes/accessors/MaterialReferenceNode.js +12 -9
  43. package/examples/jsm/nodes/accessors/ModelNode.js +1 -1
  44. package/examples/jsm/nodes/accessors/ModelViewProjectionNode.js +5 -4
  45. package/examples/jsm/nodes/accessors/MorphNode.js +4 -4
  46. package/examples/jsm/nodes/accessors/NormalNode.js +1 -1
  47. package/examples/jsm/nodes/accessors/Object3DNode.js +3 -3
  48. package/examples/jsm/nodes/accessors/PointUVNode.js +1 -1
  49. package/examples/jsm/nodes/accessors/PositionNode.js +1 -1
  50. package/examples/jsm/nodes/accessors/ReferenceNode.js +13 -7
  51. package/examples/jsm/nodes/accessors/ReflectVectorNode.js +2 -2
  52. package/examples/jsm/nodes/accessors/SceneNode.js +2 -2
  53. package/examples/jsm/nodes/accessors/SkinningNode.js +2 -2
  54. package/examples/jsm/nodes/accessors/StorageBufferNode.js +1 -1
  55. package/examples/jsm/nodes/accessors/TangentNode.js +1 -1
  56. package/examples/jsm/nodes/accessors/TextureBicubicNode.js +2 -2
  57. package/examples/jsm/nodes/accessors/TextureNode.js +18 -8
  58. package/examples/jsm/nodes/accessors/TextureSizeNode.js +2 -2
  59. package/examples/jsm/nodes/accessors/TextureStoreNode.js +29 -0
  60. package/examples/jsm/nodes/accessors/UVNode.js +1 -1
  61. package/examples/jsm/nodes/accessors/UserDataNode.js +2 -2
  62. package/examples/jsm/nodes/code/CodeNode.js +1 -1
  63. package/examples/jsm/nodes/code/ExpressionNode.js +1 -1
  64. package/examples/jsm/nodes/code/FunctionCallNode.js +1 -1
  65. package/examples/jsm/nodes/code/FunctionNode.js +18 -7
  66. package/examples/jsm/nodes/code/ScriptableNode.js +2 -2
  67. package/examples/jsm/nodes/code/ScriptableValueNode.js +2 -2
  68. package/examples/jsm/nodes/core/ArrayUniformNode.js +1 -1
  69. package/examples/jsm/nodes/core/AttributeNode.js +3 -3
  70. package/examples/jsm/nodes/core/BypassNode.js +1 -1
  71. package/examples/jsm/nodes/core/CacheNode.js +1 -1
  72. package/examples/jsm/nodes/core/ConstNode.js +1 -1
  73. package/examples/jsm/nodes/core/ContextNode.js +2 -2
  74. package/examples/jsm/nodes/core/IndexNode.js +1 -1
  75. package/examples/jsm/nodes/core/InputNode.js +1 -1
  76. package/examples/jsm/nodes/core/Node.js +45 -14
  77. package/examples/jsm/nodes/core/NodeBuilder.js +83 -15
  78. package/examples/jsm/nodes/core/NodeFrame.js +37 -14
  79. package/examples/jsm/nodes/core/NodeUniform.js +1 -1
  80. package/examples/jsm/nodes/core/OutputStructNode.js +62 -0
  81. package/examples/jsm/nodes/core/PropertyNode.js +3 -1
  82. package/examples/jsm/nodes/core/StackNode.js +5 -5
  83. package/examples/jsm/nodes/core/StructTypeNode.js +24 -0
  84. package/examples/jsm/nodes/core/TempNode.js +1 -1
  85. package/examples/jsm/nodes/core/UniformNode.js +3 -1
  86. package/examples/jsm/nodes/core/VarNode.js +1 -1
  87. package/examples/jsm/nodes/core/VaryingNode.js +1 -1
  88. package/examples/jsm/nodes/core/constants.js +1 -1
  89. package/examples/jsm/nodes/display/BlendModeNode.js +2 -2
  90. package/examples/jsm/nodes/display/BumpMapNode.js +2 -2
  91. package/examples/jsm/nodes/display/ColorAdjustmentNode.js +2 -2
  92. package/examples/jsm/nodes/display/ColorSpaceNode.js +2 -2
  93. package/examples/jsm/nodes/display/FrontFacingNode.js +1 -1
  94. package/examples/jsm/nodes/display/NormalMapNode.js +2 -2
  95. package/examples/jsm/nodes/display/PosterizeNode.js +2 -2
  96. package/examples/jsm/nodes/display/ToneMappingNode.js +2 -2
  97. package/examples/jsm/nodes/display/ViewportDepthNode.js +2 -2
  98. package/examples/jsm/nodes/display/ViewportDepthTextureNode.js +1 -1
  99. package/examples/jsm/nodes/display/ViewportNode.js +21 -7
  100. package/examples/jsm/nodes/display/ViewportSharedTextureNode.js +1 -1
  101. package/examples/jsm/nodes/display/ViewportTextureNode.js +1 -1
  102. package/examples/jsm/nodes/fog/FogExp2Node.js +2 -2
  103. package/examples/jsm/nodes/fog/FogNode.js +2 -2
  104. package/examples/jsm/nodes/fog/FogRangeNode.js +2 -2
  105. package/examples/jsm/nodes/geometry/RangeNode.js +2 -2
  106. package/examples/jsm/nodes/gpgpu/ComputeNode.js +1 -1
  107. package/examples/jsm/nodes/lighting/AONode.js +2 -2
  108. package/examples/jsm/nodes/lighting/AmbientLightNode.js +3 -3
  109. package/examples/jsm/nodes/lighting/AnalyticLightNode.js +4 -4
  110. package/examples/jsm/nodes/lighting/DirectionalLightNode.js +4 -4
  111. package/examples/jsm/nodes/lighting/EnvironmentNode.js +2 -2
  112. package/examples/jsm/nodes/lighting/HemisphereLightNode.js +3 -3
  113. package/examples/jsm/nodes/lighting/IESSpotLightNode.js +2 -2
  114. package/examples/jsm/nodes/lighting/LightNode.js +2 -2
  115. package/examples/jsm/nodes/lighting/LightingContextNode.js +3 -3
  116. package/examples/jsm/nodes/lighting/LightingNode.js +1 -1
  117. package/examples/jsm/nodes/lighting/LightsNode.js +4 -4
  118. package/examples/jsm/nodes/lighting/PointLightNode.js +3 -3
  119. package/examples/jsm/nodes/lighting/SpotLightNode.js +4 -4
  120. package/examples/jsm/nodes/materials/Line2NodeMaterial.js +449 -0
  121. package/examples/jsm/nodes/materials/LineBasicNodeMaterial.js +1 -1
  122. package/examples/jsm/nodes/materials/LineDashedNodeMaterial.js +54 -0
  123. package/examples/jsm/nodes/materials/Materials.js +2 -0
  124. package/examples/jsm/nodes/materials/MeshBasicNodeMaterial.js +1 -1
  125. package/examples/jsm/nodes/materials/MeshLambertNodeMaterial.js +2 -2
  126. package/examples/jsm/nodes/materials/MeshNormalNodeMaterial.js +2 -2
  127. package/examples/jsm/nodes/materials/MeshPhongNodeMaterial.js +3 -3
  128. package/examples/jsm/nodes/materials/MeshPhysicalNodeMaterial.js +6 -6
  129. package/examples/jsm/nodes/materials/MeshStandardNodeMaterial.js +3 -3
  130. package/examples/jsm/nodes/materials/NodeMaterial.js +39 -29
  131. package/examples/jsm/nodes/materials/PointsNodeMaterial.js +1 -1
  132. package/examples/jsm/nodes/materials/SpriteNodeMaterial.js +2 -2
  133. package/examples/jsm/nodes/math/CondNode.js +1 -1
  134. package/examples/jsm/nodes/math/HashNode.js +34 -0
  135. package/examples/jsm/nodes/math/MathNode.js +2 -2
  136. package/examples/jsm/nodes/math/OperatorNode.js +1 -1
  137. package/examples/jsm/nodes/procedural/CheckerNode.js +3 -3
  138. package/examples/jsm/nodes/shadernode/ShaderNode.js +85 -28
  139. package/examples/jsm/nodes/utils/ArrayElementNode.js +1 -1
  140. package/examples/jsm/nodes/utils/ConvertNode.js +1 -1
  141. package/examples/jsm/nodes/utils/DiscardNode.js +1 -1
  142. package/examples/jsm/nodes/utils/EquirectUVNode.js +2 -2
  143. package/examples/jsm/nodes/utils/JoinNode.js +1 -1
  144. package/examples/jsm/nodes/utils/LoopNode.js +11 -11
  145. package/examples/jsm/nodes/utils/MatcapUVNode.js +2 -2
  146. package/examples/jsm/nodes/utils/MaxMipLevelNode.js +1 -1
  147. package/examples/jsm/nodes/utils/OscNode.js +2 -2
  148. package/examples/jsm/nodes/utils/PackingNode.js +2 -2
  149. package/examples/jsm/nodes/utils/RemapNode.js +2 -2
  150. package/examples/jsm/nodes/utils/RotateUVNode.js +2 -2
  151. package/examples/jsm/nodes/utils/SetNode.js +62 -0
  152. package/examples/jsm/nodes/utils/SpecularMIPLevelNode.js +2 -2
  153. package/examples/jsm/nodes/utils/SplitNode.js +2 -2
  154. package/examples/jsm/nodes/utils/SpriteSheetUVNode.js +2 -2
  155. package/examples/jsm/nodes/utils/TimerNode.js +2 -2
  156. package/examples/jsm/nodes/utils/TriplanarTexturesNode.js +2 -2
  157. package/examples/jsm/objects/Sky.js +1 -3
  158. package/examples/jsm/postprocessing/FilmPass.js +3 -5
  159. package/examples/jsm/postprocessing/OutputPass.js +3 -2
  160. package/examples/jsm/postprocessing/RenderPass.js +30 -12
  161. package/examples/jsm/postprocessing/SAOPass.js +23 -98
  162. package/examples/jsm/postprocessing/SSAOPass.js +10 -30
  163. package/examples/jsm/renderers/common/Backend.js +11 -8
  164. package/examples/jsm/renderers/common/Background.js +2 -2
  165. package/examples/jsm/renderers/common/Binding.js +6 -0
  166. package/examples/jsm/renderers/common/Bindings.js +4 -5
  167. package/examples/jsm/renderers/common/Pipelines.js +9 -9
  168. package/examples/jsm/renderers/common/RenderContext.js +3 -0
  169. package/examples/jsm/renderers/common/RenderContexts.js +26 -1
  170. package/examples/jsm/renderers/common/RenderList.js +12 -4
  171. package/examples/jsm/renderers/common/RenderObject.js +43 -15
  172. package/examples/jsm/renderers/common/RenderObjects.js +8 -14
  173. package/examples/jsm/renderers/common/Renderer.js +52 -16
  174. package/examples/jsm/renderers/common/SampledTexture.js +6 -3
  175. package/examples/jsm/renderers/common/Sampler.js +1 -1
  176. package/examples/jsm/renderers/common/StorageBuffer.js +1 -1
  177. package/examples/jsm/renderers/common/StorageTexture.js +19 -0
  178. package/examples/jsm/renderers/common/Textures.js +166 -21
  179. package/examples/jsm/renderers/common/nodes/NodeBuilderState.js +35 -0
  180. package/examples/jsm/renderers/common/nodes/NodeSampledTexture.js +21 -11
  181. package/examples/jsm/renderers/common/nodes/NodeSampler.js +1 -7
  182. package/examples/jsm/renderers/common/nodes/Nodes.js +79 -18
  183. package/examples/jsm/renderers/webgl/WebGLBackend.js +702 -0
  184. package/examples/jsm/renderers/webgl/nodes/GLSLNodeBuilder.js +207 -20
  185. package/examples/jsm/renderers/webgl/utils/WebGLAttributeUtils.js +84 -0
  186. package/examples/jsm/renderers/webgl/utils/WebGLExtensions.js +26 -0
  187. package/examples/jsm/renderers/webgl/utils/WebGLState.js +529 -0
  188. package/examples/jsm/renderers/webgl/utils/WebGLTextureUtils.js +212 -0
  189. package/examples/jsm/renderers/webgl/utils/WebGLUtils.js +242 -0
  190. package/examples/jsm/renderers/webgl-legacy/nodes/GLSL1NodeBuilder.js +340 -0
  191. package/examples/jsm/renderers/{webgl → webgl-legacy}/nodes/WebGLNodeBuilder.js +4 -4
  192. package/examples/jsm/renderers/{webgl → webgl-legacy}/nodes/WebGLNodes.js +14 -2
  193. package/examples/jsm/renderers/webgpu/WebGPUBackend.js +282 -43
  194. package/examples/jsm/renderers/webgpu/WebGPURenderer.js +18 -2
  195. package/examples/jsm/renderers/webgpu/nodes/WGSLNodeBuilder.js +93 -60
  196. package/examples/jsm/renderers/webgpu/nodes/WGSLNodeFunction.js +2 -2
  197. package/examples/jsm/renderers/webgpu/utils/WebGPUBindingUtils.js +15 -2
  198. package/examples/jsm/renderers/webgpu/utils/WebGPUPipelineUtils.js +39 -14
  199. package/examples/jsm/renderers/webgpu/utils/WebGPUTexturePassUtils.js +285 -0
  200. package/examples/jsm/renderers/webgpu/utils/WebGPUTextureUtils.js +205 -284
  201. package/examples/jsm/renderers/webgpu/utils/WebGPUUtils.js +6 -5
  202. package/examples/jsm/shaders/FilmShader.js +11 -54
  203. package/examples/jsm/shaders/GammaCorrectionShader.js +1 -1
  204. package/examples/jsm/shaders/MMDToonShader.js +4 -4
  205. package/examples/jsm/shaders/OutputShader.js +2 -2
  206. package/examples/jsm/shaders/SAOShader.js +0 -13
  207. package/examples/jsm/shaders/SSAOShader.js +33 -26
  208. package/examples/jsm/shaders/SubsurfaceScatteringShader.js +6 -6
  209. package/examples/jsm/utils/BufferGeometryUtils.js +6 -4
  210. package/package.json +1 -1
  211. package/src/Three.js +1 -2
  212. package/src/animation/AnimationUtils.js +3 -20
  213. package/src/animation/KeyframeTrack.js +8 -8
  214. package/src/audio/Audio.js +6 -0
  215. package/src/cameras/Camera.js +1 -5
  216. package/src/cameras/CubeCamera.js +14 -8
  217. package/src/constants.js +10 -1
  218. package/src/core/Object3D.js +1 -14
  219. package/src/core/RenderTarget.js +16 -7
  220. package/src/core/UniformsGroup.js +2 -2
  221. package/src/extras/core/CurvePath.js +4 -1
  222. package/src/loaders/DataTextureLoader.js +0 -2
  223. package/src/loaders/MaterialLoader.js +1 -1
  224. package/src/loaders/ObjectLoader.js +6 -0
  225. package/src/materials/Material.js +10 -10
  226. package/src/math/Color.js +1 -5
  227. package/src/math/ColorManagement.js +82 -60
  228. package/src/math/Vector2.js +2 -2
  229. package/src/math/Vector3.js +3 -3
  230. package/src/math/Vector4.js +4 -4
  231. package/src/objects/Line.js +1 -1
  232. package/src/objects/Mesh.js +1 -1
  233. package/src/objects/Points.js +1 -1
  234. package/src/objects/Sprite.js +2 -2
  235. package/src/renderers/WebGLRenderer.js +42 -51
  236. package/src/renderers/shaders/ShaderChunk/aomap_fragment.glsl.js +1 -1
  237. package/src/renderers/shaders/ShaderChunk/clearcoat_normal_fragment_begin.glsl.js +1 -1
  238. package/src/renderers/shaders/ShaderChunk/colorspace_pars_fragment.glsl.js +35 -2
  239. package/src/renderers/shaders/ShaderChunk/common.glsl.js +0 -9
  240. package/src/renderers/shaders/ShaderChunk/lights_fragment_begin.glsl.js +19 -15
  241. package/src/renderers/shaders/ShaderChunk/lights_fragment_end.glsl.js +2 -2
  242. package/src/renderers/shaders/ShaderChunk/lights_fragment_maps.glsl.js +4 -4
  243. package/src/renderers/shaders/ShaderChunk/lights_lambert_pars_fragment.glsl.js +3 -3
  244. package/src/renderers/shaders/ShaderChunk/lights_pars_begin.glsl.js +11 -6
  245. package/src/renderers/shaders/ShaderChunk/lights_phong_pars_fragment.glsl.js +4 -4
  246. package/src/renderers/shaders/ShaderChunk/lights_physical_fragment.glsl.js +1 -1
  247. package/src/renderers/shaders/ShaderChunk/lights_physical_pars_fragment.glsl.js +16 -16
  248. package/src/renderers/shaders/ShaderChunk/lights_toon_pars_fragment.glsl.js +3 -3
  249. package/src/renderers/shaders/ShaderChunk/map_fragment.glsl.js +11 -1
  250. package/src/renderers/shaders/ShaderChunk/normal_fragment_begin.glsl.js +1 -1
  251. package/src/renderers/shaders/ShaderLib/background.glsl.js +8 -0
  252. package/src/renderers/shaders/ShaderLib/meshphysical.glsl.js +1 -1
  253. package/src/renderers/shaders/UniformsUtils.js +2 -2
  254. package/src/renderers/webgl/WebGLBackground.js +9 -17
  255. package/src/renderers/webgl/WebGLLights.js +14 -3
  256. package/src/renderers/webgl/WebGLProgram.js +36 -5
  257. package/src/renderers/webgl/WebGLPrograms.js +9 -1
  258. package/src/renderers/webgl/WebGLTextures.js +19 -8
  259. package/src/renderers/webgl/WebGLUtils.js +25 -20
  260. package/src/scenes/Fog.js +1 -0
  261. package/src/scenes/FogExp2.js +1 -0
  262. package/src/textures/Source.js +2 -2
  263. package/src/textures/Texture.js +2 -2
  264. package/src/utils.js +9 -1
  265. package/examples/jsm/renderers/webgpu/utils/WebGPUTextureMipmapUtils.js +0 -163
  266. package/src/lights/AmbientLightProbe.js +0 -21
  267. package/src/lights/HemisphereLightProbe.js +0 -30
  268. /package/examples/jsm/renderers/{webgl → webgl-legacy}/nodes/SlotNode.js +0 -0
@@ -1,7 +1,11 @@
1
- import { MathNode, GLSLNodeParser, NodeBuilder, NodeMaterial } from 'three/nodes';
1
+ import { MathNode, GLSLNodeParser, NodeBuilder, NodeMaterial } from '../../../nodes/Nodes.js';
2
+
3
+ import UniformsGroup from '../../common/UniformsGroup.js';
4
+ import { NodeSampledTexture, NodeSampledCubeTexture } from '../../common/nodes/NodeSampledTexture.js';
2
5
 
3
6
  const glslMethods = {
4
- [ MathNode.ATAN2 ]: 'atan'
7
+ [ MathNode.ATAN2 ]: 'atan',
8
+ textureDimensions: 'textureSize'
5
9
  };
6
10
 
7
11
  const precisionLib = {
@@ -16,6 +20,8 @@ class GLSLNodeBuilder extends NodeBuilder {
16
20
 
17
21
  super( object, renderer, new GLSLNodeParser(), scene );
18
22
 
23
+ this.uniformsGroup = {};
24
+
19
25
  }
20
26
 
21
27
  getMethod( method ) {
@@ -24,28 +30,52 @@ class GLSLNodeBuilder extends NodeBuilder {
24
30
 
25
31
  }
26
32
 
33
+ getPropertyName( node, shaderStage ) {
34
+
35
+ if ( node.isOutputStructVar ) return '';
36
+
37
+ return super.getPropertyName( node, shaderStage );
38
+
39
+ }
40
+
27
41
  getTexture( texture, textureProperty, uvSnippet ) {
28
42
 
29
43
  if ( texture.isTextureCube ) {
30
44
 
31
45
  return `textureCube( ${textureProperty}, ${uvSnippet} )`;
32
46
 
47
+ } else if ( texture.isDepthTexture ) {
48
+
49
+ return `texture( ${textureProperty}, ${uvSnippet} ).x`;
50
+
33
51
  } else {
34
52
 
35
- return `texture2D( ${textureProperty}, ${uvSnippet} )`;
53
+ return `texture( ${textureProperty}, ${uvSnippet} )`;
36
54
 
37
55
  }
38
56
 
39
57
  }
40
58
 
41
- getTextureBias( texture, textureProperty, uvSnippet, biasSnippet ) {
42
-
43
- if ( this.material.extensions !== undefined ) this.material.extensions.shaderTextureLOD = true;
59
+ getTextureLevel( texture, textureProperty, uvSnippet, biasSnippet ) {
44
60
 
45
61
  return `textureLod( ${textureProperty}, ${uvSnippet}, ${biasSnippet} )`;
46
62
 
47
63
  }
48
64
 
65
+ getTextureCompare( texture, textureProperty, uvSnippet, compareSnippet, shaderStage = this.shaderStage ) {
66
+
67
+ if ( shaderStage === 'fragment' ) {
68
+
69
+ return `texture( ${textureProperty}, vec3( ${uvSnippet}, ${compareSnippet} ) )`;
70
+
71
+ } else {
72
+
73
+ console.error( `WebGPURenderer: THREE.DepthTexture.compareFunction() does not support ${ shaderStage } shader.` );
74
+
75
+ }
76
+
77
+ }
78
+
49
79
  getVars( shaderStage ) {
50
80
 
51
81
  const snippets = [];
@@ -54,6 +84,8 @@ class GLSLNodeBuilder extends NodeBuilder {
54
84
 
55
85
  for ( const variable of vars ) {
56
86
 
87
+ if ( variable.isOutputStructVar ) continue;
88
+
57
89
  snippets.push( `${ this.getVar( variable.type, variable.name ) };` );
58
90
 
59
91
  }
@@ -66,25 +98,37 @@ class GLSLNodeBuilder extends NodeBuilder {
66
98
 
67
99
  const uniforms = this.uniforms[ shaderStage ];
68
100
 
69
- let output = '';
101
+ const bindingSnippets = [];
102
+ const groupSnippets = [];
70
103
 
71
104
  for ( const uniform of uniforms ) {
72
105
 
73
106
  let snippet = null;
107
+ let group = false;
74
108
 
75
109
  if ( uniform.type === 'texture' ) {
76
110
 
77
- snippet = `sampler2D ${uniform.name};\n`;
111
+ if ( uniform.node.value.compareFunction ) {
112
+
113
+ snippet = `sampler2DShadow ${uniform.name};`;
114
+
115
+ } else {
116
+
117
+ snippet = `sampler2D ${uniform.name};`;
118
+
119
+ }
78
120
 
79
121
  } else if ( uniform.type === 'cubeTexture' ) {
80
122
 
81
- snippet = `samplerCube ${uniform.name};\n`;
123
+ snippet = `samplerCube ${uniform.name};`;
82
124
 
83
125
  } else {
84
126
 
85
127
  const vectorType = this.getVectorType( uniform.type );
86
128
 
87
- snippet = `${vectorType} ${uniform.name};\n`;
129
+ snippet = `${vectorType} ${uniform.name};`;
130
+
131
+ group = true;
88
132
 
89
133
  }
90
134
 
@@ -92,18 +136,36 @@ class GLSLNodeBuilder extends NodeBuilder {
92
136
 
93
137
  if ( precision !== null ) {
94
138
 
95
- snippet = 'uniform ' + precisionLib[ precision ] + ' ' + snippet;
139
+ snippet = precisionLib[ precision ] + ' ' + snippet;
140
+
141
+ }
142
+
143
+ if ( group ) {
144
+
145
+ snippet = '\t' + snippet;
146
+
147
+ groupSnippets.push( snippet );
96
148
 
97
149
  } else {
98
150
 
99
151
  snippet = 'uniform ' + snippet;
100
152
 
153
+ bindingSnippets.push( snippet );
154
+
101
155
  }
102
156
 
103
- output += snippet;
157
+ }
158
+
159
+ let output = '';
160
+
161
+ if ( groupSnippets.length > 0 ) {
162
+
163
+ output += this._getGLSLUniformStruct( shaderStage + 'NodeUniforms', groupSnippets.join( '\n' ) ) + '\n';
104
164
 
105
165
  }
106
166
 
167
+ output += bindingSnippets.join( '\n' );
168
+
107
169
  return output;
108
170
 
109
171
  }
@@ -116,9 +178,11 @@ class GLSLNodeBuilder extends NodeBuilder {
116
178
 
117
179
  const attributes = this.attributes;
118
180
 
181
+ let location = 0;
182
+
119
183
  for ( const attribute of attributes ) {
120
184
 
121
- snippet += `attribute ${attribute.type} ${attribute.name};\n`;
185
+ snippet += `layout( location = ${ location ++ } ) in ${ attribute.type } ${ attribute.name };\n`;
122
186
 
123
187
  }
124
188
 
@@ -128,6 +192,49 @@ class GLSLNodeBuilder extends NodeBuilder {
128
192
 
129
193
  }
130
194
 
195
+ getStructMembers( struct ) {
196
+
197
+ const snippets = [];
198
+ const members = struct.getMemberTypes();
199
+
200
+ for ( let i = 0; i < members.length; i ++ ) {
201
+
202
+ const member = members[ i ];
203
+ snippets.push( `layout( location = ${i} ) out ${ member} m${i};` );
204
+
205
+ }
206
+
207
+ return snippets.join( '\n' );
208
+
209
+ }
210
+
211
+ getStructs( shaderStage ) {
212
+
213
+ const snippets = [];
214
+ const structs = this.structs[ shaderStage ];
215
+
216
+ if ( structs.length === 0 ) {
217
+
218
+ return "layout( location = 0 ) out vec4 fragColor;\n";
219
+
220
+ }
221
+
222
+ for ( let index = 0, length = structs.length; index < length; index ++ ) {
223
+
224
+ const struct = structs[ index ];
225
+
226
+ let snippet = `\n`;
227
+ snippet += this.getStructMembers( struct );
228
+ snippet += '\n';
229
+
230
+ snippets.push( snippet );
231
+
232
+ }
233
+
234
+ return snippets.join( '\n\n' );
235
+
236
+ }
237
+
131
238
  getVaryings( shaderStage ) {
132
239
 
133
240
  let snippet = '';
@@ -138,7 +245,7 @@ class GLSLNodeBuilder extends NodeBuilder {
138
245
 
139
246
  for ( const varying of varyings ) {
140
247
 
141
- snippet += `${varying.needsInterpolation ? 'varying' : '/*varying*/'} ${varying.type} ${varying.name};\n`;
248
+ snippet += `${varying.needsInterpolation ? 'out' : '/*out*/'} ${varying.type} ${varying.name};\n`;
142
249
 
143
250
  }
144
251
 
@@ -148,7 +255,7 @@ class GLSLNodeBuilder extends NodeBuilder {
148
255
 
149
256
  if ( varying.needsInterpolation ) {
150
257
 
151
- snippet += `varying ${varying.type} ${varying.name};\n`;
258
+ snippet += `in ${varying.type} ${varying.name};\n`;
152
259
 
153
260
  }
154
261
 
@@ -184,9 +291,24 @@ class GLSLNodeBuilder extends NodeBuilder {
184
291
 
185
292
  }
186
293
 
294
+ _getGLSLUniformStruct( name, vars ) {
295
+
296
+ return `
297
+ layout( std140 ) uniform ${name} {
298
+ ${vars}
299
+ };`;
300
+
301
+ }
302
+
187
303
  _getGLSLVertexCode( shaderData ) {
188
304
 
189
- return `${ this.getSignature() }
305
+ return `#version 300 es
306
+
307
+ ${ this.getSignature() }
308
+
309
+ // precision
310
+ precision highp float;
311
+ precision highp int;
190
312
 
191
313
  // uniforms
192
314
  ${shaderData.uniforms}
@@ -208,6 +330,8 @@ void main() {
208
330
  // flow
209
331
  ${shaderData.flow}
210
332
 
333
+ gl_PointSize = 1.0;
334
+
211
335
  }
212
336
  `;
213
337
 
@@ -215,11 +339,14 @@ void main() {
215
339
 
216
340
  _getGLSLFragmentCode( shaderData ) {
217
341
 
218
- return `${ this.getSignature() }
342
+ return `#version 300 es
343
+
344
+ ${ this.getSignature() }
219
345
 
220
346
  // precision
221
347
  precision highp float;
222
348
  precision highp int;
349
+ precision lowp sampler2DShadow;
223
350
 
224
351
  // uniforms
225
352
  ${shaderData.uniforms}
@@ -230,6 +357,8 @@ ${shaderData.varyings}
230
357
  // codes
231
358
  ${shaderData.codes}
232
359
 
360
+ ${shaderData.structs}
361
+
233
362
  void main() {
234
363
 
235
364
  // vars
@@ -277,14 +406,18 @@ void main() {
277
406
  if ( shaderStage === 'vertex' ) {
278
407
 
279
408
  flow += 'gl_Position = ';
409
+ flow += `${ flowSlotData.result };`;
280
410
 
281
411
  } else if ( shaderStage === 'fragment' ) {
282
412
 
283
- flow += 'gl_FragColor = ';
413
+ if ( ! node.outputNode.isOutputStructNode ) {
284
414
 
285
- }
415
+ flow += 'fragColor = ';
416
+ flow += `${ flowSlotData.result };`;
286
417
 
287
- flow += `${ flowSlotData.result };`;
418
+ }
419
+
420
+ }
288
421
 
289
422
  }
290
423
 
@@ -296,6 +429,7 @@ void main() {
296
429
  stageData.attributes = this.getAttributes( shaderStage );
297
430
  stageData.varyings = this.getVaryings( shaderStage );
298
431
  stageData.vars = this.getVars( shaderStage );
432
+ stageData.structs = this.getStructs( shaderStage );
299
433
  stageData.codes = this.getCodes( shaderStage );
300
434
  stageData.flow = flow;
301
435
 
@@ -306,6 +440,9 @@ void main() {
306
440
  this.vertexShader = this._getGLSLVertexCode( shadersData.vertex );
307
441
  this.fragmentShader = this._getGLSLFragmentCode( shadersData.fragment );
308
442
 
443
+ //console.log( this.vertexShader );
444
+ //console.log( this.fragmentShader );
445
+
309
446
  } else {
310
447
 
311
448
  console.warn( 'GLSLNodeBuilder: compute shaders are not supported.' );
@@ -315,6 +452,56 @@ void main() {
315
452
 
316
453
  }
317
454
 
455
+ getUniformFromNode( node, type, shaderStage, name = null ) {
456
+
457
+ const uniformNode = super.getUniformFromNode( node, type, shaderStage, name );
458
+ const nodeData = this.getDataFromNode( node, shaderStage );
459
+
460
+ let uniformGPU = nodeData.uniformGPU;
461
+
462
+ if ( uniformGPU === undefined ) {
463
+
464
+ if ( type === 'texture' ) {
465
+
466
+ uniformGPU = new NodeSampledTexture( uniformNode.name, uniformNode.node );
467
+
468
+ this.bindings[ shaderStage ].push( uniformGPU );
469
+
470
+ } else if ( type === 'cubeTexture' ) {
471
+
472
+ uniformGPU = new NodeSampledCubeTexture( uniformNode.name, uniformNode.node );
473
+
474
+ this.bindings[ shaderStage ].push( uniformGPU );
475
+
476
+ } else {
477
+
478
+ let uniformsGroup = this.uniformsGroup[ shaderStage ];
479
+
480
+ if ( uniformsGroup === undefined ) {
481
+
482
+ uniformsGroup = new UniformsGroup( shaderStage + 'NodeUniforms' );
483
+ //uniformsGroup.setVisibility( gpuShaderStageLib[ shaderStage ] );
484
+
485
+ this.uniformsGroup[ shaderStage ] = uniformsGroup;
486
+
487
+ this.bindings[ shaderStage ].push( uniformsGroup );
488
+
489
+ }
490
+
491
+ uniformGPU = this.getNodeUniform( uniformNode, type );
492
+
493
+ uniformsGroup.addUniform( uniformGPU );
494
+
495
+ }
496
+
497
+ nodeData.uniformGPU = uniformGPU;
498
+
499
+ }
500
+
501
+ return uniformNode;
502
+
503
+ }
504
+
318
505
  build() {
319
506
 
320
507
  // @TODO: Move this code to super.build()
@@ -0,0 +1,84 @@
1
+ class WebGLAttributeUtils {
2
+
3
+ constructor( backend ) {
4
+
5
+ this.backend = backend;
6
+
7
+ }
8
+
9
+ createAttribute( attribute, bufferType ) {
10
+
11
+ const backend = this.backend;
12
+ const { gl } = backend;
13
+
14
+ const array = attribute.array;
15
+ const usage = attribute.usage || gl.STATIC_DRAW;
16
+
17
+ const bufferGPU = gl.createBuffer();
18
+
19
+ gl.bindBuffer( bufferType, bufferGPU );
20
+ gl.bufferData( bufferType, array, usage );
21
+ gl.bindBuffer( bufferType, null );
22
+
23
+ //attribute.onUploadCallback();
24
+
25
+ let type;
26
+
27
+ if ( array instanceof Float32Array ) {
28
+
29
+ type = gl.FLOAT;
30
+
31
+ } else if ( array instanceof Uint16Array ) {
32
+
33
+ if ( attribute.isFloat16BufferAttribute ) {
34
+
35
+ type = gl.HALF_FLOAT;
36
+
37
+ } else {
38
+
39
+ type = gl.UNSIGNED_SHORT;
40
+
41
+ }
42
+
43
+ } else if ( array instanceof Int16Array ) {
44
+
45
+ type = gl.SHORT;
46
+
47
+ } else if ( array instanceof Uint32Array ) {
48
+
49
+ type = gl.UNSIGNED_INT;
50
+
51
+ } else if ( array instanceof Int32Array ) {
52
+
53
+ type = gl.INT;
54
+
55
+ } else if ( array instanceof Int8Array ) {
56
+
57
+ type = gl.BYTE;
58
+
59
+ } else if ( array instanceof Uint8Array ) {
60
+
61
+ type = gl.UNSIGNED_BYTE;
62
+
63
+ } else if ( array instanceof Uint8ClampedArray ) {
64
+
65
+ type = gl.UNSIGNED_BYTE;
66
+
67
+ } else {
68
+
69
+ throw new Error( 'THREE.WebGLBackend: Unsupported buffer data format: ' + array );
70
+
71
+ }
72
+
73
+ backend.set( attribute, {
74
+ bufferGPU,
75
+ type,
76
+ bytesPerElement: array.BYTES_PER_ELEMENT,
77
+ version: attribute.version
78
+ } );
79
+
80
+ }
81
+
82
+ }
83
+
84
+ export default WebGLAttributeUtils;
@@ -0,0 +1,26 @@
1
+ class WebGLExtensions {
2
+
3
+ constructor( backend ) {
4
+
5
+ this.backend = backend;
6
+
7
+ this.gl = this.backend.gl;
8
+ this.availableExtensions = this.gl.getSupportedExtensions();
9
+
10
+ }
11
+
12
+ get( name ) {
13
+
14
+ return this.gl.getExtension( name );
15
+
16
+ }
17
+
18
+ has( name ) {
19
+
20
+ return this.availableExtensions.includes( name );
21
+
22
+ }
23
+
24
+ }
25
+
26
+ export default WebGLExtensions;