x_ite 5.0.3 → 6.1.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 (385) hide show
  1. package/.vscode/settings.json +12 -5
  2. package/.vscode/tasks.json +25 -1
  3. package/Makefile +36 -28
  4. package/README.md +6 -11
  5. package/build/bin/dist.pl +0 -6
  6. package/build/bin/examples-and-tests.pl +75 -0
  7. package/build/bin/tests-menu.pl +57 -0
  8. package/build/bin/version.pl +7 -4
  9. package/build/parts/default.start.frag.js +3 -2
  10. package/dist/assets/components/annotation.js +3 -2
  11. package/dist/assets/components/annotation.min.js +1 -1
  12. package/dist/assets/components/cad-geometry.js +3 -2
  13. package/dist/assets/components/cad-geometry.min.js +1 -1
  14. package/dist/assets/components/cube-map-texturing.js +8 -20
  15. package/dist/assets/components/cube-map-texturing.min.js +1 -1
  16. package/dist/assets/components/dis.js +3 -2
  17. package/dist/assets/components/dis.min.js +1 -1
  18. package/dist/assets/components/event-utilities.js +4 -3
  19. package/dist/assets/components/event-utilities.min.js +1 -1
  20. package/dist/assets/components/geometry2d.js +38 -52
  21. package/dist/assets/components/geometry2d.min.js +1 -1
  22. package/dist/assets/components/geospatial.js +34 -1686
  23. package/dist/assets/components/geospatial.min.js +1 -1
  24. package/dist/assets/components/h-anim.js +71 -77
  25. package/dist/assets/components/h-anim.min.js +1 -1
  26. package/dist/assets/components/key-device-sensor.js +4 -3
  27. package/dist/assets/components/key-device-sensor.min.js +1 -1
  28. package/dist/assets/components/layout.js +101 -173
  29. package/dist/assets/components/layout.min.js +1 -1
  30. package/dist/assets/components/nurbs.js +3 -2
  31. package/dist/assets/components/nurbs.min.js +1 -1
  32. package/dist/assets/components/particle-systems.js +1926 -1669
  33. package/dist/assets/components/particle-systems.min.js +1 -1
  34. package/dist/assets/components/picking.js +34 -41
  35. package/dist/assets/components/picking.min.js +1 -1
  36. package/dist/assets/components/projective-texture-mapping.js +73 -86
  37. package/dist/assets/components/projective-texture-mapping.min.js +1 -1
  38. package/dist/assets/components/rigid-body-physics.js +37 -57
  39. package/dist/assets/components/rigid-body-physics.min.js +1 -1
  40. package/dist/assets/components/scripting.js +3 -2
  41. package/dist/assets/components/scripting.min.js +1 -1
  42. package/dist/assets/components/texturing-3d.js +27 -33
  43. package/dist/assets/components/texturing-3d.min.js +3 -3
  44. package/dist/assets/components/volume-rendering.js +12 -11
  45. package/dist/assets/components/volume-rendering.min.js +1 -1
  46. package/dist/assets/components/x_ite.js +3 -2
  47. package/dist/assets/components/x_ite.min.js +1 -1
  48. package/dist/assets/images/Shading.png +0 -0
  49. package/dist/assets/linetype/1.png +0 -0
  50. package/dist/assets/linetype/10.png +0 -0
  51. package/dist/assets/linetype/11.png +0 -0
  52. package/dist/assets/linetype/12.png +0 -0
  53. package/dist/assets/linetype/13.png +0 -0
  54. package/dist/assets/linetype/14.png +0 -0
  55. package/dist/assets/linetype/15.png +0 -0
  56. package/dist/assets/linetype/16.png +0 -0
  57. package/dist/assets/linetype/2.png +0 -0
  58. package/dist/assets/linetype/3.png +0 -0
  59. package/dist/assets/linetype/4.png +0 -0
  60. package/dist/assets/linetype/5.png +0 -0
  61. package/dist/assets/linetype/6.png +0 -0
  62. package/dist/assets/linetype/7.png +0 -0
  63. package/dist/assets/linetype/8.png +0 -0
  64. package/dist/assets/linetype/9.png +0 -0
  65. package/dist/assets/shaders/webgl1/Gouraud.vs +1 -1
  66. package/dist/assets/shaders/webgl1/Line.fs +0 -21
  67. package/dist/assets/shaders/webgl1/Line.vs +0 -10
  68. package/dist/assets/shaders/webgl1/PBR.fs +1 -1
  69. package/dist/assets/shaders/webgl1/PBR.vs +1 -1
  70. package/dist/assets/shaders/webgl1/Phong.fs +1 -1
  71. package/dist/assets/shaders/webgl1/Point.vs +1 -1
  72. package/dist/assets/shaders/webgl2/Depth.vs +29 -1
  73. package/dist/assets/shaders/webgl2/Gouraud.vs +32 -4
  74. package/dist/assets/shaders/webgl2/Line.fs +24 -12
  75. package/dist/assets/shaders/webgl2/Line.vs +36 -11
  76. package/dist/assets/shaders/webgl2/LineTransform.fs +4 -0
  77. package/dist/assets/shaders/webgl2/LineTransform.vs +57 -0
  78. package/dist/assets/shaders/webgl2/PBR.fs +1 -1
  79. package/dist/assets/shaders/webgl2/PBR.vs +35 -7
  80. package/dist/assets/shaders/webgl2/Phong.fs +1 -1
  81. package/dist/assets/shaders/webgl2/Phong.vs +31 -3
  82. package/dist/assets/shaders/webgl2/Point.vs +30 -2
  83. package/dist/assets/shaders/webgl2/Unlit.vs +31 -3
  84. package/dist/example.html +6 -6
  85. package/dist/x_ite.css +199 -224
  86. package/dist/x_ite.js +16335 -15917
  87. package/dist/x_ite.min.js +17 -17
  88. package/dist/x_ite.zip +0 -0
  89. package/docs/404.md +6 -0
  90. package/docs/Accessing-the-External-Browser.md +21 -15
  91. package/docs/Browser-Support.md +6 -0
  92. package/docs/Custom-Shaders.md +18 -25
  93. package/docs/Features.md +11 -5
  94. package/docs/Gemfile +44 -0
  95. package/docs/Gemfile.lock +122 -0
  96. package/docs/Glossary.md +6 -0
  97. package/docs/How-To-Configure-Your-Web-Server.md +6 -0
  98. package/docs/Supported-Nodes.md +9 -1
  99. package/docs/What's-New.md +93 -39
  100. package/docs/XHTML-DOM-Integration.md +6 -0
  101. package/docs/_config.yml +2 -2
  102. package/docs/assets/css/main.scss +26 -0
  103. package/docs/index.md +42 -50
  104. package/docs/reference/Browser-Services.md +9 -3
  105. package/docs/reference/Constants-Services.md +6 -0
  106. package/docs/reference/ECMAScript-Object-and-Function-Definitions.md +12 -6
  107. package/docs/reference/Field-Services-and-Objects.md +105 -1
  108. package/docs/reference/Prototype-Services.md +11 -0
  109. package/docs/reference/Route-Services.md +9 -0
  110. package/docs/reference/Scene-Services.md +17 -2
  111. package/docs/reference/Script-Node-Authoring-Interface.md +7 -1
  112. package/docs/tutorials/Adding-backgrounds.md +6 -0
  113. package/docs/tutorials/Adding-fog.md +6 -0
  114. package/docs/tutorials/Adding-sound.md +6 -0
  115. package/docs/tutorials/Animating-transforms.md +6 -0
  116. package/docs/tutorials/Basic-Nodes.md +6 -0
  117. package/docs/tutorials/Building-a-X3D-world.md +6 -0
  118. package/docs/tutorials/Building-elevation-grids.md +6 -0
  119. package/docs/tutorials/Building-extruded-shapes.md +6 -0
  120. package/docs/tutorials/Building-primitive-shapes.md +6 -0
  121. package/docs/tutorials/Building-shapes-out-of-points,-lines,-and-faces.md +6 -0
  122. package/docs/tutorials/Controlling-appearance-with-materials.md +6 -0
  123. package/docs/tutorials/Controlling-color-on-coordinate-based-geometry.md +6 -0
  124. package/docs/tutorials/Controlling-detail.md +6 -0
  125. package/docs/tutorials/Controlling-how-textures-are-mapped.md +6 -0
  126. package/docs/tutorials/Controlling-navigation.md +6 -0
  127. package/docs/tutorials/Controlling-shading-on-coordinate-based-geometry.md +6 -0
  128. package/docs/tutorials/Controlling-the-viewpoint.md +6 -0
  129. package/docs/tutorials/Creating-new-node-types.md +6 -0
  130. package/docs/tutorials/Grouping-nodes.md +6 -0
  131. package/docs/tutorials/Hello,-World!.md +6 -0
  132. package/docs/tutorials/Improving-Performance.md +6 -0
  133. package/docs/tutorials/Increasing-Rendering-Speed.md +6 -0
  134. package/docs/tutorials/Introducing-X3D.md +6 -0
  135. package/docs/tutorials/Introducing-animation.md +6 -0
  136. package/docs/tutorials/Introducing-script-use.md +6 -0
  137. package/docs/tutorials/Lighting-your-world.md +6 -0
  138. package/docs/tutorials/Mapping-textures.md +6 -0
  139. package/docs/tutorials/Naming-nodes.md +6 -0
  140. package/docs/tutorials/Providing-information-about-your-world.md +6 -0
  141. package/docs/tutorials/Sensing-the-viewer.md +6 -0
  142. package/docs/tutorials/Sensing-viewer-actions.md +6 -0
  143. package/docs/tutorials/Transforming-Shapes.md +6 -0
  144. package/docs/tutorials/Writing-program-scripts-with-ECMAScript.md +6 -0
  145. package/docs/tutorials/index.md +42 -36
  146. package/package.json +6 -7
  147. package/src/assets/components/geometry2d.js +1 -1
  148. package/src/assets/components/key-device-sensor.js +1 -1
  149. package/src/assets/components/layout.js +1 -1
  150. package/src/assets/components/particle-systems.js +1 -1
  151. package/src/assets/components/volume-rendering.js +1 -1
  152. package/src/assets/images/Shading.png +0 -0
  153. package/src/assets/linetype/1.png +0 -0
  154. package/src/assets/linetype/10.png +0 -0
  155. package/src/assets/linetype/11.png +0 -0
  156. package/src/assets/linetype/12.png +0 -0
  157. package/src/assets/linetype/13.png +0 -0
  158. package/src/assets/linetype/14.png +0 -0
  159. package/src/assets/linetype/15.png +0 -0
  160. package/src/assets/linetype/16.png +0 -0
  161. package/src/assets/linetype/2.png +0 -0
  162. package/src/assets/linetype/3.png +0 -0
  163. package/src/assets/linetype/4.png +0 -0
  164. package/src/assets/linetype/5.png +0 -0
  165. package/src/assets/linetype/6.png +0 -0
  166. package/src/assets/linetype/7.png +0 -0
  167. package/src/assets/linetype/8.png +0 -0
  168. package/src/assets/linetype/9.png +0 -0
  169. package/src/assets/shaders/Types.glsl +1 -9
  170. package/src/assets/shaders/webgl1/Gouraud.fs +1 -1
  171. package/src/assets/shaders/webgl1/Gouraud.vs +2 -3
  172. package/src/assets/shaders/webgl1/Line.fs +3 -28
  173. package/src/assets/shaders/webgl1/Line.vs +6 -20
  174. package/src/assets/shaders/webgl1/PBR.fs +6 -6
  175. package/src/assets/shaders/webgl1/PBR.vs +1 -1
  176. package/src/assets/shaders/webgl1/Phong.fs +10 -10
  177. package/src/assets/shaders/webgl1/Point.vs +2 -2
  178. package/src/assets/shaders/webgl1/Unlit.fs +4 -4
  179. package/src/assets/shaders/webgl1/include/Normal.glsl +1 -1
  180. package/src/assets/shaders/webgl1/include/Texture.glsl +3 -8
  181. package/src/assets/shaders/webgl2/Depth.vs +4 -1
  182. package/src/assets/shaders/webgl2/Gouraud.fs +1 -1
  183. package/src/assets/shaders/webgl2/Gouraud.vs +8 -6
  184. package/src/assets/shaders/webgl2/Line.fs +11 -17
  185. package/src/assets/shaders/webgl2/Line.vs +17 -21
  186. package/src/assets/shaders/webgl2/LineTransform.fs +6 -0
  187. package/src/assets/shaders/webgl2/LineTransform.vs +77 -0
  188. package/src/assets/shaders/webgl2/PBR.fs +6 -6
  189. package/src/assets/shaders/webgl2/PBR.vs +10 -7
  190. package/src/assets/shaders/webgl2/Phong.fs +11 -11
  191. package/src/assets/shaders/webgl2/Phong.vs +6 -3
  192. package/src/assets/shaders/webgl2/Point.vs +5 -4
  193. package/src/assets/shaders/webgl2/Unlit.fs +5 -5
  194. package/src/assets/shaders/webgl2/Unlit.vs +6 -3
  195. package/src/assets/shaders/webgl2/include/Line2.glsl +20 -0
  196. package/src/assets/shaders/webgl2/include/Normal.glsl +1 -1
  197. package/src/assets/shaders/webgl2/include/Particle.glsl +36 -0
  198. package/src/assets/shaders/webgl2/include/Texture.glsl +3 -3
  199. package/src/example.html +6 -6
  200. package/src/examples.js +5 -4
  201. package/src/standard/Math/Algorithm.js +12 -28
  202. package/src/standard/Math/Geometry/Line2.js +163 -0
  203. package/src/standard/Math/Geometry/Line3.js +3 -5
  204. package/src/standard/Math/Geometry/Plane3.js +0 -2
  205. package/src/standard/Math/Geometry/Triangle3.js +1 -1
  206. package/src/standard/Math/Geometry/ViewVolume.js +121 -103
  207. package/src/standard/Math/Numbers/Color3.js +6 -0
  208. package/src/standard/Math/Numbers/Color4.js +7 -0
  209. package/src/standard/Math/Numbers/Complex.js +48 -34
  210. package/src/standard/Math/Numbers/Matrix2.js +62 -2
  211. package/src/standard/Math/Numbers/Matrix3.js +129 -110
  212. package/src/standard/Math/Numbers/Matrix4.js +138 -119
  213. package/src/standard/Math/Numbers/Quaternion.js +12 -5
  214. package/src/standard/Math/Numbers/Rotation4.js +8 -1
  215. package/src/standard/Math/Numbers/Vector2.js +42 -9
  216. package/src/standard/Math/Numbers/Vector3.js +50 -14
  217. package/src/standard/Math/Numbers/Vector4.js +48 -11
  218. package/src/standard/Math/Utility/BVH.js +45 -17
  219. package/src/tests.js +68 -66
  220. package/src/x_ite/Base/X3DBaseNode.js +22 -11
  221. package/src/x_ite/Base/X3DField.js +1 -1
  222. package/src/x_ite/Browser/Core/BrowserOptions.js +24 -143
  223. package/src/x_ite/Browser/Core/BrowserTimings.js +6 -4
  224. package/src/x_ite/Browser/Core/Context.js +185 -0
  225. package/src/x_ite/Browser/Core/ContextMenu.js +398 -211
  226. package/src/x_ite/Browser/Core/Notification.js +1 -0
  227. package/src/x_ite/Browser/Core/X3DCoreContext.js +35 -146
  228. package/src/x_ite/Browser/Followers/X3DArrayFollowerTemplate.js +1 -1
  229. package/src/x_ite/Browser/Geometry2D/Disk2DOptions.js +1 -0
  230. package/src/x_ite/Browser/Geometry2D/X3DGeometry2DContext.js +2 -2
  231. package/src/x_ite/Browser/Geometry3D/X3DGeometry3DContext.js +41 -2
  232. package/src/x_ite/Browser/Geospatial/Geocentric.js +2 -2
  233. package/src/x_ite/Browser/Interpolation/CatmullRomSplineInterpolatorTemplate.js +1 -1
  234. package/src/x_ite/Browser/Layout/ScreenText.js +18 -65
  235. package/src/x_ite/Browser/Layout/X3DLayoutContext.js +59 -16
  236. package/src/x_ite/Browser/Navigation/ExamineViewer.js +13 -20
  237. package/src/x_ite/Browser/Navigation/LookAtViewer.js +1 -4
  238. package/src/x_ite/Browser/Navigation/PlaneViewer.js +0 -3
  239. package/src/x_ite/Browser/Navigation/X3DFlyViewer.js +15 -8
  240. package/src/x_ite/Browser/Navigation/X3DViewer.js +12 -20
  241. package/src/x_ite/Browser/Networking/X3DNetworkingContext.js +11 -7
  242. package/src/x_ite/Browser/ParticleSystems/BVH.glsl +183 -0
  243. package/src/x_ite/Browser/ParticleSystems/Box3.glsl +47 -0
  244. package/src/x_ite/Browser/ParticleSystems/GeometryTypes.js +66 -0
  245. package/src/x_ite/Browser/ParticleSystems/Line3.glsl +55 -0
  246. package/src/x_ite/Browser/ParticleSystems/Plane3.glsl +160 -0
  247. package/src/x_ite/Browser/PointingDeviceSensor/PointingDevice.js +27 -3
  248. package/src/x_ite/Browser/PointingDeviceSensor/X3DPointingDeviceSensorContext.js +41 -37
  249. package/src/x_ite/Browser/Rendering/X3DRenderingContext.js +21 -13
  250. package/src/x_ite/Browser/Shaders/Shader.js +33 -12
  251. package/src/x_ite/Browser/Shaders/ShaderSource.js +6 -0
  252. package/src/x_ite/Browser/Shaders/ShaderTest.js +16 -10
  253. package/src/x_ite/Browser/Shape/X3DShapeContext.js +50 -9
  254. package/src/x_ite/Browser/Text/X3DTextContext.js +4 -13
  255. package/src/x_ite/Browser/Text/X3DTextGeometry.js +2 -1
  256. package/src/x_ite/Browser/Texturing/X3DTexturingContext.js +71 -34
  257. package/src/x_ite/Browser/Texturing3D/DICOMParser.js +2 -2
  258. package/src/x_ite/Browser/Time/X3DTimeContext.js +4 -2
  259. package/src/x_ite/Browser/VERSION.js +1 -1
  260. package/src/x_ite/Browser/X3DBrowser.js +7 -6
  261. package/src/x_ite/Browser/X3DBrowserContext.js +43 -10
  262. package/src/x_ite/Components/Core/X3DNode.js +4 -0
  263. package/src/x_ite/Components/Core/X3DPrototypeInstance.js +0 -2
  264. package/src/x_ite/Components/CubeMapTexturing/ComposedCubeMapTexture.js +3 -4
  265. package/src/x_ite/Components/CubeMapTexturing/GeneratedCubeMapTexture.js +1 -12
  266. package/src/x_ite/Components/CubeMapTexturing/ImageCubeMapTexture.js +1 -2
  267. package/src/x_ite/Components/EnvironmentalEffects/TextureBackground.js +1 -1
  268. package/src/x_ite/Components/EnvironmentalEffects/X3DBackgroundNode.js +76 -77
  269. package/src/x_ite/Components/EnvironmentalEffects/X3DFogObject.js +2 -9
  270. package/src/x_ite/Components/EnvironmentalSensor/ProximitySensor.js +51 -65
  271. package/src/x_ite/Components/EventUtilities/X3DSequencerNode.js +1 -1
  272. package/src/x_ite/Components/Followers/ColorDamper.js +1 -1
  273. package/src/x_ite/Components/Followers/X3DChaserNode.js +18 -32
  274. package/src/x_ite/Components/Followers/X3DDamperNode.js +1 -6
  275. package/src/x_ite/Components/Followers/X3DFollowerNode.js +1 -1
  276. package/src/x_ite/Components/Geometry2D/Disk2D.js +30 -46
  277. package/src/x_ite/Components/Geometry2D/TriangleSet2D.js +1 -1
  278. package/src/x_ite/Components/Geometry3D/ElevationGrid.js +12 -4
  279. package/src/x_ite/Components/Geometry3D/IndexedFaceSet.js +4 -4
  280. package/src/x_ite/Components/Geospatial/GeoCoordinate.js +10 -27
  281. package/src/x_ite/Components/Geospatial/GeoLOD.js +1 -1
  282. package/src/x_ite/Components/Geospatial/GeoPositionInterpolator.js +5 -10
  283. package/src/x_ite/Components/Geospatial/GeoTouchSensor.js +9 -16
  284. package/src/x_ite/Components/Geospatial/GeoTransform.js +6 -18
  285. package/src/x_ite/Components/Geospatial/GeoViewpoint.js +26 -30
  286. package/src/x_ite/Components/Geospatial/X3DGeospatialObject.js +20 -27
  287. package/src/x_ite/Components/Grouping/X3DGroupingNode.js +8 -8
  288. package/src/x_ite/Components/Grouping/X3DTransformNode.js +0 -4
  289. package/src/x_ite/Components/HAnim/HAnimHumanoid.js +68 -75
  290. package/src/x_ite/Components/Interpolation/OrientationInterpolator.js +4 -11
  291. package/src/x_ite/Components/Interpolation/X3DInterpolatorNode.js +1 -1
  292. package/src/x_ite/Components/Layout/LayoutGroup.js +4 -9
  293. package/src/x_ite/Components/Layout/ScreenFontStyle.js +1 -1
  294. package/src/x_ite/Components/Layout/ScreenGroup.js +16 -80
  295. package/src/x_ite/Components/Lighting/DirectionalLight.js +28 -36
  296. package/src/x_ite/Components/Lighting/PointLight.js +32 -47
  297. package/src/x_ite/Components/Lighting/SpotLight.js +33 -48
  298. package/src/x_ite/Components/Navigation/Billboard.js +49 -56
  299. package/src/x_ite/Components/Navigation/LOD.js +2 -2
  300. package/src/x_ite/Components/Navigation/OrthoViewpoint.js +29 -30
  301. package/src/x_ite/Components/Navigation/Viewpoint.js +16 -20
  302. package/src/x_ite/Components/Navigation/X3DViewpointNode.js +82 -111
  303. package/src/x_ite/Components/Networking/Anchor.js +18 -7
  304. package/src/x_ite/Components/ParticleSystems/BoundedPhysicsModel.js +6 -6
  305. package/src/x_ite/Components/ParticleSystems/ConeEmitter.js +44 -36
  306. package/src/x_ite/Components/ParticleSystems/ExplosionEmitter.js +26 -17
  307. package/src/x_ite/Components/ParticleSystems/ForcePhysicsModel.js +20 -7
  308. package/src/x_ite/Components/ParticleSystems/ParticleSystem.js +463 -882
  309. package/src/x_ite/Components/ParticleSystems/PointEmitter.js +39 -35
  310. package/src/x_ite/Components/ParticleSystems/PolylineEmitter.js +112 -128
  311. package/src/x_ite/Components/ParticleSystems/SurfaceEmitter.js +105 -112
  312. package/src/x_ite/Components/ParticleSystems/VolumeEmitter.js +138 -176
  313. package/src/x_ite/Components/ParticleSystems/WindPhysicsModel.js +16 -11
  314. package/src/x_ite/Components/ParticleSystems/X3DParticleEmitterNode.js +807 -217
  315. package/src/x_ite/Components/Picking/LinePickSensor.js +31 -39
  316. package/src/x_ite/Components/PointingDeviceSensor/CylinderSensor.js +91 -108
  317. package/src/x_ite/Components/PointingDeviceSensor/PlaneSensor.js +56 -59
  318. package/src/x_ite/Components/PointingDeviceSensor/SphereSensor.js +54 -71
  319. package/src/x_ite/Components/PointingDeviceSensor/TouchSensor.js +8 -15
  320. package/src/x_ite/Components/ProjectiveTextureMapping/TextureProjectorParallel.js +43 -50
  321. package/src/x_ite/Components/ProjectiveTextureMapping/TextureProjectorPerspective.js +32 -39
  322. package/src/x_ite/Components/Rendering/ClipPlane.js +3 -11
  323. package/src/x_ite/Components/Rendering/Color.js +12 -24
  324. package/src/x_ite/Components/Rendering/ColorRGBA.js +13 -25
  325. package/src/x_ite/Components/Rendering/IndexedLineSet.js +26 -4
  326. package/src/x_ite/Components/Rendering/LineSet.js +35 -13
  327. package/src/x_ite/Components/Rendering/PointSet.js +35 -13
  328. package/src/x_ite/Components/Rendering/X3DComposedGeometryNode.js +13 -5
  329. package/src/x_ite/Components/Rendering/X3DGeometryNode.js +331 -387
  330. package/src/x_ite/Components/Rendering/X3DLineGeometryNode.js +350 -140
  331. package/src/x_ite/Components/Rendering/X3DPointGeometryNode.js +116 -126
  332. package/src/x_ite/Components/RigidBodyPhysics/DoubleAxisHingeJoint.js +24 -38
  333. package/src/x_ite/Components/RigidBodyPhysics/SingleAxisHingeJoint.js +10 -17
  334. package/src/x_ite/Components/Shaders/ComposedShader.js +35 -75
  335. package/src/x_ite/Components/Shaders/FloatVertexAttribute.js +8 -11
  336. package/src/x_ite/Components/Shaders/Matrix3VertexAttribute.js +10 -14
  337. package/src/x_ite/Components/Shaders/Matrix4VertexAttribute.js +10 -14
  338. package/src/x_ite/Components/Shaders/ShaderPart.js +1 -10
  339. package/src/x_ite/Components/Shaders/X3DProgrammableShaderObject.js +220 -210
  340. package/src/x_ite/Components/Shaders/X3DShaderNode.js +28 -10
  341. package/src/x_ite/Components/Shaders/X3DVertexAttributeNode.js +15 -1
  342. package/src/x_ite/Components/Shape/Appearance.js +37 -4
  343. package/src/x_ite/Components/Shape/FillProperties.js +12 -1
  344. package/src/x_ite/Components/Shape/LineProperties.js +33 -1
  345. package/src/x_ite/Components/Shape/PointProperties.js +24 -3
  346. package/src/x_ite/Components/Shape/Shape.js +30 -39
  347. package/src/x_ite/Components/Shape/TwoSidedMaterial.js +3 -1
  348. package/src/x_ite/Components/Sound/Sound.js +31 -41
  349. package/src/x_ite/Components/Text/Text.js +6 -20
  350. package/src/x_ite/Components/Texturing/ImageTexture.js +1 -1
  351. package/src/x_ite/Components/Texturing/MovieTexture.js +1 -1
  352. package/src/x_ite/Components/Texturing/PixelTexture.js +2 -2
  353. package/src/x_ite/Components/Texturing/TextureCoordinate.js +5 -5
  354. package/src/x_ite/Components/Texturing/TextureProperties.js +4 -4
  355. package/src/x_ite/Components/Texturing/X3DSingleTextureNode.js +5 -4
  356. package/src/x_ite/Components/Texturing/X3DTexture2DNode.js +24 -33
  357. package/src/x_ite/Components/Texturing3D/TextureCoordinate3D.js +5 -5
  358. package/src/x_ite/Components/Texturing3D/TextureCoordinate4D.js +5 -5
  359. package/src/x_ite/Components/Texturing3D/X3DTexture3DNode.js +12 -19
  360. package/src/x_ite/Components/VolumeRendering/X3DVolumeDataNode.js +8 -8
  361. package/src/x_ite/Components.js +2 -2
  362. package/src/x_ite/Fallback.js +9 -3
  363. package/src/x_ite/Fields/SFColor.js +4 -0
  364. package/src/x_ite/Fields/SFColorRGBA.js +4 -0
  365. package/src/x_ite/Fields/SFImage.js +2 -11
  366. package/src/x_ite/Fields/SFMatrixPrototypeTemplate.js +4 -0
  367. package/src/x_ite/Fields/SFRotation.js +4 -0
  368. package/src/x_ite/Fields/SFString.js +4 -0
  369. package/src/x_ite/Fields/SFVecPrototypeTemplate.js +22 -2
  370. package/src/x_ite/Parser/XMLParser.js +1 -1
  371. package/src/x_ite/Rendering/TextureBuffer.js +43 -36
  372. package/src/x_ite/Rendering/VertexArray.js +103 -0
  373. package/src/x_ite/Rendering/X3DRenderObject.js +127 -148
  374. package/src/x_ite/X3D.js +32 -26
  375. package/src/x_ite.config.js +0 -5
  376. package/src/x_ite.css +216 -175
  377. package/src/x_ite.html +15 -10
  378. package/src/x_ite.js +49 -1
  379. package/x_ite.min.html +15 -10
  380. package/dist/assets/hatching/0.png +0 -0
  381. package/dist/assets/linetype/0.png +0 -0
  382. package/src/assets/hatching/0.png +0 -0
  383. package/src/assets/linetype/0.png +0 -0
  384. package/src/spinner.css +0 -67
  385. package/src/x_ite/Browser/Shape/LineStipples.xcf +0 -0
