@tolokoban/tgd 2.0.139 → 2.0.141

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 (64) hide show
  1. package/README.md +18 -0
  2. package/lib/dist/camera/camera.d.ts +13 -2
  3. package/lib/dist/camera/camera.d.ts.map +1 -1
  4. package/lib/dist/camera/camera.js +43 -10
  5. package/lib/dist/context/console.d.ts +5 -5
  6. package/lib/dist/context/console.d.ts.map +1 -1
  7. package/lib/dist/context/console.js +26 -26
  8. package/lib/dist/context/context.d.ts +12 -2
  9. package/lib/dist/context/context.d.ts.map +1 -1
  10. package/lib/dist/context/context.js +28 -6
  11. package/lib/dist/dataset/dataset.d.ts.map +1 -1
  12. package/lib/dist/dataset/dataset.js +22 -9
  13. package/lib/dist/debug/tools.d.ts +1 -1
  14. package/lib/dist/debug/tools.d.ts.map +1 -1
  15. package/lib/dist/debug/tools.js +3 -3
  16. package/lib/dist/material/diffuse.d.ts.map +1 -1
  17. package/lib/dist/material/diffuse.js +7 -6
  18. package/lib/dist/material/flat-texture.d.ts.map +1 -1
  19. package/lib/dist/material/flat-texture.js +7 -9
  20. package/lib/dist/material/flat.d.ts.map +1 -1
  21. package/lib/dist/material/flat.js +2 -2
  22. package/lib/dist/material/material.d.ts +5 -2
  23. package/lib/dist/material/material.d.ts.map +1 -1
  24. package/lib/dist/material/material.js +83 -4
  25. package/lib/dist/math/mat4.d.ts +1 -1
  26. package/lib/dist/math/mat4.d.ts.map +1 -1
  27. package/lib/dist/math/mat4.js +58 -14
  28. package/lib/dist/painter/gizmo/gizmo.d.ts +3 -3
  29. package/lib/dist/painter/gizmo/gizmo.d.ts.map +1 -1
  30. package/lib/dist/painter/gizmo/gizmo.js +11 -7
  31. package/lib/dist/painter/gizmo/painters/normal.d.ts +2 -2
  32. package/lib/dist/painter/gizmo/painters/normal.d.ts.map +1 -1
  33. package/lib/dist/painter/gizmo/painters/normal.js +30 -6
  34. package/lib/dist/painter/group.d.ts +1 -0
  35. package/lib/dist/painter/group.d.ts.map +1 -1
  36. package/lib/dist/painter/group.js +3 -1
  37. package/lib/dist/painter/mesh/mesh/mesh.d.ts.map +1 -1
  38. package/lib/dist/painter/mesh/mesh/mesh.js +20 -7
  39. package/lib/dist/painter/points-cloud/points-cloud-morphing.d.ts +15 -8
  40. package/lib/dist/painter/points-cloud/points-cloud-morphing.d.ts.map +1 -1
  41. package/lib/dist/painter/points-cloud/points-cloud-morphing.js +53 -48
  42. package/lib/dist/painter/points-cloud/points-cloud.d.ts +17 -11
  43. package/lib/dist/painter/points-cloud/points-cloud.d.ts.map +1 -1
  44. package/lib/dist/painter/points-cloud/points-cloud.js +56 -54
  45. package/lib/dist/painter/points-cloud/shaders/frag-flat.d.ts +3 -0
  46. package/lib/dist/painter/points-cloud/shaders/frag-flat.d.ts.map +1 -0
  47. package/lib/dist/painter/points-cloud/shaders/frag-flat.js +9 -0
  48. package/lib/dist/painter/points-cloud/shaders/frag-sphere.d.ts +44 -0
  49. package/lib/dist/painter/points-cloud/shaders/frag-sphere.d.ts.map +1 -0
  50. package/lib/dist/painter/points-cloud/shaders/frag-sphere.js +33 -0
  51. package/lib/dist/painter/points-cloud/shaders/vert.d.ts +4 -0
  52. package/lib/dist/painter/points-cloud/shaders/vert.d.ts.map +1 -0
  53. package/lib/dist/painter/points-cloud/shaders/vert.js +34 -0
  54. package/lib/dist/painter/program.d.ts +1 -1
  55. package/lib/dist/painter/program.d.ts.map +1 -1
  56. package/lib/dist/painter/program.js +12 -8
  57. package/lib/dist/painter/segments/segments.d.ts.map +1 -1
  58. package/lib/dist/painter/segments/segments.js +3 -1
  59. package/lib/dist/shader/code.d.ts +2 -2
  60. package/lib/dist/shader/code.d.ts.map +1 -1
  61. package/lib/dist/shader/code.js +5 -2
  62. package/lib/dist/version.d.ts +1 -1
  63. package/lib/dist/version.js +1 -1
  64. package/package.json +2 -1
