@tolokoban/tgd 2.0.100 → 2.0.103

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 (184) hide show
  1. package/lib/dist/canvas/gizmo/painter/tips.d.ts +1 -1
  2. package/lib/dist/canvas/gizmo/painter/tips.d.ts.map +1 -1
  3. package/lib/dist/canvas/gizmo/painter/tips.js +1 -1
  4. package/lib/dist/color/color.d.ts +4 -0
  5. package/lib/dist/color/color.d.ts.map +1 -1
  6. package/lib/dist/color/color.js +21 -1
  7. package/lib/dist/context/context.d.ts +3 -0
  8. package/lib/dist/context/context.d.ts.map +1 -1
  9. package/lib/dist/context/context.js +10 -7
  10. package/lib/dist/context/logic.d.ts +2 -2
  11. package/lib/dist/context/logic.js +2 -2
  12. package/lib/dist/context/ubo-manager.d.ts +10 -0
  13. package/lib/dist/context/ubo-manager.d.ts.map +1 -0
  14. package/lib/dist/context/ubo-manager.js +23 -0
  15. package/lib/dist/dataset/dataset.d.ts +8 -3
  16. package/lib/dist/dataset/dataset.d.ts.map +1 -1
  17. package/lib/dist/dataset/dataset.js +35 -12
  18. package/lib/dist/filter/blur.d.ts +1 -0
  19. package/lib/dist/filter/blur.d.ts.map +1 -1
  20. package/lib/dist/filter/blur.js +3 -1
  21. package/lib/dist/filter/filter.d.ts +4 -1
  22. package/lib/dist/filter/filter.d.ts.map +1 -1
  23. package/lib/dist/filter/filter.js +4 -1
  24. package/lib/dist/filter/hue-rotation.d.ts +2 -1
  25. package/lib/dist/filter/hue-rotation.d.ts.map +1 -1
  26. package/lib/dist/filter/hue-rotation.js +3 -2
  27. package/lib/dist/index.d.ts +2 -0
  28. package/lib/dist/index.d.ts.map +1 -1
  29. package/lib/dist/index.js +3 -1
  30. package/lib/dist/interface/transformable.d.ts +1 -1
  31. package/lib/dist/loader/image.d.ts +3 -3
  32. package/lib/dist/loader/image.d.ts.map +1 -1
  33. package/lib/dist/loader/image.js +10 -22
  34. package/lib/dist/material/glass.js +3 -3
  35. package/lib/dist/material/material.d.ts +3 -7
  36. package/lib/dist/material/material.d.ts.map +1 -1
  37. package/lib/dist/material/material.js +1 -1
  38. package/lib/dist/painter/background-with-depth/background-with-depth.d.ts +2 -2
  39. package/lib/dist/painter/background-with-depth/background-with-depth.d.ts.map +1 -1
  40. package/lib/dist/painter/background-with-depth/background-with-depth.js +3 -3
  41. package/lib/dist/painter/debug/point/point.d.ts +1 -1
  42. package/lib/dist/painter/debug/point/point.d.ts.map +1 -1
  43. package/lib/dist/painter/debug/point/point.js +1 -1
  44. package/lib/dist/painter/debug/stencil/stencil.d.ts +1 -1
  45. package/lib/dist/painter/debug/stencil/stencil.d.ts.map +1 -1
  46. package/lib/dist/painter/debug/stencil/stencil.js +1 -1
  47. package/lib/dist/painter/filter/filter.d.ts +8 -10
  48. package/lib/dist/painter/filter/filter.d.ts.map +1 -1
  49. package/lib/dist/painter/filter/filter.js +41 -47
  50. package/lib/dist/painter/fragment-shader/fragment-shader.d.ts +3 -3
  51. package/lib/dist/painter/fragment-shader/fragment-shader.d.ts.map +1 -1
  52. package/lib/dist/painter/fragment-shader/fragment-shader.js +3 -3
  53. package/lib/dist/painter/framebuffer-msaa.d.ts +24 -13
  54. package/lib/dist/painter/framebuffer-msaa.d.ts.map +1 -1
  55. package/lib/dist/painter/framebuffer-msaa.js +60 -9
  56. package/lib/dist/painter/framebuffer.d.ts +20 -19
  57. package/lib/dist/painter/framebuffer.d.ts.map +1 -1
  58. package/lib/dist/painter/framebuffer.js +76 -19
  59. package/lib/dist/painter/gizmo/gizmo.d.ts +31 -0
  60. package/lib/dist/painter/gizmo/gizmo.d.ts.map +1 -0
  61. package/lib/dist/painter/gizmo/gizmo.js +186 -0
  62. package/lib/dist/painter/gizmo/index.d.ts +2 -0
  63. package/lib/dist/painter/gizmo/index.d.ts.map +1 -0
  64. package/lib/dist/painter/gizmo/index.js +2 -0
  65. package/lib/dist/painter/gizmo/painters/axes.1.d.ts +14 -0
  66. package/lib/dist/painter/gizmo/painters/axes.1.d.ts.map +1 -0
  67. package/lib/dist/painter/gizmo/painters/axes.1.js +50 -0
  68. package/lib/dist/painter/gizmo/painters/axes.d.ts +16 -0
  69. package/lib/dist/painter/gizmo/painters/axes.d.ts.map +1 -0
  70. package/lib/dist/painter/gizmo/painters/axes.js +81 -0
  71. package/lib/dist/painter/gizmo/painters/consts.d.ts +4 -0
  72. package/lib/dist/painter/gizmo/painters/consts.d.ts.map +1 -0
  73. package/lib/dist/painter/gizmo/painters/consts.js +4 -0
  74. package/lib/dist/painter/gizmo/painters/mask.d.ts +14 -0
  75. package/lib/dist/painter/gizmo/painters/mask.d.ts.map +1 -0
  76. package/lib/dist/painter/gizmo/painters/mask.js +90 -0
  77. package/lib/dist/painter/gizmo/painters/normal.1.d.ts +21 -0
  78. package/lib/dist/painter/gizmo/painters/normal.1.d.ts.map +1 -0
  79. package/lib/dist/painter/gizmo/painters/normal.1.js +111 -0
  80. package/lib/dist/painter/gizmo/painters/normal.d.ts +17 -0
  81. package/lib/dist/painter/gizmo/painters/normal.d.ts.map +1 -0
  82. package/lib/dist/painter/gizmo/painters/normal.js +87 -0
  83. package/lib/dist/painter/gizmo/painters/tips.d.ts +18 -0
  84. package/lib/dist/painter/gizmo/painters/tips.d.ts.map +1 -0
  85. package/lib/dist/painter/gizmo/painters/tips.js +44 -0
  86. package/lib/dist/painter/gizmo/tips.d.ts +22 -0
  87. package/lib/dist/painter/gizmo/tips.d.ts.map +1 -0
  88. package/lib/dist/painter/gizmo/tips.js +51 -0
  89. package/lib/dist/painter/group-camera.d.ts +5 -3
  90. package/lib/dist/painter/group-camera.d.ts.map +1 -1
  91. package/lib/dist/painter/group-camera.js +7 -3
  92. package/lib/dist/painter/group.d.ts +6 -6
  93. package/lib/dist/painter/group.d.ts.map +1 -1
  94. package/lib/dist/painter/group.js +19 -13
  95. package/lib/dist/painter/index.d.ts +3 -0
  96. package/lib/dist/painter/index.d.ts.map +1 -1
  97. package/lib/dist/painter/index.js +4 -1
  98. package/lib/dist/painter/lod/lod.d.ts +1 -1
  99. package/lib/dist/painter/lod/lod.js +2 -2
  100. package/lib/dist/painter/logic.d.ts +2 -2
  101. package/lib/dist/painter/logic.js +2 -2
  102. package/lib/dist/painter/mesh/gltf/gltf.d.ts +2 -8
  103. package/lib/dist/painter/mesh/gltf/gltf.d.ts.map +1 -1
  104. package/lib/dist/painter/mesh/gltf/gltf.js +1 -1
  105. package/lib/dist/painter/mesh/mesh/mesh.d.ts +7 -16
  106. package/lib/dist/painter/mesh/mesh/mesh.d.ts.map +1 -1
  107. package/lib/dist/painter/mesh/mesh/mesh.js +21 -9
  108. package/lib/dist/painter/mesh/normals/normals.d.ts +1 -1
  109. package/lib/dist/painter/mesh/normals/normals.d.ts.map +1 -1
  110. package/lib/dist/painter/mesh/normals/normals.js +1 -1
  111. package/lib/dist/painter/node/node.d.ts +3 -3
  112. package/lib/dist/painter/node/node.js +4 -4
  113. package/lib/dist/painter/overlay/index.d.ts +2 -0
  114. package/lib/dist/painter/overlay/index.d.ts.map +1 -0
  115. package/lib/dist/painter/overlay/index.js +2 -0
  116. package/lib/dist/painter/overlay/overlay.d.ts +77 -0
  117. package/lib/dist/painter/overlay/overlay.d.ts.map +1 -0
  118. package/lib/dist/painter/overlay/overlay.js +196 -0
  119. package/lib/dist/painter/painter.d.ts +1 -1
  120. package/lib/dist/painter/program.d.ts +70 -0
  121. package/lib/dist/painter/program.d.ts.map +1 -0
  122. package/lib/dist/painter/program.js +250 -0
  123. package/lib/dist/painter/scissor.d.ts +1 -1
  124. package/lib/dist/painter/scissor.js +2 -2
  125. package/lib/dist/painter/segments/segments-morphing.d.ts +4 -13
  126. package/lib/dist/painter/segments/segments-morphing.d.ts.map +1 -1
  127. package/lib/dist/painter/segments/segments-morphing.js +3 -3
  128. package/lib/dist/painter/segments/segments.d.ts +4 -13
  129. package/lib/dist/painter/segments/segments.d.ts.map +1 -1
  130. package/lib/dist/painter/segments/segments.js +3 -3
  131. package/lib/dist/painter/skybox/skybox.d.ts +1 -1
  132. package/lib/dist/painter/skybox/skybox.d.ts.map +1 -1
  133. package/lib/dist/painter/skybox/skybox.js +1 -1
  134. package/lib/dist/painter/sprites/sprites.d.ts +5 -0
  135. package/lib/dist/painter/sprites/sprites.d.ts.map +1 -1
  136. package/lib/dist/painter/sprites/sprites.js +20 -9
  137. package/lib/dist/painter/state/state.js +4 -4
  138. package/lib/dist/painter/tubes/tubes.d.ts +4 -13
  139. package/lib/dist/painter/tubes/tubes.d.ts.map +1 -1
  140. package/lib/dist/painter/tubes/tubes.js +2 -2
  141. package/lib/dist/painter/x-ray/x-ray.d.ts +4 -12
  142. package/lib/dist/painter/x-ray/x-ray.d.ts.map +1 -1
  143. package/lib/dist/painter/x-ray/x-ray.js +3 -3
  144. package/lib/dist/parser/gltf/gltf.d.ts +2 -5
  145. package/lib/dist/parser/gltf/gltf.d.ts.map +1 -1
  146. package/lib/dist/parser/gltf/gltf.js +1 -1
  147. package/lib/dist/program/program.d.ts +2 -0
  148. package/lib/dist/program/program.d.ts.map +1 -1
  149. package/lib/dist/program/program.js +43 -8
  150. package/lib/dist/shader/fragment.d.ts.map +1 -1
  151. package/lib/dist/shader/fragment.js +3 -3
  152. package/lib/dist/shader/vertex.d.ts +3 -1
  153. package/lib/dist/shader/vertex.d.ts.map +1 -1
  154. package/lib/dist/shader/vertex.js +8 -6
  155. package/lib/dist/texture/texture-depth.d.ts +3 -11
  156. package/lib/dist/texture/texture-depth.d.ts.map +1 -1
  157. package/lib/dist/texture/texture-depth.js +1 -1
  158. package/lib/dist/texture/texture2d.d.ts +5 -11
  159. package/lib/dist/texture/texture2d.d.ts.map +1 -1
  160. package/lib/dist/texture/texture2d.js +3 -3
  161. package/lib/dist/time/interval/interval.d.ts +3 -3
  162. package/lib/dist/time/interval/interval.js +6 -6
  163. package/lib/dist/types/painter.d.ts +1 -1
  164. package/lib/dist/types/program.d.ts +3 -2
  165. package/lib/dist/types/program.d.ts.map +1 -1
  166. package/lib/dist/uniform/index.d.ts +3 -0
  167. package/lib/dist/uniform/index.d.ts.map +1 -0
  168. package/lib/dist/uniform/index.js +3 -0
  169. package/lib/dist/uniform/ubo-camera.d.ts +9 -0
  170. package/lib/dist/uniform/ubo-camera.d.ts.map +1 -0
  171. package/lib/dist/uniform/ubo-camera.js +20 -0
  172. package/lib/dist/uniform/uniform-buffer-object.d.ts +56 -0
  173. package/lib/dist/uniform/uniform-buffer-object.d.ts.map +1 -0
  174. package/lib/dist/uniform/uniform-buffer-object.js +347 -0
  175. package/lib/dist/utils/array.d.ts +2 -0
  176. package/lib/dist/utils/array.d.ts.map +1 -0
  177. package/lib/dist/utils/array.js +6 -0
  178. package/lib/dist/utils/index.d.ts +1 -0
  179. package/lib/dist/utils/index.d.ts.map +1 -1
  180. package/lib/dist/utils/index.js +2 -1
  181. package/lib/dist/version.d.ts +2 -0
  182. package/lib/dist/version.d.ts.map +1 -0
  183. package/lib/dist/version.js +2 -0
  184. package/package.json +4 -4
