ohzi-core 12.5.2 → 12.7.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 (265) hide show
  1. package/README.md +9 -9
  2. package/build/index.mjs +1 -1
  3. package/build/index.mjs.map +1 -1
  4. package/build/index.module.js +2 -0
  5. package/build/index.module.js.map +1 -0
  6. package/package.json +64 -63
  7. package/src/.vscode/settings.json +2 -2
  8. package/src/BaseApplication.js +40 -40
  9. package/src/Browser.js +119 -119
  10. package/src/CameraManager.js +37 -37
  11. package/src/Capabilities.js +13 -13
  12. package/src/CustomBezierCurve.js +58 -58
  13. package/src/Debug.js +359 -359
  14. package/src/Graphics.js +507 -507
  15. package/src/Initializer.js +56 -56
  16. package/src/KeyboardInput.js +177 -177
  17. package/src/OS.js +59 -59
  18. package/src/OScreen.js +90 -90
  19. package/src/OrthographicCamera.js +36 -36
  20. package/src/PerspectiveCamera.js +34 -34
  21. package/src/ReflectionPlaneContext.js +22 -22
  22. package/src/RenderLayers.js +30 -30
  23. package/src/RenderLoop.js +125 -122
  24. package/src/RenderOrder.js +40 -40
  25. package/src/ResourceContainer.js +57 -57
  26. package/src/SceneManager.js +55 -55
  27. package/src/Screen.js +71 -71
  28. package/src/Time.js +99 -98
  29. package/src/UI.js +106 -106
  30. package/src/action_sequencer/ActionEvent.js +22 -22
  31. package/src/action_sequencer/ActionInterpolator.js +39 -39
  32. package/src/action_sequencer/ActionSequencer.js +338 -338
  33. package/src/action_sequencer/NumberInterpolator.js +42 -42
  34. package/src/action_sequencer/VectorInterpolator.js +34 -34
  35. package/src/blitter_index.js +14 -14
  36. package/src/canvas_drawer/CanvasDrawer.js +146 -146
  37. package/src/canvas_drawer/MultiLineTextDrawer.js +58 -58
  38. package/src/canvas_drawer/SimpleTextDrawer.js +55 -55
  39. package/src/components/AudioClip.js +67 -67
  40. package/src/components/AxisHelper.js +60 -60
  41. package/src/components/BaseObject.js +50 -50
  42. package/src/components/EdgeMesh.js +172 -172
  43. package/src/components/GeometryEdgeVisualizer.js +57 -57
  44. package/src/components/Grid.js +40 -40
  45. package/src/components/Line.js +225 -225
  46. package/src/components/MultiLinePath.js +25 -25
  47. package/src/components/MultiLineText2D.js +75 -75
  48. package/src/components/ObjectAxis.js +27 -27
  49. package/src/components/ObjectOrientedBoundingBox.js +228 -228
  50. package/src/components/PlaneHelper.js +38 -38
  51. package/src/components/Shape2D.js +52 -52
  52. package/src/components/Shape3D.js +46 -46
  53. package/src/components/Text2D.js +49 -49
  54. package/src/components/UIElement.js +246 -246
  55. package/src/components/UpdatableMaterialMesh.js +26 -26
  56. package/src/components/WorldImage.js +101 -101
  57. package/src/components/mouse_interactors/ObjectRotator.js +64 -64
  58. package/src/components/sdf_text/SDFText.js +156 -156
  59. package/src/components/sdf_text/SDFTextBatch.js +195 -195
  60. package/src/components/sdf_text/TextGlyph.js +17 -17
  61. package/src/data_textures/CustomDataTexture.js +53 -53
  62. package/src/data_textures/RGBADataTexture.js +14 -14
  63. package/src/data_textures/RGBAFloatDataTexture.js +14 -14
  64. package/src/data_textures/RGBDataTexture.js +14 -14
  65. package/src/data_textures/RGBFloatDataTexture.js +13 -13
  66. package/src/editor/ManipulatorHandle.js +73 -73
  67. package/src/editor/ObjectEditor.js +68 -68
  68. package/src/editor/ObjectManipulator.js +112 -112
  69. package/src/editor/ObjectPicker.js +77 -77
  70. package/src/editor/shaders/object_picker.frag +5 -5
  71. package/src/editor/shaders/object_picker.vert +7 -7
  72. package/src/gpu_particles/GPUParticleSystem.js +111 -111
  73. package/src/gpu_particles/ParticleAttribute.js +89 -89
  74. package/src/gpu_particles/ParticlePositionAttribute.js +42 -42
  75. package/src/html_utilities/CSSAnimator.js +66 -66
  76. package/src/html_utilities/css_animator_states/Animating.js +46 -46
  77. package/src/html_utilities/css_animator_states/Idle.js +27 -27
  78. package/src/index.js +134 -134
  79. package/src/loaders/AsyncAbstractLoader.js +160 -160
  80. package/src/loaders/AsyncAudiosLoader.js +34 -34
  81. package/src/loaders/AsyncObjectsLoader.js +44 -44
  82. package/src/loaders/AsyncTexturesLoader.js +81 -70
  83. package/src/loaders/assets_loader/AsyncAssetsLoaderWorker.js +69 -69
  84. package/src/loaders/assets_loader/ResourceContainer.js +37 -37
  85. package/src/loaders/assets_loader/ResourceLoaderChecker.js +39 -39
  86. package/src/materials/AddMaterial.js +20 -20
  87. package/src/materials/AlphaFilterMaterial.js +23 -23
  88. package/src/materials/BaseShaderMaterial.js +21 -21
  89. package/src/materials/BlitMaterial.js +30 -30
  90. package/src/materials/BloomComposeMaterial.js +24 -24
  91. package/src/materials/BoxBlurMaterial.js +16 -16
  92. package/src/materials/ClearAlphaMaterial.js +15 -15
  93. package/src/materials/ClearColorMaterial.js +33 -33
  94. package/src/materials/ClearDepthNormalMaterial.js +16 -16
  95. package/src/materials/DeferredRendererComposeMaterial.js +35 -35
  96. package/src/materials/DepthNormalMaterial.js +30 -30
  97. package/src/materials/DisplayNormalTextureMaterial.js +18 -18
  98. package/src/materials/DualFilteringBlurMaterial.js +14 -14
  99. package/src/materials/FXAAMaterial.js +12 -12
  100. package/src/materials/GaussianBlurMaterial.js +40 -40
  101. package/src/materials/LuminosityHighPassMaterial.js +26 -26
  102. package/src/materials/MedianFilterMaterial.js +45 -45
  103. package/src/materials/NormalMaterial.js +19 -19
  104. package/src/materials/SDFScreenTextMaterial.js +34 -34
  105. package/src/materials/SDFTextMaterial.js +41 -41
  106. package/src/materials/SSAOComposeMaterial.js +14 -14
  107. package/src/materials/SSAOMaterial.js +65 -65
  108. package/src/materials/ScreenSpaceTextureMaterial.js +67 -67
  109. package/src/materials/UIElementMaterial.js +30 -30
  110. package/src/materials/UnrealBloomComposeMaterial.js +100 -100
  111. package/src/materials/UnrealBlurMaterial.js +20 -20
  112. package/src/materials/UnrealComposeMaterial.js +27 -27
  113. package/src/materials/ViewPositionMaterial.js +19 -19
  114. package/src/materials/deferred/DeferredPointLightMaterial.js +42 -42
  115. package/src/materials/gpu_particles/AttributeUpdateMaterial.js +37 -37
  116. package/src/materials/gpu_particles/BasicParticleMaterial.js +25 -25
  117. package/src/materials/gpu_particles/ParticleStorageMaterial.js +37 -37
  118. package/src/materials/gpu_particles/PositionStorageMaterial.js +26 -26
  119. package/src/object_pool/Pool.js +75 -75
  120. package/src/primitives/Arrow.js +62 -62
  121. package/src/primitives/Cube.js +24 -24
  122. package/src/primitives/HorizontalPlane.js +27 -27
  123. package/src/primitives/Sphere.js +22 -22
  124. package/src/primitives/VerticalPlane.js +26 -26
  125. package/src/raycast/GroupRaycaster.js +43 -43
  126. package/src/raycast/PlaneDragResolver.js +92 -92
  127. package/src/raycast/PlaneRaycastResolver.js +24 -24
  128. package/src/raycast/PlaneRaycaster.js +25 -25
  129. package/src/raycast/RaycastResolver.js +24 -24
  130. package/src/raycast/SurfaceDragResolver.js +80 -80
  131. package/src/raycast/states/BaseState.js +18 -18
  132. package/src/raycast/states/IdleState.js +19 -19
  133. package/src/raycast/states/OnRaycastEnter.js +17 -17
  134. package/src/raycast/states/OnRaycastExit.js +18 -18
  135. package/src/raycast/states/OnRaycastHover.js +27 -27
  136. package/src/render_mode/BaseRender.js +34 -34
  137. package/src/render_mode/BloomRender.js +63 -63
  138. package/src/render_mode/DebugNormalsRender.js +22 -22
  139. package/src/render_mode/DeferredRender.js +110 -110
  140. package/src/render_mode/NormalAORender.js +72 -72
  141. package/src/render_mode/NormalRender.js +38 -38
  142. package/src/render_mode/OutlineRender.js +157 -157
  143. package/src/render_mode/PlanarReflectionsRender.js +121 -121
  144. package/src/render_mode/UnrealBloomRender.js +123 -123
  145. package/src/render_mode/VRRender.js +71 -71
  146. package/src/render_utilities/Blitter.js +101 -101
  147. package/src/render_utilities/Blurrer.js +31 -31
  148. package/src/render_utilities/DepthAndNormalsRenderer.js +47 -47
  149. package/src/render_utilities/DualFilteringBlurrer.js +58 -58
  150. package/src/render_utilities/GaussianBlurrer.js +167 -167
  151. package/src/render_utilities/MedianFilter.js +68 -68
  152. package/src/render_utilities/ViewPositionRenderer.js +50 -50
  153. package/src/resource_loader/BasisLoader.js +51 -51
  154. package/src/resource_loader/FontLoader.js +48 -48
  155. package/src/resource_loader/JSONLoader.js +35 -35
  156. package/src/resource_loader/OBJLoader.js +48 -48
  157. package/src/resource_loader/PointArrayLoader.js +72 -72
  158. package/src/resource_loader/RGBETextureLoader.js +48 -48
  159. package/src/resource_loader/VideoLoader.js +32 -32
  160. package/src/scenes/AbstractScene.js +175 -175
  161. package/src/scenes/loading_states/CompilatorManager.js +41 -41
  162. package/src/scenes/loading_states/HighQualityLoadingState.js +28 -28
  163. package/src/scenes/loading_states/LoadingState.js +117 -117
  164. package/src/scenes/loading_states/RegularLoadingState.js +41 -41
  165. package/src/shaders/add/add.frag +27 -27
  166. package/src/shaders/anti_aliasing/fxaa.frag +72 -72
  167. package/src/shaders/basic_color/basic_color.frag +5 -5
  168. package/src/shaders/basic_color/basic_color.vert +9 -9
  169. package/src/shaders/basic_line/basic_line.frag +36 -36
  170. package/src/shaders/basic_line/basic_line.vert +37 -37
  171. package/src/shaders/basic_texture/basic_texture.frag +9 -9
  172. package/src/shaders/basic_texture/basic_texture.vert +16 -16
  173. package/src/shaders/bloom/bloom_compose_frag.glsl +22 -22
  174. package/src/shaders/bloom/cheap_bloom_compose_frag.glsl +13 -13
  175. package/src/shaders/box_blur/box_blur.frag +24 -24
  176. package/src/shaders/box_blur/compose.frag +31 -31
  177. package/src/shaders/clear/clear_depth_normal.frag +24 -24
  178. package/src/shaders/copy/copy.frag +6 -6
  179. package/src/shaders/copy/copy.vert +5 -5
  180. package/src/shaders/deferred/blit_copy.vert +11 -11
  181. package/src/shaders/deferred/deferred_compose.frag +59 -59
  182. package/src/shaders/deferred/point_light.frag +66 -66
  183. package/src/shaders/deferred/point_light.vert +13 -13
  184. package/src/shaders/depth_normals/debug_normals.frag +47 -47
  185. package/src/shaders/depth_normals/depth_normals.frag +30 -30
  186. package/src/shaders/depth_normals/depth_normals.vert +12 -12
  187. package/src/shaders/dual_filter_blur/alpha_filter.frag +14 -14
  188. package/src/shaders/dual_filter_blur/downsample.frag +21 -21
  189. package/src/shaders/dual_filter_blur/upsample.frag +24 -24
  190. package/src/shaders/edge_visualizer/edge_visualizer.frag +17 -17
  191. package/src/shaders/edge_visualizer/edge_visualizer.vert +15 -15
  192. package/src/shaders/edges/corners.frag +10 -10
  193. package/src/shaders/edges/corners.vert +30 -30
  194. package/src/shaders/edges/edges.frag +6 -6
  195. package/src/shaders/edges/edges.vert +27 -27
  196. package/src/shaders/gaussian_blur/gaussian_blur.frag +43 -43
  197. package/src/shaders/gaussian_blur/unreal_bloom_compose.frag +36 -36
  198. package/src/shaders/gpu_particles/common_utils.glsl +12 -12
  199. package/src/shaders/gpu_particles/generic_storage.frag +6 -6
  200. package/src/shaders/gpu_particles/store/store_position.vert +14 -14
  201. package/src/shaders/gpu_particles/update/basic_update.frag +20 -20
  202. package/src/shaders/gpu_particles/visualize/visualize.frag +10 -10
  203. package/src/shaders/gpu_particles/visualize/visualize.vert +12 -12
  204. package/src/shaders/grid/grid.frag +16 -16
  205. package/src/shaders/grid/grid.vert +9 -9
  206. package/src/shaders/luminosity_high_pass/luminosity_high_pass.frag +37 -37
  207. package/src/shaders/median_filter/median_filter.frag +134 -134
  208. package/src/shaders/normal/normal.frag +6 -6
  209. package/src/shaders/normal/normal.vert +6 -6
  210. package/src/shaders/sdf_text/sdf_screen_text.frag +51 -51
  211. package/src/shaders/sdf_text/sdf_screen_text.vert +41 -41
  212. package/src/shaders/sdf_text/sdf_text.frag +53 -53
  213. package/src/shaders/sdf_text/sdf_text.vert +41 -41
  214. package/src/shaders/ssao/hbao.frag +264 -264
  215. package/src/shaders/ssao/ssao.frag +95 -95
  216. package/src/shaders/ssao/ssao.vert +10 -10
  217. package/src/shaders/ssao/ssao_compose.frag +14 -14
  218. package/src/shaders/transparent_mix/copy.frag +6 -6
  219. package/src/shaders/transparent_mix/transparent_mix.frag +18 -18
  220. package/src/shaders/transparent_mix/transparent_mix.vert +7 -7
  221. package/src/shaders/ui/ss_texture.frag +10 -10
  222. package/src/shaders/ui/ss_texture.vert +31 -31
  223. package/src/shaders/ui/ws_texture.vert +38 -38
  224. package/src/shaders/ui_element/ui_element.frag +11 -11
  225. package/src/shaders/ui_element/ui_element.vert +32 -32
  226. package/src/shaders/unreal_blur/unreal_blur.frag +24 -24
  227. package/src/shaders/unreal_blur/unreal_compose.frag +23 -23
  228. package/src/shaders/write_view_position/write_view_position.frag +6 -6
  229. package/src/shaders/write_view_position/write_view_position.vert +8 -8
  230. package/src/static_batcher/BatchedMesh.js +56 -56
  231. package/src/static_batcher/GeometryBatch.js +308 -308
  232. package/src/static_batcher/GeometryBatcher.js +64 -64
  233. package/src/static_batcher/MeshBatcher.js +58 -58
  234. package/src/ui/ui_element_position/ScreenSpacePosition.js +16 -16
  235. package/src/ui/ui_element_position/WorldSpacePosition.js +23 -23
  236. package/src/ui/ui_element_state/OnIdle.js +24 -24
  237. package/src/ui/ui_element_state/OnMouseEnter.js +39 -39
  238. package/src/ui/ui_element_state/OnMouseExit.js +22 -22
  239. package/src/ui/ui_element_state/OnMouseHover.js +46 -46
  240. package/src/ui/ui_element_state/UIElementState.js +34 -34
  241. package/src/utilities/ArrayUtilities.js +57 -57
  242. package/src/utilities/CameraUtilities.js +283 -283
  243. package/src/utilities/EasingFunctions.js +231 -231
  244. package/src/utilities/FrustumPointFitter.js +257 -257
  245. package/src/utilities/GeometryUtilities.js +76 -76
  246. package/src/utilities/HTMLUtilities.js +76 -76
  247. package/src/utilities/ImageUtilities.js +28 -28
  248. package/src/utilities/MeshSampler.js +206 -206
  249. package/src/utilities/ModelUtilities.js +162 -162
  250. package/src/utilities/OMath.js +158 -158
  251. package/src/utilities/OrthographicFrustumPointFitter.js +49 -49
  252. package/src/utilities/PerspectiveFrustumPointFitter.js +254 -254
  253. package/src/utilities/StringUtilities.js +43 -43
  254. package/src/utilities/TimeUtilities.js +24 -24
  255. package/src/utilities/Validation.js +36 -36
  256. package/src/view_components/ApplicationView.js +73 -73
  257. package/src/view_components/TransitionManager.js +75 -75
  258. package/src/view_components/ViewComponent.js +61 -61
  259. package/src/view_components/ViewComponentManager.js +69 -69
  260. package/src/view_components/ViewManager.js +145 -145
  261. package/src/view_components/ViewState.js +49 -49
  262. package/src/view_components/transition/ActionSequencerBuilder.js +124 -124
  263. package/src/view_components/transition/DrawIOAnimationSheet.js +92 -92
  264. package/src/view_components/transition/TransitionTable.js +54 -54
  265. package/src/view_components/transition/ViewStateTransitionHandler.js +106 -106