@@ -0,0 +1,160 @@
1
+ struct Plane3
2
+ {
3
+ vec3 normal;
4
+ float distanceFromOrigin;
5
+ };
6
+
7
+ Plane3
8
+ plane3 (const in vec3 point, const in vec3 normal)
9
+ {
10
+ return Plane3 (normal, dot (normal, point));
11
+ }
12
+
13
+ float
14
+ plane_distance (const in Plane3 plane, const in vec3 point)
15
+ {
16
+ return dot (point, plane .normal) - plane .distanceFromOrigin;
17
+ }
18
+
19
+ /* Plane intersect line */
20
+ bool
21
+ intersects (const in Plane3 plane, const in Line3 line, out vec3 point)
22
+ {
23
+ // Check if the line is parallel to the plane.
24
+ float theta = dot (line .direction, plane .normal);
25
+
26
+ // Plane and line are parallel.
27
+ if (theta == 0.0)
28
+ return false;
29
+
30
+ // Plane and line are not parallel. The intersection point can be calculated now.
31
+ float t = (plane .distanceFromOrigin - dot (plane .normal, line .point)) / theta;
32
+
33
+ point = line .point + line .direction * t;
34
+
35
+ return true;
36
+ }
37
+
38
+ /* Find find the first point that is farther to the plane than value. */
39
+ // int
40
+ // upper_bound (const in vec4 points [ARRAY_SIZE], in int count, const in float value, const in Plane3 plane)
41
+ // {
42
+ // int first = 0;
43
+ // int step = 0;
44
+
45
+ // while (count > 0)
46
+ // {
47
+ // int index = first;
48
+
49
+ // step = count >> 1;
50
+
51
+ // index += step;
52
+
53
+ // if (value < plane_distance (plane, points [index] .xyz))
54
+ // {
55
+ // count = step;
56
+ // }
57
+ // else
58
+ // {
59
+ // first = ++ index;
60
+ // count -= step + 1;
61
+ // }
62
+ // }
63
+
64
+ // return first;
65
+ // }
66
+
67
+ /* CombSort: sort points in distance to a plane. */
68
+ void
69
+ sort (inout vec4 points [ARRAY_SIZE], const in int count, const in Plane3 plane)
70
+ {
71
+ const float shrink = 1.0 / 1.3;
72
+
73
+ int gap = count;
74
+ bool exchanged = true;
75
+
76
+ while (exchanged)
77
+ {
78
+ gap = int (float (gap) * shrink);
79
+
80
+ if (gap <= 1)
81
+ {
82
+ exchanged = false;
83
+ gap = 1;
84
+ }
85
+
86
+ for (int i = 0, l = count - gap; i < l; ++ i)
87
+ {
88
+ int j = gap + i;
89
+
90
+ if (plane_distance (plane, points [i] .xyz) > plane_distance (plane, points [j] .xyz))
91
+ {
92
+ vec4 tmp1 = points [i];
93
+ points [i] = points [j];
94
+ points [j] = tmp1;
95
+
96
+ exchanged = true;
97
+ }
98
+ }
99
+ }
100
+ }
101
+
102
+
103
+ // /* CombSort: sort points and normals in distance to a plane. */
104
+ // void
105
+ // sort (inout vec4 points [ARRAY_SIZE], inout vec3 normals [ARRAY_SIZE], const in int count, const in Plane3 plane)
106
+ // {
107
+ // const float shrink = 1.0 / 1.3;
108
+
109
+ // int gap = count;
110
+ // bool exchanged = true;
111
+
112
+ // while (exchanged)
113
+ // {
114
+ // gap = int (float (gap) * shrink);
115
+
116
+ // if (gap <= 1)
117
+ // {
118
+ // exchanged = false;
119
+ // gap = 1;
120
+ // }
121
+
122
+ // for (int i = 0, l = count - gap; i < l; ++ i)
123
+ // {
124
+ // int j = gap + i;
125
+
126
+ // if (plane_distance (plane, points [i] .xyz) > plane_distance (plane, points [j] .xyz))
127
+ // {
128
+ // vec4 tmp1 = points [i];
129
+ // points [i] = points [j];
130
+ // points [j] = tmp1;
131
+
132
+ // vec3 tmp2 = normals [i];
133
+ // normals [i] = normals [j];
134
+ // normals [j] = tmp2;
135
+
136
+ // exchanged = true;
137
+ // }
138
+ // }
139
+ // }
140
+ // }
141
+
142
+ int
143
+ min_index (const in vec4 points [ARRAY_SIZE], const in int count, const in float value, const in Plane3 plane)
144
+ {
145
+ int index = -1;
146
+ float dist = 1000000.0;
147
+
148
+ for (int i = 0; i < count; ++ i)
149
+ {
150
+ float d = plane_distance (plane, points [i] .xyz);
151
+
152
+ if (d >= value && d < dist)
153
+ {
154
+ dist = d;
155
+ index = i;
156
+ }
157
+ }
158
+
159
+ return index;
160
+ }
@@ -56,6 +56,8 @@ function ($,
56
56
  {
57
57
  "use strict";
58
58
 
59
+ const CONTEXT_MENU_TIME = 1200;
60
+
59
61
  function PointingDevice (executionContext)
60
62
  {
61
63
  X3DBaseNode .call (this, executionContext);
@@ -96,9 +98,6 @@ function ($,
96
98
 
97
99
  browser .getElement () .focus ();
98
100
 
99
- if (browser .getContextMenu () .getActive ())
100
- return;
101
-
102
101
  if (browser .getShiftKey () && browser .getControlKey ())
103
102
  return;
104
103
 
@@ -190,6 +189,18 @@ function ($,
190
189
  event .pageY = touches [0] .pageY;
191
190
 
192
191
  this .mousedown (event);
192
+
193
+ // Show context menu on long tab.
194
+
195
+ const nearestHit = this .getBrowser () .getNearestHit ();
196
+
197
+ if (! nearestHit || nearestHit .sensors .size === 0)
198
+ {
199
+ this .touchX = event .pageX;
200
+ this .touchY = event .pageY;
201
+ this .touchTimeout = setTimeout (this .showContextMenu .bind (this, event), CONTEXT_MENU_TIME);
202
+ }
203
+
193
204
  break;
194
205
  }
195
206
  case 2:
@@ -202,7 +213,10 @@ function ($,
202
213
  touchend: function (event)
203
214
  {
204
215
  event .button = 0;
216
+
205
217
  this .mouseup (event);
218
+
219
+ clearTimeout (this .touchTimeout);
206
220
  },
207
221
  touchmove: function (event)
208
222
  {
@@ -219,6 +233,10 @@ function ($,
219
233
  event .pageY = touches [0] .pageY;
220
234
 
221
235
  this .mousemove (event);
236
+
237
+ if (Math .hypot (this .touchX - event .pageX, this .touchY - event .pageY) > 7)
238
+ clearTimeout (this .touchTimeout);
239
+
222
240
  break;
223
241
  }
224
242
  }
@@ -233,6 +251,7 @@ function ($,
233
251
  {
234
252
  this .isOver = true;
235
253
  this .cursor = browser .getCursor ();
254
+
236
255
  browser .setCursor ("HAND");
237
256
  }
238
257
  }
@@ -241,6 +260,7 @@ function ($,
241
260
  if (this .isOver)
242
261
  {
243
262
  this .isOver = false;
263
+
244
264
  browser .setCursor (this .cursor);
245
265
  }
246
266
  }
@@ -259,6 +279,10 @@ function ($,
259
279
 
260
280
  this .onmotion (x, y);
261
281
  },
282
+ showContextMenu: function (event)
283
+ {
284
+ this .getBrowser () .getContextMenu () .show (event);
285
+ },
262
286
  });
263
287
 
264
288
  return PointingDevice;
@@ -71,19 +71,20 @@ function (PointingDevice,
71
71
  "use strict";
72
72
 
73
73
  const
74
- _pointingDevice = Symbol (),
75
- _cursorType = Symbol (),
76
- _pointer = Symbol (),
77
- _hitRay = Symbol (),
78
- _hits = Symbol (),
79
- _enabledSensors = Symbol (),
80
- _selectedLayer = Symbol (),
81
- _overSensors = Symbol (),
82
- _activeSensors = Symbol (),
83
- _hitPointSorter = Symbol (),
84
- _layerNumber = Symbol (),
85
- _layerSorter = Symbol (),
86
- _pointerTime = Symbol ();
74
+ _pointingDevice = Symbol (),
75
+ _cursorType = Symbol (),
76
+ _pointer = Symbol (),
77
+ _hitRay = Symbol (),
78
+ _hits = Symbol (),
79
+ _enabledSensors = Symbol (),
80
+ _pickOnlySensors = Symbol (),
81
+ _selectedLayer = Symbol (),
82
+ _overSensors = Symbol (),
83
+ _activeSensors = Symbol (),
84
+ _hitPointSorter = Symbol (),
85
+ _layerNumber = Symbol (),
86
+ _layerSorter = Symbol (),
87
+ _pointerTime = Symbol ();
87
88
 
88
89
  const line = new Line3 (Vector3 .Zero, Vector3 .Zero);
89
90
 
@@ -95,8 +96,8 @@ function (PointingDevice,
95
96
  this [_hits] = [ ];
96
97
  this [_enabledSensors] = [new Map ()];
97
98
  this [_selectedLayer] = null;
98
- this [_overSensors] = new Map ();
99
- this [_activeSensors] = new Map ();
99
+ this [_overSensors] = new Set ();
100
+ this [_activeSensors] = new Set ();
100
101
  this [_hitPointSorter] = new MergeSort (this [_hits], function (lhs, rhs) { return lhs .intersection .point .z < rhs .intersection .point .z; });
101
102
  this [_layerSorter] = new MergeSort (this [_hits], function (lhs, rhs) { return lhs .layerNumber < rhs .layerNumber; });
102
103
  this [_pointerTime] = 0;
@@ -145,6 +146,10 @@ function (PointingDevice,
145
146
  {
146
147
  return this [_cursorType];
147
148
  },
149
+ getPointer: function ()
150
+ {
151
+ return this [_pointer];
152
+ },
148
153
  isPointerInRectangle: function (rectangle)
149
154
  {
150
155
  return this [_pointer] .x > rectangle .x &&
@@ -162,14 +167,7 @@ function (PointingDevice,
162
167
  },
163
168
  setHitRay: function (projectionMatrix, viewport)
164
169
  {
165
- try
166
- {
167
- ViewVolume .unProjectRay (this [_pointer] .x, this [_pointer] .y, Matrix4 .Identity, projectionMatrix, viewport, this [_hitRay]);
168
- }
169
- catch (error)
170
- {
171
- this [_hitRay] .set (Vector3 .Zero, Vector3 .Zero);
172
- }
170
+ ViewVolume .unProjectRay (this [_pointer] .x, this [_pointer] .y, Matrix4 .Identity, projectionMatrix, viewport, this [_hitRay]);
173
171
  },
174
172
  getHitRay: function ()
175
173
  {
@@ -179,6 +177,10 @@ function (PointingDevice,
179
177
  {
180
178
  return this [_enabledSensors];
181
179
  },
180
+ getPickOnlySensors: function ()
181
+ {
182
+ return this [_pickOnlySensors];
183
+ },
182
184
  addHit: function (intersection, layer, shape, modelViewMatrix)
183
185
  {
184
186
  const sensors = this [_enabledSensors] .at (-1);
@@ -187,7 +189,7 @@ function (PointingDevice,
187
189
  pointer: this [_pointer],
188
190
  hitRay: this [_hitRay] .copy (),
189
191
  intersection: intersection,
190
- sensors: sensors .size ? new Map (sensors) : sensors,
192
+ sensors: new Set (sensors .values ()),
191
193
  layer: layer,
192
194
  layerNumber: this [_layerNumber],
193
195
  shape: shape,
@@ -204,7 +206,7 @@ function (PointingDevice,
204
206
  },
205
207
  buttonPressEvent: function (x, y)
206
208
  {
207
- this .touch (x, y);
209
+ this .touch (x, y, true);
208
210
 
209
211
  if (this [_hits] .length === 0)
210
212
  return false;
@@ -214,7 +216,7 @@ function (PointingDevice,
214
216
  this [_selectedLayer] = nearestHit .layer;
215
217
  this [_activeSensors] = nearestHit .sensors;
216
218
 
217
- for (const sensor of this [_activeSensors] .values ())
219
+ for (const sensor of this [_activeSensors])
218
220
  sensor .set_active__ (true, nearestHit);
219
221
 
220
222
  return !! nearestHit .sensors .size;
@@ -223,10 +225,10 @@ function (PointingDevice,
223
225
  {
224
226
  this [_selectedLayer] = null;
225
227
 
226
- for (const sensor of this [_activeSensors] .values ())
228
+ for (const sensor of this [_activeSensors])
227
229
  sensor .set_active__ (false, null);
228
230
 
229
- this [_activeSensors] = new Map ();
231
+ this [_activeSensors] = new Set ();
230
232
 
231
233
  // Selection
232
234
 
@@ -234,14 +236,14 @@ function (PointingDevice,
234
236
  },
235
237
  motionNotifyEvent: function (x, y)
236
238
  {
237
- this .touch (x, y);
239
+ this .touch (x, y, true);
238
240
  this .motion ();
239
241
 
240
242
  return !! (this [_hits] .length && this [_hits] .at (-1) .sensors .size);
241
243
  },
242
244
  leaveNotifyEvent: function ()
243
245
  { },
244
- touch: function (x, y)
246
+ touch: function (x, y, pickOnlySensors)
245
247
  {
246
248
  if (this .getViewer () ._isActive .getValue ())
247
249
  {
@@ -251,6 +253,8 @@ function (PointingDevice,
251
253
 
252
254
  const t0 = performance .now ();
253
255
 
256
+ this [_pickOnlySensors] = pickOnlySensors;
257
+
254
258
  this [_pointer] .set (x, y);
255
259
 
256
260
  // Clear hits.
@@ -282,7 +286,7 @@ function (PointingDevice,
282
286
  modelViewMatrix: new Matrix4 (),
283
287
  hitRay: this [_selectedLayer] ? this [_hitRay] : line,
284
288
  intersection: null,
285
- sensors: new Map (),
289
+ sensors: new Set (),
286
290
  shape: null,
287
291
  layer: null,
288
292
  layerNumber: 0,
@@ -293,14 +297,14 @@ function (PointingDevice,
293
297
 
294
298
  if (this [_hits] .length)
295
299
  {
296
- var difference = Algorithm .map_difference (this [_overSensors], nearestHit .sensors, new Map ());
300
+ var difference = Algorithm .set_difference (this [_overSensors], nearestHit .sensors, new Set ());
297
301
  }
298
302
  else
299
303
  {
300
- var difference = new Map (this [_overSensors]);
304
+ var difference = new Set (this [_overSensors]);
301
305
  }
302
306
 
303
- for (const sensor of difference .values ())
307
+ for (const sensor of difference)
304
308
  sensor .set_over__ (false, nearestHit);
305
309
 
306
310
  // Set isOver to TRUE for appropriate nodes
@@ -309,17 +313,17 @@ function (PointingDevice,
309
313
  {
310
314
  this [_overSensors] = nearestHit .sensors;
311
315
 
312
- for (const sensor of this [_overSensors] .values ())
316
+ for (const sensor of this [_overSensors])
313
317
  sensor .set_over__ (true, nearestHit);
314
318
  }
315
319
  else
316
320
  {
317
- this [_overSensors] = new Map ();
321
+ this [_overSensors] = new Set ();
318
322
  }
319
323
 
320
324
  // Forward motion event to active drag sensor nodes
321
325
 
322
- for (const sensor of this [_activeSensors] .values ())
326
+ for (const sensor of this [_activeSensors])
323
327
  sensor .set_motion__ (nearestHit);
324
328
  },
325
329
  getPointerTime: function ()
@@ -93,29 +93,37 @@ function ($,
93
93
 
94
94
  this [_resizer] = new ResizeSensor (this .getSurface (), this .reshape .bind (this));
95
95
 
96
+ this .getSurface () .css ("position", ""); // Reset position, set from ResizeSensor.
97
+
96
98
  this .reshape ();
97
99
  },
98
100
  getRenderer: function ()
99
101
  {
100
- const
101
- gl = this .getContext (),
102
- dbgRenderInfo = this .getExtension ("WEBGL_debug_renderer_info");
102
+ const gl = this .getContext ();
103
+
104
+ if (! navigator .userAgent .match (/Firefox/))
105
+ {
106
+ const dbgRenderInfo = gl .getExtension ("WEBGL_debug_renderer_info");
103
107
 
104
- if (dbgRenderInfo)
105
- return gl .getParameter (dbgRenderInfo .UNMASKED_RENDERER_WEBGL);
108
+ if (dbgRenderInfo)
109
+ return gl .getParameter (dbgRenderInfo .UNMASKED_RENDERER_WEBGL);
110
+ }
106
111
 
107
- return gl .getParameter (this .getContext () .RENDERER);
112
+ return gl .getParameter (gl .RENDERER);
108
113
  },
109
114
  getVendor: function ()
110
115
  {
111
- const
112
- gl = this .getContext (),
113
- dbgRenderInfo = this .getExtension ("WEBGL_debug_renderer_info");
116
+ const gl = this .getContext ();
117
+
118
+ if (! navigator .userAgent .match (/Firefox/))
119
+ {
120
+ const dbgRenderInfo = gl .getExtension ("WEBGL_debug_renderer_info");
114
121
 
115
- if (dbgRenderInfo)
116
- return gl .getParameter (dbgRenderInfo .UNMASKED_VENDOR_WEBGL);
122
+ if (dbgRenderInfo)
123
+ return gl .getParameter (dbgRenderInfo .UNMASKED_VENDOR_WEBGL);
124
+ }
117
125
 
118
- return gl .getParameter (this .getContext () .VENDOR);
126
+ return gl .getParameter (gl .VENDOR);
119
127
  },
120
128
  getWebGLVersion: function ()
121
129
  {
@@ -181,7 +189,7 @@ function ($,
181
189
  const element = this .getElement ();
182
190
 
183
191
  if (element .fullScreen ())
184
- element .addClass ("x_ite-fullscreen");
192
+ element .addClass ("x_ite-fullscreen");
185
193
  else
186
194
  element .removeClass ("x_ite-fullscreen");
187
195
  },
@@ -72,14 +72,35 @@ function (ShaderSource,
72
72
 
73
73
  source = ShaderSource .get (gl, source);
74
74
 
75
- const
76
- COMMENTS = "\\s+|/\\*[^]*?\\*/|//.*?\\n",
77
- VERSION = "#version\\s+.*?\\n",
78
- ANY = "[^]*";
79
-
80
- const
81
- GLSL = new RegExp ("^((?:" + COMMENTS + ")?(?:" + VERSION + ")?)(" + ANY + ")$"),
82
- match = source .match (GLSL);
75
+ const
76
+ COMMENTS = "\\s+|/\\*[\\s\\S]*?\\*/|//.*?\\n",
77
+ LINE = "#line\\s+.*?\\n",
78
+ IF = "#if\\s+.*?\\n",
79
+ ELIF = "#elif\\s+.*?\\n",
80
+ IFDEF = "#ifdef\\s+.*?\\n",
81
+ IFNDEF = "#ifndef\\s+.*?\\n",
82
+ ELSE = "#else.*?\\n",
83
+ ENDIF = "#endif.*?\\n",
84
+ DEFINE = "#define\\s+(?:[^\\n\\\\]|\\\\[^\\r\\n]|\\\\\\r?\\n)*\\n",
85
+ UNDEF = "#undef\\s+.*?\\n",
86
+ PRAGMA = "#pragma\\s+.*?\\n",
87
+ PREPROCESSOR = LINE + "|" + IF + "|" + ELIF + "|" + IFDEF + "|" + IFNDEF + "|" + ELSE + "|" + ENDIF + "|" + DEFINE + "|" + UNDEF + "|" + PRAGMA,
88
+ VERSION = "#version\\s+.*?\\n",
89
+ EXTENSION = "#extension\\s+.*?\\n",
90
+ ANY = "[\\s\\S]*";
91
+
92
+ const
93
+ GLSL = new RegExp ("^((?:" + COMMENTS + "|" + PREPROCESSOR + ")*(?:" + VERSION + ")?(?:" + COMMENTS + "|" + PREPROCESSOR + "|" + EXTENSION + ")*)(" + ANY + ")$"),
94
+ match = source .match (GLSL);
95
+
96
+ // const
97
+ // COMMENTS = "\\s+|/\\*[^]*?\\*/|//.*?\\n",
98
+ // VERSION = "#version\\s+.*?\\n",
99
+ // ANY = "[^]*";
100
+
101
+ // const
102
+ // GLSL = new RegExp ("^((?:" + COMMENTS + ")?(?:" + VERSION + ")?)(" + ANY + ")$"),
103
+ // match = source .match (GLSL);
83
104
 
84
105
  if (! match)
85
106
  return source;
@@ -91,7 +112,7 @@ function (ShaderSource,
91
112
  if (browser .getRenderingProperty ("LogarithmicDepthBuffer"))
92
113
  constants += "#define X3D_LOGARITHMIC_DEPTH_BUFFER\n";
93
114
 
94
- if (gl .getVersion () >= 2 || browser .getExtension ("WEBGL_depth_texture"))
115
+ if (gl .getVersion () >= 2 || gl .getExtension ("WEBGL_depth_texture"))
95
116
  constants += "#define X3D_DEPTH_TEXTURE\n";
96
117
 
97
118
  if (browser .getMultiTexturing ())
@@ -123,9 +144,9 @@ function (ShaderSource,
123
144
  definitions += "#define x3d_PointLight 2\n";
124
145
  definitions += "#define x3d_SpotLight 3\n";
125
146
 
126
- definitions += "#define x3d_MaxTextures " + browser .getMaxTextures () + "\n";
127
- definitions += "#define x3d_TextureType2D 2\n";
128
- definitions += "#define x3d_TextureType3D 3\n";
147
+ definitions += "#define x3d_MaxTextures " + browser .getMaxTextures () + "\n";
148
+ definitions += "#define x3d_TextureType2D 2\n";
149
+ definitions += "#define x3d_TextureType3D 3\n";
129
150
  definitions += "#define x3d_TextureTypeCube 4\n";
130
151
 
131
152
  definitions += "#define x3d_Replace " + MultiTextureModeType .REPLACE + "\n";
@@ -62,8 +62,10 @@ define ([
62
62
  "text!assets/shaders/webgl2/include/Colors.glsl",
63
63
  "text!assets/shaders/webgl2/include/Fog.glsl",
64
64
  "text!assets/shaders/webgl2/include/Hatch.glsl",
65
+ "text!assets/shaders/webgl2/include/Line2.glsl",
65
66
  "text!assets/shaders/webgl2/include/Normal.glsl",
66
67
  "text!assets/shaders/webgl2/include/Pack.glsl",
68
+ "text!assets/shaders/webgl2/include/Particle.glsl",
67
69
  "text!assets/shaders/webgl2/include/Perlin.glsl",
68
70
  "text!assets/shaders/webgl2/include/Shadow.glsl",
69
71
  "text!assets/shaders/webgl2/include/SpotFactor.glsl",
@@ -83,8 +85,10 @@ function (ClipPlanes1,
83
85
  Colors2,
84
86
  Fog2,
85
87
  Hatch2,
88
+ Line22,
86
89
  Normal2,
87
90
  Pack2,
91
+ Particle2,
88
92
  Perlin2,
89
93
  Shadow2,
90
94
  SpotFactor2,
@@ -112,8 +116,10 @@ function (ClipPlanes1,
112
116
  Colors: Colors2,
113
117
  Fog: Fog2,
114
118
  Hatch: Hatch2,
119
+ Line2: Line22,
115
120
  Normal: Normal2,
116
121
  Pack: Pack2,
122
+ Particle: Particle2,
117
123
  Perlin: Perlin2,
118
124
  Shadow: Shadow2,
119
125
  SpotFactor: SpotFactor2,
@@ -48,14 +48,14 @@
48
48
 
49
49
 
50
50
  define ([
51
+ "x_ite/Rendering/VertexArray",
51
52
  "x_ite/Rendering/TextureBuffer",
52
- "standard/Math/Numbers/Vector4",
53
53
  "standard/Math/Numbers/Matrix3",
54
54
  "standard/Math/Numbers/Matrix4",
55
55
  "standard/Math/Geometry/Camera",
56
56
  ],
57
- function (TextureBuffer,
58
- Vector4,
57
+ function (VertexArray,
58
+ TextureBuffer,
59
59
  Matrix3,
60
60
  Matrix4,
61
61
  Camera)
@@ -90,7 +90,8 @@ function (TextureBuffer,
90
90
  gl = browser .getContext (),
91
91
  frameBuffer = new TextureBuffer (browser, 16, 16),
92
92
  normalBuffer = gl .createBuffer (),
93
- vertexBuffer = gl .createBuffer ();
93
+ vertexBuffer = gl .createBuffer (),
94
+ vertexArrayObject = new VertexArray ();
94
95
 
95
96
  frameBuffer .bind ();
96
97
 
@@ -98,9 +99,9 @@ function (TextureBuffer,
98
99
  shaderNode .setLocalObjects (gl, [ ]);
99
100
 
100
101
  gl .bindBuffer (gl .ARRAY_BUFFER, vertexBuffer);
101
- gl .bufferData (gl .ARRAY_BUFFER, new Float32Array (vertices), gl .STATIC_DRAW);
102
+ gl .bufferData (gl .ARRAY_BUFFER, new Float32Array (vertices), gl .DYNAMIC_DRAW);
102
103
  gl .bindBuffer (gl .ARRAY_BUFFER, normalBuffer);
103
- gl .bufferData (gl .ARRAY_BUFFER, new Float32Array (normals), gl .STATIC_DRAW);
104
+ gl .bufferData (gl .ARRAY_BUFFER, new Float32Array (normals), gl .DYNAMIC_DRAW);
104
105
 
105
106
  // Matrices
106
107
 
@@ -137,16 +138,21 @@ function (TextureBuffer,
137
138
  gl .enable (gl .CULL_FACE);
138
139
  gl .cullFace (gl .BACK);
139
140
 
140
- shaderNode .enableNormalAttribute (gl, normalBuffer);
141
- shaderNode .enableVertexAttribute (gl, vertexBuffer);
141
+ vertexArrayObject .enable (gl, shaderNode);
142
+ shaderNode .enableNormalAttribute (gl, normalBuffer, 0, 0);
143
+ shaderNode .enableVertexAttribute (gl, vertexBuffer, 0, 0);
142
144
 
143
145
  gl .drawArrays (gl .TRIANGLES, 0, 6);
144
146
 
145
- shaderNode .disableNormalAttribute (gl, normalBuffer);
146
-
147
147
  const data = frameBuffer .readPixels ();
148
148
 
149
149
  frameBuffer .unbind ();
150
+ frameBuffer .delete ();
151
+
152
+ gl .deleteBuffer (normalBuffer);
153
+ gl .deleteBuffer (vertexBuffer);
154
+
155
+ vertexArrayObject .delete (gl);
150
156
 
151
157
  return true || (data [0] == 255 && data [1] == 0 && data [2] == 0 && data [3] == 255);
152
158
  };