@@ -0,0 +1,347 @@
1
+ import { TgdVec2, TgdVec3, TgdVec4 } from "./../math/index.js";
2
+ import { TgdProgram } from "./../program/index.js";
3
+ import { tgdCodeStringify } from "./../shader/index.js";
4
+ import { TgdConsole } from "./../debug/index.js";
5
+ export class TgdUniformBufferObject {
6
+ constructor(context, { uniforms, values }) {
7
+ this.context = context;
8
+ this.values = {};
9
+ this.dirty = true;
10
+ this.bindingPoint = context.uniformBufferObjects.add(this);
11
+ this.uniforms = uniforms;
12
+ // Offset in floats (not bytes).
13
+ let offsetInFloats = 0;
14
+ for (const name of Object.keys(uniforms)) {
15
+ const type = uniforms[name];
16
+ const { modulo, length } = LAYOUTS[type];
17
+ // Word alignment.
18
+ while (offsetInFloats % modulo !== 0)
19
+ offsetInFloats++;
20
+ this.makeAccessor(name, type, offsetInFloats);
21
+ offsetInFloats += length;
22
+ }
23
+ const bytesLength = Float32Array.BYTES_PER_ELEMENT * 4 * Math.ceil(offsetInFloats / 4);
24
+ this.data = new ArrayBuffer(bytesLength);
25
+ this.view = new DataView(this.data);
26
+ if (values) {
27
+ const keys = Object.keys(values);
28
+ for (const key of keys) {
29
+ const val = values[key];
30
+ if (val === undefined)
31
+ continue;
32
+ this.values[key] = val;
33
+ }
34
+ }
35
+ const { gl } = context;
36
+ this.buffer = gl.createBuffer();
37
+ gl.bindBufferBase(gl.UNIFORM_BUFFER, this.bindingPoint, this.buffer);
38
+ gl.bufferData(gl.UNIFORM_BUFFER, this.data.byteLength, gl.DYNAMIC_DRAW);
39
+ context.checkError("TgdUniformBufferObject");
40
+ }
41
+ get names() {
42
+ return Object.keys(this.uniforms);
43
+ }
44
+ delete() {
45
+ const { context } = this;
46
+ context.uniformBufferObjects.remove(this);
47
+ const { gl } = context;
48
+ gl.deleteBuffer(this.buffer);
49
+ }
50
+ bindToProgram(program, blockName) {
51
+ const { gl } = this.context;
52
+ const glPrg = program instanceof TgdProgram ? program.program : program;
53
+ gl.uniformBlockBinding(glPrg, gl.getUniformBlockIndex(glPrg, blockName), this.bindingPoint);
54
+ }
55
+ updateData() {
56
+ if (!this.dirty)
57
+ return;
58
+ const { data } = this;
59
+ const { gl } = this.context;
60
+ gl.bindBuffer(gl.UNIFORM_BUFFER, this.buffer);
61
+ gl.bufferSubData(gl.UNIFORM_BUFFER, 0, data);
62
+ this.dirty = false;
63
+ }
64
+ toShaderCode(blockName, instanceName) {
65
+ const { uniforms } = this;
66
+ return [
67
+ `/* Binding point: ${this.bindingPoint} */`,
68
+ `layout(std140) uniform ${blockName} {`,
69
+ Object.keys(uniforms).map((key) => `${uniforms[key]} ${key};`),
70
+ instanceName ? `} ${instanceName};` : "};",
71
+ ];
72
+ }
73
+ debug(caption) {
74
+ const out = new TgdConsole({ text: caption !== null && caption !== void 0 ? caption : "TgdUniformBufferObject", bold: true });
75
+ out.add(tgdCodeStringify(this.toShaderCode("myUniformBlock")));
76
+ const array = new Float32Array(this.data);
77
+ for (let i = 0; i < array.length; i++) {
78
+ if (i % 4 === 0)
79
+ out.nl();
80
+ out.add(`${array[i]}`.slice(0, 8).padStart(10, " "));
81
+ }
82
+ out.nl();
83
+ out.debug();
84
+ }
85
+ makeAccessor(name, type, offsetInFloats) {
86
+ const { values } = this;
87
+ const byteOffset = offsetInFloats * 4;
88
+ switch (type) {
89
+ case "bool":
90
+ Object.defineProperty(values, name, {
91
+ set: (value) => {
92
+ this.view.setUint8(byteOffset, value ? 1 : 0);
93
+ this.dirty = true;
94
+ },
95
+ get: () => this.view.getUint8(byteOffset) !== 0,
96
+ });
97
+ break;
98
+ case "int":
99
+ Object.defineProperty(values, name, {
100
+ set: (value) => {
101
+ this.view.setInt32(byteOffset, value, true);
102
+ this.dirty = true;
103
+ },
104
+ get: () => this.view.getInt32(byteOffset, true),
105
+ });
106
+ break;
107
+ case "uint":
108
+ Object.defineProperty(values, name, {
109
+ set: (value) => {
110
+ this.view.setUint32(byteOffset, value, true);
111
+ this.dirty = true;
112
+ },
113
+ get: () => this.view.getUint32(byteOffset, true),
114
+ });
115
+ break;
116
+ case "float":
117
+ Object.defineProperty(values, name, {
118
+ set: (value) => {
119
+ this.view.setFloat32(byteOffset, value, true);
120
+ this.dirty = true;
121
+ },
122
+ get: () => this.view.getFloat32(byteOffset, true),
123
+ });
124
+ break;
125
+ case "double":
126
+ Object.defineProperty(values, name, {
127
+ set: (value) => {
128
+ this.view.setFloat64(byteOffset, value, true);
129
+ this.dirty = true;
130
+ },
131
+ get: () => this.view.getFloat64(byteOffset, true),
132
+ });
133
+ break;
134
+ case "vec2":
135
+ Object.defineProperty(values, name, {
136
+ set: ([x, y]) => {
137
+ this.view.setFloat32(byteOffset, x, true);
138
+ this.view.setFloat32(byteOffset + 4, y, true);
139
+ this.dirty = true;
140
+ },
141
+ get: () => new TgdVec2(this.view.getFloat32(byteOffset, true), this.view.getFloat32(byteOffset + 4, true)),
142
+ });
143
+ break;
144
+ case "vec3":
145
+ Object.defineProperty(values, name, {
146
+ set: ([x, y, z]) => {
147
+ this.view.setFloat32(byteOffset, x, true);
148
+ this.view.setFloat32(byteOffset + 4, y, true);
149
+ this.view.setFloat32(byteOffset + 8, z, true);
150
+ this.dirty = true;
151
+ },
152
+ get: () => new TgdVec3(this.view.getFloat32(byteOffset, true), this.view.getFloat32(byteOffset + 4, true), this.view.getFloat32(byteOffset + 8, true)),
153
+ });
154
+ break;
155
+ case "vec4":
156
+ Object.defineProperty(values, name, {
157
+ set: ([x, y, z, w]) => {
158
+ this.view.setFloat32(byteOffset, x, true);
159
+ this.view.setFloat32(byteOffset + 4, y, true);
160
+ this.view.setFloat32(byteOffset + 8, z, true);
161
+ this.view.setFloat32(byteOffset + 12, z, true);
162
+ this.dirty = true;
163
+ },
164
+ get: () => new TgdVec4(this.view.getFloat32(byteOffset, true), this.view.getFloat32(byteOffset + 4, true), this.view.getFloat32(byteOffset + 8, true), this.view.getFloat32(byteOffset + 12, true)),
165
+ });
166
+ break;
167
+ case "dvec2":
168
+ Object.defineProperty(values, name, {
169
+ set: ([x, y]) => {
170
+ this.view.setFloat64(byteOffset, x, true);
171
+ this.view.setFloat64(byteOffset + 4, y, true);
172
+ this.dirty = true;
173
+ },
174
+ get: () => new TgdVec2(this.view.getFloat64(byteOffset, true), this.view.getFloat64(byteOffset + 4, true)),
175
+ });
176
+ break;
177
+ case "dvec3":
178
+ Object.defineProperty(values, name, {
179
+ set: ([x, y, z]) => {
180
+ this.view.setFloat64(byteOffset, x, true);
181
+ this.view.setFloat64(byteOffset + 4, y, true);
182
+ this.view.setFloat64(byteOffset + 8, z, true);
183
+ this.dirty = true;
184
+ },
185
+ get: () => new TgdVec3(this.view.getFloat64(byteOffset, true), this.view.getFloat64(byteOffset + 4, true), this.view.getFloat64(byteOffset + 8, true)),
186
+ });
187
+ break;
188
+ case "dvec4":
189
+ Object.defineProperty(values, name, {
190
+ set: ([x, y, z, w]) => {
191
+ this.view.setFloat64(byteOffset, x, true);
192
+ this.view.setFloat64(byteOffset + 4, y, true);
193
+ this.view.setFloat64(byteOffset + 8, z, true);
194
+ this.view.setFloat64(byteOffset + 12, w, true);
195
+ this.dirty = true;
196
+ },
197
+ get: () => new TgdVec4(this.view.getFloat64(byteOffset, true), this.view.getFloat64(byteOffset + 4, true), this.view.getFloat64(byteOffset + 8, true), this.view.getFloat64(byteOffset + 12, true)),
198
+ });
199
+ break;
200
+ case "ivec2":
201
+ Object.defineProperty(values, name, {
202
+ set: ([x, y]) => {
203
+ this.view.setInt32(byteOffset, x, true);
204
+ this.view.setInt32(byteOffset + 4, y, true);
205
+ this.dirty = true;
206
+ },
207
+ get: () => new TgdVec2(this.view.getInt32(byteOffset, true), this.view.getInt32(byteOffset + 4, true)),
208
+ });
209
+ break;
210
+ case "ivec3":
211
+ Object.defineProperty(values, name, {
212
+ set: ([x, y, z]) => {
213
+ this.view.setInt32(byteOffset, x, true);
214
+ this.view.setInt32(byteOffset + 4, y, true);
215
+ this.view.setInt32(byteOffset + 8, z, true);
216
+ this.dirty = true;
217
+ },
218
+ get: () => new TgdVec3(this.view.getInt32(byteOffset, true), this.view.getInt32(byteOffset + 4, true), this.view.getInt32(byteOffset + 8, true)),
219
+ });
220
+ break;
221
+ case "ivec4":
222
+ Object.defineProperty(values, name, {
223
+ set: ([x, y, z, w]) => {
224
+ this.view.setInt32(byteOffset, x, true);
225
+ this.view.setInt32(byteOffset + 4, y, true);
226
+ this.view.setInt32(byteOffset + 8, z, true);
227
+ this.view.setInt32(byteOffset + 12, z, true);
228
+ this.dirty = true;
229
+ },
230
+ get: () => new TgdVec4(this.view.getInt32(byteOffset, true), this.view.getInt32(byteOffset + 4, true), this.view.getInt32(byteOffset + 8, true), this.view.getInt32(byteOffset + 12, true)),
231
+ });
232
+ break;
233
+ case "uvec2":
234
+ Object.defineProperty(values, name, {
235
+ set: ([x, y]) => {
236
+ this.view.setUint32(byteOffset, x, true);
237
+ this.view.setUint32(byteOffset + 4, y, true);
238
+ this.dirty = true;
239
+ },
240
+ get: () => new TgdVec2(this.view.getUint32(byteOffset, true), this.view.getUint32(byteOffset + 4, true)),
241
+ });
242
+ break;
243
+ case "uvec3":
244
+ Object.defineProperty(values, name, {
245
+ set: ([x, y, z]) => {
246
+ this.view.setUint32(byteOffset, x, true);
247
+ this.view.setUint32(byteOffset + 4, y, true);
248
+ this.view.setUint32(byteOffset + 8, z, true);
249
+ this.dirty = true;
250
+ },
251
+ get: () => new TgdVec3(this.view.getUint32(byteOffset, true), this.view.getUint32(byteOffset + 4, true), this.view.getUint32(byteOffset + 8, true)),
252
+ });
253
+ break;
254
+ case "uvec4":
255
+ Object.defineProperty(values, name, {
256
+ set: ([x, y, z, w]) => {
257
+ this.view.setUint32(byteOffset, x, true);
258
+ this.view.setUint32(byteOffset + 4, y, true);
259
+ this.view.setUint32(byteOffset + 8, z, true);
260
+ this.view.setUint32(byteOffset + 12, w, true);
261
+ this.dirty = true;
262
+ },
263
+ get: () => new TgdVec4(this.view.getUint32(byteOffset, true), this.view.getUint32(byteOffset + 4, true), this.view.getUint32(byteOffset + 8, true), this.view.getUint32(byteOffset + 12, true)),
264
+ });
265
+ break;
266
+ case "mat2":
267
+ Object.defineProperty(values, name, {
268
+ set: (mat2) => {
269
+ let src = 0;
270
+ let dst = byteOffset;
271
+ for (let row = 0; row < 2; row++) {
272
+ for (let col = 0; col < 2; col++) {
273
+ this.view.setFloat32(dst, mat2[src++], true);
274
+ dst += 4;
275
+ }
276
+ dst += 8;
277
+ }
278
+ this.dirty = true;
279
+ },
280
+ });
281
+ break;
282
+ case "mat3":
283
+ Object.defineProperty(values, name, {
284
+ set: (mat3) => {
285
+ let src = 0;
286
+ let dst = byteOffset;
287
+ for (let row = 0; row < 3; row++) {
288
+ for (let col = 0; col < 3; col++) {
289
+ this.view.setFloat32(dst, mat3[src++], true);
290
+ dst += 4;
291
+ }
292
+ dst += 4;
293
+ }
294
+ this.dirty = true;
295
+ },
296
+ });
297
+ break;
298
+ case "mat4":
299
+ Object.defineProperty(values, name, {
300
+ set: (mat4) => {
301
+ let src = 0;
302
+ let dst = byteOffset;
303
+ for (let row = 0; row < 4; row++) {
304
+ for (let col = 0; col < 4; col++) {
305
+ this.view.setFloat32(dst, mat4[src++], true);
306
+ dst += 4;
307
+ }
308
+ }
309
+ this.dirty = true;
310
+ },
311
+ });
312
+ break;
313
+ default:
314
+ throw new Error(`[TgdUniformBufferObject] Type "${type}" has been implemented yet!`);
315
+ }
316
+ }
317
+ }
318
+ /**
319
+ * Modulo is used for the padding necessary with Layout std140.
320
+ * The length is in floats.
321
+ */
322
+ const LAYOUTS = {
323
+ bool: { modulo: 1, length: 1, rows: 1 },
324
+ int: { modulo: 1, length: 1, rows: 1 },
325
+ uint: { modulo: 1, length: 1, rows: 1 },
326
+ float: { modulo: 1, length: 1, rows: 1 },
327
+ double: { modulo: 2, length: 2, rows: 1 },
328
+ vec2: { modulo: 2, length: 2, rows: 1 },
329
+ bvec2: { modulo: 2, length: 2, rows: 1 },
330
+ ivec2: { modulo: 2, length: 2, rows: 1 },
331
+ uvec2: { modulo: 2, length: 2, rows: 1 },
332
+ dvec2: { modulo: 2, length: 2, rows: 1 },
333
+ vec3: { modulo: 4, length: 3, rows: 1 },
334
+ bvec3: { modulo: 4, length: 3, rows: 1 },
335
+ ivec3: { modulo: 4, length: 3, rows: 1 },
336
+ uvec3: { modulo: 4, length: 3, rows: 1 },
337
+ dvec3: { modulo: 4, length: 3, rows: 1 },
338
+ vec4: { modulo: 4, length: 4, rows: 1 },
339
+ bvec4: { modulo: 4, length: 4, rows: 1 },
340
+ ivec4: { modulo: 4, length: 4, rows: 1 },
341
+ uvec4: { modulo: 4, length: 4, rows: 1 },
342
+ dvec4: { modulo: 4, length: 4, rows: 1 },
343
+ mat2: { modulo: 4, length: 8, rows: 2 },
344
+ mat3: { modulo: 4, length: 12, rows: 3 },
345
+ mat4: { modulo: 4, length: 16, rows: 4 },
346
+ };
347
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidW5pZm9ybS1idWZmZXItb2JqZWN0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3VuaWZvcm0vdW5pZm9ybS1idWZmZXItb2JqZWN0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBNEMsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxXQUFXLENBQUE7QUFDL0YsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGNBQWMsQ0FBQTtBQUN6QyxPQUFPLEVBQUUsZ0JBQWdCLEVBQW9CLE1BQU0sYUFBYSxDQUFBO0FBRWhFLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxZQUFZLENBQUE7QUFvQ3ZDLE1BQU0sT0FBTyxzQkFBc0I7SUFjL0IsWUFDb0IsT0FBbUIsRUFDbkMsRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFvQztRQUR0QyxZQUFPLEdBQVAsT0FBTyxDQUFZO1FBWHZCLFdBQU0sR0FBRyxFQUV4QixDQUFBO1FBTU8sVUFBSyxHQUFHLElBQUksQ0FBQTtRQU1oQixJQUFJLENBQUMsWUFBWSxHQUFHLE9BQU8sQ0FBQyxvQkFBb0IsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUE7UUFDMUQsSUFBSSxDQUFDLFFBQVEsR0FBRyxRQUFRLENBQUE7UUFDeEIsZ0NBQWdDO1FBQ2hDLElBQUksY0FBYyxHQUFHLENBQUMsQ0FBQTtRQUN0QixLQUFLLE1BQU0sSUFBSSxJQUFJLE1BQU0sQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQztZQUN2QyxNQUFNLElBQUksR0FBRyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUE7WUFDM0IsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsR0FBRyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUE7WUFDeEMsa0JBQWtCO1lBQ2xCLE9BQU8sY0FBYyxHQUFHLE1BQU0sS0FBSyxDQUFDO2dCQUFFLGNBQWMsRUFBRSxDQUFBO1lBQ3RELElBQUksQ0FBQyxZ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SSxLQUFLLENBQUMsa0NBQWtDLElBQUksNkJBQTZCLENBQUMsQ0FBQTtRQUM1RixDQUFDO0lBQ0wsQ0FBQztDQUNKO0FBNEJEOzs7R0FHRztBQUNILE1BQU0sT0FBTyxHQUFzRjtJQUMvRixJQUFJLEVBQUUsRUFBRSxNQUFNLEVBQUUsQ0FBQyxFQUFFLE1BQU0sRUFBRSxDQUFDLEVBQUUsSUFBSSxFQUFFLENBQUMsRUFBRTtJQUN2QyxHQUFHLEVBQUUsRUFBRSxNQUFNLEVBQUUsQ0FBQyxFQUFFLE1BQU0sRUFBRSxDQUFDLEVBQUUsSUFBSSxFQUFFLENBQUMsRUFBRTtJQUN0QyxJQUFJLEVBQUUsRUFBRSxNQUFNLEVBQUUsQ0FBQyxFQUFFLE1BQU0sRUFBRSxDQUFDLEVBQUUsSUFBSSxFQUFFLENBQUMsRUFBRTtJQUN2QyxLQUFLLEVBQUUsRUFBRSxNQUFNLEVBQUUsQ0FBQyxFQUFFLE1BQU0sRUFBRSxDQUFDLEVBQUUsSUFBSSxFQUFFLENBQUMsRUFBRTtJQUN4QyxNQUFNLEVBQUUsRUFBRSxNQUFNLEVBQUUsQ0FBQyxFQUFFLE1BQU0sRUFBRSxDQUFDLEVBQUUsSUFBSSxFQUFFLENBQUMsRUFBRTtJQUN6QyxJQUFJLEVBQUUsRUFBRSxNQUFNLEVBQUUsQ0FBQyxFQUFFLE1BQU0sRUFBRSxDQUFDLEVBQUUsSUFBSSxFQUFFLENBQUMsRUFBRTtJQUN2QyxLQUFLLEVBQUUsRUFBRSxNQUFNLEVBQUUsQ0FBQyxFQUFFLE1BQU0sRUFBRSxDQUFDLEVBQUUsSUFBSSxFQUFFLENBQUMsRUFBRTtJQUN4QyxLQUFLLEVBQUUsRUFBRSxNQUFNLEVBQUUsQ0FBQyxFQUFFLE1BQU0sRUFBRSxDQUFDLEVBQUUsSUFBSSxFQUFFLENBQUMsRUFBRTtJQUN4QyxLQUFLLEVBQUUsRUFBRSxNQUFNLEVBQUUsQ0FBQyxFQUFFLE1BQU0sRUFBRSxDQUFDLEVBQUUsSUFBSSxFQUFFLENBQUMsRUFBRTtJQUN4QyxLQUFLLEVBQUUsRUFBRSxNQUFNLEVBQUUsQ0FBQyxFQUFFLE1BQU0sRUFBRSxDQUFDLEVBQUUsSUFBSSxFQUFFLENBQUMsRUFBRTtJQUN4QyxJQUFJLEVBQUUsRUFBRSxNQUFNLEVBQUUsQ0FBQyxFQUFFLE1BQU0sRUFBRSxDQUFDLEVBQUUsSUFBSSxFQUFFLENBQUMsRUFBRTtJQUN2QyxLQUFLLEVBQUUsRUFBRSxNQUFNLEVBQUUsQ0FBQyxFQUFFLE1BQU0sRUFBRSxDQUFDLEVBQUUsSUFBSSxFQUFFLENBQUMsRUFBRTtJQUN4QyxLQUFLLEVBQUUsRUFBRSxNQUFNLEVBQUUsQ0FBQyxFQUFFLE1BQU0sRUFBRSxDQUFDLEVBQUUsSUFBSSxFQUFFLENBQUMsRUFBRTtJQUN4QyxLQUFLLEVBQUUsRUFBRSxNQUFNLEVBQUUsQ0FBQyxFQUFFLE1BQU0sRUFBRSxDQUFDLEVBQUUsSUFBSSxFQUFFLENBQUMsRUFBRTtJQUN4QyxLQUFLLEVBQUUsRUFBRSxNQUFNLEVBQUUsQ0FBQyxFQUFFLE1BQU0sRUFBRSxDQUFDLEVBQUUsSUFBSSxFQUFFLENBQUMsRUFBRTtJQUN4QyxJQUFJLEVBQUUsRUFBRSxNQUFNLEVBQUUsQ0FBQyxFQUFFLE1BQU0sRUFBRSxDQUFDLEVBQUUsSUFBSSxFQUFFLENBQUMsRUFBRTtJQUN2QyxLQUFLLEVBQUUsRUFBRSxNQUFNLEVBQUUsQ0FBQyxFQUFFLE1BQU0sRUFBRSxDQUFDLEVBQUUsSUFBSSxFQUFFLENBQUMsRUFBRTtJQUN4QyxLQUFLLEVBQUUsRUFBRSxNQUFNLEVBQUUsQ0FBQyxFQUFFLE1BQU0sRUFBRSxDQUFDLEVBQUUsSUFBSSxFQUFFLENBQUMsRUFBRTtJQUN4QyxLQUFLLEVBQUUsRUFBRSxNQUFNLEVBQUUsQ0FBQyxFQUFFLE1BQU0sRUFBRSxDQUFDLEVBQUUsSUFBSSxFQUFFLENBQUMsRUFBRTtJQUN4QyxLQUFLLEVBQUUsRUFBRSxNQUFNLEVBQUUsQ0FBQyxFQUFFLE1BQU0sRUFBRSxDQUFDLEVBQUUsSUFBSSxFQUFFLENBQUMsRUFBRTtJQUN4QyxJQUFJLEVBQUUsRUFBRSxNQUFNLEVBQUUsQ0FBQyxFQUFFLE1BQU0sRUFBRSxDQUFDLEVBQUUsSUFBSSxFQUFFLENBQUMsRUFBRTtJQUN2QyxJQUFJLEVBQUUsRUFBRSxNQUFNLEVBQUUsQ0FBQyxFQUFFLE1BQU0sRUFBRSxFQUFFLEVBQUUsSUFBSSxFQUFFLENBQUMsRUFBRTtJQUN4QyxJQUFJLEVBQUUsRUFBRSxNQUFNLEVBQUUsQ0FBQyxFQUFFLE1BQU0sRUFBRSxFQUFFLEVBQUUsSUFBSSxFQUFFLENBQUMsRUFBRTtDQUMzQyxDQUFBIn0=
@@ -0,0 +1,2 @@
1
+ export declare function ensureArray<T>(items: T | T[] | undefined): T[];
2
+ //# sourceMappingURL=array.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"array.d.ts","sourceRoot":"","sources":["../../src/utils/array.ts"],"names":[],"mappings":"AAAA,wBAAgB,WAAW,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,GAAG,CAAC,EAAE,GAAG,SAAS,GAAG,CAAC,EAAE,CAG9D"}
@@ -0,0 +1,6 @@
1
+ export function ensureArray(items) {
2
+ if (items === undefined)
3
+ return [];
4
+ return Array.isArray(items) ? items : [items];
5
+ }
6
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXJyYXkuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvdXRpbHMvYXJyYXkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsTUFBTSxVQUFVLFdBQVcsQ0FBSSxLQUEwQjtJQUN4RCxJQUFJLEtBQUssS0FBSyxTQUFTO1FBQUUsT0FBTyxFQUFFLENBQUE7SUFDbEMsT0FBTyxLQUFLLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUE7QUFDOUMsQ0FBQyJ9
@@ -1,5 +1,6 @@
1
1
  export * from "./action";
