@tolokoban/tgd 2.0.100 → 2.0.102

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 (164) hide show
  1. package/lib/dist/color/color.d.ts +4 -0
  2. package/lib/dist/color/color.d.ts.map +1 -1
  3. package/lib/dist/color/color.js +21 -1
  4. package/lib/dist/context/context.d.ts +3 -0
  5. package/lib/dist/context/context.d.ts.map +1 -1
  6. package/lib/dist/context/context.js +10 -7
  7. package/lib/dist/context/logic.d.ts +2 -2
  8. package/lib/dist/context/logic.js +2 -2
  9. package/lib/dist/context/ubo-manager.d.ts +10 -0
  10. package/lib/dist/context/ubo-manager.d.ts.map +1 -0
  11. package/lib/dist/context/ubo-manager.js +23 -0
  12. package/lib/dist/dataset/dataset.d.ts +8 -3
  13. package/lib/dist/dataset/dataset.d.ts.map +1 -1
  14. package/lib/dist/dataset/dataset.js +35 -12
  15. package/lib/dist/filter/blur.d.ts +1 -0
  16. package/lib/dist/filter/blur.d.ts.map +1 -1
  17. package/lib/dist/filter/blur.js +3 -1
  18. package/lib/dist/filter/filter.d.ts +4 -1
  19. package/lib/dist/filter/filter.d.ts.map +1 -1
  20. package/lib/dist/filter/filter.js +4 -1
  21. package/lib/dist/filter/hue-rotation.d.ts +2 -1
  22. package/lib/dist/filter/hue-rotation.d.ts.map +1 -1
  23. package/lib/dist/filter/hue-rotation.js +3 -2
  24. package/lib/dist/index.d.ts +1 -0
  25. package/lib/dist/index.d.ts.map +1 -1
  26. package/lib/dist/index.js +2 -1
  27. package/lib/dist/interface/transformable.d.ts +1 -1
  28. package/lib/dist/loader/image.d.ts +3 -3
  29. package/lib/dist/loader/image.d.ts.map +1 -1
  30. package/lib/dist/loader/image.js +10 -22
  31. package/lib/dist/material/glass.js +3 -3
  32. package/lib/dist/material/material.d.ts +3 -7
  33. package/lib/dist/material/material.d.ts.map +1 -1
  34. package/lib/dist/material/material.js +1 -1
  35. package/lib/dist/painter/background-with-depth/background-with-depth.d.ts +1 -1
  36. package/lib/dist/painter/background-with-depth/background-with-depth.js +2 -2
  37. package/lib/dist/painter/filter/filter.d.ts +7 -9
  38. package/lib/dist/painter/filter/filter.d.ts.map +1 -1
  39. package/lib/dist/painter/filter/filter.js +41 -47
  40. package/lib/dist/painter/fragment-shader/fragment-shader.d.ts +2 -2
  41. package/lib/dist/painter/fragment-shader/fragment-shader.js +2 -2
  42. package/lib/dist/painter/framebuffer-msaa.d.ts +23 -12
  43. package/lib/dist/painter/framebuffer-msaa.d.ts.map +1 -1
  44. package/lib/dist/painter/framebuffer-msaa.js +60 -9
  45. package/lib/dist/painter/framebuffer.d.ts +19 -18
  46. package/lib/dist/painter/framebuffer.d.ts.map +1 -1
  47. package/lib/dist/painter/framebuffer.js +76 -19
  48. package/lib/dist/painter/gizmo/gizmo.d.ts +31 -0
  49. package/lib/dist/painter/gizmo/gizmo.d.ts.map +1 -0
  50. package/lib/dist/painter/gizmo/gizmo.js +186 -0
  51. package/lib/dist/painter/gizmo/index.d.ts +2 -0
  52. package/lib/dist/painter/gizmo/index.d.ts.map +1 -0
  53. package/lib/dist/painter/gizmo/index.js +2 -0
  54. package/lib/dist/painter/gizmo/painters/axes.1.d.ts +14 -0
  55. package/lib/dist/painter/gizmo/painters/axes.1.d.ts.map +1 -0
  56. package/lib/dist/painter/gizmo/painters/axes.1.js +50 -0
  57. package/lib/dist/painter/gizmo/painters/axes.d.ts +16 -0
  58. package/lib/dist/painter/gizmo/painters/axes.d.ts.map +1 -0
  59. package/lib/dist/painter/gizmo/painters/axes.js +81 -0
  60. package/lib/dist/painter/gizmo/painters/consts.d.ts +4 -0
  61. package/lib/dist/painter/gizmo/painters/consts.d.ts.map +1 -0
  62. package/lib/dist/painter/gizmo/painters/consts.js +4 -0
  63. package/lib/dist/painter/gizmo/painters/mask.d.ts +14 -0
  64. package/lib/dist/painter/gizmo/painters/mask.d.ts.map +1 -0
  65. package/lib/dist/painter/gizmo/painters/mask.js +90 -0
  66. package/lib/dist/painter/gizmo/painters/normal.1.d.ts +21 -0
  67. package/lib/dist/painter/gizmo/painters/normal.1.d.ts.map +1 -0
  68. package/lib/dist/painter/gizmo/painters/normal.1.js +111 -0
  69. package/lib/dist/painter/gizmo/painters/normal.d.ts +17 -0
  70. package/lib/dist/painter/gizmo/painters/normal.d.ts.map +1 -0
  71. package/lib/dist/painter/gizmo/painters/normal.js +87 -0
  72. package/lib/dist/painter/gizmo/painters/tips.d.ts +18 -0
  73. package/lib/dist/painter/gizmo/painters/tips.d.ts.map +1 -0
  74. package/lib/dist/painter/gizmo/painters/tips.js +44 -0
  75. package/lib/dist/painter/gizmo/tips.d.ts +22 -0
  76. package/lib/dist/painter/gizmo/tips.d.ts.map +1 -0
  77. package/lib/dist/painter/gizmo/tips.js +51 -0
  78. package/lib/dist/painter/group-camera.d.ts +4 -2
  79. package/lib/dist/painter/group-camera.d.ts.map +1 -1
  80. package/lib/dist/painter/group-camera.js +7 -3
  81. package/lib/dist/painter/group.d.ts +6 -6
  82. package/lib/dist/painter/group.d.ts.map +1 -1
  83. package/lib/dist/painter/group.js +19 -13
  84. package/lib/dist/painter/index.d.ts +3 -0
  85. package/lib/dist/painter/index.d.ts.map +1 -1
  86. package/lib/dist/painter/index.js +4 -1
  87. package/lib/dist/painter/lod/lod.d.ts +1 -1
  88. package/lib/dist/painter/lod/lod.js +2 -2
  89. package/lib/dist/painter/logic.d.ts +2 -2
  90. package/lib/dist/painter/logic.js +2 -2
  91. package/lib/dist/painter/mesh/gltf/gltf.d.ts +2 -8
  92. package/lib/dist/painter/mesh/gltf/gltf.d.ts.map +1 -1
  93. package/lib/dist/painter/mesh/gltf/gltf.js +1 -1
  94. package/lib/dist/painter/mesh/mesh/mesh.d.ts +7 -16
  95. package/lib/dist/painter/mesh/mesh/mesh.d.ts.map +1 -1
  96. package/lib/dist/painter/mesh/mesh/mesh.js +21 -9
  97. package/lib/dist/painter/node/node.d.ts +3 -3
  98. package/lib/dist/painter/node/node.js +4 -4
  99. package/lib/dist/painter/overlay/index.d.ts +2 -0
  100. package/lib/dist/painter/overlay/index.d.ts.map +1 -0
  101. package/lib/dist/painter/overlay/index.js +2 -0
  102. package/lib/dist/painter/overlay/overlay.d.ts +77 -0
  103. package/lib/dist/painter/overlay/overlay.d.ts.map +1 -0
  104. package/lib/dist/painter/overlay/overlay.js +196 -0
  105. package/lib/dist/painter/painter.d.ts +1 -1
  106. package/lib/dist/painter/program.d.ts +70 -0
  107. package/lib/dist/painter/program.d.ts.map +1 -0
  108. package/lib/dist/painter/program.js +250 -0
  109. package/lib/dist/painter/scissor.d.ts +1 -1
  110. package/lib/dist/painter/scissor.js +2 -2
  111. package/lib/dist/painter/segments/segments-morphing.d.ts +4 -13
  112. package/lib/dist/painter/segments/segments-morphing.d.ts.map +1 -1
  113. package/lib/dist/painter/segments/segments-morphing.js +3 -3
  114. package/lib/dist/painter/segments/segments.d.ts +4 -13
  115. package/lib/dist/painter/segments/segments.d.ts.map +1 -1
  116. package/lib/dist/painter/segments/segments.js +3 -3
  117. package/lib/dist/painter/sprites/sprites.d.ts +5 -0
  118. package/lib/dist/painter/sprites/sprites.d.ts.map +1 -1
  119. package/lib/dist/painter/sprites/sprites.js +20 -9
  120. package/lib/dist/painter/state/state.js +4 -4
  121. package/lib/dist/painter/tubes/tubes.d.ts +4 -13
  122. package/lib/dist/painter/tubes/tubes.d.ts.map +1 -1
  123. package/lib/dist/painter/tubes/tubes.js +2 -2
  124. package/lib/dist/painter/x-ray/x-ray.d.ts +3 -11
  125. package/lib/dist/painter/x-ray/x-ray.d.ts.map +1 -1
  126. package/lib/dist/painter/x-ray/x-ray.js +3 -3
  127. package/lib/dist/parser/gltf/gltf.d.ts +2 -5
  128. package/lib/dist/parser/gltf/gltf.d.ts.map +1 -1
  129. package/lib/dist/parser/gltf/gltf.js +1 -1
  130. package/lib/dist/program/program.d.ts +2 -0
  131. package/lib/dist/program/program.d.ts.map +1 -1
  132. package/lib/dist/program/program.js +43 -8
  133. package/lib/dist/shader/fragment.d.ts.map +1 -1
  134. package/lib/dist/shader/fragment.js +3 -3
  135. package/lib/dist/shader/vertex.d.ts +3 -1
  136. package/lib/dist/shader/vertex.d.ts.map +1 -1
  137. package/lib/dist/shader/vertex.js +8 -6
  138. package/lib/dist/texture/texture-depth.d.ts +3 -11
  139. package/lib/dist/texture/texture-depth.d.ts.map +1 -1
  140. package/lib/dist/texture/texture-depth.js +1 -1
  141. package/lib/dist/texture/texture2d.d.ts +5 -11
  142. package/lib/dist/texture/texture2d.d.ts.map +1 -1
  143. package/lib/dist/texture/texture2d.js +3 -3
  144. package/lib/dist/time/interval/interval.d.ts +3 -3
  145. package/lib/dist/time/interval/interval.js +6 -6
  146. package/lib/dist/types/painter.d.ts +1 -1
  147. package/lib/dist/types/program.d.ts +3 -2
  148. package/lib/dist/types/program.d.ts.map +1 -1
  149. package/lib/dist/uniform/index.d.ts +3 -0
  150. package/lib/dist/uniform/index.d.ts.map +1 -0
  151. package/lib/dist/uniform/index.js +3 -0
  152. package/lib/dist/uniform/ubo-camera.d.ts +9 -0
  153. package/lib/dist/uniform/ubo-camera.d.ts.map +1 -0
  154. package/lib/dist/uniform/ubo-camera.js +20 -0
  155. package/lib/dist/uniform/uniform-buffer-object.d.ts +56 -0
  156. package/lib/dist/uniform/uniform-buffer-object.d.ts.map +1 -0
  157. package/lib/dist/uniform/uniform-buffer-object.js +347 -0
  158. package/lib/dist/utils/array.d.ts +2 -0
  159. package/lib/dist/utils/array.d.ts.map +1 -0
  160. package/lib/dist/utils/array.js +6 -0
  161. package/lib/dist/utils/index.d.ts +1 -0
  162. package/lib/dist/utils/index.d.ts.map +1 -1
  163. package/lib/dist/utils/index.js +2 -1
  164. package/package.json +2 -2
