x_ite 5.0.2 → 6.0.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 (340) hide show
  1. package/.vscode/settings.json +12 -5
  2. package/.vscode/tasks.json +21 -0
  3. package/Makefile +10 -15
  4. package/README.md +6 -11
  5. package/build/bin/dist.pl +0 -6
  6. package/build/bin/version.pl +1 -4
  7. package/dist/assets/components/annotation.js +2 -2
  8. package/dist/assets/components/annotation.min.js +1 -1
  9. package/dist/assets/components/cad-geometry.js +2 -2
  10. package/dist/assets/components/cad-geometry.min.js +1 -1
  11. package/dist/assets/components/cube-map-texturing.js +6 -19
  12. package/dist/assets/components/cube-map-texturing.min.js +1 -1
  13. package/dist/assets/components/dis.js +2 -2
  14. package/dist/assets/components/dis.min.js +1 -1
  15. package/dist/assets/components/event-utilities.js +3 -3
  16. package/dist/assets/components/event-utilities.min.js +1 -1
  17. package/dist/assets/components/geometry2d.js +4 -4
  18. package/dist/assets/components/geometry2d.min.js +1 -1
  19. package/dist/assets/components/geospatial.js +32 -1685
  20. package/dist/assets/components/geospatial.min.js +1 -1
  21. package/dist/assets/components/h-anim.js +70 -77
  22. package/dist/assets/components/h-anim.min.js +1 -1
  23. package/dist/assets/components/key-device-sensor.js +3 -3
  24. package/dist/assets/components/key-device-sensor.min.js +1 -1
  25. package/dist/assets/components/layout.js +38 -52
  26. package/dist/assets/components/layout.min.js +1 -1
  27. package/dist/assets/components/nurbs.js +277 -194
  28. package/dist/assets/components/nurbs.min.js +1 -1
  29. package/dist/assets/components/particle-systems.js +1918 -1658
  30. package/dist/assets/components/particle-systems.min.js +1 -1
  31. package/dist/assets/components/picking.js +33 -41
  32. package/dist/assets/components/picking.min.js +1 -1
  33. package/dist/assets/components/projective-texture-mapping.js +72 -86
  34. package/dist/assets/components/projective-texture-mapping.min.js +1 -1
  35. package/dist/assets/components/rigid-body-physics.js +36 -57
  36. package/dist/assets/components/rigid-body-physics.min.js +1 -1
  37. package/dist/assets/components/scripting.js +2 -2
  38. package/dist/assets/components/scripting.min.js +1 -1
  39. package/dist/assets/components/texturing-3d.js +26 -75
  40. package/dist/assets/components/texturing-3d.min.js +3 -3
  41. package/dist/assets/components/volume-rendering.js +10 -10
  42. package/dist/assets/components/volume-rendering.min.js +1 -1
  43. package/dist/assets/components/x_ite.js +2 -2
  44. package/dist/assets/components/x_ite.min.js +1 -1
  45. package/dist/assets/linetype/1.png +0 -0
  46. package/dist/assets/linetype/10.png +0 -0
  47. package/dist/assets/linetype/11.png +0 -0
  48. package/dist/assets/linetype/12.png +0 -0
  49. package/dist/assets/linetype/13.png +0 -0
  50. package/dist/assets/linetype/14.png +0 -0
  51. package/dist/assets/linetype/15.png +0 -0
  52. package/dist/assets/linetype/16.png +0 -0
  53. package/dist/assets/linetype/2.png +0 -0
  54. package/dist/assets/linetype/3.png +0 -0
  55. package/dist/assets/linetype/4.png +0 -0
  56. package/dist/assets/linetype/5.png +0 -0
  57. package/dist/assets/linetype/6.png +0 -0
  58. package/dist/assets/linetype/7.png +0 -0
  59. package/dist/assets/linetype/8.png +0 -0
  60. package/dist/assets/linetype/9.png +0 -0
  61. package/dist/assets/shaders/webgl1/Line.fs +0 -21
  62. package/dist/assets/shaders/webgl1/Line.vs +0 -10
  63. package/dist/assets/shaders/webgl1/PBR.vs +1 -1
  64. package/dist/assets/shaders/webgl2/Depth.vs +29 -1
  65. package/dist/assets/shaders/webgl2/Gouraud.vs +31 -3
  66. package/dist/assets/shaders/webgl2/Line.fs +24 -12
  67. package/dist/assets/shaders/webgl2/Line.vs +36 -11
  68. package/dist/assets/shaders/webgl2/LineTransform.fs +4 -0
  69. package/dist/assets/shaders/webgl2/LineTransform.vs +57 -0
  70. package/dist/assets/shaders/webgl2/PBR.vs +35 -7
  71. package/dist/assets/shaders/webgl2/Phong.vs +31 -3
  72. package/dist/assets/shaders/webgl2/Point.vs +29 -1
  73. package/dist/assets/shaders/webgl2/Unlit.vs +31 -3
  74. package/dist/example.html +6 -6
  75. package/dist/x_ite.css +180 -208
  76. package/dist/x_ite.js +16477 -16629
  77. package/dist/x_ite.min.js +17 -17
  78. package/dist/x_ite.zip +0 -0
  79. package/docs/404.md +6 -0
  80. package/docs/Accessing-the-External-Browser.md +20 -14
  81. package/docs/Browser-Support.md +6 -0
  82. package/docs/Custom-Shaders.md +17 -24
  83. package/docs/Features.md +7 -1
  84. package/docs/Gemfile +44 -0
  85. package/docs/Gemfile.lock +122 -0
  86. package/docs/Glossary.md +6 -0
  87. package/docs/How-To-Configure-Your-Web-Server.md +6 -0
  88. package/docs/Supported-Nodes.md +9 -1
  89. package/docs/What's-New.md +31 -0
  90. package/docs/XHTML-DOM-Integration.md +6 -0
  91. package/docs/_config.yml +1 -1
  92. package/docs/assets/css/main.scss +26 -0
  93. package/docs/index.md +38 -46
  94. package/docs/reference/Browser-Services.md +9 -3
  95. package/docs/reference/Constants-Services.md +6 -0
  96. package/docs/reference/ECMAScript-Object-and-Function-Definitions.md +6 -0
  97. package/docs/reference/Field-Services-and-Objects.md +6 -0
  98. package/docs/reference/Prototype-Services.md +6 -0
  99. package/docs/reference/Route-Services.md +6 -0
  100. package/docs/reference/Scene-Services.md +8 -2
  101. package/docs/reference/Script-Node-Authoring-Interface.md +7 -1
  102. package/docs/tutorials/Adding-backgrounds.md +6 -0
  103. package/docs/tutorials/Adding-fog.md +6 -0
  104. package/docs/tutorials/Adding-sound.md +6 -0
  105. package/docs/tutorials/Animating-transforms.md +6 -0
  106. package/docs/tutorials/Basic-Nodes.md +6 -0
  107. package/docs/tutorials/Building-a-X3D-world.md +6 -0
  108. package/docs/tutorials/Building-elevation-grids.md +6 -0
  109. package/docs/tutorials/Building-extruded-shapes.md +6 -0
  110. package/docs/tutorials/Building-primitive-shapes.md +6 -0
  111. package/docs/tutorials/Building-shapes-out-of-points,-lines,-and-faces.md +6 -0
  112. package/docs/tutorials/Controlling-appearance-with-materials.md +6 -0
  113. package/docs/tutorials/Controlling-color-on-coordinate-based-geometry.md +6 -0
  114. package/docs/tutorials/Controlling-detail.md +6 -0
  115. package/docs/tutorials/Controlling-how-textures-are-mapped.md +6 -0
  116. package/docs/tutorials/Controlling-navigation.md +6 -0
  117. package/docs/tutorials/Controlling-shading-on-coordinate-based-geometry.md +6 -0
  118. package/docs/tutorials/Controlling-the-viewpoint.md +6 -0
  119. package/docs/tutorials/Creating-new-node-types.md +6 -0
  120. package/docs/tutorials/Grouping-nodes.md +6 -0
  121. package/docs/tutorials/Hello,-World!.md +6 -0
  122. package/docs/tutorials/Improving-Performance.md +6 -0
  123. package/docs/tutorials/Increasing-Rendering-Speed.md +6 -0
  124. package/docs/tutorials/Introducing-X3D.md +6 -0
  125. package/docs/tutorials/Introducing-animation.md +6 -0
  126. package/docs/tutorials/Introducing-script-use.md +6 -0
  127. package/docs/tutorials/Lighting-your-world.md +6 -0
  128. package/docs/tutorials/Mapping-textures.md +6 -0
  129. package/docs/tutorials/Naming-nodes.md +6 -0
  130. package/docs/tutorials/Providing-information-about-your-world.md +6 -0
  131. package/docs/tutorials/Sensing-the-viewer.md +6 -0
  132. package/docs/tutorials/Sensing-viewer-actions.md +6 -0
  133. package/docs/tutorials/Transforming-Shapes.md +6 -0
  134. package/docs/tutorials/Writing-program-scripts-with-ECMAScript.md +6 -0
  135. package/docs/tutorials/index.md +6 -0
  136. package/package.json +6 -7
  137. package/src/assets/components/geometry2d.js +1 -1
  138. package/src/assets/components/key-device-sensor.js +1 -1
  139. package/src/assets/components/layout.js +1 -1
  140. package/src/assets/components/particle-systems.js +1 -1
  141. package/src/assets/components/volume-rendering.js +1 -1
  142. package/src/assets/linetype/1.png +0 -0
  143. package/src/assets/linetype/10.png +0 -0
  144. package/src/assets/linetype/11.png +0 -0
  145. package/src/assets/linetype/12.png +0 -0
  146. package/src/assets/linetype/13.png +0 -0
  147. package/src/assets/linetype/14.png +0 -0
  148. package/src/assets/linetype/15.png +0 -0
  149. package/src/assets/linetype/16.png +0 -0
  150. package/src/assets/linetype/2.png +0 -0
  151. package/src/assets/linetype/3.png +0 -0
  152. package/src/assets/linetype/4.png +0 -0
  153. package/src/assets/linetype/5.png +0 -0
  154. package/src/assets/linetype/6.png +0 -0
  155. package/src/assets/linetype/7.png +0 -0
  156. package/src/assets/linetype/8.png +0 -0
  157. package/src/assets/linetype/9.png +0 -0
  158. package/src/assets/shaders/Types.glsl +1 -9
  159. package/src/assets/shaders/webgl1/Line.fs +3 -28
  160. package/src/assets/shaders/webgl1/Line.vs +5 -19
  161. package/src/assets/shaders/webgl1/PBR.vs +1 -1
  162. package/src/assets/shaders/webgl1/Point.vs +2 -3
  163. package/src/assets/shaders/webgl2/Depth.vs +4 -1
  164. package/src/assets/shaders/webgl2/Gouraud.vs +5 -3
  165. package/src/assets/shaders/webgl2/Line.fs +11 -17
  166. package/src/assets/shaders/webgl2/Line.vs +16 -20
  167. package/src/assets/shaders/webgl2/LineTransform.fs +6 -0
  168. package/src/assets/shaders/webgl2/LineTransform.vs +77 -0
  169. package/src/assets/shaders/webgl2/PBR.vs +10 -7
  170. package/src/assets/shaders/webgl2/Phong.vs +6 -3
  171. package/src/assets/shaders/webgl2/Point.vs +6 -6
  172. package/src/assets/shaders/webgl2/Unlit.vs +6 -3
  173. package/src/assets/shaders/webgl2/include/Line2.glsl +20 -0
  174. package/src/assets/shaders/webgl2/include/Particle.glsl +36 -0
  175. package/src/example.html +6 -6
  176. package/src/standard/Math/Algorithm.js +12 -28
  177. package/src/standard/Math/Geometry/Plane3.js +0 -2
  178. package/src/standard/Math/Geometry/ViewVolume.js +88 -83
  179. package/src/standard/Math/Numbers/Color3.js +6 -0
  180. package/src/standard/Math/Numbers/Color4.js +7 -0
  181. package/src/standard/Math/Numbers/Complex.js +5 -0
  182. package/src/standard/Math/Numbers/Matrix2.js +20 -2
  183. package/src/standard/Math/Numbers/Matrix3.js +129 -110
  184. package/src/standard/Math/Numbers/Matrix4.js +138 -119
  185. package/src/standard/Math/Numbers/Quaternion.js +7 -0
  186. package/src/standard/Math/Numbers/Rotation4.js +7 -0
  187. package/src/standard/Math/Numbers/Vector2.js +8 -5
  188. package/src/standard/Math/Numbers/Vector3.js +16 -10
  189. package/src/standard/Math/Numbers/Vector4.js +12 -7
  190. package/src/standard/Math/Utility/BVH.js +45 -17
  191. package/src/tests.js +6 -1
  192. package/src/x_ite/Base/X3DBaseNode.js +22 -11
  193. package/src/x_ite/Base/X3DField.js +1 -1
  194. package/src/x_ite/Browser/Core/BrowserOptions.js +2 -2
  195. package/src/x_ite/Browser/Core/BrowserTimings.js +4 -2
  196. package/src/x_ite/Browser/Core/Context.js +185 -0
  197. package/src/x_ite/Browser/Core/ContextMenu.js +299 -193
  198. package/src/x_ite/Browser/Core/Notification.js +1 -0
  199. package/src/x_ite/Browser/Core/X3DCoreContext.js +35 -146
  200. package/src/x_ite/Browser/Layout/ScreenText.js +11 -4
  201. package/src/x_ite/Browser/Layout/X3DLayoutContext.js +4 -15
  202. package/src/x_ite/Browser/Navigation/ExamineViewer.js +12 -19
  203. package/src/x_ite/Browser/Navigation/LookAtViewer.js +0 -3
  204. package/src/x_ite/Browser/Navigation/PlaneViewer.js +0 -3
  205. package/src/x_ite/Browser/Navigation/X3DFlyViewer.js +14 -7
  206. package/src/x_ite/Browser/Navigation/X3DViewer.js +12 -20
  207. package/src/x_ite/Browser/Networking/X3DNetworkingContext.js +11 -7
  208. package/src/x_ite/Browser/ParticleSystems/BVH.glsl +183 -0
  209. package/src/x_ite/Browser/ParticleSystems/Box3.glsl +47 -0
  210. package/src/x_ite/Browser/ParticleSystems/GeometryTypes.js +66 -0
  211. package/src/x_ite/Browser/ParticleSystems/Line3.glsl +55 -0
  212. package/src/x_ite/Browser/ParticleSystems/Plane3.glsl +160 -0
  213. package/src/x_ite/Browser/PointingDeviceSensor/PointingDevice.js +27 -3
  214. package/src/x_ite/Browser/PointingDeviceSensor/X3DPointingDeviceSensorContext.js +37 -37
  215. package/src/x_ite/Browser/Rendering/X3DRenderingContext.js +19 -13
  216. package/src/x_ite/Browser/Shaders/Shader.js +33 -12
  217. package/src/x_ite/Browser/Shaders/ShaderSource.js +6 -0
  218. package/src/x_ite/Browser/Shaders/ShaderTest.js +16 -10
  219. package/src/x_ite/Browser/Shape/X3DShapeContext.js +50 -9
  220. package/src/x_ite/Browser/Text/X3DTextContext.js +4 -13
  221. package/src/x_ite/Browser/Texturing/X3DTexturingContext.js +23 -33
  222. package/src/x_ite/Browser/Texturing3D/DICOMParser.js +2 -2
  223. package/src/x_ite/Browser/Time/X3DTimeContext.js +3 -1
  224. package/src/x_ite/Browser/VERSION.js +1 -1
  225. package/src/x_ite/Browser/X3DBrowser.js +7 -6
  226. package/src/x_ite/Browser/X3DBrowserContext.js +35 -10
  227. package/src/x_ite/Components/Core/X3DNode.js +4 -0
  228. package/src/x_ite/Components/Core/X3DPrototypeInstance.js +0 -2
  229. package/src/x_ite/Components/CubeMapTexturing/ComposedCubeMapTexture.js +3 -4
  230. package/src/x_ite/Components/CubeMapTexturing/GeneratedCubeMapTexture.js +1 -12
  231. package/src/x_ite/Components/CubeMapTexturing/ImageCubeMapTexture.js +0 -1
  232. package/src/x_ite/Components/EnvironmentalEffects/TextureBackground.js +1 -1
  233. package/src/x_ite/Components/EnvironmentalEffects/X3DBackgroundNode.js +76 -77
  234. package/src/x_ite/Components/EnvironmentalEffects/X3DFogObject.js +2 -9
  235. package/src/x_ite/Components/EnvironmentalSensor/ProximitySensor.js +51 -65
  236. package/src/x_ite/Components/EventUtilities/X3DSequencerNode.js +1 -1
  237. package/src/x_ite/Components/Followers/X3DChaserNode.js +18 -32
  238. package/src/x_ite/Components/Followers/X3DDamperNode.js +1 -6
  239. package/src/x_ite/Components/Geometry2D/TriangleSet2D.js +1 -1
  240. package/src/x_ite/Components/Geometry3D/ElevationGrid.js +12 -4
  241. package/src/x_ite/Components/Geometry3D/IndexedFaceSet.js +4 -4
  242. package/src/x_ite/Components/Geospatial/GeoCoordinate.js +10 -27
  243. package/src/x_ite/Components/Geospatial/GeoPositionInterpolator.js +5 -10
  244. package/src/x_ite/Components/Geospatial/GeoTouchSensor.js +9 -16
  245. package/src/x_ite/Components/Geospatial/GeoTransform.js +6 -18
  246. package/src/x_ite/Components/Geospatial/X3DGeospatialObject.js +20 -27
  247. package/src/x_ite/Components/Grouping/X3DGroupingNode.js +8 -8
  248. package/src/x_ite/Components/Grouping/X3DTransformNode.js +0 -4
  249. package/src/x_ite/Components/HAnim/HAnimHumanoid.js +68 -75
  250. package/src/x_ite/Components/Interpolation/OrientationInterpolator.js +4 -11
  251. package/src/x_ite/Components/Interpolation/X3DInterpolatorNode.js +1 -1
  252. package/src/x_ite/Components/Layout/LayoutGroup.js +4 -9
  253. package/src/x_ite/Components/Layout/ScreenFontStyle.js +1 -1
  254. package/src/x_ite/Components/Layout/ScreenGroup.js +18 -23
  255. package/src/x_ite/Components/Lighting/DirectionalLight.js +28 -36
  256. package/src/x_ite/Components/Lighting/PointLight.js +32 -47
  257. package/src/x_ite/Components/Lighting/SpotLight.js +33 -48
  258. package/src/x_ite/Components/Navigation/Billboard.js +49 -56
  259. package/src/x_ite/Components/Navigation/LOD.js +1 -1
  260. package/src/x_ite/Components/Navigation/X3DViewpointNode.js +82 -111
  261. package/src/x_ite/Components/Networking/Anchor.js +10 -4
  262. package/src/x_ite/Components/ParticleSystems/BoundedPhysicsModel.js +6 -6
  263. package/src/x_ite/Components/ParticleSystems/ConeEmitter.js +44 -36
  264. package/src/x_ite/Components/ParticleSystems/ExplosionEmitter.js +26 -17
  265. package/src/x_ite/Components/ParticleSystems/ForcePhysicsModel.js +20 -7
  266. package/src/x_ite/Components/ParticleSystems/ParticleSystem.js +461 -876
  267. package/src/x_ite/Components/ParticleSystems/PointEmitter.js +39 -35
  268. package/src/x_ite/Components/ParticleSystems/PolylineEmitter.js +112 -128
  269. package/src/x_ite/Components/ParticleSystems/SurfaceEmitter.js +105 -112
  270. package/src/x_ite/Components/ParticleSystems/VolumeEmitter.js +138 -176
  271. package/src/x_ite/Components/ParticleSystems/WindPhysicsModel.js +16 -11
  272. package/src/x_ite/Components/ParticleSystems/X3DParticleEmitterNode.js +807 -217
  273. package/src/x_ite/Components/Picking/LinePickSensor.js +31 -39
  274. package/src/x_ite/Components/PointingDeviceSensor/CylinderSensor.js +90 -107
  275. package/src/x_ite/Components/PointingDeviceSensor/PlaneSensor.js +48 -55
  276. package/src/x_ite/Components/PointingDeviceSensor/SphereSensor.js +53 -70
  277. package/src/x_ite/Components/PointingDeviceSensor/TouchSensor.js +8 -15
  278. package/src/x_ite/Components/ProjectiveTextureMapping/TextureProjectorParallel.js +43 -50
  279. package/src/x_ite/Components/ProjectiveTextureMapping/TextureProjectorPerspective.js +32 -39
  280. package/src/x_ite/Components/Rendering/ClipPlane.js +3 -11
  281. package/src/x_ite/Components/Rendering/Color.js +12 -37
  282. package/src/x_ite/Components/Rendering/ColorRGBA.js +13 -38
  283. package/src/x_ite/Components/Rendering/IndexedLineSet.js +12 -4
  284. package/src/x_ite/Components/Rendering/LineSet.js +21 -13
  285. package/src/x_ite/Components/Rendering/PointSet.js +21 -13
  286. package/src/x_ite/Components/Rendering/X3DColorNode.js +13 -0
  287. package/src/x_ite/Components/Rendering/X3DComposedGeometryNode.js +13 -5
  288. package/src/x_ite/Components/Rendering/X3DGeometryNode.js +248 -325
  289. package/src/x_ite/Components/Rendering/X3DLineGeometryNode.js +305 -134
  290. package/src/x_ite/Components/Rendering/X3DPointGeometryNode.js +99 -122
  291. package/src/x_ite/Components/RigidBodyPhysics/DoubleAxisHingeJoint.js +24 -38
  292. package/src/x_ite/Components/RigidBodyPhysics/SingleAxisHingeJoint.js +10 -17
  293. package/src/x_ite/Components/Shaders/ComposedShader.js +35 -75
  294. package/src/x_ite/Components/Shaders/FloatVertexAttribute.js +5 -15
  295. package/src/x_ite/Components/Shaders/Matrix3VertexAttribute.js +7 -24
  296. package/src/x_ite/Components/Shaders/Matrix4VertexAttribute.js +7 -24
  297. package/src/x_ite/Components/Shaders/ShaderPart.js +1 -10
  298. package/src/x_ite/Components/Shaders/X3DProgrammableShaderObject.js +219 -209
  299. package/src/x_ite/Components/Shaders/X3DShaderNode.js +1 -1
  300. package/src/x_ite/Components/Shaders/X3DVertexAttributeNode.js +23 -1
  301. package/src/x_ite/Components/Shape/Appearance.js +12 -0
  302. package/src/x_ite/Components/Shape/FillProperties.js +12 -1
  303. package/src/x_ite/Components/Shape/LineProperties.js +33 -1
  304. package/src/x_ite/Components/Shape/PointProperties.js +23 -1
  305. package/src/x_ite/Components/Shape/Shape.js +27 -34
  306. package/src/x_ite/Components/Sound/Sound.js +30 -40
  307. package/src/x_ite/Components/Text/Text.js +6 -20
  308. package/src/x_ite/Components/Texturing/TextureCoordinate.js +5 -26
  309. package/src/x_ite/Components/Texturing/TextureProperties.js +4 -4
  310. package/src/x_ite/Components/Texturing/X3DSingleTextureCoordinateNode.js +21 -0
  311. package/src/x_ite/Components/Texturing/X3DSingleTextureNode.js +5 -4
  312. package/src/x_ite/Components/Texturing/X3DTexture2DNode.js +24 -33
  313. package/src/x_ite/Components/Texturing3D/TextureCoordinate3D.js +5 -26
  314. package/src/x_ite/Components/Texturing3D/TextureCoordinate4D.js +5 -26
  315. package/src/x_ite/Components/Texturing3D/X3DTexture3DNode.js +12 -19
  316. package/src/x_ite/Components/VolumeRendering/X3DVolumeDataNode.js +7 -7
  317. package/src/x_ite/Components.js +2 -2
  318. package/src/x_ite/Fallback.js +9 -3
  319. package/src/x_ite/Fields/SFColor.js +4 -0
  320. package/src/x_ite/Fields/SFColorRGBA.js +4 -0
  321. package/src/x_ite/Fields/SFMatrixPrototypeTemplate.js +4 -0
  322. package/src/x_ite/Fields/SFRotation.js +4 -0
  323. package/src/x_ite/Fields/SFString.js +4 -0
  324. package/src/x_ite/Fields/SFVecPrototypeTemplate.js +4 -0
  325. package/src/x_ite/Parser/XMLParser.js +1 -1
  326. package/src/x_ite/Rendering/TextureBuffer.js +43 -36
  327. package/src/x_ite/Rendering/VertexArray.js +101 -0
  328. package/src/x_ite/Rendering/X3DRenderObject.js +123 -144
  329. package/src/x_ite/X3D.js +32 -26
  330. package/src/x_ite.config.js +0 -5
  331. package/src/x_ite.css +200 -162
  332. package/src/x_ite.html +26 -10
  333. package/src/x_ite.js +42 -0
  334. package/x_ite.min.html +26 -10
  335. package/dist/assets/hatching/0.png +0 -0
  336. package/dist/assets/linetype/0.png +0 -0
  337. package/src/assets/hatching/0.png +0 -0
  338. package/src/assets/linetype/0.png +0 -0
  339. package/src/spinner.css +0 -67
  340. package/src/x_ite/Browser/Shape/LineStipples.xcf +0 -0