2
2
  export * from "./animation";
3
+ export * from "./array";
3
4
  export * from "./assert";
4
5
  export * from "./bbox";
5
6
  export * from "./canvas";
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/utils/index.ts"],"names":[],"mappings":"AAAA,cAAc,UAAU,CAAA;AACxB,cAAc,aAAa,CAAA;AAC3B,cAAc,UAAU,CAAA;AACxB,cAAc,QAAQ,CAAA;AACtB,cAAc,UAAU,CAAA;AACxB,cAAc,iBAAiB,CAAA;AAC/B,cAAc,mBAAmB,CAAA;AACjC,cAAc,eAAe,CAAA;AAC7B,cAAc,cAAc,CAAA;AAC5B,cAAc,OAAO,CAAA;AACrB,cAAc,SAAS,CAAA;AACvB,cAAc,SAAS,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/utils/index.ts"],"names":[],"mappings":"AAAA,cAAc,UAAU,CAAA;AACxB,cAAc,aAAa,CAAA;AAC3B,cAAc,SAAS,CAAA;AACvB,cAAc,UAAU,CAAA;AACxB,cAAc,QAAQ,CAAA;AACtB,cAAc,UAAU,CAAA;AACxB,cAAc,iBAAiB,CAAA;AAC/B,cAAc,mBAAmB,CAAA;AACjC,cAAc,eAAe,CAAA;AAC7B,cAAc,cAAc,CAAA;AAC5B,cAAc,OAAO,CAAA;AACrB,cAAc,SAAS,CAAA;AACvB,cAAc,SAAS,CAAA"}
@@ -1,5 +1,6 @@
1
1
  export * from "./action/index.js";