@@ -0,0 +1,196 @@
1
+ import { TgdPainter } from "../painter.js";
2
+ import { TgdDataset } from "./../../dataset/index.js";
3
+ import { TgdProgram } from "./../../program/index.js";
4
+ import { TgdShaderFragment, TgdShaderVertex } from "./../../shader/index.js";
5
+ import { TgdVertexArray } from "./../../vao/index.js";
6
+ import { TgdEvent } from "./../../event/index.js";
7
+ export class TgdPainterOverlay extends TgdPainter {
8
+ constructor(context, { alignX = +1, alignY = +1, scaleX = 1, scaleY = 1, width, height, margin = 0, z = 0, texture, } = {}) {
9
+ super();
10
+ this.context = context;
11
+ this.eventResize = new TgdEvent();
12
+ this.eventPointerTap = new TgdEvent();
13
+ this.eventPointerHover = new TgdEvent();
14
+ this.lastWidth = 0;
15
+ this.lastHeight = 0;
16
+ this.handleTap = (evtScreen) => {
17
+ const x = this.xScreenToLayout(evtScreen.x);
18
+ const y = this.yScreenToLayout(evtScreen.y);
19
+ if (Math.abs(x) > 1 || Math.abs(y) > 1)
20
+ return;
21
+ const evtOverlay = structuredClone(evtScreen);
22
+ evtOverlay.x = x;
23
+ evtOverlay.y = y;
24
+ this.eventPointerTap.dispatch(evtOverlay);
25
+ };
26
+ this.handleHover = (evtScreen) => {
27
+ const x = this.xScreenToLayout(evtScreen.current.x);
28
+ const y = this.yScreenToLayout(evtScreen.current.y);
29
+ if (Math.abs(x) > 1 || Math.abs(y) > 1)
30
+ return;
31
+ const evtOverlay = structuredClone(evtScreen);
32
+ evtOverlay.current.x = x;
33
+ evtOverlay.current.y = y;
34
+ this.eventPointerHover.dispatch(evtOverlay);
35
+ };
36
+ this.xScreenToLayout = (xScreen) => {
37
+ var _a;
38
+ const { context, alignX, marginLeft, marginRight } = this;
39
+ const marginPx = marginLeft + marginRight;
40
+ const widthPx = (_a = this.width) !== null && _a !== void 0 ? _a : context.width - marginPx;
41
+ const frameWidthPx = context.width - widthPx - marginPx;
42
+ const screenPerPixel = 2 / context.width;
43
+ const center = marginLeft + (widthPx + (1 + alignX) * frameWidthPx - context.width) / 2;
44
+ const factor = context.width / widthPx;
45
+ return (xScreen - center * screenPerPixel) * factor;
46
+ };
47
+ this.xLayoutToScreen = (xLayout) => {
48
+ var _a;
49
+ const { context, alignX, marginLeft, marginRight } = this;
50
+ const marginPx = marginLeft + marginRight;
51
+ const widthPx = (_a = this.width) !== null && _a !== void 0 ? _a : context.width - marginPx;
52
+ const frameWidthPx = context.width - widthPx - marginPx;
53
+ const screenPerPixel = 2 / context.width;
54
+ const center = marginLeft + (widthPx + (1 + alignX) * frameWidthPx - context.width) / 2;
55
+ const factor = widthPx / context.width;
56
+ return xLayout * factor + center * screenPerPixel;
57
+ };
58
+ this.yScreenToLayout = (yScreen) => {
59
+ var _a;
60
+ const { context, alignY, marginTop, marginBottom } = this;
61
+ const marginPx = marginTop + marginBottom;
62
+ const heightPx = (_a = this.height) !== null && _a !== void 0 ? _a : context.height - marginPx;
63
+ const frameHeightPx = context.height - heightPx - marginPx;
64
+ const screenPerPixel = 2 / context.height;
65
+ const center = marginBottom + (heightPx + (1 + alignY) * frameHeightPx - context.height) / 2;
66
+ const factor = context.height / heightPx;
67
+ return (yScreen - center * screenPerPixel) * factor;
68
+ };
69
+ this.yLayoutToScreen = (yLayout) => {
70
+ var _a;
71
+ const { context, alignY, marginTop, marginBottom } = this;
72
+ const marginPx = marginTop + marginBottom;
73
+ const heightPx = (_a = this.height) !== null && _a !== void 0 ? _a : context.height - marginPx;
74
+ const frameHeightPx = context.height - heightPx - marginPx;
75
+ const screenPerPixel = 2 / context.height;
76
+ const center = marginBottom + (heightPx + (1 + alignY) * frameHeightPx - context.height) / 2;
77
+ const factor = heightPx / context.height;
78
+ return yLayout * factor + center * screenPerPixel;
79
+ };
80
+ this.name = `Overlay/${this.name}`;
81
+ this.alignX = alignX;
82
+ this.alignY = alignY;
83
+ this.scaleX = scaleX;
84
+ this.scaleY = scaleY;
85
+ this.width = width;
86
+ this.height = height;
87
+ if (typeof margin === "number") {
88
+ this.marginTop = margin;
89
+ this.marginRight = margin;
90
+ this.marginBottom = margin;
91
+ this.marginLeft = margin;
92
+ }
93
+ else if (margin.length === 2) {
94
+ const [vertical, horizontal] = margin;
95
+ this.marginTop = vertical;
96
+ this.marginRight = horizontal;
97
+ this.marginBottom = vertical;
98
+ this.marginLeft = horizontal;
99
+ }
100
+ else {
101
+ const [top, right, bottom, left] = margin;
102
+ this.marginTop = top;
103
+ this.marginRight = right;
104
+ this.marginBottom = bottom;
105
+ this.marginLeft = left;
106
+ }
107
+ this.z = z;
108
+ this.texture = texture;
109
+ const dataset = new TgdDataset({
110
+ attPos: "vec2",
111
+ attUV: "vec2",
112
+ });
113
+ dataset.set("attPos", new Float32Array([+1, -1, +1, +1, -1, -1, -1, +1]));
114
+ dataset.set("attUV", new Float32Array([1, 1, 1, 0, 0, 1, 0, 0]));
115
+ const prg = new TgdProgram(context.gl, {
116
+ vert: new TgdShaderVertex({
117
+ uniforms: {
118
+ uniCenter: "vec2",
119
+ uniScale: "vec2",
120
+ uniScaleUV: "vec2",
121
+ uniZ: "float",
122
+ },
123
+ varying: {
124
+ varUV: "vec2",
125
+ },
126
+ attributes: {
127
+ attPos: "vec2",
128
+ attUV: "vec2",
129
+ },
130
+ mainCode: [
131
+ "varUV = (attUV - vec2(.5)) * uniScaleUV + vec2(.5);",
132
+ "gl_Position = vec4(attPos * uniScale + uniCenter, uniZ, 1);",
133
+ ],
134
+ }).code,
135
+ frag: new TgdShaderFragment({
136
+ uniforms: {
137
+ uniTexture: "sampler2D",
138
+ },
139
+ varying: {
140
+ varUV: "vec2",
141
+ },
142
+ mainCode: ["FragColor = texture(uniTexture, varUV);"],
143
+ }).code,
144
+ });
145
+ const vao = new TgdVertexArray(context.gl, prg, [dataset]);
146
+ this.prg = prg;
147
+ this.vao = vao;
148
+ const { pointer } = context.inputs;
149
+ pointer.eventTap.addListener(this.handleTap);
150
+ pointer.eventHover.addListener(this.handleHover);
151
+ }
152
+ delete() {
153
+ const { context } = this;
154
+ if (context) {
155
+ this.eventPointerTap.removeListener(this.handleTap);
156
+ }
157
+ this.prg.delete();
158
+ this.vao.delete();
159
+ }
160
+ paint(time, delta) {
161
+ this.checkForResizeEvent();
162
+ const { context, prg, vao, z, scaleX, scaleY, xLayoutToScreen, yLayoutToScreen, texture } = this;
163
+ const { gl } = context;
164
+ prg.use();
165
+ prg.uniform1f("uniZ", z);
166
+ const x0 = xLayoutToScreen(0);
167
+ const y0 = yLayoutToScreen(0);
168
+ prg.uniform2f("uniCenter", x0, y0);
169
+ const x1 = xLayoutToScreen(1);
170
+ const y1 = yLayoutToScreen(1);
171
+ prg.uniform2f("uniScale", x1 - x0, y1 - y0);
172
+ prg.uniform2f("uniScaleUV", scaleX, scaleY);
173
+ if (!texture) {
174
+ throw new Error("[TgdPainterOverlay] texture has not been set!");
175
+ }
176
+ texture.activate(0, prg, "uniTexture");
177
+ vao.bind();
178
+ const cull = context.webglParams.cullFace;
179
+ context.webglParams.cullFace = false;
180
+ gl.drawArrays(gl.TRIANGLE_STRIP, 0, 4);
181
+ context.webglParams.cullFace = cull;
182
+ vao.unbind();
183
+ }
184
+ checkForResizeEvent() {
185
+ var _a, _b;
186
+ const { context, lastWidth, lastHeight, marginLeft, marginRight, marginTop, marginBottom } = this;
187
+ const width = Math.max(0, (_a = this.width) !== null && _a !== void 0 ? _a : context.width - marginLeft - marginRight);
188
+ const height = Math.max(0, (_b = this.height) !== null && _b !== void 0 ? _b : context.height - marginTop - marginBottom);
189
+ if (width !== lastWidth || height !== lastHeight) {
190
+ this.lastWidth = width;
191
+ this.lastHeight = height;
192
+ this.eventResize.dispatch({ width, height });
193
+ }
194
+ }
195
+ }
196
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib3ZlcmxheS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9wYWludGVyL292ZXJsYXkvb3ZlcmxheS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sWUFBWSxDQUFBO0FBRXZDLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxjQUFjLENBQUE7QUFDekMsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGNBQWMsQ0FBQTtBQUN6QyxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsZUFBZSxFQUFFLE1BQU0sYUFBYSxDQUFBO0FBQ2hFLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxVQUFVLENBQUE7QUFDekMsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLFlBQVksQ0FBQTtBQXdDckMsTUFBTSxPQUFPLGlCQUFrQixTQUFRLFVBQVU7SUFzQjdDLFlBQ3FCLE9BQW1CLEVBQ3BDLEVBQ0ksTUFBTSxHQUFHLENBQUMsQ0FBQyxFQUNYLE1BQU0sR0FBRyxDQUFDLENBQUMsRUFDWCxNQUFNLEdBQUcsQ0FBQyxFQUNWLE1BQU0sR0FBRyxDQUFDLEVBQ1YsS0FBSyxFQUNMLE1BQU0sRUFDTixNQUFNLEdBQUcsQ0FBQyxFQUNWLENBQUMsR0FBRyxDQUFDLEVBQ0wsT0FBTyxNQUM0QixFQUFFO1FBRXpDLEtBQUssRUFBRSxDQUFBO1FBYlUsWUFBTyxHQUFQLE9BQU8sQ0FBWTtRQXRCeEIsZ0JBQVcsR0FBRyxJQUFJLFFBQVEsRUFBcUMsQ0FBQTtRQUMvRCxvQkFBZSxHQUFHLElBQUksUUFBUSxFQUEyQixDQUFBO1FBQ3pELHNCQUFpQixHQUFHLElBQUksUUFBUSxFQUE0QixDQUFBO1FBY3BFLGNBQVMsR0FBRyxDQUFDLENBQUE7UUFDYixlQUFVLEdBQUcsQ0FBQyxDQUFBO1FBMEZkLGNBQVMsR0FBRyxDQUFDLFNBQWtDLEVBQUUsRUFBRTtZQUN2RCxNQUFNLENBQUMsR0FBRyxJQUFJLENBQUMsZUFBZSxD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
@@ -11,7 +11,7 @@ export declare abstract class TgdPainter {
11
11
  name: string;
12
12
  active: boolean;
13
13
  abstract delete(): void;
14
- abstract paint(time: number, delay: number): void;
14
+ abstract paint(time: number, delta: number): void;
15
15
  get hierarchy(): TgdDebugPainterHierarchy;
16
16
  debug(caption?: string): void;
17
17
  }