@@ -1,195 +1,195 @@
1
- import { SDFText } from './SDFText';
2
- import { SDFTextMaterial } from '../../materials/SDFTextMaterial';
3
- import { ArrayUtilities } from '../../utilities/ArrayUtilities';
4
-
5
- import {
6
- PlaneGeometry,
7
- Mesh,
8
- Vector2,
9
- InstancedBufferGeometry,
10
- InstancedBufferAttribute,
11
- Float32BufferAttribute,
12
- DynamicDrawUsage
13
- } from 'three';
14
-
15
- class SDFTextBatch extends Mesh
16
- {
17
- constructor(font_layout, atlas_texture)
18
- {
19
- const max_allocations = 2000;
20
-
21
- const instanced_geometry = new InstancedBufferGeometry();
22
- instanced_geometry.instanceCount = 0;
23
-
24
- const geometry = new PlaneGeometry(1, 1);
25
- geometry.translate(0.5, 0.5, 0);
26
- instanced_geometry.setAttribute('position', new Float32BufferAttribute(geometry.getAttribute('position').array, 3));
27
- instanced_geometry.setAttribute('uv', new Float32BufferAttribute(geometry.getAttribute('uv').array, 2));
28
- instanced_geometry.index = geometry.index;
29
-
30
- const transformsCol0 = new InstancedBufferAttribute(new Float32Array(max_allocations * 4), 4, false);
31
- const transformsCol1 = new InstancedBufferAttribute(new Float32Array(max_allocations * 4), 4, false);
32
- const transformsCol2 = new InstancedBufferAttribute(new Float32Array(max_allocations * 4), 4, false);
33
- const transformsCol3 = new InstancedBufferAttribute(new Float32Array(max_allocations * 4), 4, false);
34
-
35
- const glyph_bounds = new InstancedBufferAttribute(new Float32Array(max_allocations * 4), 4, false);
36
- const plane_bounds = new InstancedBufferAttribute(new Float32Array(max_allocations * 4), 4, false);
37
-
38
- const color = new InstancedBufferAttribute(new Float32Array(max_allocations * 4), 4, false);
39
-
40
- transformsCol0.usage = DynamicDrawUsage;
41
- transformsCol1.usage = DynamicDrawUsage;
42
- transformsCol2.usage = DynamicDrawUsage;
43
- transformsCol3.usage = DynamicDrawUsage;
44
- glyph_bounds.usage = DynamicDrawUsage;
45
- plane_bounds.usage = DynamicDrawUsage;
46
- color.usage = DynamicDrawUsage;
47
-
48
- instanced_geometry.setAttribute('transformsCol0', transformsCol0);
49
- instanced_geometry.setAttribute('transformsCol1', transformsCol1);
50
- instanced_geometry.setAttribute('transformsCol2', transformsCol2);
51
- instanced_geometry.setAttribute('transformsCol3', transformsCol3);
52
-
53
- instanced_geometry.setAttribute('glyph_bounds', glyph_bounds);
54
- instanced_geometry.setAttribute('plane_bounds', plane_bounds);
55
- instanced_geometry.setAttribute('color', color);
56
-
57
- super(instanced_geometry, new SDFTextMaterial(atlas_texture));
58
-
59
- this.text_elements = [];
60
- this.font_layout = font_layout;
61
-
62
- this.material.set_atlas_size(new Vector2(font_layout.atlas.width, font_layout.atlas.height));
63
-
64
- this.frustumCulled = false;
65
- }
66
-
67
- set_boldness(value)
68
- {
69
- this.material.set_boldness(value);
70
- }
71
-
72
- add_text(text_str)
73
- {
74
- const elem = new SDFText(this.font_layout.glyphs, text_str);
75
- this.text_elements.push(elem);
76
- return elem;
77
- }
78
-
79
- remove_text(text_elem)
80
- {
81
- ArrayUtilities.remove_elem(this.text_elements, text_elem);
82
- this.update(true);
83
- }
84
-
85
- update(force_update)
86
- {
87
- const glyph_bounds_atr = this.geometry.getAttribute('glyph_bounds');
88
- const plane_bounds_atr = this.geometry.getAttribute('plane_bounds');
89
-
90
- const transformsCol0 = this.geometry.getAttribute('transformsCol0');
91
- const transformsCol1 = this.geometry.getAttribute('transformsCol1');
92
- const transformsCol2 = this.geometry.getAttribute('transformsCol2');
93
- const transformsCol3 = this.geometry.getAttribute('transformsCol3');
94
-
95
- const color_atr = this.geometry.getAttribute('color');
96
-
97
- let matrix_needs_update = force_update === true;
98
- let glyph_needs_update = force_update === true;
99
- let color_needs_update = force_update === true;
100
-
101
- let glyph_count = 0;
102
- for (let i = 0; i < this.text_elements.length; i++)
103
- {
104
- const text = this.text_elements[i];
105
-
106
- if (text.matrix_is_dirty)
107
- {
108
- matrix_needs_update = true;
109
- text.update_matrix();
110
- }
111
-
112
- if (text.glyph_is_dirty)
113
- {
114
- glyph_needs_update = true;
115
- text.clear_glyph_dirty();
116
- }
117
-
118
- if (text.color_is_dirty)
119
- {
120
- color_needs_update = true;
121
- text.clear_color_dirty();
122
- }
123
-
124
- const matrix = text.matrix;
125
- const color = text.color;
126
- const opacity = text.opacity;
127
-
128
- for (let glyph_i = 0; glyph_i < text.glyphs.length; glyph_i++)
129
- {
130
- const glyph = text.glyphs[glyph_i];
131
-
132
- const buffer_i = glyph_count;
133
-
134
- glyph_bounds_atr.setXYZW(buffer_i, glyph.atlas_bounds.x, glyph.atlas_bounds.y, glyph.atlas_bounds.z, glyph.atlas_bounds.w);
135
- plane_bounds_atr.setXYZW(buffer_i, glyph.position.x, glyph.position.y, glyph.scale.x, glyph.scale.y);
136
-
137
- transformsCol0.setXYZW(buffer_i, matrix.elements[0],
138
- matrix.elements[1],
139
- matrix.elements[2],
140
- matrix.elements[3]);
141
-
142
- transformsCol1.setXYZW(buffer_i, matrix.elements[4],
143
- matrix.elements[5],
144
- matrix.elements[6],
145
- matrix.elements[7]);
146
-
147
- transformsCol2.setXYZW(buffer_i, matrix.elements[8],
148
- matrix.elements[9],
149
- matrix.elements[10],
150
- matrix.elements[11]);
151
-
152
- transformsCol3.setXYZW(buffer_i, matrix.elements[12],
153
- matrix.elements[13],
154
- matrix.elements[14],
155
- matrix.elements[15]);
156
-
157
- color_atr.setXYZW(buffer_i, color.r, color.g, color.b, opacity);
158
-
159
- glyph_count++;
160
- }
161
- }
162
-
163
- this.geometry.instanceCount = glyph_count;
164
-
165
- if (glyph_count > this.max_allocations)
166
- {
167
- console.error('SDFTextBatch exceeded maximum glyph allocations(max/current): ', this.max_allocations, glyph_count, this);
168
- }
169
-
170
- if (matrix_needs_update)
171
- {
172
- transformsCol0.needsUpdate = true;
173
- transformsCol1.needsUpdate = true;
174
- transformsCol2.needsUpdate = true;
175
- transformsCol3.needsUpdate = true;
176
- }
177
- if (glyph_needs_update)
178
- {
179
- glyph_bounds_atr.needsUpdate = true;
180
- plane_bounds_atr.needsUpdate = true;
181
- }
182
- if (color_needs_update)
183
- {
184
- color_atr.needsUpdate = true;
185
- }
186
- }
187
-
188
- dispose()
189
- {
190
- this.geometry.dispose();
191
- this.material.dispose();
192
- }
193
- }
194
-
195
- export { SDFTextBatch };
1
+ import { SDFText } from './SDFText';
2
+ import { SDFTextMaterial } from '../../materials/SDFTextMaterial';
3
+ import { ArrayUtilities } from '../../utilities/ArrayUtilities';
4
+
5
+ import {
6
+ PlaneGeometry,
7
+ Mesh,
8
+ Vector2,
9
+ InstancedBufferGeometry,
10
+ InstancedBufferAttribute,
11
+ Float32BufferAttribute,
12
+ DynamicDrawUsage
13
+ } from 'three';
14
+
15
+ class SDFTextBatch extends Mesh
16
+ {
17
+ constructor(font_layout, atlas_texture)
18
+ {
19
+ const max_allocations = 2000;
20
+
21
+ const instanced_geometry = new InstancedBufferGeometry();
22
+ instanced_geometry.instanceCount = 0;
23
+
24
+ const geometry = new PlaneGeometry(1, 1);
25
+ geometry.translate(0.5, 0.5, 0);
26
+ instanced_geometry.setAttribute('position', new Float32BufferAttribute(geometry.getAttribute('position').array, 3));
27
+ instanced_geometry.setAttribute('uv', new Float32BufferAttribute(geometry.getAttribute('uv').array, 2));
28
+ instanced_geometry.index = geometry.index;
29
+
30
+ const transformsCol0 = new InstancedBufferAttribute(new Float32Array(max_allocations * 4), 4, false);
31
+ const transformsCol1 = new InstancedBufferAttribute(new Float32Array(max_allocations * 4), 4, false);
32
+ const transformsCol2 = new InstancedBufferAttribute(new Float32Array(max_allocations * 4), 4, false);
33
+ const transformsCol3 = new InstancedBufferAttribute(new Float32Array(max_allocations * 4), 4, false);
34
+
35
+ const glyph_bounds = new InstancedBufferAttribute(new Float32Array(max_allocations * 4), 4, false);
36
+ const plane_bounds = new InstancedBufferAttribute(new Float32Array(max_allocations * 4), 4, false);
37
+
38
+ const color = new InstancedBufferAttribute(new Float32Array(max_allocations * 4), 4, false);
39
+
40
+ transformsCol0.usage = DynamicDrawUsage;
41
+ transformsCol1.usage = DynamicDrawUsage;
42
+ transformsCol2.usage = DynamicDrawUsage;
43
+ transformsCol3.usage = DynamicDrawUsage;
44
+ glyph_bounds.usage = DynamicDrawUsage;
45
+ plane_bounds.usage = DynamicDrawUsage;
46
+ color.usage = DynamicDrawUsage;
47
+
48
+ instanced_geometry.setAttribute('transformsCol0', transformsCol0);
49
+ instanced_geometry.setAttribute('transformsCol1', transformsCol1);
50
+ instanced_geometry.setAttribute('transformsCol2', transformsCol2);
51
+ instanced_geometry.setAttribute('transformsCol3', transformsCol3);
52
+
53
+ instanced_geometry.setAttribute('glyph_bounds', glyph_bounds);
54
+ instanced_geometry.setAttribute('plane_bounds', plane_bounds);
55
+ instanced_geometry.setAttribute('color', color);
56
+
57
+ super(instanced_geometry, new SDFTextMaterial(atlas_texture));
58
+
59
+ this.text_elements = [];
60
+ this.font_layout = font_layout;
61
+
62
+ this.material.set_atlas_size(new Vector2(font_layout.atlas.width, font_layout.atlas.height));
63
+
64
+ this.frustumCulled = false;
65
+ }
66
+
67
+ set_boldness(value)
68
+ {
69
+ this.material.set_boldness(value);
70
+ }
71
+
72
+ add_text(text_str)
73
+ {
74
+ const elem = new SDFText(this.font_layout.glyphs, text_str);
75
+ this.text_elements.push(elem);
76
+ return elem;
77
+ }
78
+
79
+ remove_text(text_elem)
80
+ {
81
+ ArrayUtilities.remove_elem(this.text_elements, text_elem);
82
+ this.update(true);
83
+ }
84
+
85
+ update(force_update)
86
+ {
87
+ const glyph_bounds_atr = this.geometry.getAttribute('glyph_bounds');
88
+ const plane_bounds_atr = this.geometry.getAttribute('plane_bounds');
89
+
90
+ const transformsCol0 = this.geometry.getAttribute('transformsCol0');
91
+ const transformsCol1 = this.geometry.getAttribute('transformsCol1');
92
+ const transformsCol2 = this.geometry.getAttribute('transformsCol2');
93
+ const transformsCol3 = this.geometry.getAttribute('transformsCol3');
94
+
95
+ const color_atr = this.geometry.getAttribute('color');
96
+
97
+ let matrix_needs_update = force_update === true;
98
+ let glyph_needs_update = force_update === true;
99
+ let color_needs_update = force_update === true;
100
+
101
+ let glyph_count = 0;
102
+ for (let i = 0; i < this.text_elements.length; i++)
103
+ {
104
+ const text = this.text_elements[i];
105
+
106
+ if (text.matrix_is_dirty)
107
+ {
108
+ matrix_needs_update = true;
109
+ text.update_matrix();
110
+ }
111
+
112
+ if (text.glyph_is_dirty)
113
+ {
114
+ glyph_needs_update = true;
115
+ text.clear_glyph_dirty();
116
+ }
117
+
118
+ if (text.color_is_dirty)
119
+ {
120
+ color_needs_update = true;
121
+ text.clear_color_dirty();
122
+ }
123
+
124
+ const matrix = text.matrix;
125
+ const color = text.color;
126
+ const opacity = text.opacity;
127
+
128
+ for (let glyph_i = 0; glyph_i < text.glyphs.length; glyph_i++)
129
+ {
130
+ const glyph = text.glyphs[glyph_i];
131
+
132
+ const buffer_i = glyph_count;
133
+
134
+ glyph_bounds_atr.setXYZW(buffer_i, glyph.atlas_bounds.x, glyph.atlas_bounds.y, glyph.atlas_bounds.z, glyph.atlas_bounds.w);
135
+ plane_bounds_atr.setXYZW(buffer_i, glyph.position.x, glyph.position.y, glyph.scale.x, glyph.scale.y);
136
+
137
+ transformsCol0.setXYZW(buffer_i, matrix.elements[0],
138
+ matrix.elements[1],
139
+ matrix.elements[2],
140
+ matrix.elements[3]);
141
+
142
+ transformsCol1.setXYZW(buffer_i, matrix.elements[4],
143
+ matrix.elements[5],
144
+ matrix.elements[6],
145
+ matrix.elements[7]);
146
+
147
+ transformsCol2.setXYZW(buffer_i, matrix.elements[8],
148
+ matrix.elements[9],
149
+ matrix.elements[10],
150
+ matrix.elements[11]);
151
+
152
+ transformsCol3.setXYZW(buffer_i, matrix.elements[12],
153
+ matrix.elements[13],
154
+ matrix.elements[14],
155
+ matrix.elements[15]);
156
+
157
+ color_atr.setXYZW(buffer_i, color.r, color.g, color.b, opacity);
158
+
159
+ glyph_count++;
160
+ }
161
+ }
162
+
163
+ this.geometry.instanceCount = glyph_count;
164
+
165
+ if (glyph_count > this.max_allocations)
166
+ {
167
+ console.error('SDFTextBatch exceeded maximum glyph allocations(max/current): ', this.max_allocations, glyph_count, this);
168
+ }
169
+
170
+ if (matrix_needs_update)
171
+ {
172
+ transformsCol0.needsUpdate = true;
173
+ transformsCol1.needsUpdate = true;
174
+ transformsCol2.needsUpdate = true;
175
+ transformsCol3.needsUpdate = true;
176
+ }
177
+ if (glyph_needs_update)
178
+ {
179
+ glyph_bounds_atr.needsUpdate = true;
180
+ plane_bounds_atr.needsUpdate = true;
181
+ }
182
+ if (color_needs_update)
183
+ {
184
+ color_atr.needsUpdate = true;
185
+ }
186
+ }
187
+
188
+ dispose()
189
+ {
190
+ this.geometry.dispose();
191
+ this.material.dispose();
192
+ }
193
+ }
194
+
195
+ export { SDFTextBatch };
@@ -1,17 +1,17 @@
1
- import { Vector2, Vector4 } from 'three';
2
-
3
- class TextGlyph
4
- {
5
- constructor(offset, plane_bounds, atlas_bounds)
6
- {
7
- const width = plane_bounds.right - plane_bounds.left;
8
- const height = plane_bounds.top - plane_bounds.bottom;
9
-
10
- this.scale = new Vector2(width, height);
11
- this.position = new Vector2(offset + plane_bounds.left, plane_bounds.bottom);
12
-
13
- this.atlas_bounds = new Vector4(atlas_bounds.left, atlas_bounds.right, atlas_bounds.top, atlas_bounds.bottom);
14
- }
15
- }
16
-
17
- export { TextGlyph };
1
+ import { Vector2, Vector4 } from 'three';
2
+
3
+ class TextGlyph
4
+ {
5
+ constructor(offset, plane_bounds, atlas_bounds)
6
+ {
7
+ const width = plane_bounds.right - plane_bounds.left;
8
+ const height = plane_bounds.top - plane_bounds.bottom;
9
+
10
+ this.scale = new Vector2(width, height);
11
+ this.position = new Vector2(offset + plane_bounds.left, plane_bounds.bottom);
12
+
13
+ this.atlas_bounds = new Vector4(atlas_bounds.left, atlas_bounds.right, atlas_bounds.top, atlas_bounds.bottom);
14
+ }
15
+ }
16
+
17
+ export { TextGlyph };
@@ -1,53 +1,53 @@
1
- import { DataTexture } from 'three';
2
-
3
- class CustomDataTexture extends DataTexture
4
- {
5
- constructor(data, width, height, format, type)
6
- {
7
- super(data, width, height, format, type);
8
- this.multiplier = 1;
9
- }
10
-
11
- set_rgba(index, r, g, b, a)
12
- {
13
- this.data[index * 3 + 0] = r * this.multiplier;
14
- this.data[index * 3 + 1] = g * this.multiplier;
15
- this.data[index * 3 + 2] = b * this.multiplier;
16
- this.data[index * 3 + 3] = a * this.multiplier;
17
- this.needsUpdate = true;
18
- }
19
-
20
- set_rgb(index, r, g, b)
21
- {
22
- this.data[index * 3 + 0] = r * this.multiplier;
23
- this.data[index * 3 + 1] = g * this.multiplier;
24
- this.data[index * 3 + 2] = b * this.multiplier;
25
- this.needsUpdate = true;
26
- }
27
-
28
- set_r(index, value)
29
- {
30
- this.data[index * 3 + 0] = value * this.multiplier;
31
- this.needsUpdate = true;
32
- }
33
-
34
- set_g(index, value)
35
- {
36
- this.data[index * 3 + 1] = value * this.multiplier;
37
- this.needsUpdate = true;
38
- }
39
-
40
- set_b(index, value)
41
- {
42
- this.data[index * 3 + 2] = value * this.multiplier;
43
- this.needsUpdate = true;
44
- }
45
-
46
- set_a(index, value)
47
- {
48
- this.data[index * 3 + 2] = value * this.multiplier;
49
- this.needsUpdate = true;
50
- }
51
- }
52
-
53
- export { CustomDataTexture };
1
+ import { DataTexture } from 'three';
2
+
3
+ class CustomDataTexture extends DataTexture
4
+ {
5
+ constructor(data, width, height, format, type)
6
+ {
7
+ super(data, width, height, format, type);
8
+ this.multiplier = 1;
9
+ }
10
+
11
+ set_rgba(index, r, g, b, a)
12
+ {
13
+ this.data[index * 3 + 0] = r * this.multiplier;
14
+ this.data[index * 3 + 1] = g * this.multiplier;
15
+ this.data[index * 3 + 2] = b * this.multiplier;
16
+ this.data[index * 3 + 3] = a * this.multiplier;
17
+ this.needsUpdate = true;
18
+ }
19
+
20
+ set_rgb(index, r, g, b)
21
+ {
22
+ this.data[index * 3 + 0] = r * this.multiplier;
23
+ this.data[index * 3 + 1] = g * this.multiplier;
24
+ this.data[index * 3 + 2] = b * this.multiplier;
25
+ this.needsUpdate = true;
26
+ }
27
+
28
+ set_r(index, value)
29
+ {
30
+ this.data[index * 3 + 0] = value * this.multiplier;
31
+ this.needsUpdate = true;
32
+ }
33
+
34
+ set_g(index, value)
35
+ {
36
+ this.data[index * 3 + 1] = value * this.multiplier;
37
+ this.needsUpdate = true;
38
+ }
39
+
40
+ set_b(index, value)
41
+ {
42
+ this.data[index * 3 + 2] = value * this.multiplier;
43
+ this.needsUpdate = true;
44
+ }
45
+
46
+ set_a(index, value)
47
+ {
48
+ this.data[index * 3 + 2] = value * this.multiplier;
49
+ this.needsUpdate = true;
50
+ }
51
+ }
52
+
53
+ export { CustomDataTexture };
@@ -1,14 +1,14 @@
1
- import { CustomDataTexture } from './CustomDataTexture';
2
- import { RGBAFormat } from 'three';
3
-
4
- class RGBADataTexture extends CustomDataTexture
5
- {
6
- constructor(width, height)
7
- {
8
- const data = new Uint8Array(width * height * 4);
9
- super(data, width, height, RGBAFormat);
10
- this.multiplier = 255;
11
- }
12
- }
13
-
14
- export { RGBADataTexture };
1
+ import { CustomDataTexture } from './CustomDataTexture';
2
+ import { RGBAFormat } from 'three';
3
+
4
+ class RGBADataTexture extends CustomDataTexture
5
+ {
6
+ constructor(width, height)
7
+ {
8
+ const data = new Uint8Array(width * height * 4);
9
+ super(data, width, height, RGBAFormat);
10
+ this.multiplier = 255;
11
+ }
12
+ }
13
+
14
+ export { RGBADataTexture };
@@ -1,14 +1,14 @@
1
- import { CustomDataTexture } from './CustomDataTexture';
2
- import { FloatType } from 'three';
3
- import { RGBAFormat } from 'three';
4
-
5
- class RGBAFloatDataTexture extends CustomDataTexture
6
- {
7
- constructor(width, height)
8
- {
9
- const data = new Float32Array(width * height * 4);
10
- super(data, width, height, RGBAFormat, FloatType);
11
- }
12
- }
13
-
14
- export { RGBAFloatDataTexture };
1
+ import { CustomDataTexture } from './CustomDataTexture';
2
+ import { FloatType } from 'three';
3
+ import { RGBAFormat } from 'three';
4
+
5
+ class RGBAFloatDataTexture extends CustomDataTexture
6
+ {
7
+ constructor(width, height)
8
+ {
9
+ const data = new Float32Array(width * height * 4);
10
+ super(data, width, height, RGBAFormat, FloatType);
11
+ }
12
+ }
13
+
14
+ export { RGBAFloatDataTexture };
@@ -1,14 +1,14 @@
1
- import { RGBAFormat } from 'three';
2
- import { CustomDataTexture } from './CustomDataTexture';
3
-
4
- class RGBDataTexture extends CustomDataTexture
5
- {
6
- constructor(width, height)
7
- {
8
- const data = new Uint8Array(width * height * 3);
9
- super(data, width, height, RGBAFormat);
10
- this.multiplier = 255;
11
- }
12
- }
13
-
14
- export { RGBDataTexture };
1
+ import { RGBAFormat } from 'three';
2
+ import { CustomDataTexture } from './CustomDataTexture';
3
+
4
+ class RGBDataTexture extends CustomDataTexture
5
+ {
6
+ constructor(width, height)
7
+ {
8
+ const data = new Uint8Array(width * height * 3);
9
+ super(data, width, height, RGBAFormat);
10
+ this.multiplier = 255;
11
+ }
12
+ }
13
+
14
+ export { RGBDataTexture };
@@ -1,13 +1,13 @@
1
- import { FloatType, RGBAFormat } from 'three';
2
- import { CustomDataTexture } from './CustomDataTexture';
3
-
4
- class RGBFloatDataTexture extends CustomDataTexture
5
- {
6
- constructor(width, height)
7
- {
8
- const data = new Float32Array(width * height * 3);
9
- super(data, width, height, RGBAFormat, FloatType);
10
- }
11
- }
12
-
13
- export { RGBFloatDataTexture };
1
+ import { FloatType, RGBAFormat } from 'three';
2
+ import { CustomDataTexture } from './CustomDataTexture';
3
+
4
+ class RGBFloatDataTexture extends CustomDataTexture
5
+ {
6
+ constructor(width, height)
7
+ {
8
+ const data = new Float32Array(width * height * 3);
9
+ super(data, width, height, RGBAFormat, FloatType);
10
+ }
11
+ }
12
+
13
+ export { RGBFloatDataTexture };