@@ -1 +1 @@
1
- {"version":3,"file":"points-cloud-morphing.d.ts","sourceRoot":"","sources":["../../../src/painter/points-cloud/points-cloud-morphing.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,cAAc,CAAA;AAG9C,OAAO,EAAE,KAAK,WAAW,EAAsC,MAAM,aAAa,CAAA;AAClF,OAAO,EAAE,YAAY,EAAE,MAAM,cAAc,CAAA;AAG3C,OAAO,EAAE,UAAU,EAAE,MAAM,YAAY,CAAA;AAEvC,UAAU,iCAAiC;IACvC;;;OAGG;IACH,KAAK,EAAE,YAAY,CAAA;IACnB;;;OAGG;IACH,EAAE,CAAC,EAAE,YAAY,CAAA;CACpB;AAED,MAAM,WAAW,oCAAoC;IACjD,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,IAAI,EAAE,CAAC,iCAAiC,EAAE,iCAAiC,CAAC,EAAE,CAAA;IAC9E;;;;OAIG;IACH,GAAG,CAAC,EAAE,MAAM,CAAA;IACZ;;;;OAIG;IACH,gBAAgB,CAAC,EAAE,MAAM,CAAA;IACzB;;;;;;OAMG;IACH,eAAe,CAAC,EAAE,MAAM,CAAA;IACxB,OAAO,CAAC,EAAE,YAAY,CAAA;IACtB;;;;;;;;;;;;;;;;OAgBG;IACH,QAAQ,CAAC,EAAE,WAAW,CAAA;IACtB;;OAEG;IACH,gBAAgB,CAAC,EAAE,MAAM,CAAA;IACzB;;OAEG;IACH,iBAAiB,CAAC,EAAE,MAAM,CAAA;IAC1B;;OAEG;IACH,eAAe,CAAC,EAAE,MAAM,CAAA;IACxB;;OAEG;IACH,eAAe,CAAC,EAAE,MAAM,CAAA;IACxB;;OAEG;IACH,KAAK,CAAC,EAAE,MAAM,CAAA;CACjB;AAED,qBAAa,6BAA8B,SAAQ,UAAU;aAmDrC,OAAO,EAAE,UAAU;IAlDvC;;OAEG;IACH,MAAM,CAAC,cAAc,CACjB,OAAO,GAAE,OAAO,CAAC;QACb,gBAAgB,EAAE,MAAM,CAAA;QACxB,iBAAiB,EAAE,MAAM,CAAA;QACzB,eAAe,EAAE,MAAM,CAAA;QACvB,eAAe,EAAE,MAAM,CAAA;QACvB,KAAK,EAAE,MAAM,CAAA;KAChB,CAAM,GACR,WAAW;IAkBd;;OAEG;IACI,GAAG,SAAI;IACP,OAAO,EAAE,YAAY,CAAA;IACrB,gBAAgB,SAAI;IACpB,eAAe,SAAI;IAEnB,gBAAgB,SAAK;IACrB,iBAAiB,SAAO;IACxB,eAAe,SAAM;IACrB,eAAe,SAAI;IACnB,KAAK,SAAI;IAEhB,OAAO,CAAC,QAAQ,CAAC,oBAAoB,CAAS;IAC9C,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAmB;IAC5C,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAY;IACpC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAkB;IACvC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAU;gBAGb,OAAO,EAAE,UAAU,EACnC,OAAO,EAAE,oCAAoC;IAkCjD,MAAM,IAAI,IAAI;IAMd,KAAK,IAAI,IAAI;IAqBb,OAAO,CAAC,aAAa;IA2BrB,IAAI,KAAK,WAGR;IAED,OAAO,KAAK,GAAG,GAGd;IAED,OAAO,CAAC,aAAa;CAmExB"}
1
+ {"version":3,"file":"points-cloud-morphing.d.ts","sourceRoot":"","sources":["../../../src/painter/points-cloud/points-cloud-morphing.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,cAAc,CAAA;AAG9C,OAAO,EACH,KAAK,WAAW,EAGnB,MAAM,aAAa,CAAA;AACpB,OAAO,EAAE,YAAY,EAAE,MAAM,cAAc,CAAA;AAG3C,OAAO,EAAE,UAAU,EAAE,MAAM,YAAY,CAAA;AACvC,OAAO,EAAkB,mCAAmC,EAAE,MAAM,uBAAuB,CAAA;AAG3F,UAAU,iCAAiC;IACvC;;;OAGG;IACH,KAAK,EAAE,YAAY,CAAA;IACnB;;;OAGG;IACH,EAAE,CAAC,EAAE,YAAY,CAAA;CACpB;AAED,MAAM,WAAW,oCAAoC;IACjD,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,IAAI,EAAE,CAAC,iCAAiC,EAAE,iCAAiC,CAAC,EAAE,CAAA;IAC9E;;;;OAIG;IACH,GAAG,CAAC,EAAE,MAAM,CAAA;IACZ;;;;OAIG;IACH,gBAAgB,CAAC,EAAE,MAAM,CAAA;IACzB;;;;;;OAMG;IACH,eAAe,CAAC,EAAE,MAAM,CAAA;IACxB,OAAO,CAAC,EAAE,YAAY,CAAA;IACtB;;;;;;;;;;;;;;;;OAgBG;IACH,QAAQ,CAAC,EAAE,WAAW,CAAA;IACtB;;;OAGG;IACH,cAAc,CAAC,EAAE,OAAO,CAAA;IACxB;;OAEG;IACH,gBAAgB,CAAC,EAAE,MAAM,CAAA;IACzB;;OAEG;IACH,iBAAiB,CAAC,EAAE,MAAM,CAAA;IAC1B;;OAEG;IACH,eAAe,CAAC,EAAE,MAAM,CAAA;IACxB;;OAEG;IACH,eAAe,CAAC,EAAE,MAAM,CAAA;IACxB;;OAEG;IACH,KAAK,CAAC,EAAE,MAAM,CAAA;CACjB;AAED,qBAAa,6BAA8B,SAAQ,UAAU;aAsCrC,OAAO,EAAE,UAAU;IACnC,OAAO,CAAC,QAAQ,CAAC,OAAO;IAtC5B;;OAEG;IACH,MAAM,CAAC,cAAc,CACjB,OAAO,GAAE,mCAAwC,GAClD,WAAW;IAId;;OAEG;IACH,MAAM,CAAC,YAAY,IAAI,WAAW;IAIlC;;OAEG;IACI,GAAG,SAAI;IACP,OAAO,EAAE,YAAY,CAAA;IACrB,gBAAgB,SAAI;IACpB,eAAe,SAAI;IAEnB,gBAAgB,SAAK;IACrB,iBAAiB,SAAO;IACxB,eAAe,SAAM;IACrB,eAAe,SAAI;IACnB,KAAK,SAAI;IAEhB,OAAO,CAAC,QAAQ,CAAC,oBAAoB,CAAS;IAC9C,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAmB;IAC5C,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAY;IACpC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAkB;IACvC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAU;gBAGb,OAAO,EAAE,UAAU,EAClB,OAAO,EAAE,oCAAoC;IAsClE,MAAM,IAAI,IAAI;IAMd,KAAK,IAAI,IAAI;IA6Bb,KAAK,CAAC,OAAO,CAAC,EAAE,MAAM;IAOtB,OAAO,CAAC,yBAAyB;IAgCjC,OAAO,CAAC,0BAA0B;IAWlC,IAAI,KAAK,WAGR;IAED,OAAO,KAAK,GAAG,GAGd;IAED,OAAO,CAAC,aAAa;CA+DxB"}
@@ -1,35 +1,30 @@
1
1
  import { tgdColorMakeHueWheel } from "./../../color/index.js";
2
2
  import { TgdDataset } from "./../../dataset/index.js";
3
3
  import { TgdProgram } from "./../../program/index.js";
4
- import { TgdShaderFragment, TgdShaderVertex } from "./../../shader/index.js";
4
+ import { TgdShaderFragment, TgdShaderVertex, } from "./../../shader/index.js";
5
5
  import { TgdTexture2D } from "./../../texture/index.js";
6
6
  import { tgdCanvasCreateGradientHorizontal } from "./../../utils/index.js";
7
7
  import { TgdVertexArray } from "./../../vao/index.js";
8
8
  import { TgdPainter } from "../painter.js";
9
+ import { fragCodeSphere } from "./shaders/frag-sphere.js";
10
+ import { vertInstancesCode } from "./shaders/vert.js";
9
11
  export class TgdPainterPointsCloudMorphing extends TgdPainter {
10
12
  /**
11
13
  * Draw spheres with simple diffuse/specular material.
12
14
  */
13
15
  static fragCodeSphere(options = {}) {
14
- const { specularExponent, specularIntensity, shadowThickness, shadowIntensity, light } = options;
15
- const SpE = typeof specularExponent === "number" ? specularExponent.toFixed(6) : "uniSpecularExponent";
16
- const SpI = typeof specularIntensity === "number" ? specularIntensity.toFixed(6) : "uniSpecularIntensity";
17
- const ShT = typeof shadowThickness === "number" ? shadowThickness.toFixed(6) : "uniShadowThickness";
18
- const ShI = typeof shadowIntensity === "number" ? shadowIntensity.toFixed(6) : "uniShadowIntensity";
19
- const L = typeof light === "number" ? light.toFixed(6) : "uniLight";
20
- return [
21
- "vec2 coords = 2.0 * (gl_PointCoord - vec2(.5));",
22
- "float len = 1.0 - dot(coords, coords);",
23
- "if (len < 0.0) discard;",
24
- "gl_FragDepth = gl_FragCoord.z - len * 1e-5;",
25
- `float light = smoothstep(0.0, ${ShT}, len) * ${ShI} + (1.0 - ${ShI});`,
26
- specularIntensity ? `float spec = pow(len, ${SpE}) * ${SpI};` : "// No specular.",
27
- `return color * vec4(vec3(light * ${L}), 1.0) + vec4(vec3(spec), 0.0);`,
28
- ];
16
+ return fragCodeSphere(options);
17
+ }
18
+ /**
19
+ * Draw disk with uniform color.
20
+ */
21
+ static fragCodeFlat() {
22
+ return TgdPainterPointsCloudMorphing.fragCodeFlat();
29
23
  }
30
24
  constructor(context, options) {
31
25
  super();
32
26
  this.context = context;
27
+ this.options = options;
33
28
  /**
34
29
  * Mixing between two clouds: 0.0 (firts) and 1.0 (second).
35
30
  */
@@ -65,10 +60,11 @@ export class TgdPainterPointsCloudMorphing extends TgdPainter {
65
60
  this.counts = options.data.map(([{ point }]) => point.length >> 2);
66
61
  this.program = this.createProgram(options.fragCode);
67
62
  this.vaos = options.data.map(([dataA, dataB]) => {
68
- const datasetA = this.createDataset(dataA, "A");
69
- const datasetB = this.createDataset(dataB, "B");
63
+ const datasetA = this.createDatasetForInstances(dataA, "A");
64
+ const datasetB = this.createDatasetForInstances(dataB, "B");
65
+ const billboard = this.createDatasetForBillboards();
70
66
  this.datasets.push(datasetA, datasetB);
71
- return new TgdVertexArray(context.gl, this.program, [datasetA, datasetB]);
67
+ return new TgdVertexArray(context.gl, this.program, [datasetA, datasetB, billboard]);
72
68
  });
73
69
  }
74
70
  delete() {
@@ -78,26 +74,32 @@ export class TgdPainterPointsCloudMorphing extends TgdPainter {
78
74
  this.vao.delete();
79
75
  }
80
76
  paint() {
81
- const { context, program, vao, texture, count, radiusMultiplier, minSizeInPixels } = this;
77
+ const { context, program, vao, texture, count, radiusMultiplier, minSizeInPixels, } = this;
82
78
  const { gl, camera } = context;
83
79
  program.use();
84
80
  texture.activate(0, program, "uniTexture");
85
81
  program.uniform1f("uniMix", this.mix);
86
82
  program.uniform1f("uniRadiusMultiplier", radiusMultiplier);
87
83
  program.uniform1f("uniMinSizeInPixels", minSizeInPixels);
88
- program.uniform1f("uniScreenHeightInPixels", context.height);
89
84
  program.uniform1f("uniSpecularExponent", this.specularExponent);
90
85
  program.uniform1f("uniSpecularIntensity", this.specularIntensity);
91
86
  program.uniform1f("uniShadowIntensity", this.shadowIntensity);
92
87
  program.uniform1f("uniShadowThickness", this.shadowThickness);
93
88
  program.uniform1f("uniLight", this.light);
89
+ program.uniform2f("uniAspectRatio", context.aspectRatioInverse, 1);
94
90
  program.uniformMatrix4fv("uniModelViewMatrix", camera.matrixModelView);
95
91
  program.uniformMatrix4fv("uniProjectionMatrix", camera.matrixProjection);
96
92
  vao.bind();
97
- gl.drawArrays(gl.POINTS, 0, count);
93
+ gl.drawArraysInstanced(gl.TRIANGLE_FAN, 0, 4, count);
98
94
  vao.unbind();
99
95
  }
100
- createDataset(data, suffix) {
96
+ debug(caption) {
97
+ console.debug(`[${caption ?? this.name}] TgdPainterPointsCloudMorphing( options ):`, this.options);
98
+ for (const vao of this.vaos) {
99
+ vao.debug();
100
+ }
101
+ }
102
+ createDatasetForInstances(data, suffix) {
101
103
  const { point } = data;
102
104
  if (point.length % 4 !== 0) {
103
105
  throw new Error(`[TgdPainterPointsCloud] point.length must be a multiple of 4! Current value: ${point.length}`);
@@ -114,11 +116,18 @@ export class TgdPainterPointsCloudMorphing extends TgdPainter {
114
116
  const dataset = new TgdDataset({
115
117
  [attPoint]: "vec4",
116
118
  [attUV]: "vec2",
117
- });
119
+ }, { divisor: 1 });
118
120
  dataset.set(attPoint, point);
119
121
  dataset.set(attUV, uv);
120
122
  return dataset;
121
123
  }
124
+ createDatasetForBillboards() {
125
+ const dataset = new TgdDataset({
126
+ attPointCoord: "vec2",
127
+ });
128
+ dataset.set("attPointCoord", new Float32Array([-1, -1, -1, +1, +1, +1, +1, -1]));
129
+ return dataset;
130
+ }
122
131
  get count() {
123
132
  const [count] = this.counts;
124
133
  return count;
@@ -131,6 +140,8 @@ export class TgdPainterPointsCloudMorphing extends TgdPainter {
131
140
  const vert = new TgdShaderVertex({
132
141
  uniforms: {
133
142
  uniMix: "float",
143
+ uniTexture: "sampler2D",
144
+ uniAspectRatio: "vec2",
134
145
  uniMinSizeInPixels: "float",
135
146
  uniRadiusMultiplier: "float",
136
147
  uniScreenHeightInPixels: "float",
@@ -142,28 +153,24 @@ export class TgdPainterPointsCloudMorphing extends TgdPainter {
142
153
  attUV_A: "vec2",
143
154
  attPoint_B: "vec4",
144
155
  attUV_B: "vec2",
156
+ /**
157
+ * Between -1.0 and +1.0
158
+ */
159
+ attPointCoord: "vec2",
145
160
  },
146
161
  varying: {
147
- varUV: "vec2",
162
+ varColor: "vec4",
163
+ varPointCoord: "vec2",
164
+ varDepth: "float",
148
165
  },
149
166
  mainCode: [
150
167
  "vec4 attPoint = mix(attPoint_A, attPoint_B, uniMix);",
151
168
  "vec2 attUV = mix(attUV_A, attUV_B, uniMix);",
152
- "varUV = attUV;",
153
- "float radius = attPoint.w;",
154
- "vec4 point = uniModelViewMatrix * vec4(attPoint.xyz, 1.0);",
155
- "vec4 shift = point + vec4(0, uniRadiusMultiplier * radius, 0, 0);",
156
- "gl_Position = uniProjectionMatrix * point;",
157
- "vec4 screenShift = uniProjectionMatrix * shift;",
158
- "gl_PointSize = max(",
159
- " uniMinSizeInPixels,",
160
- " abs(screenShift.y - gl_Position.y) * uniScreenHeightInPixels / gl_Position.w",
161
- ");",
169
+ ...vertInstancesCode(),
162
170
  ],
163
171
  }).code;
164
172
  const frag = new TgdShaderFragment({
165
173
  uniforms: {
166
- uniTexture: "sampler2D",
167
174
  uniSpecularExponent: "float",
168
175
  uniSpecularIntensity: "float",
169
176
  uniShadowIntensity: "float",
@@ -171,28 +178,26 @@ export class TgdPainterPointsCloudMorphing extends TgdPainter {
171
178
  uniLight: "float",
172
179
  },
173
180
  varying: {
174
- varUV: "vec2",
181
+ varColor: "vec4",
182
+ varPointCoord: "vec2",
183
+ varDepth: "float",
175
184
  },
176
185
  outputs: { FragColor: "vec4" },
177
186
  functions: {
178
187
  render: [
179
188
  "vec4 render(vec4 color) {",
180
- render ?? [
181
- "vec2 coords = 2.0 * (gl_PointCoord - vec2(.5));",
182
- "float len = 1.0 - dot(coords, coords);",
183
- "if (len < 0.0) discard;",
184
- "gl_FragDepth = gl_FragCoord.z - len * 1e-5;",
185
- "float light = smoothstep(0.0, uniShadowThickness, len) * uniShadowIntensity + (1.0 - uniShadowIntensity);",
186
- "float spec = pow(len, uniSpecularExponent) * uniSpecularIntensity;",
187
- "return color * vec4(vec3(light * uniLight), 1.0) + vec4(vec3(spec), 0.0);",
188
- ],
189
+ render ??
190
+ fragCodeSphere({
191
+ ...this.options,
192
+ enableSpecular: this.options.enableSpecular ?? true,
193
+ }),
189
194
  "}",
190
195
  ],
191
196
  },
192
- mainCode: ["vec4 color = texture(uniTexture, varUV);", "FragColor = render(color);"],
197
+ mainCode: ["vec4 color = varColor;", "FragColor = render(color);"],
193
198
  }).code;
194
199
  const program = new TgdProgram(this.context.gl, { vert, frag });
195
200
  return program;
196
201
  }
197
202
  }
198
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicG9pbnRzLWNsb3VkLW1vcnBoaW5nLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL3BhaW50ZXIvcG9pbnRzLWNsb3VkL3BvaW50cy1jbG91ZC1tb3JwaGluZy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxZQUFZLENBQUE7QUFFakQsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGNBQWMsQ0FBQTtBQUN6QyxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sY0FBYyxDQUFBO0FBQ3pDLE9BQU8sRUFBb0IsaUJBQWlCLEVBQUUsZUFBZSxFQUFFLE1BQU0sYUFBYSxDQUFBO0FBQ2xGLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxjQUFjLENBQUE7QUFDM0MsT0FBTyxFQUFFLGlDQUFpQyxFQUFFLE1BQU0sWUFBWSxDQUFBO0FBQzlELE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxVQUFVLENBQUE7QUFDekMsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLFlBQVksQ0FBQTtBQStFdkMsTUFBTSxPQUFPLDZCQUE4QixTQUFRLFVBQVU7SUFDekQ7O09BRUc7SUFDSCxNQUFNLENBQUMsY0FBYyxDQUNqQixVQU1LLEVBQUU7UUFFUCxNQUFNLEVBQUUsZ0JBQWdCLEVBQUUsaUJBQWlCLEVBQUUsZUFBZSxFQUFFLGVBQWUsRUFBRSxLQUFLLEVBQUUsR0FBRyxPQUFPLENBQUE7UUFDaEcsTUFBTSxHQUFHLEdBQUcsT0FBTyxnQkFBZ0IsS0FBSyxRQUFRLENBQUMsQ0FBQyxDQUFDLGdCQUFnQixDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMscUJBQXFCLENBQUE7UUFDdEcsTUFBTSxHQUFHLEdBQUcsT0FBTyxpQkFBaUIsS0FBSyxRQUFRLENBQUMsQ0FBQyxDQUFDLGlCQUFpQixDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsc0JBQXNCLENBQUE7UUFDekcsTUFBTSxHQUFHLEdBQUcsT0FBTyxlQUFlLEtBQUssUUFBUSxDQUFDLENBQUMsQ0FBQyxlQUFlLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxvQkFBb0IsQ0FBQTtRQUNuRyxNQUFNLEdBQUcsR0FBRyxPQUFPLGVBQWUsS0FBSyxRQUFRLENBQUMsQ0FBQyxDQUFDLGVBQWUsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLG9CQUFvQixDQUFBO1FBQ25HLE1BQU0sQ0FBQyxHQUFHLE9BQU8sS0FBSyxLQUFLLFFBQVEsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFBO1FBQ25FLE9BQU87WUFDSCxpREFBaUQ7WUFDakQsd0NBQXdDO1lBQ3hDLHlCQUF5QjtZQUN6Qiw2Q0FBNkM7WUFDN0MsaUNBQWlDLEdBQUcsWUFBWSxHQUFHLGFBQWEsR0FBRyxJQUFJO1lBQ3ZFLGlCQUFpQixDQUFDLENBQUMsQ0FBQyx5QkFBeUIsR0FBRyxPQUFPLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxpQkFBaUI7WUFDakYsb0NBQW9DLENBQUMsa0NBQWtDO1NBQzFFLENBQUE7SUFDTCxDQUFDO0lBc0JELFlBQ29CLE9BQW1CLEVBQ25DLE9BQTZDO1FBRTdDLEtBQUssRUFBRSxDQUFBO1FBSFMsWUFBTyxHQUFQLE9BQU8sQ0FBWTtRQXJCdkM7O1dBRUc7UUFDSSxRQUFHLEdBQUcsQ0FBQyxDQUFBO1FBRVAscUJBQWdCLEdBQUcsQ0FBQyxDQUFBO1FBQ3BCLG9CQUFlLEdBQUcsQ0FBQyxDQUFBO1FBRW5CLHFCQUFnQixHQUFHLEVBQUUsQ0FBQTtRQUNyQixzQkFBaUIsR0FBRyxJQUFJLENBQUE7UUFDeEIsb0JBQWUsR0FBRyxHQUFHLENBQUE7UUFDckIsb0JBQWUsR0FBRyxDQUFDLENBQUE7UUFDbkIsVUFBSyxHQUFHLENBQUMsQ0FBQTtRQUdDLGFBQVEsR0FBaUIsRUFBRSxDQUFBO1FBVXhDLElBQUksQ0FBQyxJQUFJLEdBQUcsT0FBTyxDQUFDLElBQUksSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFBO1FBQ3JDLElBQUksQ0FBQyxHQUFHLEdBQUcsT0FBTyxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUE7UUFDM0IsSUFBSSxDQUFDLGdCQUFnQixHQUFHLE9BQU8sQ0FBQyxnQkFBZ0IsSUFBSSxDQUFDLENBQUE7UUFDckQsSUFBSSxDQUFDLGVBQWUsR0FBRyxPQUFPLENBQUMsZUFBZSxJQUFJLENBQUMsQ0FBQTtRQUNuRCxJQUFJLENBQUMsZ0JBQWdCLEdBQUcsT0FBTyxDQUFDLGdCQUFnQixJQUFJLEVBQUUsQ0FBQTtRQUN0RCxJQUFJLENBQUMsaUJBQWlCLEdBQUcsT0FBTyxDQUFDLGlCQUFpQixJQUFJLElBQUksQ0FBQTtRQUMxRCxJQUFJLENBQUMsZUFBZSxHQUFHLE9BQU8sQ0FBQyxlQUFlLElBQUksR0FBRyxDQUFBO1FBQ3JELElBQUksQ0FBQyxlQUFlLEdBQUcsT0FBTyxDQUFDLGVBQWUsSUFBSSxDQUFDLENBQUE7UUFDbkQsSUFBSSxDQUFDLEtBQUssR0FBRyxPQUFPLENBQUMsS0FBSyxJQUFJLENBQUMsQ0FBQTtRQUMvQixJQUFJLE9BQU8sQ0FBQyxPQUFPLEVBQUUsQ0FBQztZQUNsQixJQUFJLENBQUMsT0FBTyxHQUFHLE9BQU8sQ0FBQyxPQUFPLENBQUE7WUFDOUIsSUFBSSxDQUFDLG9CQUFvQixHQUFHLEtBQUssQ0FBQTtRQUNyQyxDQUFDO2FBQU0sQ0FBQztZQUNKLElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxZQUFZLENBQUMsT0FBTyxDQUFDLENBQUMsVUFBVSxDQUMvQyxpQ0FBaUMsQ0FBQyxHQUFHLEVBQUUsb0JBQW9CLENBQUMsRUFBRSxTQUFTLEVBQUUsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUNuRixDQUFBO1lBQ0QsSUFBSSxDQUFDLG9CQUFvQixHQUFHLElBQUksQ0FBQTtRQUNwQyxDQUFDO1FBQ0QsSUFBSSxPQUFPLENBQUMsSUFBSSxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUUsQ0FBQztZQUM1QixNQUFNLElBQUksS0FBSyxDQUFDLHlEQUF5RCxDQUFDLENBQUE7UUFDOUUsQ0FBQztRQUNELElBQUksQ0FBQyxNQUFNLEdBQUcsT0FBTyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsS0FBSyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsS0FBSyxDQUFDLE1BQU0sSUFBSSxDQUFDLENBQUMsQ0FBQTtRQUNsRSxJQUFJLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxDQUFBO1FBQ25ELElBQUksQ0FBQyxJQUFJLEdBQUcsT0FBTyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEtBQUssRUFBRSxLQUFLLENBQUMsRUFBRSxFQUFFO1lBQzVDLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsS0FBSyxFQUFFLEdBQUcsQ0FBQyxDQUFBO1lBQy9DLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsS0FBSyxFQUFFLEdBQUcsQ0FBQyxDQUFBO1lBQy9DLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxRQUFRLENBQUMsQ0FBQTtZQUN0QyxPQUFPLElBQUksY0FBYyxDQUFDLE9BQU8sQ0FBQyxFQUFFLEVBQUUsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDLFFBQVEsRUFBRSxRQUFRLENBQUMsQ0FBQyxDQUFBO1FBQzdFLENBQUMsQ0FBQyxDQUFBO0lBQ04sQ0FBQztJQUVELE1BQU07UUFDRixJQUFJLElBQUksQ0FBQyxvQkFBb0I7WUFBRSxJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sRUFBRSxDQUFBO1FBQ3BELElBQUksQ0FBQyxPQUFPLENBQUMsTUFBTSxFQUFFLENBQUE7UUFDckIsSUFBSSxDQUFDLEdBQUcsQ0FBQyxNQUFNLEVBQUUsQ0FBQTtJQUNyQixDQUFDO0lBRUQsS0FBSztRQUNELE1BQU0sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLEdBQUcsRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLGdCQUFnQixFQUFFLGVBQWUsRUFBRSxHQUFHLElBQUksQ0FBQTtRQUN6RixNQUFNLEVBQUUsRUFBRSxFQUFFLE1BQU0sRUFBRSxHQUFHLE9BQU8sQ0FBQTtRQUM5QixPQUFPLENBQUMsR0FBRyxFQUFFLENBQUE7UUFDYixPQUFPLENBQUMsUUFBUSxDQUFDLENBQUMsRUFBRSxPQUFPLEVBQUUsWUFBWSxDQUFDLENBQUE7UUFDMUMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxRQUFRLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFBO1FBQ3JDLE9BQU8sQ0FBQyxTQUFTLENBQUMscUJBQXFCLEVBQUUsZ0JBQWdCLENBQUMsQ0FBQTtRQUMxRCxPQUFPLENBQUMsU0FBUyxDQUFDLG9CQUFvQixFQUFFLGVBQWUsQ0FBQyxDQUFBO1FBQ3hELE9BQU8sQ0FBQyxTQUFTLENBQUMseUJBQXlCLEVBQUUsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFBO1FBQzVELE9BQU8sQ0FBQyxTQUFTLENBQUMscUJBQXFCLEVBQUUsSUFBSSxDQUFDLGdCQUFnQixDQUFDLENBQUE7UUFDL0QsT0FBTyxDQUFDLFNBQVMsQ0FBQyxzQkFBc0IsRUFBRSxJQUFJLENBQUMsaUJBQWlCLENBQUMsQ0FBQTtRQUNqRSxPQUFPLENBQUMsU0FBUyxDQUFDLG9CQUFvQixFQUFFLElBQUksQ0FBQyxlQUFlLENBQUMsQ0FBQTtRQUM3RCxPQUFPLENBQUMsU0FBUyxDQUFDLG9CQUFvQixFQUFFLElBQUksQ0FBQyxlQUFlLENBQUMsQ0FBQTtRQUM3RCxPQUFPLENBQUMsU0FBUyxDQUFDLFVBQVUsRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUE7UUFDekMsT0FBTyxDQUFDLGdCQUFnQixDQUFDLG9CQUFvQixFQUFFLE1BQU0sQ0FBQyxlQUFlLENBQUMsQ0FBQTtRQUN0RSxPQUFPLENBQUMsZ0JBQWdCLENBQUMscUJBQXFCLEVBQUUsTUFBTSxDQUFDLGdCQUFnQixDQUFDLENBQUE7UUFDeEUsR0FBRyxDQUFDLElBQUksRUFBRSxDQUFBO1FBQ1YsRUFBRSxDQUFDLFVBQVUsQ0FBQyxFQUFFLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxLQUFLLENBQUMsQ0FBQTtRQUNsQyxHQUFHLENBQUMsTUFBTSxFQUFFLENBQUE7SUFDaEIsQ0FBQztJQUVPLGFBQWEsQ0FBQyxJQUF1QyxFQUFFLE1BQWM7UUFDekUsTUFBTSxFQUFFLEtBQUssRUFBRSxHQUFHLElBQUksQ0FBQTtRQUN0QixJQUFJLEtBQUssQ0FBQyxNQUFNLEdBQUcsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDO1lBQ3pCLE1BQU0sSUFBSSxLQUFLLENBQ1gsZ0ZBQWdGLEtBQUssQ0FBQyxNQUFNLEVBQUUsQ0FDakcsQ0FBQTtRQUNMLENBQUM7UUFDRCxNQUFNLEVBQUUsR0FBRyxJQUFJLENBQUMsRUFBRSxJQUFJLElBQUksWUFBWSxDQUFDLEtBQUssQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUE7UUFDeEQsSUFBSSxFQUFFLENBQUMsTUFBTSxHQUFHLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQztZQUN0QixNQUFNLElBQUksS0FBSyxDQUFDLDZFQUE2RSxFQUFFLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQTtRQUM3RyxDQUFDO1FBQ0QsSUFBSSxLQUFLLENBQUMsTUFBTSxLQUFLLEVBQUUsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFLENBQUM7WUFDakMsTUFBTSxJQUFJLEtBQUssQ0FDWCw4RkFBOEYsS0FBSyxDQUFDLE1BQU0sbUJBQW1CLEVBQUUsQ0FBQyxNQUFNLEVBQUUsQ0FDM0ksQ0FBQTtRQUNMLENBQUM7UUFDRCxNQUFNLFFBQVEsR0FBRyxZQUFZLE1BQU0sRUFBRSxDQUFBO1FBQ3JDLE1BQU0sS0FBSyxHQUFHLFNBQVMsTUFBTSxFQUFFLENBQUE7UUFDL0IsTUFBTSxPQUFPLEdBQUcsSUFBSSxVQUFVLENBQUM7WUFDM0IsQ0FBQyxRQUFRLENBQUMsRUFBRSxNQUFNO1lBQ2xCLENBQUMsS0FBSyxDQUFDLEVBQUUsTUFBTTtTQUNsQixDQUFDLENBQUE7UUFDRixPQUFPLENBQUMsR0FBRyxDQUFDLFFBQVEsRUFBRSxLQUFLLENBQUMsQ0FBQTtRQUM1QixPQUFPLENBQUMsR0FBRyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQTtRQUN0QixPQUFPLE9BQU8sQ0FBQTtJQUNsQixDQUFDO0lBRUQsSUFBSSxLQUFLO1FBQ0wsTUFBTSxDQUFDLEtBQUssQ0FBQyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUE7UUFDM0IsT0FBTyxLQUFLLENBQUE7SUFDaEIsQ0FBQztJQUVELElBQVksR0FBRztRQUNYLE1BQU0sQ0FBQyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFBO1FBQ3ZCLE9BQU8sR0FBRyxDQUFBO0lBQ2QsQ0FBQztJQUVPLGFBQWEsQ0FBQyxNQUFvQjtRQUN0QyxNQUFNLElBQUksR0FBRyxJQUFJLGVBQWUsQ0FBQztZQUM3QixRQUFRLEVBQUU7Z0JBQ04sTUFBTSxFQUFFLE9BQU87Z0JBQ2Ysa0JBQWtCLEVBQUUsT0FBTztnQkFDM0IsbUJBQW1CLEVBQUUsT0FBTztnQkFDNUIsdUJBQXVCLEVBQUUsT0FBTztnQkFDaEMsa0JBQWtCLEVBQUUsTUFBTTtnQkFDMUIsbUJBQW1CLEVBQUUsTUFBTTthQUM5QjtZQUNELFVBQVUsRUFBRTtnQkFDUixVQUFVLEVBQUUsTUFBTTtnQkFDbEIsT0FBTyxFQUFFLE1BQU07Z0JBQ2YsVUFBVSxFQUFFLE1BQU07Z0JBQ2xCLE9BQU8sRUFBRSxNQUFNO2FBQ2xCO1lBQ0QsT0FBTyxFQUFFO2dCQUNMLEtBQUssRUFBRSxNQUFNO2FBQ2hCO1lBQ0QsUUFBUSxFQUFFO2dCQUNOLHNEQUFzRDtnQkFDdEQsNkNBQTZDO2dCQUM3QyxnQkFBZ0I7Z0JBQ2hCLDRCQUE0QjtnQkFDNUIsNERBQTREO2dCQUM1RCxtRUFBbUU7Z0JBQ25FLDRDQUE0QztnQkFDNUMsaURBQWlEO2dCQUNqRCxxQkFBcUI7Z0JBQ3JCLHVCQUF1QjtnQkFDdkIsZ0ZBQWdGO2dCQUNoRixJQUFJO2FBQ1A7U0FDSixDQUFDLENBQUMsSUFBSSxDQUFBO1FBQ1AsTUFBTSxJQUFJLEdBQUcsSUFBSSxpQkFBaUIsQ0FBQztZQUMvQixRQUFRLEVBQUU7Z0JBQ04sVUFBVSxFQUFFLFdBQVc7Z0JBQ3ZCLG1CQUFtQixFQUFFLE9BQU87Z0JBQzVCLG9CQUFvQixFQUFFLE9BQU87Z0JBQzdCLGtCQUFrQixFQUFFLE9BQU87Z0JBQzNCLGtCQUFrQixFQUFFLE9BQU87Z0JBQzNCLFFBQVEsRUFBRSxPQUFPO2FBQ3BCO1lBQ0QsT0FBTyxFQUFFO2dCQUNMLEtBQUssRUFBRSxNQUFNO2FBQ2hCO1lBQ0QsT0FBTyxFQUFFLEVBQUUsU0FBUyxFQUFFLE1BQU0sRUFBRTtZQUM5QixTQUFTLEVBQUU7Z0JBQ1AsTUFBTSxFQUFFO29CQUNKLDJCQUEyQjtvQkFDM0IsTUFBTSxJQUFJO3dCQUNOLGlEQUFpRDt3QkFDakQsd0NBQXdDO3dCQUN4Qyx5QkFBeUI7d0JBQ3pCLDZDQUE2Qzt3QkFDN0MsMkdBQTJHO3dCQUMzRyxvRUFBb0U7d0JBQ3BFLDJFQUEyRTtxQkFDOUU7b0JBQ0QsR0FBRztpQkFDTjthQUNKO1lBQ0QsUUFBUSxFQUFFLENBQUMsMENBQTBDLEVBQUUsNEJBQTRCLENBQUM7U0FDdkYsQ0FBQyxDQUFDLElBQUksQ0FBQTtRQUNQLE1BQU0sT0FBTyxHQUFHLElBQUksVUFBVSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsRUFBRSxFQUFFLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxDQUFDLENBQUE7UUFDL0QsT0FBTyxPQUFPLENBQUE7SUFDbEIsQ0FBQztDQUNKIn0=
203
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicG9pbnRzLWNsb3VkLW1vcnBoaW5nLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL3BhaW50ZXIvcG9pbnRzLWNsb3VkL3BvaW50cy1jbG91ZC1tb3JwaGluZy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxZQUFZLENBQUE7QUFFakQsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGNBQWMsQ0FBQTtBQUN6QyxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sY0FBYyxDQUFBO0FBQ3pDLE9BQU8sRUFFSCxpQkFBaUIsRUFDakIsZUFBZSxHQUNsQixNQUFNLGFBQWEsQ0FBQTtBQUNwQixPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sY0FBYyxDQUFBO0FBQzNDLE9BQU8sRUFBRSxpQ0FBaUMsRUFBRSxNQUFNLFlBQVksQ0FBQTtBQUM5RCxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sVUFBVSxDQUFBO0FBQ3pDLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxZQUFZLENBQUE7QUFDdkMsT0FBTyxFQUFFLGNBQWMsRUFBdUMsTUFBTSx1QkFBdUIsQ0FBQTtBQUMzRixPQUFPLEVBQVksaUJBQWlCLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQTtBQW9GNUQsTUFBTSxPQUFPLDZCQUE4QixTQUFRLFVBQVU7SUFDekQ7O09BRUc7SUFDSCxNQUFNLENBQUMsY0FBYyxDQUNqQixVQUErQyxFQUFFO1FBRWpELE9BQU8sY0FBYyxDQUFDLE9BQU8sQ0FBQyxDQUFBO0lBQ2xDLENBQUM7SUFFRDs7T0FFRztJQUNILE1BQU0sQ0FBQyxZQUFZO1FBQ2YsT0FBTyw2QkFBNkIsQ0FBQyxZQUFZLEVBQUUsQ0FBQTtJQUN2RCxDQUFDO0lBc0JELFlBQ29CLE9BQW1CLEVBQ2xCLE9BQTZDO1FBRTlELEtBQUssRUFBRSxDQUFBO1FBSFMsWUFBTyxHQUFQLE9BQU8sQ0FBWTtRQUNsQixZQUFPLEdBQVAsT0FBTyxD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
@@ -1,7 +1,9 @@
1
- import { TgdContext } from "../../context";
2
- import { TgdCodeBloc } from "../../shader";
1
+ import type { TgdContext } from "../../context";
2
+ import { type TgdCodeBloc } from "../../shader";
3
3
  import { TgdTexture2D } from "../../texture";
4
4
  import { TgdPainter } from "../painter";
5
+ import { TgdPointsCloudFragCodeSphereOptions } from "./shaders/frag-sphere";
6
+ export { TgdPointsCloudFragCodeSphereOptions };
5
7
  export interface TgdPainterPointsCloudOptions {
6
8
  name?: string;
7
9
  /**
@@ -47,6 +49,11 @@ export interface TgdPainterPointsCloudOptions {
47
49
  * to provide preset functions.
48
50
  */
49
51
  fragCode?: TgdCodeBloc;
52
+ /**
53
+ * Enable specularity for default material.
54
+ * Default to `false`
55
+ */
56
+ enableSpecular?: boolean;
50
57
  /**
51
58
  * Default to 10
52
59
  */
@@ -70,16 +77,15 @@ export interface TgdPainterPointsCloudOptions {
70
77
  }
71
78
  export declare class TgdPainterPointsCloud extends TgdPainter {
72
79
  readonly context: TgdContext;
80
+ private readonly options;
73
81
  /**
74
82
  * Draw spheres with simple diffuse/specular material.
75
83
  */
76
- static fragCodeSphere(options?: Partial<{
77
- specularExponent: number;
78
- specularIntensity: number;
79
- shadowThickness: number;
80
- shadowIntensity: number;
81
- light: number;
82
- }>): TgdCodeBloc;
84
+ static fragCodeSphere(options?: TgdPointsCloudFragCodeSphereOptions): TgdCodeBloc;
85
+ /**
86
+ * Draw disk with uniform color.
87
+ */
88
+ static fragCodeFlat(): TgdCodeBloc;
83
89
  readonly count: number;
84
90
  texture: TgdTexture2D;
85
91
  radiusMultiplier: number;
@@ -92,13 +98,13 @@ export declare class TgdPainterPointsCloud extends TgdPainter {
92
98
  private readonly dataPoint;
93
99
  private readonly dataUV;
94
100
  private readonly textureMustBeDeleted;
95
- private readonly dataset;
96
101
  private readonly program;
97
102
  private readonly vao;
98
103
  constructor(context: TgdContext, options: TgdPainterPointsCloudOptions);
99
104
  delete(): void;
100
105
  paint(): void;
101
- private createDataset;
106
+ private createDatasetForInstances;
107
+ private createDatasetForBillboards;
102
108
  private createProgram;
103
109
  }
104
110
  //# sourceMappingURL=points-cloud.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"points-cloud.d.ts","sourceRoot":"","sources":["../../../src/painter/points-cloud/points-cloud.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAA;AAGzC,OAAO,EAAE,WAAW,EAAsC,MAAM,aAAa,CAAA;AAC7E,OAAO,EAAE,YAAY,EAAE,MAAM,cAAc,CAAA;AAG3C,OAAO,EAAE,UAAU,EAAE,MAAM,YAAY,CAAA;AAEvC,MAAM,WAAW,4BAA4B;IACzC,IAAI,CAAC,EAAE,MAAM,CAAA;IACb;;;OAGG;IACH,SAAS,EAAE,YAAY,CAAA;IACvB;;;OAGG;IACH,MAAM,CAAC,EAAE,YAAY,CAAA;IACrB;;;;OAIG;IACH,gBAAgB,CAAC,EAAE,MAAM,CAAA;IACzB;;;;;;OAMG;IACH,eAAe,CAAC,EAAE,MAAM,CAAA;IACxB,OAAO,CAAC,EAAE,YAAY,CAAA;IACtB;;;;;;;;;;;;;;;;OAgBG;IACH,QAAQ,CAAC,EAAE,WAAW,CAAA;IACtB;;OAEG;IACH,gBAAgB,CAAC,EAAE,MAAM,CAAA;IACzB;;OAEG;IACH,iBAAiB,CAAC,EAAE,MAAM,CAAA;IAC1B;;OAEG;IACH,eAAe,CAAC,EAAE,MAAM,CAAA;IACxB;;OAEG;IACH,eAAe,CAAC,EAAE,MAAM,CAAA;IACxB;;OAEG;IACH,KAAK,CAAC,EAAE,MAAM,CAAA;CACjB;AAED,qBAAa,qBAAsB,SAAQ,UAAU;aAiD7B,OAAO,EAAE,UAAU;IAhDvC;;OAEG;IACH,MAAM,CAAC,cAAc,CACjB,OAAO,GAAE,OAAO,CAAC;QACb,gBAAgB,EAAE,MAAM,CAAA;QACxB,iBAAiB,EAAE,MAAM,CAAA;QACzB,eAAe,EAAE,MAAM,CAAA;QACvB,eAAe,EAAE,MAAM,CAAA;QACvB,KAAK,EAAE,MAAM,CAAA;KAChB,CAAM,GACR,WAAW;IAkBd,SAAgB,KAAK,EAAE,MAAM,CAAA;IACtB,OAAO,EAAE,YAAY,CAAA;IACrB,gBAAgB,SAAI;IACpB,eAAe,SAAI;IAEnB,gBAAgB,SAAK;IACrB,iBAAiB,SAAO;IACxB,eAAe,SAAM;IACrB,eAAe,SAAI;IACnB,KAAK,SAAI;IAEhB,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAc;IACxC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAc;IACrC,OAAO,CAAC,QAAQ,CAAC,oBAAoB,CAAS;IAC9C,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAY;IACpC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAY;IACpC,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAgB;gBAGhB,OAAO,EAAE,UAAU,EACnC,OAAO,EAAE,4BAA4B;IAyCzC,MAAM,IAAI,IAAI;IAMd,KAAK,IAAI,IAAI;IAoBb,OAAO,CAAC,aAAa;IAUrB,OAAO,CAAC,aAAa;CA8DxB"}
1
+ {"version":3,"file":"points-cloud.d.ts","sourceRoot":"","sources":["../../../src/painter/points-cloud/points-cloud.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,cAAc,CAAA;AAG9C,OAAO,EACN,KAAK,WAAW,EAGhB,MAAM,aAAa,CAAA;AACpB,OAAO,EAAE,YAAY,EAAE,MAAM,cAAc,CAAA;AAG3C,OAAO,EAAE,UAAU,EAAE,MAAM,YAAY,CAAA;AAEvC,OAAO,EAEN,mCAAmC,EACnC,MAAM,uBAAuB,CAAA;AAG9B,OAAO,EAAE,mCAAmC,EAAE,CAAA;AAE9C,MAAM,WAAW,4BAA4B;IAC5C,IAAI,CAAC,EAAE,MAAM,CAAA;IACb;;;OAGG;IACH,SAAS,EAAE,YAAY,CAAA;IACvB;;;OAGG;IACH,MAAM,CAAC,EAAE,YAAY,CAAA;IACrB;;;;OAIG;IACH,gBAAgB,CAAC,EAAE,MAAM,CAAA;IACzB;;;;;;OAMG;IACH,eAAe,CAAC,EAAE,MAAM,CAAA;IACxB,OAAO,CAAC,EAAE,YAAY,CAAA;IACtB;;;;;;;;;;;;;;;;OAgBG;IACH,QAAQ,CAAC,EAAE,WAAW,CAAA;IACtB;;;OAGG;IACH,cAAc,CAAC,EAAE,OAAO,CAAA;IACxB;;OAEG;IACH,gBAAgB,CAAC,EAAE,MAAM,CAAA;IACzB;;OAEG;IACH,iBAAiB,CAAC,EAAE,MAAM,CAAA;IAC1B;;OAEG;IACH,eAAe,CAAC,EAAE,MAAM,CAAA;IACxB;;OAEG;IACH,eAAe,CAAC,EAAE,MAAM,CAAA;IACxB;;OAEG;IACH,KAAK,CAAC,EAAE,MAAM,CAAA;CACd;AAED,qBAAa,qBAAsB,SAAQ,UAAU;aAmCnC,OAAO,EAAE,UAAU;IACnC,OAAO,CAAC,QAAQ,CAAC,OAAO;IAnCzB;;OAEG;IACH,MAAM,CAAC,cAAc,CACpB,OAAO,GAAE,mCAAwC,GAC/C,WAAW;IAId;;OAEG;IACH,MAAM,CAAC,YAAY,IAAI,WAAW;IAIlC,SAAgB,KAAK,EAAE,MAAM,CAAA;IACtB,OAAO,EAAE,YAAY,CAAA;IACrB,gBAAgB,SAAI;IACpB,eAAe,SAAI;IAEnB,gBAAgB,SAAK;IACrB,iBAAiB,SAAI;IACrB,eAAe,SAAO;IACtB,eAAe,SAAM;IACrB,KAAK,SAAI;IAEhB,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAc;IACxC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAc;IACrC,OAAO,CAAC,QAAQ,CAAC,oBAAoB,CAAS;IAC9C,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAY;IACpC,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAgB;gBAGnB,OAAO,EAAE,UAAU,EAClB,OAAO,EAAE,4BAA4B;IAsDvD,MAAM,IAAI,IAAI;IAMd,KAAK,IAAI,IAAI;IA4Bb,OAAO,CAAC,yBAAyB;IAejC,OAAO,CAAC,0BAA0B;IAWlC,OAAO,CAAC,aAAa;CAuDrB"}
@@ -1,41 +1,37 @@
1
1
  import { tgdColorMakeHueWheel } from "./../../color/index.js";
2
2
  import { TgdDataset } from "./../../dataset/index.js";
3
3
  import { TgdProgram } from "./../../program/index.js";
4
- import { TgdShaderFragment, TgdShaderVertex } from "./../../shader/index.js";
4
+ import { TgdShaderFragment, TgdShaderVertex, } from "./../../shader/index.js";
5
5
  import { TgdTexture2D } from "./../../texture/index.js";
6
6
  import { tgdCanvasCreateGradientHorizontal } from "./../../utils/index.js";
7
7
  import { TgdVertexArray } from "./../../vao/index.js";
8
8
  import { TgdPainter } from "../painter.js";
9
+ import { fragCodeFlat } from "./shaders/frag-flat.js";
10
+ import { fragCodeSphere, } from "./shaders/frag-sphere.js";
11
+ import { vertInstancesCode } from "./shaders/vert.js";
9
12
  export class TgdPainterPointsCloud extends TgdPainter {
10
13
  /**
11
14
  * Draw spheres with simple diffuse/specular material.
12
15
  */
13
16
  static fragCodeSphere(options = {}) {
14
- const { specularExponent, specularIntensity, shadowThickness, shadowIntensity, light } = options;
15
- const SpE = typeof specularExponent === "number" ? specularExponent.toFixed(6) : "uniSpecularExponent";
16
- const SpI = typeof specularIntensity === "number" ? specularIntensity.toFixed(6) : "uniSpecularIntensity";
17
- const ShT = typeof shadowThickness === "number" ? shadowThickness.toFixed(6) : "uniShadowThickness";
18
- const ShI = typeof shadowIntensity === "number" ? shadowIntensity.toFixed(6) : "uniShadowIntensity";
19
- const L = typeof light === "number" ? light.toFixed(6) : "uniLight";
20
- return [
21
- "vec2 coords = 2.0 * (gl_PointCoord - vec2(.5));",
22
- "float len = 1.0 - dot(coords, coords);",
23
- "if (len < 0.0) discard;",
24
- "gl_FragDepth = gl_FragCoord.z - len * 1e-5;",
25
- `float light = smoothstep(0.0, ${ShT}, len) * ${ShI} + (1.0 - ${ShI});`,
26
- specularIntensity ? `float spec = pow(len, ${SpE}) * ${SpI};` : "// No specular.",
27
- `return color * vec4(vec3(light * ${L}), 1.0) + vec4(vec3(spec), 0.0);`,
28
- ];
17
+ return fragCodeSphere(options);
18
+ }
19
+ /**
20
+ * Draw disk with uniform color.
21
+ */
22
+ static fragCodeFlat() {
23
+ return fragCodeFlat();
29
24
  }
30
25
  constructor(context, options) {
31
26
  super();
32
27
  this.context = context;
28
+ this.options = options;
33
29
  this.radiusMultiplier = 1;
34
30
  this.minSizeInPixels = 0;
35
- this.specularExponent = 10;
36
- this.specularIntensity = 0.33;
37
- this.shadowIntensity = 0.5;
38
- this.shadowThickness = 1;
31
+ this.specularExponent = 14;
32
+ this.specularIntensity = 1;
33
+ this.shadowIntensity = 0.75;
34
+ this.shadowThickness = 1.2;
39
35
  this.light = 1;
40
36
  this.name = options.name ?? this.name;
41
37
  this.radiusMultiplier = options.radiusMultiplier ?? 1;
@@ -67,9 +63,13 @@ export class TgdPainterPointsCloud extends TgdPainter {
67
63
  this.textureMustBeDeleted = true;
68
64
  }
69
65
  this.count = this.dataUV.length >> 1;
70
- this.dataset = this.createDataset();
66
+ const datasetInstances = this.createDatasetForInstances();
67
+ const datasetBillboards = this.createDatasetForBillboards();
71
68
  this.program = this.createProgram(options.fragCode);
72
- this.vao = new TgdVertexArray(context.gl, this.program, [this.dataset]);
69
+ this.vao = new TgdVertexArray(context.gl, this.program, [
70
+ datasetInstances,
71
+ datasetBillboards,
72
+ ]);
73
73
  }
74
74
  delete() {
75
75
  if (this.textureMustBeDeleted)
@@ -78,65 +78,69 @@ export class TgdPainterPointsCloud extends TgdPainter {
78
78
  this.vao.delete();
79
79
  }
80
80
  paint() {
81
- const { context, program, vao, texture, count, radiusMultiplier, minSizeInPixels } = this;
81
+ const { context, program, vao, texture, count, radiusMultiplier, minSizeInPixels, } = this;
82
82
  const { gl, camera } = context;
83
83
  program.use();
84
84
  texture.activate(0, program, "uniTexture");
85
85
  program.uniform1f("uniRadiusMultiplier", radiusMultiplier);
86
- program.uniform1f("uniMinSizeInPixels", minSizeInPixels);
87
- program.uniform1f("uniScreenHeightInPixels", context.height);
86
+ program.uniform1f("uniMinSizeInPixels", minSizeInPixels / context.height);
88
87
  program.uniform1f("uniSpecularExponent", this.specularExponent);
89
88
  program.uniform1f("uniSpecularIntensity", this.specularIntensity);
90
89
  program.uniform1f("uniShadowIntensity", this.shadowIntensity);
91
90
  program.uniform1f("uniShadowThickness", this.shadowThickness);
92
91
  program.uniform1f("uniLight", this.light);
92
+ program.uniform2f("uniAspectRatio", context.aspectRatioInverse, 1);
93
93
  program.uniformMatrix4fv("uniModelViewMatrix", camera.matrixModelView);
94
94
  program.uniformMatrix4fv("uniProjectionMatrix", camera.matrixProjection);
95
95
  vao.bind();
96
- gl.drawArrays(gl.POINTS, 0, count);
96
+ gl.drawArraysInstanced(gl.TRIANGLE_FAN, 0, 4, count);
97
97
  vao.unbind();
98
98
  }
99
- createDataset() {
99
+ createDatasetForInstances() {
100
100
  const dataset = new TgdDataset({
101
101
  attPoint: "vec4",
102
102
  attUV: "vec2",
103
+ }, {
104
+ divisor: 1,
103
105
  });
104
106
  dataset.set("attPoint", this.dataPoint);
105
107
  dataset.set("attUV", this.dataUV);
106
108
  return dataset;
107
109
  }
110
+ createDatasetForBillboards() {
111
+ const dataset = new TgdDataset({
112
+ attPointCoord: "vec2",
113
+ });
114
+ dataset.set("attPointCoord", new Float32Array([-1, -1, -1, +1, +1, +1, +1, -1]));
115
+ return dataset;
116
+ }
108
117
  createProgram(render) {
109
118
  const vert = new TgdShaderVertex({
110
119
  uniforms: {
120
+ uniTexture: "sampler2D",
121
+ uniAspectRatio: "vec2",
111
122
  uniMinSizeInPixels: "float",
112
123
  uniRadiusMultiplier: "float",
113
- uniScreenHeightInPixels: "float",
114
124
  uniModelViewMatrix: "mat4",
115
125
  uniProjectionMatrix: "mat4",
116
126
  },
117
127
  attributes: {
118
128
  attPoint: "vec4",
119
129
  attUV: "vec2",
130
+ /**
131
+ * Between -1.0 and +1.0
132
+ */
133
+ attPointCoord: "vec2",
120
134
  },
121
135
  varying: {
122
- varUV: "vec2",
136
+ varColor: "vec4",
137
+ varPointCoord: "vec2",
138
+ varDepth: "float",
123
139
  },
124
- mainCode: [
125
- "varUV = attUV;",
126
- "float radius = attPoint.w;",
127
- "vec4 point = uniModelViewMatrix * vec4(attPoint.xyz, 1.0);",
128
- "vec4 shift = point + vec4(0, uniRadiusMultiplier * radius, 0, 0);",
129
- "gl_Position = uniProjectionMatrix * point;",
130
- "vec4 screenShift = uniProjectionMatrix * shift;",
131
- "gl_PointSize = max(",
132
- " uniMinSizeInPixels,",
133
- " abs(screenShift.y - gl_Position.y) * uniScreenHeightInPixels / gl_Position.w",
134
- ");",
135
- ],
140
+ mainCode: vertInstancesCode(),
136
141
  }).code;
137
142
  const frag = new TgdShaderFragment({
138
143
  uniforms: {
139
- uniTexture: "sampler2D",
140
144
  uniSpecularExponent: "float",
141
145
  uniSpecularIntensity: "float",
142
146
  uniShadowIntensity: "float",
@@ -144,28 +148,26 @@ export class TgdPainterPointsCloud extends TgdPainter {
144
148
  uniLight: "float",
145
149
  },
146
150
  varying: {
147
- varUV: "vec2",
151
+ varColor: "vec4",
152
+ varPointCoord: "vec2",
153
+ varDepth: "float",
148
154
  },
149
155
  outputs: { FragColor: "vec4" },
150
156
  functions: {
151
157
  render: [
152
158
  "vec4 render(vec4 color) {",
153
- render ?? [
154
- "vec2 coords = 2.0 * (gl_PointCoord - vec2(.5));",
155
- "float len = 1.0 - dot(coords, coords);",
156
- "if (len < 0.0) discard;",
157
- "gl_FragDepth = gl_FragCoord.z - len * 1e-5;",
158
- `float light = smoothstep(0.0, uniShadowThickness, len) * uniShadowIntensity + (1.0 - uniShadowIntensity);`,
159
- `float spec = pow(len, uniSpecularExponent) * uniSpecularIntensity;`,
160
- "return color * vec4(vec3(light * uniLight), 1.0) + vec4(vec3(spec), 0.0);",
161
- ],
159
+ render ??
160
+ fragCodeSphere({
161
+ ...this.options,
162
+ enableSpecular: this.options.enableSpecular ?? true,
163
+ }),
162
164
  "}",
163
165
  ],
164
166
  },
165
- mainCode: ["vec4 color = texture(uniTexture, varUV);", "FragColor = render(color);"],
167
+ mainCode: ["vec4 color = varColor;", "FragColor = render(color);"],
166
168
  }).code;
167
169
  const program = new TgdProgram(this.context.gl, { vert, frag });
168
170
  return program;
169
171
  }
170
172
  }
171
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicG9pbnRzLWNsb3VkLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL3BhaW50ZXIvcG9pbnRzLWNsb3VkL3BvaW50cy1jbG91ZC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxZQUFZLENBQUE7QUFFakQsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGNBQWMsQ0FBQTtBQUN6QyxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sY0FBYyxDQUFBO0FBQ3pDLE9BQU8sRUFBZSxpQkFBaUIsRUFBRSxlQUFlLEVBQUUsTUFBTSxhQUFhLENBQUE7QUFDN0UsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGNBQWMsQ0FBQTtBQUMzQyxPQUFPLEVBQUUsaUNBQWlDLEVBQUUsTUFBTSxZQUFZLENBQUE7QUFDOUQsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLFVBQVUsQ0FBQTtBQUN6QyxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sWUFBWSxDQUFBO0FBcUV2QyxNQUFNLE9BQU8scUJBQXNCLFNBQVEsVUFBVTtJQUNqRDs7T0FFRztJQUNILE1BQU0sQ0FBQyxjQUFjLENBQ2pCLFVBTUssRUFBRTtRQUVQLE1BQU0sRUFBRSxnQkFBZ0IsRUFBRSxpQkFBaUIsRUFBRSxlQUFlLEVBQUUsZUFBZSxFQUFFLEtBQUssRUFBRSxHQUFHLE9BQU8sQ0FBQTtRQUNoRyxNQUFNLEdBQUcsR0FBRyxPQUFPLGdCQUFnQixLQUFLLFFBQVEsQ0FBQyxDQUFDLENBQUMsZ0JBQWdCLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxxQkFBcUIsQ0FBQTtRQUN0RyxNQUFNLEdBQUcsR0FBRyxPQUFPLGlCQUFpQixLQUFLLFFBQVEsQ0FBQyxDQUFDLENBQUMsaUJBQWlCLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxzQkFBc0IsQ0FBQTtRQUN6RyxNQUFNLEdBQUcs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
173
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicG9pbnRzLWNsb3VkLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL3BhaW50ZXIvcG9pbnRzLWNsb3VkL3BvaW50cy1jbG91ZC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxZQUFZLENBQUE7QUFFakQsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGNBQWMsQ0FBQTtBQUN6QyxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sY0FBYyxDQUFBO0FBQ3pDLE9BQU8sRUFFTixpQkFBaUIsRUFDakIsZUFBZSxHQUNmLE1BQU0sYUFBYSxDQUFBO0FBQ3BCLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxjQUFjLENBQUE7QUFDM0MsT0FBTyxFQUFFLGlDQUFpQyxFQUFFLE1BQU0sWUFBWSxDQUFBO0FBQzlELE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxVQUFVLENBQUE7QUFDekMsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLFlBQVksQ0FBQTtBQUN2QyxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0scUJBQXFCLENBQUE7QUFDbEQsT0FBTyxFQUNOLGNBQWMsR0FFZCxNQUFNLHVCQUF1QixDQUFBO0FBQzlCLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGdCQUFnQixDQUFBO0FBNEVsRCxNQUFNLE9BQU8scUJBQXNCLFNBQVEsVUFBVTtJQUNwRDs7T0FFRztJQUNILE1BQU0sQ0FBQyxjQUFjLENBQ3BCLFVBQStDLEVBQUU7UUFFakQsT0FBTyxjQUFjLENBQUMsT0FBTyxDQUFDLENBQUE7SUFDL0IsQ0FBQztJQUVEOztPQUVHO0lBQ0gsTUFBTSxDQUFDLFlBQVk7UUFDbEIsT0FBTyxZQUFZLEVBQUUsQ0FBQTtJQUN0QixDQUFDO0lBbUJELFlBQ2lCLE9BQW1CLEVBQ2xCLE9BQXFDO1FBRXRELEtBQUssRUFBRSxDQUFBO1FBSFMsWUFBTyxHQUFQLE9BQU8sQ0FBWTtRQUNsQixZQUFP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
@@ -0,0 +1,3 @@
1
+ import type { TgdCodeBloc } from "../../../shader";
2
+ export declare function fragCodeFlat(): TgdCodeBloc;
3
+ //# sourceMappingURL=frag-flat.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"frag-flat.d.ts","sourceRoot":"","sources":["../../../../src/painter/points-cloud/shaders/frag-flat.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,aAAa,CAAA;AAE9C,wBAAgB,YAAY,IAAI,WAAW,CAO1C"}
@@ -0,0 +1,9 @@
1
+ export function fragCodeFlat() {
2
+ return [
3
+ "vec2 coords = varPointCoord;",
4
+ "float z2 = 1.0 - dot(coords, coords);",
5
+ "if (z2 < 0.0) discard;",
6
+ "return varColor;",
7
+ ];
8
+ }
9
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZnJhZy1mbGF0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL3BhaW50ZXIvcG9pbnRzLWNsb3VkL3NoYWRlcnMvZnJhZy1mbGF0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUVBLE1BQU0sVUFBVSxZQUFZO0lBQzNCLE9BQU87UUFDTiw4QkFBOEI7UUFDOUIsdUNBQXVDO1FBQ3ZDLHdCQUF3QjtRQUN4QixrQkFBa0I7S0FDbEIsQ0FBQTtBQUNGLENBQUMifQ==
@@ -0,0 +1,44 @@
1
+ import { TgdVec3 } from "../../../math";
2
+ import type { TgdCodeBloc } from "../../../shader";
3
+ import type { ArrayNumber3 } from "../../../types";
4
+ export type TgdPointsCloudFragCodeSphereOptions = {
5
+ /**
6
+ * Enable specularity.
7
+ * Default to `false`
8
+ */
9
+ enableSpecular?: boolean;
10
+ /**
11
+ * If defined, it will be hardcoded in the shader and won't use uniform to update.
12
+ */
13
+ specularExponent?: number;
14
+ /**
15
+ * If defined, it will be hardcoded in the shader and won't use uniform to update.
16
+ */
17
+ specularIntensity?: number;
18
+ /**
19
+ * If defined, it will be hardcoded in the shader and won't use uniform to update.
20
+ */
21
+ shadowThickness?: number;
22
+ /**
23
+ * If defined, it will be hardcoded in the shader and won't use uniform to update.
24
+ */
25
+ shadowIntensity?: number;
26
+ /**
27
+ * If defined, it will be hardcoded in the shader and won't use uniform to update.
28
+ */
29
+ light?: number;
30
+ /**
31
+ * This will always be hardcoded in the shader.
32
+ * Default to a light coming from the top left of the screen.
33
+ */
34
+ lightDirection?: TgdVec3 | ArrayNumber3;
35
+ /**
36
+ * The better the precision, the slower the rendering.
37
+ * - **none**: the sphere is seen as a flat sphere
38
+ * - **low**: fast approximation of a sphere, not perfect in the intersections
39
+ * - **high**: real sphere depth
40
+ */
41
+ depthPrecision?: "none" | "low" | "high";
42
+ };
43
+ export declare function fragCodeSphere(options?: TgdPointsCloudFragCodeSphereOptions): TgdCodeBloc;
44
+ //# sourceMappingURL=frag-sphere.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"frag-sphere.d.ts","sourceRoot":"","sources":["../../../../src/painter/points-cloud/shaders/frag-sphere.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AACnC,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,aAAa,CAAA;AAC9C,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,YAAY,CAAA;AAE9C,MAAM,MAAM,mCAAmC,GAAG;IAC9C;;;OAGG;IACH,cAAc,CAAC,EAAE,OAAO,CAAA;IACxB;;OAEG;IACH,gBAAgB,CAAC,EAAE,MAAM,CAAA;IACzB;;OAEG;IACH,iBAAiB,CAAC,EAAE,MAAM,CAAA;IAC1B;;OAEG;IACH,eAAe,CAAC,EAAE,MAAM,CAAA;IACxB;;OAEG;IACH,eAAe,CAAC,EAAE,MAAM,CAAA;IACxB;;OAEG;IACH,KAAK,CAAC,EAAE,MAAM,CAAA;IACd;;;OAGG;IACH,cAAc,CAAC,EAAE,OAAO,GAAG,YAAY,CAAA;IACvC;;;;;OAKG;IACH,cAAc,CAAC,EAAE,MAAM,GAAG,KAAK,GAAG,MAAM,CAAA;CAC3C,CAAA;AAID,wBAAgB,cAAc,CAC1B,OAAO,GAAE,mCAAwC,GAClD,WAAW,CA6Cb"}