@@ -0,0 +1,70 @@
1
+ import type { TgdContext } from "../context";
2
+ import { TgdDataset, type TgdDatasetOptions, type TgdDatasetType } from "../dataset";
3
+ import { type TgdCodeBloc, type TgdCodeFunctions, type TgdCodeVariables } from "../shader";
4
+ import type { TgdTypeArrayForElements, WebglAttributeType } from "../types";
5
+ import type { TgdPainterFunction } from "../types/painter";
6
+ import { TgdTexture2D, TgdTextureCube } from "@tolokoban/tgd";
7
+ import { TgdUniformBufferObject, type TgdUniformBufferObjectOptions } from "./../uniform/uniform-buffer-object";
8
+ import { TgdPainter } from "./painter";
9
+ import { type TgdPainterStateOptions } from "./state";
10
+ interface DatasetOptions extends Partial<Omit<TgdDatasetOptions, "data" | "buffer">> {
11
+ attribs: Record<string, {
12
+ type: TgdDatasetType;
13
+ data: ArrayBuffer | Int8Array | Uint8Array | Int16Array | Uint16Array | Uint32Array | Float32Array | {
14
+ buffer: ArrayBuffer;
15
+ };
16
+ }>;
17
+ }
18
+ export interface TgdPainterProgramOptions {
19
+ drawMode: "POINTS" | "LINE_STRIP" | "LINE_LOOP" | "LINES" | "TRIANGLE_STRIP" | "TRIANGLE_FAN" | "TRIANGLES" | WebGL2RenderingContext["POINTS"] | WebGL2RenderingContext["LINE_STRIP"] | WebGL2RenderingContext["LINE_LOOP"] | WebGL2RenderingContext["LINES"] | WebGL2RenderingContext["TRIANGLE_STRIP"] | WebGL2RenderingContext["TRIANGLE_FAN"] | WebGL2RenderingContext["TRIANGLES"];
20
+ uniforms?: Record<string, TgdUniformBufferObject | Omit<TgdUniformBufferObjectOptions, "bindingPoint">>;
21
+ textures?: Record<string, TgdTexture2D | TgdTextureCube>;
22
+ dataset: TgdDataset | DatasetOptions | (TgdDataset | DatasetOptions)[];
23
+ varying?: TgdCodeVariables<WebglAttributeType>;
24
+ vert: Partial<{
25
+ precision: "lowp" | "mediump" | "highp";
26
+ functions: TgdCodeFunctions;
27
+ mainCode: TgdCodeBloc;
28
+ header: TgdCodeBloc;
29
+ }>;
30
+ frag: Partial<{
31
+ precision: "lowp" | "mediump" | "highp";
32
+ outputs: TgdCodeVariables<WebglAttributeType>;
33
+ functions: TgdCodeFunctions | TgdCodeBloc;
34
+ mainCode: TgdCodeBloc;
35
+ header: TgdCodeBloc;
36
+ }>;
37
+ elements?: TgdTypeArrayForElements;
38
+ state?: Partial<Omit<TgdPainterStateOptions, "children">>;
39
+ elementsCount?: number;
40
+ elementsOffset?: number;
41
+ instancesCount?: number;
42
+ onEnter?: TgdPainterFunction;
43
+ onDelete?: () => void;
44
+ }
45
+ export declare class TgdPainterProgram extends TgdPainter {
46
+ private readonly context;
47
+ elementsCount: number;
48
+ elementsOffset: number;
49
+ instancesCount: number;
50
+ readonly textures: Record<string, TgdTexture2D | TgdTextureCube>;
51
+ private readonly uniformBlocks;
52
+ private readonly uniformBlocksToDelete;
53
+ private readonly prg;
54
+ private readonly vao;
55
+ private readonly drawMode;
56
+ private readonly painterState;
57
+ private readonly hasElements;
58
+ private readonly elementsType;
59
+ private readonly onEnter?;
60
+ private readonly onDelete?;
61
+ constructor(context: TgdContext, { onEnter, onDelete, uniforms, textures, varying, vert, frag, dataset, elements, drawMode, state, elementsCount, elementsOffset, instancesCount, }: TgdPainterProgramOptions);
62
+ delete(): void;
63
+ paint(time: number, delta: number): void;
64
+ debug(caption?: string): void;
65
+ private readonly internalPaint;
66
+ private uniformsToCode;
67
+ private resolveUniformBlock;
68
+ }
69
+ export {};
70
+ //# sourceMappingURL=program.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"program.d.ts","sourceRoot":"","sources":["../../src/painter/program.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,250 @@
1
+ import { TgdDataset } from "./../dataset/index.js";
2
+ import { TgdConsole } from "./../debug/index.js";
3
+ import { TgdProgram } from "./../program/index.js";
4
+ import { TgdShaderFragment, TgdShaderVertex, tgdCodeStringify, } from "./../shader/index.js";
5
+ import { ensureArray, webglElementTypeFromTypedArray, webglLookup } from "./../utils/index.js";
6
+ import { TgdPainterLogic, TgdTexture2D, TgdTextureCube, TgdVertexArray } from "./../index.js";
7
+ import { TgdUniformBufferObject } from "./../uniform/uniform-buffer-object.js";
8
+ import { TgdPainter } from "./painter.js";
9
+ import { TgdPainterState } from "./state/index.js";
10
+ export class TgdPainterProgram extends TgdPainter {
11
+ constructor(context, { onEnter, onDelete, uniforms = {}, textures = {}, varying, vert, frag, dataset, elements, drawMode, state, elementsCount, elementsOffset, instancesCount, }) {
12
+ super();
13
+ this.context = context;
14
+ this.elementsCount = 0;
15
+ this.elementsOffset = 0;
16
+ this.instancesCount = 0;
17
+ this.uniformBlocks = [];
18
+ this.uniformBlocksToDelete = [];
19
+ this.internalPaint = (time, delta) => {
20
+ const { context, onEnter, textures, uniformBlocks, prg, vao, elementsType, elementsCount, elementsOffset, instancesCount, drawMode: mode, } = this;
21
+ const { gl } = context;
22
+ prg.use();
23
+ let unit = 0;
24
+ for (const name of Object.keys(textures)) {
25
+ const texture = textures[name];
26
+ texture.activate(unit++, prg, name);
27
+ }
28
+ onEnter === null || onEnter === void 0 ? void 0 : onEnter(time, delta);
29
+ for (const block of uniformBlocks) {
30
+ block.updateData();
31
+ }
32
+ vao.bind();
33
+ if (this.hasElements) {
34
+ if (instancesCount > 0) {
35
+ gl.drawElementsInstanced(mode, elementsCount, elementsType, elementsOffset, instancesCount);
36
+ }
37
+ else {
38
+ gl.drawElements(mode, elementsCount, elementsType, elementsOffset);
39
+ }
40
+ }
41
+ else {
42
+ if (instancesCount > 0) {
43
+ gl.drawArraysInstanced(mode, elementsOffset, elementsCount, instancesCount);
44
+ }
45
+ else {
46
+ gl.drawArrays(mode, elementsOffset, elementsCount);
47
+ }
48
+ }
49
+ vao.unbind();
50
+ };
51
+ this.textures = textures;
52
+ this.onEnter = onEnter;
53
+ this.onDelete = onDelete;
54
+ const datasets = ensureArray(dataset).map((item) => {
55
+ if (item instanceof TgdDataset)
56
+ return item;
57
+ const attributesDefinition = {};
58
+ for (const attribName of Object.keys(item.attribs)) {
59
+ attributesDefinition[attribName] = item.attribs[attribName].type;
60
+ }
61
+ const ds = new TgdDataset(attributesDefinition, item);
62
+ for (const attribName of Object.keys(item.attribs)) {
63
+ ds.set(attribName, item.attribs[attribName].data);
64
+ }
65
+ return ds;
66
+ });
67
+ this.drawMode = typeof drawMode === "number" ? drawMode : context.gl[drawMode];
68
+ const uniformsHeader = ensureArray(this.uniformsToCode(uniforms));
69
+ const uniformsForTextures = texturesToUniforms(textures);
70
+ const vertexShader = new TgdShaderVertex(Object.assign(Object.assign({}, vert), { uniforms: uniformsForTextures, attributes: resolveAttributesFromDataset(datasets), header: [...uniformsHeader, ...ensureArray(vert.header)], varying }));
71
+ const fragmentShader = new TgdShaderFragment(Object.assign(Object.assign({}, frag), { uniforms: uniformsForTextures, header: [...uniformsHeader, ...ensureArray(vert.header)], varying }));
72
+ const program = new TgdProgram(context.gl, {
73
+ vert: vertexShader,
74
+ frag: fragmentShader,
75
+ });
76
+ this.prg = program;
77
+ const vao = new TgdVertexArray(context.gl, program, datasets, elements);
78
+ this.vao = vao;
79
+ this.painterState = new TgdPainterState(context, Object.assign(Object.assign({}, state), { children: [new TgdPainterLogic(this.internalPaint)] }));
80
+ this.elementsCount = elementsCount !== null && elementsCount !== void 0 ? elementsCount : resolveElementsCount(datasets, elements);
81
+ this.elementsOffset = elementsOffset !== null && elementsOffset !== void 0 ? elementsOffset : 0;
82
+ this.instancesCount = instancesCount !== null && instancesCount !== void 0 ? instancesCount : resolveInstancesCount(datasets);
83
+ this.hasElements = !!elements;
84
+ this.elementsType = elements ? webglElementTypeFromTypedArray(elements) : 0;
85
+ const setBindingPoints = new Set();
86
+ Object.keys(uniforms).forEach((blockName, index) => {
87
+ const block = this.uniformBlocks[index];
88
+ if (setBindingPoints.has(block.bindingPoint)) {
89
+ const code = Object.keys(uniforms).map((blockName, index) => this.uniformBlocks[index].toShaderCode(blockName));
90
+ throw new Error(`[TgdPainterProgram] Uniform blocks must have distincts binding points!\n${tgdCodeStringify(code)}`);
91
+ }
92
+ setBindingPoints.add(block.bindingPoint);
93
+ block.bindToProgram(program, blockName);
94
+ });
95
+ }
96
+ delete() {
97
+ var _a;
98
+ (_a = this.onDelete) === null || _a === void 0 ? void 0 : _a.call(this);
99
+ for (const block of this.uniformBlocksToDelete) {
100
+ block.delete();
101
+ }
102
+ this.prg.delete();
103
+ this.vao.delete();
104
+ }
105
+ paint(time, delta) {
106
+ this.painterState.paint(time, delta);
107
+ }
108
+ debug(caption) {
109
+ console.log(caption !== null && caption !== void 0 ? caption : this.name);
110
+ console.log({
111
+ drawMode: webglLookup(this.drawMode),
112
+ elementsCount: this.elementsCount,
113
+ elementsOffset: this.elementsOffset,
114
+ instancesCount: this.instancesCount,
115
+ });
116
+ this.vao.debug();
117
+ }
118
+ uniformsToCode(uniforms) {
119
+ const code = [];
120
+ const setNames = new Set();
121
+ const setDuplicated = new Set();
122
+ const names = {};
123
+ for (const blockName of Object.keys(uniforms)) {
124
+ const block = this.resolveUniformBlock(uniforms[blockName]);
125
+ this.uniformBlocks.push(block);
126
+ names[blockName] = block.names;
127
+ code.push(...ensureArray(block.toShaderCode(blockName)));
128
+ for (const name of block.names) {
129
+ if (setNames.has(name))
130
+ setDuplicated.add(name);
131
+ else
132
+ setNames.add(name);
133
+ }
134
+ }
135
+ if (setDuplicated.size > 0) {
136
+ // There is a duplicate!
137
+ const out = new TgdConsole({
138
+ text: "[TgdPainterProgram] You have duplicated names in your uniform blocks:\n",
139
+ color: "#f33",
140
+ });
141
+ for (const blockName of Object.keys(names)) {
142
+ out.add(` ${blockName}`, { bold: true }).add(": ");
143
+ names[blockName].forEach((name, index) => {
144
+ if (index > 0)
145
+ out.add(", ");
146
+ out.add(name, setDuplicated.has(name)
147
+ ? {
148
+ bold: true,
149
+ color: "#f33",
150
+ }
151
+ : undefined);
152
+ });
153
+ out.nl();
154
+ }
155
+ out.error();
156
+ }
157
+ return code;
158
+ }
159
+ resolveUniformBlock(obj) {
160
+ if (obj instanceof TgdUniformBufferObject)
161
+ return obj;
162
+ return new TgdUniformBufferObject(this.context, obj);
163
+ }
164
+ }
165
+ function resolveAttributesFromDataset(datasets) {
166
+ const attributes = {};
167
+ const setNames = new Set();
168
+ const setDuplicated = new Set();
169
+ for (const dataset of datasets) {
170
+ for (const name of dataset.attributesNames) {
171
+ if (setNames.has(name))
172
+ setDuplicated.add(name);
173
+ else
174
+ setNames.add(name);
175
+ attributes[name] = dataset.getType(name);
176
+ }
177
+ }
178
+ if (setDuplicated.size > 0) {
179
+ // There is a duplicate!
180
+ const out = new TgdConsole({
181
+ text: "[TgdPainterProgram] You have duplicated names in your datasets:\n",
182
+ color: "#f33",
183
+ });
184
+ for (const dataset of datasets) {
185
+ out.add(` ${dataset.name}`, { bold: true }).add(": ");
186
+ dataset.attributesNames.forEach((name, index) => {
187
+ if (index > 0)
188
+ out.add(", ");
189
+ out.add(name, setDuplicated.has(name)
190
+ ? {
191
+ bold: true,
192
+ color: "#f33",
193
+ }
194
+ : undefined);
195
+ });
196
+ out.nl();
197
+ }
198
+ out.error();
199
+ }
200
+ return attributes;
201
+ }
202
+ function resolveElementsCount(datasets, elements) {
203
+ if (elements)
204
+ return elements.length;
205
+ const counts = datasets.filter((ds) => ds.divisor === 0).map((ds) => ds.count);
206
+ if (counts.length === 0) {
207
+ throw new Error("[TgdPainterProgram] You must give at least one Dataset with divisor 0 in the constructor!\nOr you can specify elementsCount.");
208
+ }
209
+ if (counts.length === 1)
210
+ return counts[0];
211
+ counts.sort();
212
+ const [first] = counts;
213
+ const last = counts[counts.length - 1];
214
+ if (first === last)
215
+ return first;
216
+ throw new Error(`[TgdPainterPogram] I cannot resolve elementsCount because your datasets have different counts!\n${datasets
217
+ .filter((ds) => ds.divisor === 0)
218
+ .map((ds) => ` ${ds.name}: count == ${ds.count}`)}`);
219
+ }
220
+ function resolveInstancesCount(datasets) {
221
+ const counts = datasets.filter((ds) => ds.divisor > 0).map((ds) => ds.count / ds.divisor);
222
+ if (counts.length === 0)
223
+ return 0;
224
+ if (counts.length === 1)
225
+ return counts[0];
226
+ counts.sort();
227
+ const [first] = counts;
228
+ const last = counts[counts.length - 1];
229
+ if (first === last)
230
+ return first;
231
+ throw new Error(`[TgdPainterPogram] I cannot resolve elementsCount because your instance datasets have different counts!\n${datasets
232
+ .filter((ds) => ds.divisor > 0)
233
+ .map((ds) => ` ${ds.name}: count == ${ds.count} / ${ds.divisor} == ${ds.count / ds.divisor}`)}`);
234
+ }
235
+ function texturesToUniforms(textures) {
236
+ const uniforms = {};
237
+ for (const name of Object.keys(textures)) {
238
+ uniforms[name] = resolveTextureType(textures[name]);
239
+ }
240
+ return uniforms;
241
+ }
242
+ function resolveTextureType(texture) {
243
+ if (texture instanceof TgdTexture2D)
244
+ return "sampler2D";
245
+ if (texture instanceof TgdTextureCube)
246
+ return "samplerCube";
247
+ console.error("[resolveTextureType] Don't know the type of this texture:", texture);
248
+ throw new Error("[resolveTextureType] Don't know the type of this texture!");
249
+ }
250
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvZ3JhbS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9wYWludGVyL3Byb2dyYW0udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUFFLFVBQVUsRUFBMEUsTUFBTSxjQUFjLENBQUE7QUFDakgsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLFlBQVksQ0FBQTtBQUN2QyxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sY0FBYyxDQUFBO0FBQ3pDLE9BQU8sRUFJSCxpQkFBaUIsRUFDakIsZUFBZSxFQUNmLGdCQUFnQixHQUNuQixNQUFNLGFBQWEsQ0FBQTtBQUdwQixPQUFPLEVBQUUsV0FBVyxFQUFFLDhCQUE4QixFQUFFLFdBQVcsRUFBRSxNQUFNLFlBQVksQ0FBQTtBQUNyRixPQUFPLEVBQUUsZUFBZSxFQUFFLFlBQVksRUFBRSxjQUFjLEVBQUUsY0FBYyxFQUFFLE1BQU0sZ0JBQWdCLENBQUE7QUFDOUYsT0FBTyxFQUFFLHNCQUFzQixFQUFzQyxNQUFNLG9DQUFvQyxDQUFBO0FBQy9HLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxXQUFXLENBQUE7QUFDdEMsT0FBTyxFQUFFLGVBQWUsRUFBK0IsTUFBTSxTQUFTLENBQUE7QUE4RHRFLE1BQU0sT0FBTyxpQkFBa0IsU0FBUSxVQUFVO0lBaUI3QyxZQUNxQixPQUFtQixFQUNwQyxFQUNJLE9BQU8sRUFDUCxRQUFRLEVBQ1IsUUFBUSxHQUFHLEVBQUUsRUFDYixRQUFRLEdBQUcsRUFBRSxFQUNiLE9BQU8sRUFDUCxJQUFJLEVBQ0osSUFBSSxFQUNKLE9BQU8sRUFDUCxRQUFRLEVBQ1IsUUFBUSxFQUNSLEtBQUssRUFDTCxhQUFhLEVBQ2IsY0FBYyxFQUNkLGNBQWMsR0FDUztRQUUzQixLQUFLLEVBQUUsQ0FBQTtRQWxCVSxZQUFPLEdBQVAsT0FBTyxDQUFZO1FBakJqQyxrQkFBYSxHQUFHLENBQUMsQ0FBQTtRQUNqQixtQkFBYyxHQUFHLENBQUMsQ0FBQTtRQUNs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
@@ -41,6 +41,6 @@ export declare class TgdPainterScissor extends TgdPainterGroup {
41
41
  constructor(context: {
42
42
  gl: WebGL2RenderingContext;
43
43
  }, options: TgdPainterScissorOptions);
44
- paint(time: number, delay: number): void;
44
+ paint(time: number, delta: number): void;
45
45
  }