@@ -52,11 +52,13 @@ define ([
52
52
  "x_ite/Base/X3DConstants",
53
53
  "x_ite/Components/Navigation/OrthoViewpoint",
54
54
  "standard/Math/Numbers/Matrix3",
55
+ "standard/Math/Numbers/Matrix4",
55
56
  ],
56
57
  function (X3DCast,
57
58
  X3DConstants,
58
59
  OrthoViewpoint,
59
- Matrix3)
60
+ Matrix3,
61
+ Matrix4)
60
62
  {
61
63
  "use strict";
62
64
 
@@ -66,6 +68,8 @@ function (X3DCast,
66
68
  {
67
69
  this .addType (X3DConstants .X3DProgrammableShaderObject);
68
70
 
71
+ this .uniforms = [ ];
72
+
69
73
  this .x3d_ClipPlane = [ ];
70
74
  this .x3d_LightType = [ ];
71
75
  this .x3d_LightOn = [ ];
@@ -106,7 +110,7 @@ function (X3DCast,
106
110
  this .numProjectiveTextures = 0;
107
111
  this .numGlobalProjectiveTextures = 0;
108
112
  this .projectiveTextureNodes = [ ];
109
- this .textures = new Map ();
113
+ this .textures = new Set ();
110
114
  }
111
115
 
112
116
  X3DProgrammableShaderObject .prototype =
@@ -124,18 +128,26 @@ function (X3DCast,
124
128
  {
125
129
  return true;
126
130
  },
127
- bindAttributeLocations: function (gl, program)
131
+ setUniforms: function (value)
128
132
  {
129
- gl .bindAttribLocation (program, 0, "x3d_Vertex");
133
+ this .uniforms = value;
130
134
  },
131
- getDefaultUniforms: function ()
135
+ getDefaultUniformsAndAttributes: function (program)
132
136
  {
133
137
  // Get uniforms and attributes.
134
138
 
135
139
  const
136
140
  browser = this .getBrowser (),
137
- gl = browser .getContext (),
138
- program = this .getProgram ();
141
+ gl = browser .getContext ();
142
+
143
+ gl .useProgram (program);
144
+
145
+ for (const name of this .uniforms)
146
+ this [name] = gl .getUniformLocation (program, name);
147
+
148
+ /*
149
+ * Uniforms.
150
+ */
139
151
 
140
152
  this .x3d_LogarithmicFarFactor1_2 = gl .getUniformLocation (program, "x3d_LogarithmicFarFactor1_2");
141
153
 
@@ -162,6 +174,7 @@ function (X3DCast,
162
174
 
163
175
  this .x3d_LinePropertiesApplied = gl .getUniformLocation (program, "x3d_LineProperties.applied");
164
176
  this .x3d_LinePropertiesLinewidthScaleFactor = this .getUniformLocation (gl, program, "x3d_LineProperties.linewidthScaleFactor", "x3d_LinewidthScaleFactor");
177
+ this .x3d_LineStippleScale = gl .getUniformLocation (program, "x3d_LineProperties.lineStippleScale");
165
178
  this .x3d_LinePropertiesLinetype = gl .getUniformLocation (program, "x3d_LineProperties.linetype");
166
179
 
167
180
  this .x3d_FillPropertiesFilled = gl .getUniformLocation (program, "x3d_FillProperties.filled");
@@ -233,6 +246,8 @@ function (X3DCast,
233
246
  this .x3d_NumProjectiveTextures = gl .getUniformLocation (program, "x3d_NumProjectiveTextures");
234
247
  this .x3d_MultiTextureColor = gl .getUniformLocation (program, "x3d_MultiTextureColor");
235
248
 
249
+ this .x3d_TexCoord .length = 0;
250
+
236
251
  for (let i = 0; i < this .x3d_MaxTextures; ++ i)
237
252
  {
238
253
  this .x3d_Textures [i] = {
@@ -255,23 +270,70 @@ function (X3DCast,
255
270
  this .x3d_ProjectiveTextureLocation [i] = gl .getUniformLocation (program, "x3d_ProjectiveTextureLocation[" + i + "]");
256
271
 
257
272
  this .x3d_TextureMatrix [i] = gl .getUniformLocation (program, "x3d_TextureMatrix[" + i + "]");
258
- this .x3d_TexCoord [i] = this .getAttribLocation (gl, program, "x3d_TexCoord" + i, i ? "" : "x3d_TexCoord");
273
+
274
+ // Attribute
275
+
276
+ const x3d_TexCoord = this .getAttribLocation (gl, program, "x3d_TexCoord" + i, i ? "" : "x3d_TexCoord");
277
+
278
+ if (x3d_TexCoord !== -1)
279
+ this .x3d_TexCoord .push ([i, x3d_TexCoord]);
259
280
  }
260
281
 
282
+ this .x3d_TexCoordRamp = gl .getUniformLocation (program, "x3d_TexCoordRamp");
283
+
261
284
  this .x3d_Viewport = gl .getUniformLocation (program, "x3d_Viewport");
262
285
  this .x3d_ProjectionMatrix = gl .getUniformLocation (program, "x3d_ProjectionMatrix");
263
286
  this .x3d_ModelViewMatrix = gl .getUniformLocation (program, "x3d_ModelViewMatrix");
264
287
  this .x3d_NormalMatrix = gl .getUniformLocation (program, "x3d_NormalMatrix");
265
288
  this .x3d_CameraSpaceMatrix = gl .getUniformLocation (program, "x3d_CameraSpaceMatrix");
266
289
 
267
- this .x3d_FogDepth = gl .getAttribLocation (program, "x3d_FogDepth");
268
- this .x3d_Color = gl .getAttribLocation (program, "x3d_Color");
269
- this .x3d_Normal = gl .getAttribLocation (program, "x3d_Normal");
270
- this .x3d_Vertex = gl .getAttribLocation (program, "x3d_Vertex");
290
+ /*
291
+ * Attributes.
292
+ */
293
+
294
+ const attributes = [
295
+ "FogDepth",
296
+ "Color",
297
+ "Normal",
298
+ "Vertex",
299
+ "Particle",
300
+ "ParticleMatrix",
301
+ ];
302
+
303
+ for (const name of attributes)
304
+ {
305
+ const attribute = gl .getAttribLocation (program, `x3d_${name}`);
271
306
 
272
- this .x3d_ParticleId = gl .getUniformLocation (program, "x3d_Particle.id");
273
- this .x3d_ParticleLife = gl .getUniformLocation (program, "x3d_Particle.life");
274
- this .x3d_ParticleElapsedTime = gl .getUniformLocation (program, "x3d_Particle.elapsedTime");
307
+ this [`x3d_${name}`] = attribute;
308
+
309
+ if (attribute < 0)
310
+ {
311
+ this [`enable${name}Attribute`] = Function .prototype;
312
+ this [`${lcfirst (name)}AttributeDivisor`] = Function .prototype;
313
+ }
314
+ else
315
+ {
316
+ delete this [`enable${name}Attribute`];
317
+ delete this [`${lcfirst (name)}AttributeDivisor`];
318
+ }
319
+ }
320
+
321
+ if (this .x3d_TexCoord .length === 0)
322
+ {
323
+ this .enableTexCoordAttribute = Function .prototype;
324
+ this .texCoordAttributeDivisor = Function .prototype;
325
+ }
326
+ else
327
+ {
328
+ delete this .enableTexCoordAttribute;
329
+ delete this .texCoordAttributeDivisor;
330
+ }
331
+
332
+ /*
333
+ * Fill uniforms with defaults.
334
+ */
335
+
336
+ gl .uniform1f (this .x3d_LineStippleScale, browser .getLineStippleScale ());
275
337
 
276
338
  // Fill special uniforms with default values, textures for units are created in X3DTexturingContext.
277
339
 
@@ -306,63 +368,19 @@ function (X3DCast,
306
368
  gl .uniform1i (uniform, browser .getDefaultTexture2DUnit ());
307
369
  }
308
370
 
309
- // Return true if valid, otherwise false.
371
+ gl .uniform1i (this .x3d_TexCoordRamp, browser .getDefaultTexture2DUnit ());
310
372
 
311
- if (this .x3d_FogDepth < 0)
312
- {
313
- this .enableFogDepthAttribute = Function .prototype;
314
- this .disableFogDepthAttribute = Function .prototype;
315
- }
316
- else
317
- {
318
- delete this .enableFogDepthAttribute;
319
- delete this .disableFogDepthAttribute;
320
- }
373
+ /*
374
+ * Check x3d_Vertex.
375
+ */
321
376
 
322
- if (this .x3d_Color < 0)
323
- {
324
- this .enableColorAttribute = Function .prototype;
325
- this .disableColorAttribute = Function .prototype;
326
- }
327
- else
328
- {
329
- delete this .enableColorAttribute;
330
- delete this .disableColorAttribute;
331
- }
332
-
333
- if (this .x3d_TexCoord .some (function (location) { return location >= 0; }))
334
- {
335
- delete this .enableTexCoordAttribute;
336
- delete this .disableTexCoordAttribute;
337
- }
338
- else
339
- {
340
- this .enableTexCoordAttribute = Function .prototype;
341
- this .disableTexCoordAttribute = Function .prototype;
342
- }
343
-
344
- if (this .x3d_Normal < 0)
345
- {
346
- this .enableNormalAttribute = Function .prototype;
347
- this .disableNormalAttribute = Function .prototype;
348
- }
349
- else
350
- {
351
- delete this .enableNormalAttribute;
352
- delete this .disableNormalAttribute;
353
- }
354
-
355
- if (this .x3d_Vertex < 0)
356
- {
357
- if (gl .getVersion () >= 2)
358
- console .warn ("Missing »in vec4 x3d_Vertex;«.");
359
- else
360
- console .warn ("Missing »attribute vec4 x3d_Vertex;«.");
361
-
362
- return false;
363
- }
364
-
365
- return true;
377
+ // if (this .x3d_Vertex < 0)
378
+ // {
379
+ // if (gl .getVersion () >= 2)
380
+ // console .warn ("Missing »in vec4 x3d_Vertex;«.");
381
+ // else
382
+ // console .warn ("Missing »attribute vec4 x3d_Vertex;«.");
383
+ // }
366
384
  },
367
385
  getUniformLocation: function (gl, program, name, depreciated)
368
386
  {
@@ -414,11 +432,11 @@ function (X3DCast,
414
432
 
415
433
  return -1;
416
434
  },
417
- addShaderFields: function ()
435
+ addShaderFields: function (program)
418
436
  {
419
- const
420
- gl = this .getBrowser () .getContext (),
421
- program = this .getProgram ();
437
+ const gl = this .getBrowser () .getContext ();
438
+
439
+ gl .useProgram (program);
422
440
 
423
441
  this .textures .clear ();
424
442
 
@@ -528,7 +546,7 @@ function (X3DCast,
528
546
 
529
547
  field .addInterest ("set_field__", this);
530
548
 
531
- this .set_field__ (field);
549
+ this .set_field__ (field, program);
532
550
  }
533
551
  }
534
552
  },
@@ -541,12 +559,14 @@ function (X3DCast,
541
559
  {
542
560
  const matrix3 = new Matrix3 ();
543
561
 
544
- return function (field)
562
+ return function (field, program)
545
563
  {
546
564
  const
547
565
  gl = this .getBrowser () .getContext (),
548
566
  location = field [_uniformLocation];
549
567
 
568
+ gl .useProgram (program);
569
+
550
570
  if (location)
551
571
  {
552
572
  switch (field .getType ())
@@ -619,11 +639,16 @@ function (X3DCast,
619
639
 
620
640
  if (texture)
621
641
  {
622
- this .textures .set (location, { name: field .getName (), texture: texture } );
623
- return;
642
+ location .name = field .getName ();
643
+ location .texture = texture;
644
+
645
+ this .textures .add (location);
646
+ }
647
+ else
648
+ {
649
+ this .textures .delete (location);
624
650
  }
625
651
 
626
- this .textures .delete (location);
627
652
  return;
628
653
  }
629
654
  case X3DConstants .SFRotation:
@@ -789,14 +814,20 @@ function (X3DCast,
789
814
  {
790
815
  const locations = location .locations;
791
816
 
792
- for (const node of field)
817
+ for (let i = 0, length = field .length; i < length; ++ i)
793
818
  {
794
- const texture = X3DCast (X3DConstants .X3DTextureNode, node);
819
+ const texture = X3DCast (X3DConstants .X3DTextureNode, field [i]);
795
820
 
796
821
  if (texture)
797
822
  {
798
- this .textures .set (locations [i], { name: field .getName (), texture: texture } );
799
- continue;
823
+ locations [i] .name = field .getName ();
824
+ locations [i] .texture = texture;
825
+
826
+ this .textures .add (locations [i]);
827
+ }
828
+ else
829
+ {
830
+ this .textures .delete (locations [i]);
800
831
  }
801
832
  }
802
833
 
@@ -962,10 +993,12 @@ function (X3DCast,
962
993
  gl .uniform1i (this .x3d_NumLights, Math .min (this .numLights, this .x3d_MaxLights));
963
994
  gl .uniform1i (this .x3d_NumProjectiveTextures, Math .min (this .numProjectiveTextures, this .x3d_MaxTextures));
964
995
  },
965
- setGlobalUniforms: function (gl, renderObject, cameraSpaceMatrixArray, projectionMatrixArray, viewportArray)
996
+ setGlobalUniforms: function (gl, program, renderObject, cameraSpaceMatrixArray, projectionMatrixArray, viewportArray)
966
997
  {
967
998
  const globalObjects = renderObject .getGlobalObjects ();
968
999
 
1000
+ gl .useProgram (program);
1001
+
969
1002
  // Set viewport
970
1003
 
971
1004
  gl .uniform4iv (this .x3d_Viewport, viewportArray);
@@ -1074,37 +1107,30 @@ function (X3DCast,
1074
1107
 
1075
1108
  return function (modelViewMatrix)
1076
1109
  {
1077
- try
1078
- {
1079
- normalMatrix [0] = modelViewMatrix [0], normalMatrix [3] = modelViewMatrix [1], normalMatrix [6] = modelViewMatrix [ 2],
1080
- normalMatrix [1] = modelViewMatrix [4], normalMatrix [4] = modelViewMatrix [5], normalMatrix [7] = modelViewMatrix [ 6],
1081
- normalMatrix [2] = modelViewMatrix [8], normalMatrix [5] = modelViewMatrix [9], normalMatrix [8] = modelViewMatrix [10];
1082
-
1083
- Matrix3 .prototype .inverse .call (normalMatrix);
1110
+ normalMatrix [0] = modelViewMatrix [0]; normalMatrix [3] = modelViewMatrix [1]; normalMatrix [6] = modelViewMatrix [ 2];
1111
+ normalMatrix [1] = modelViewMatrix [4]; normalMatrix [4] = modelViewMatrix [5]; normalMatrix [7] = modelViewMatrix [ 6];
1112
+ normalMatrix [2] = modelViewMatrix [8]; normalMatrix [5] = modelViewMatrix [9]; normalMatrix [8] = modelViewMatrix [10];
1084
1113
 
1085
- return normalMatrix;
1086
- }
1087
- catch (error)
1088
- {
1089
- normalMatrix .set (Matrix3 .Identity);
1114
+ Matrix3 .prototype .inverse .call (normalMatrix);
1090
1115
 
1091
- return normalMatrix;
1092
- }
1116
+ return normalMatrix;
1093
1117
  };
1094
1118
  })(),
1095
- enable: function (gl)
1119
+ enable: function (gl, program)
1096
1120
  {
1097
1121
  const browser = this .getBrowser ();
1098
1122
 
1099
- for (const [location, object] of this .textures)
1123
+ gl .useProgram (program);
1124
+
1125
+ for (const location of this .textures)
1100
1126
  {
1101
1127
  const
1102
- texture = object .texture,
1128
+ texture = location .texture,
1103
1129
  textureUnit = browser .getTextureUnit (texture .getTextureType ());
1104
1130
 
1105
1131
  if (textureUnit === undefined)
1106
1132
  {
1107
- console .warn ("Not enough combined texture units for uniform variable '" + object .name + "' available.");
1133
+ console .warn ("Not enough combined texture units for uniform variable '" + location .name + "' available.");
1108
1134
  return;
1109
1135
  }
1110
1136
 
@@ -1113,161 +1139,140 @@ function (X3DCast,
1113
1139
  gl .uniform1i (location, textureUnit);
1114
1140
  }
1115
1141
  },
1116
- enableFloatAttrib: function (gl, name, buffer, components)
1117
- {
1118
- const location = gl. getAttribLocation (this .getProgram (), name);
1119
-
1120
- if (location === -1)
1121
- return;
1122
-
1123
- gl .enableVertexAttribArray (location);
1124
-
1125
- gl .bindBuffer (gl .ARRAY_BUFFER, buffer);
1126
- gl .vertexAttribPointer (location, components, gl .FLOAT, false, 0, 0);
1127
- },
1128
- disableFloatAttrib: function (gl, name)
1142
+ enableFloatAttrib: function (gl, name, buffer, components, stride, offset)
1129
1143
  {
1130
1144
  const location = gl .getAttribLocation (this .getProgram (), name);
1131
1145
 
1132
1146
  if (location === -1)
1133
1147
  return;
1134
1148
 
1135
- gl .disableVertexAttribArray (location);
1149
+ gl .bindBuffer (gl .ARRAY_BUFFER, buffer);
1150
+ gl .enableVertexAttribArray (location);
1151
+ gl .vertexAttribPointer (location, components, gl .FLOAT, false, stride, offset);
1136
1152
  },
1137
- enableMatrix3Attrib: function (gl, name, buffer)
1153
+ enableMatrix3Attrib: function (gl, name, buffer, stride, offset)
1138
1154
  {
1139
- const location = gl .getAttribLocation (this .getProgram (), name);
1155
+ const location0 = gl .getAttribLocation (this .getProgram (), name);
1140
1156
 
1141
- if (location === -1)
1157
+ if (location0 === -1)
1142
1158
  return;
1143
1159
 
1144
- gl .enableVertexAttribArray (location);
1145
- gl .enableVertexAttribArray (location + 1);
1146
- gl .enableVertexAttribArray (location + 2);
1160
+ stride = stride || 36;
1147
1161
 
1148
1162
  gl .bindBuffer (gl .ARRAY_BUFFER, buffer);
1149
1163
 
1150
- gl .vertexAttribPointer (location, 3, gl .FLOAT, false, 9 * 4, 3 * 4 * 0);
1151
- gl .vertexAttribPointer (location + 1, 3, gl .FLOAT, false, 9 * 4, 3 * 4 * 1);
1152
- gl .vertexAttribPointer (location + 2, 3, gl .FLOAT, false, 9 * 4, 3 * 4 * 2);
1153
- },
1154
- disableMatrix3Attrib: function (gl, name)
1155
- {
1156
- const location = gl .getAttribLocation (this .getProgram (), name);
1157
-
1158
- if (location === -1)
1159
- return;
1164
+ for (let i = 0; i < 3; ++ i)
1165
+ {
1166
+ const location = location0 + i;
1160
1167
 
1161
- gl .disableVertexAttribArray (location);
1162
- gl .disableVertexAttribArray (location + 1);
1163
- gl .disableVertexAttribArray (location + 2);
1168
+ gl .enableVertexAttribArray (location);
1169
+ gl .vertexAttribPointer (location, 3, gl .FLOAT, false, stride, offset + 12 * i);
1170
+ }
1164
1171
  },
1165
- enableMatrix4Attrib: function (gl, name, buffer)
1172
+ enableMatrix4Attrib: function (gl, name, buffer, stride, offset)
1166
1173
  {
1167
- const location = gl .getAttribLocation (this .getProgram (), name);
1174
+ const location0 = gl .getAttribLocation (this .getProgram (), name);
1168
1175
 
1169
- if (location === -1)
1176
+ if (location0 === -1)
1170
1177
  return;
1171
1178
 
1172
- gl .enableVertexAttribArray (location);
1173
- gl .enableVertexAttribArray (location + 1);
1174
- gl .enableVertexAttribArray (location + 2);
1175
- gl .enableVertexAttribArray (location + 3);
1179
+ stride = stride || 64;
1176
1180
 
1177
1181
  gl .bindBuffer (gl .ARRAY_BUFFER, buffer);
1178
1182
 
1179
- gl .vertexAttribPointer (location, 4, gl .FLOAT, false, 16 * 4, 4 * 4 * 0);
1180
- gl .vertexAttribPointer (location + 1, 4, gl .FLOAT, false, 16 * 4, 4 * 4 * 1);
1181
- gl .vertexAttribPointer (location + 2, 4, gl .FLOAT, false, 16 * 4, 4 * 4 * 2);
1182
- gl .vertexAttribPointer (location + 3, 4, gl .FLOAT, false, 16 * 4, 4 * 4 * 3);
1183
- },
1184
- disableMatrix4Attrib: function (gl, name)
1185
- {
1186
- const location = gl .getAttribLocation (this .getProgram (), name);
1187
-
1188
- if (location === -1)
1189
- return;
1183
+ for (let i = 0; i < 4; ++ i)
1184
+ {
1185
+ const location = location0 + i;
1190
1186
 
1191
- gl .disableVertexAttribArray (location);
1192
- gl .disableVertexAttribArray (location + 1);
1193
- gl .disableVertexAttribArray (location + 2);
1194
- gl .disableVertexAttribArray (location + 3);
1187
+ gl .enableVertexAttribArray (location);
1188
+ gl .vertexAttribPointer (location, 4, gl .FLOAT, false, stride, offset + 16 * i);
1189
+ }
1195
1190
  },
1196
- enableFogDepthAttribute: function (gl, fogDepthBuffer)
1191
+ enableFogDepthAttribute: function (gl, buffer, stride, offset)
1197
1192
  {
1198
- gl .enableVertexAttribArray (this .x3d_FogDepth);
1199
- gl .bindBuffer (gl .ARRAY_BUFFER, fogDepthBuffer);
1200
- gl .vertexAttribPointer (this .x3d_FogDepth, 1, gl .FLOAT, false, 0, 0);
1193
+ const location = this .x3d_FogDepth;
1194
+
1195
+ gl .bindBuffer (gl .ARRAY_BUFFER, buffer);
1196
+ gl .enableVertexAttribArray (location);
1197
+ gl .vertexAttribPointer (location, 1, gl .FLOAT, false, stride, offset);
1201
1198
  },
1202
- disableFogDepthAttribute: function (gl)
1199
+ enableColorAttribute: function (gl, buffer, stride, offset)
1203
1200
  {
1204
- gl .disableVertexAttribArray (this .x3d_FogDepth);
1201
+ const location = this .x3d_Color;
1202
+
1203
+ gl .bindBuffer (gl .ARRAY_BUFFER, buffer);
1204
+ gl .enableVertexAttribArray (location);
1205
+ gl .vertexAttribPointer (location, 4, gl .FLOAT, false, stride, offset);
1205
1206
  },
1206
- enableColorAttribute: function (gl, colorBuffer)
1207
+ colorAttributeDivisor: function (gl, divisor)
1207
1208
  {
1208
- gl .enableVertexAttribArray (this .x3d_Color);
1209
- gl .bindBuffer (gl .ARRAY_BUFFER, colorBuffer);
1210
- gl .vertexAttribPointer (this .x3d_Color, 4, gl .FLOAT, false, 0, 0);
1209
+ gl .vertexAttribDivisor (this .x3d_Color, divisor);
1211
1210
  },
1212
- disableColorAttribute: function (gl)
1211
+ enableTexCoordAttribute: function (gl, buffers, stride, offset)
1213
1212
  {
1214
- gl .disableVertexAttribArray (this .x3d_Color);
1213
+ for (const [i, location] of this .x3d_TexCoord)
1214
+ {
1215
+ gl .bindBuffer (gl .ARRAY_BUFFER, buffers [i]);
1216
+ gl .enableVertexAttribArray (location);
1217
+ gl .vertexAttribPointer (location, 4, gl .FLOAT, false, stride, offset);
1218
+ }
1215
1219
  },
1216
- enableTexCoordAttribute: function (gl, texCoordBuffers, d)
1220
+ texCoordAttributeDivisor: function (gl, divisor)
1217
1221
  {
1218
- const length = Math .min (this .x3d_MaxTextures, texCoordBuffers .length);
1219
-
1220
- for (let i = 0; i < length; ++ i)
1222
+ for (const [i, location] of this .x3d_TexCoord)
1221
1223
  {
1222
- const x3d_TexCoord = this .x3d_TexCoord [i];
1223
-
1224
- if (x3d_TexCoord === -1)
1225
- continue;
1226
-
1227
- gl .enableVertexAttribArray (x3d_TexCoord);
1228
- gl .bindBuffer (gl .ARRAY_BUFFER, texCoordBuffers [i]);
1229
- gl .vertexAttribPointer (x3d_TexCoord, 4, gl .FLOAT, false, 0, 0);
1224
+ gl .vertexAttribDivisor (location, divisor);
1230
1225
  }
1231
1226
  },
1232
- disableTexCoordAttribute: function (gl)
1227
+ enableNormalAttribute: function (gl, buffer, stride, offset)
1233
1228
  {
1234
- for (let i = 0, length = this .x3d_MaxTextures; i < length; ++ i)
1235
- {
1236
- const x3d_TexCoord = this .x3d_TexCoord [i];
1229
+ const location = this .x3d_Normal;
1237
1230
 
1238
- if (x3d_TexCoord === -1)
1239
- continue;
1240
-
1241
- gl .disableVertexAttribArray (x3d_TexCoord);
1242
- }
1231
+ gl .bindBuffer (gl .ARRAY_BUFFER, buffer);
1232
+ gl .enableVertexAttribArray (location);
1233
+ gl .vertexAttribPointer (location, 3, gl .FLOAT, false, stride, offset);
1243
1234
  },
1244
- enableNormalAttribute: function (gl, normalBuffer)
1235
+ normalAttributeDivisor: function (gl, divisor)
1245
1236
  {
1246
- gl .enableVertexAttribArray (this .x3d_Normal);
1247
- gl .bindBuffer (gl .ARRAY_BUFFER, normalBuffer);
1248
- gl .vertexAttribPointer (this .x3d_Normal, 3, gl .FLOAT, false, 0, 0);
1237
+ gl .vertexAttribDivisor (this .x3d_Normal, divisor);
1249
1238
  },
1250
- disableNormalAttribute: function (gl)
1239
+ enableVertexAttribute: function (gl, buffer, stride, offset)
1251
1240
  {
1252
- gl .disableVertexAttribArray (this .x3d_Normal);
1241
+ const location = this .x3d_Vertex;
1242
+
1243
+ gl .bindBuffer (gl .ARRAY_BUFFER, buffer);
1244
+ gl .enableVertexAttribArray (location);
1245
+ gl .vertexAttribPointer (location, 4, gl .FLOAT, false, stride, offset);
1253
1246
  },
1254
- enableVertexAttribute: function (gl, vertexBuffer)
1247
+ vertexAttributeDivisor: function (gl, divisor)
1255
1248
  {
1256
- gl .enableVertexAttribArray (this .x3d_Vertex);
1257
- gl .bindBuffer (gl .ARRAY_BUFFER, vertexBuffer);
1258
- gl .vertexAttribPointer (this .x3d_Vertex, 4, gl .FLOAT, false, 0, 0);
1249
+ gl .vertexAttribDivisor (this .x3d_Vertex, divisor);
1259
1250
  },
1260
- disableVertexAttribute: function (gl)
1251
+ enableParticleAttribute: function (gl, buffer, stride, offset, divisor)
1261
1252
  {
1262
- gl .disableVertexAttribArray (this .x3d_Vertex);
1253
+ const location = this .x3d_Particle;
1254
+
1255
+ gl .bindBuffer (gl .ARRAY_BUFFER, buffer);
1256
+ gl .enableVertexAttribArray (location);
1257
+ gl .vertexAttribPointer (location, 4, gl .FLOAT, false, stride, offset);
1258
+ gl .vertexAttribDivisor (location, divisor);
1263
1259
  },
1264
- setParticle: function (gl, particle, modelViewMatrix)
1260
+ enableParticleMatrixAttribute: function (gl, buffer, stride, offset, divisor)
1265
1261
  {
1266
- gl .uniformMatrix4fv (this .x3d_ModelViewMatrix, false, modelViewMatrix);
1262
+ const location0 = this .x3d_ParticleMatrix;
1267
1263
 
1268
- gl .uniform1i (this .x3d_ParticleId, particle .id);
1269
- gl .uniform1i (this .x3d_ParticleLife, particle .life);
1270
- gl .uniform1f (this .x3d_ParticleElapsedTime, particle .elapsedTime / particle .lifetime);
1264
+ stride = stride || 64;
1265
+
1266
+ gl .bindBuffer (gl .ARRAY_BUFFER, buffer);
1267
+
1268
+ for (let i = 0; i < 4; ++ i)
1269
+ {
1270
+ const location = location0 + i;
1271
+
1272
+ gl .enableVertexAttribArray (location);
1273
+ gl .vertexAttribPointer (location, 4, gl .FLOAT, false, stride, offset + 16 * i);
1274
+ gl .vertexAttribDivisor (location, divisor);
1275
+ }
1271
1276
  },
1272
1277
  getProgramInfo: function ()
1273
1278
  {
@@ -1284,8 +1289,8 @@ function (X3DCast,
1284
1289
  attributeCount: 0,
1285
1290
  uniformCount: 0,
1286
1291
  },
1287
- activeUniforms = gl .getProgramParameter (program, gl.ACTIVE_UNIFORMS),
1288
- activeAttributes = gl .getProgramParameter (program, gl.ACTIVE_ATTRIBUTES);
1292
+ activeUniforms = gl .getProgramParameter (program, gl .ACTIVE_UNIFORMS),
1293
+ activeAttributes = gl .getProgramParameter (program, gl .ACTIVE_ATTRIBUTES);
1289
1294
 
1290
1295
  // Taken from the WebGl spec:
1291
1296
  // http://www.khronos.org/registry/webgl/specs/latest/1.0/#5.14
@@ -1350,5 +1355,10 @@ function (X3DCast,
1350
1355
  },
1351
1356
  };
1352
1357
 
1358
+ function lcfirst (string)
1359
+ {
1360
+ return string [0] .toLowerCase () + string .slice (1);
1361
+ }
1362
+
1353
1363
  return X3DProgrammableShaderObject;
1354
1364
  });
@@ -91,7 +91,7 @@ function (Fields,
91
91
  {
92
92
  this ._isValid = this .valid = value;
93
93
  },
94
- getValid: function ()
94
+ isValid: function ()
95
95
  {
96
96
  return this .valid;
97
97
  },