2
2
  export * from "./animation/index.js";
3
+ export * from "./array.js";
3
4
  export * from "./assert.js";
4
5
  export * from "./bbox.js";
5
6
  export * from "./canvas.js";
@@ -10,4 +11,4 @@ export * from "./fullscreen.js";
10
11
  export * from "./pbo.js";
11
12
  export * from "./state/index.js";
12
13
  export * from "./webgl.js";
13
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvdXRpbHMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsY0FBYyxVQUFVLENBQUE7QUFDeEIsY0FBYyxhQUFhLENBQUE7QUFDM0IsY0FBYyxVQUFVLENBQUE7QUFDeEIsY0FBYyxRQUFRLENBQUE7QUFDdEIsY0FBYyxVQUFVLENBQUE7QUFDeEIsY0FBYyxpQkFBaUIsQ0FBQTtBQUMvQixjQUFjLG1CQUFtQixDQUFBO0FBQ2pDLGNBQWMsZUFBZSxDQUFBO0FBQzdCLGNBQWMsY0FBYyxDQUFBO0FBQzVCLGNBQWMsT0FBTyxDQUFBO0FBQ3JCLGNBQWMsU0FBUyxDQUFBO0FBQ3ZCLGNBQWMsU0FBUyxDQUFBIn0=
14
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvdXRpbHMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsY0FBYyxVQUFVLENBQUE7QUFDeEIsY0FBYyxhQUFhLENBQUE7QUFDM0IsY0FBYyxTQUFTLENBQUE7QUFDdkIsY0FBYyxVQUFVLENBQUE7QUFDeEIsY0FBYyxRQUFRLENBQUE7QUFDdEIsY0FBYyxVQUFVLENBQUE7QUFDeEIsY0FBYyxpQkFBaUIsQ0FBQTtBQUMvQixjQUFjLG1CQUFtQixDQUFBO0FBQ2pDLGNBQWMsZUFBZSxDQUFBO0FBQzdCLGNBQWMsY0FBYyxDQUFBO0FBQzVCLGNBQWMsT0FBTyxDQUFBO0FBQ3JCLGNBQWMsU0FBUyxDQUFBO0FBQ3ZCLGNBQWMsU0FBUyxDQUFBIn0=
@@ -0,0 +1,2 @@
1
+ export declare const version = "2.0.103";
2
+ //# sourceMappingURL=version.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"version.d.ts","sourceRoot":"","sources":["../src/version.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,OAAO,YAAY,CAAA"}
@@ -0,0 +1,2 @@
1
+ export const version = "2.0.103";
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmVyc2lvbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy92ZXJzaW9uLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE1BQU0sQ0FBQyxNQUFNLE9BQU8sR0FBRyxTQUFTLENBQUEifQ==
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@tolokoban/tgd",
3
- "version": "2.0.100",
3
+ "version": "2.0.103",
4
4
  "description": "ToloGameDev library for WebGL2",