46
46
  //# sourceMappingURL=scissor.d.ts.map
@@ -27,7 +27,7 @@ export class TgdPainterScissor extends TgdPainterGroup {
27
27
  this.width = options.width;
28
28
  this.height = options.height;
29
29
  }
30
- paint(time, delay) {
30
+ paint(time, delta) {
31
31
  const { gl } = this.context;
32
32
  const enabled = gl.getParameter(gl.SCISSOR_TEST);
33
33
  const [curX, curY, curW, curH] = gl.getParameter(gl.SCISSOR_BOX);
@@ -37,7 +37,7 @@ export class TgdPainterScissor extends TgdPainterGroup {
37
37
  const h = Math.round(this.height * gl.drawingBufferHeight);
38
38
  gl.enable(gl.SCISSOR_TEST);
39
39
  gl.scissor(x, y, w, h);
40
- super.paint(time, delay);
40
+ super.paint(time, delta);
41
41
  if (enabled) {
42
42
  gl.enable(gl.SCISSOR_TEST);
43
43
  }
@@ -1,10 +1,9 @@
1
- import type { TgdCamera } from "../../camera";
2
- import type { WebglParams } from "../../context/webgl-params";
3
1
  import type { TgdDataset } from "../../dataset";
4
2
  import { type TgdMaterial } from "../../material";
5
3
  import { TgdTransfo } from "../../math";
6
4
  import { TgdPainter } from "../painter";
7
5
  import { TgdTexture2D } from "../../texture";
6
+ import { TgdContext } from "../../context";
8
7
  type DatasetOption = TgdDataset | (() => TgdDataset);
9
8
  export type TgdPainterSegmentsMorphingOptions = {
10
9
  /**
@@ -55,11 +54,7 @@ export type TgdPainterSegmentsMorphingOptions = {
55
54
  * ```
56
55
  */
57
56
  export declare class TgdPainterSegmentsMorphing extends TgdPainter {
58
- protected readonly context: {
59
- gl: WebGL2RenderingContext;
60
- webglParams: WebglParams;
61
- camera: TgdCamera;
62
- };
57
+ protected readonly context: TgdContext;
63
58
  readonly transfo: TgdTransfo;
64
59
  colorTexture: TgdTexture2D;
65
60
  minRadius: number;
@@ -76,13 +71,9 @@ export declare class TgdPainterSegmentsMorphing extends TgdPainter {
76
71
  private readonly prg;
77
72
  private readonly vertexCount;
78
73
  private readonly material;
79
- constructor(context: {
80
- gl: WebGL2RenderingContext;
81
- webglParams: WebglParams;
82
- camera: TgdCamera;
83
- }, options: TgdPainterSegmentsMorphingOptions);
74
+ constructor(context: TgdContext, options: TgdPainterSegmentsMorphingOptions);
84
75
  delete(): void;
85
- paint(time: number, delay: number): void;
76
+ paint(time: number, delta: number): void;
86
77
  private get vao();
87
78
  }
88
79
  export {};