5
5
  "homepage": "https://tolokoban.github.io/tgd2",
6
6
  "main": "./lib/dist/index.js",
@@ -14,12 +14,12 @@
14
14
  "ci": "cd lib && npm install && npm run build && npm run doc",
15
15
  "doc": "cd lib && npm run doc && cd ../doc && npm run deploy",
16
16
  "test": "cd lib && npm test",
17
- "build": "clear && cd lib && npm run build && cd ../doc && npm run build",
17
+ "build": "clear && cd lib && npm run dev && cd ../doc && npm run dev",
18
18
  "predeploy": "npm run ci && cd doc",
19
19
  "deploy": "npm run ci && npm publish --access=public",
20
20
  "deploy:lib": "cd lib && npm install && npm run build && cd .. && npm publish --access=public",
21
- "minor": "npm version minor --no-git-tag-version && cd lib && npm version minor --no-git-tag-version && cd ../doc && npm version minor --no-git-tag-version",
22
- "patch": "npm version patch --no-git-tag-version && cd lib && npm version patch --no-git-tag-version && cd ../doc && npm version patch --no-git-tag-version",
21
+ "minor": "npm version minor --no-git-tag-version && node version.mjs",
22
+ "patch": "npm version patch --no-git-tag-version && node version.mjs",
23
23
  "prestart": "npm run build",
24
24
  "start": "http-server doc/build/ -p 0 -o"
25
25
  },