@tolokoban/tgd 2.0.32 → 2.0.34

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 (111) hide show
  1. package/lib/dist/code/coords.d.ts +5 -0
  2. package/lib/dist/code/coords.d.ts.map +1 -1
  3. package/lib/dist/code/coords.js +7 -2
  4. package/lib/dist/code/index.d.ts +3 -0
  5. package/lib/dist/code/index.d.ts.map +1 -1
  6. package/lib/dist/code/index.js +4 -1
  7. package/lib/dist/code/math.d.ts +38 -0
  8. package/lib/dist/code/math.d.ts.map +1 -0
  9. package/lib/dist/code/math.js +70 -0
  10. package/lib/dist/code/noise.d.ts +21 -0
  11. package/lib/dist/code/noise.d.ts.map +1 -0
  12. package/lib/dist/code/noise.js +279 -0
  13. package/lib/dist/code/space.d.ts +24 -0
  14. package/lib/dist/code/space.d.ts.map +1 -0
  15. package/lib/dist/code/space.js +42 -0
  16. package/lib/dist/code/transfo.d.ts +2 -2
  17. package/lib/dist/code/transfo.d.ts.map +1 -1
  18. package/lib/dist/code/transfo.js +2 -2
  19. package/lib/dist/geometry/geometry.d.ts +4 -0
  20. package/lib/dist/geometry/geometry.d.ts.map +1 -1
  21. package/lib/dist/geometry/geometry.js +11 -3
  22. package/lib/dist/input/pointer.d.ts +5 -0
  23. package/lib/dist/input/pointer.d.ts.map +1 -1
  24. package/lib/dist/input/pointer.js +30 -2
  25. package/lib/dist/loader/binary.js +3 -3
  26. package/lib/dist/loader/image.d.ts +1 -0
  27. package/lib/dist/loader/image.d.ts.map +1 -1
  28. package/lib/dist/loader/image.js +22 -3
  29. package/lib/dist/material/camera-light.d.ts +23 -0
  30. package/lib/dist/material/camera-light.d.ts.map +1 -0
  31. package/lib/dist/material/camera-light.js +88 -0
  32. package/lib/dist/material/depth.d.ts +0 -8
  33. package/lib/dist/material/depth.d.ts.map +1 -1
  34. package/lib/dist/material/depth.js +12 -14
  35. package/lib/dist/material/diffuse.d.ts +1 -12
  36. package/lib/dist/material/diffuse.d.ts.map +1 -1
  37. package/lib/dist/material/diffuse.js +53 -44
  38. package/lib/dist/material/face-orientation.d.ts +0 -12
  39. package/lib/dist/material/face-orientation.d.ts.map +1 -1
  40. package/lib/dist/material/face-orientation.js +40 -37
  41. package/lib/dist/material/flat.d.ts +1 -11
  42. package/lib/dist/material/flat.d.ts.map +1 -1
  43. package/lib/dist/material/flat.js +7 -9
  44. package/lib/dist/material/ghost.d.ts +1 -9
  45. package/lib/dist/material/ghost.d.ts.map +1 -1
  46. package/lib/dist/material/ghost.js +15 -15
  47. package/lib/dist/material/hull.d.ts +1 -14
  48. package/lib/dist/material/hull.d.ts.map +1 -1
  49. package/lib/dist/material/hull.js +22 -25
  50. package/lib/dist/material/index.d.ts +0 -1
  51. package/lib/dist/material/index.d.ts.map +1 -1
  52. package/lib/dist/material/index.js +1 -2
  53. package/lib/dist/material/material.d.ts +52 -5
  54. package/lib/dist/material/material.d.ts.map +1 -1
  55. package/lib/dist/material/material.js +15 -18
  56. package/lib/dist/material/normals.d.ts +0 -9
  57. package/lib/dist/material/normals.d.ts.map +1 -1
  58. package/lib/dist/material/normals.js +10 -12
  59. package/lib/dist/material/toon.d.ts +3 -13
  60. package/lib/dist/material/toon.d.ts.map +1 -1
  61. package/lib/dist/material/toon.js +76 -63
  62. package/lib/dist/painter/fragment-dhader/filter.d.ts +31 -0
  63. package/lib/dist/painter/fragment-dhader/filter.d.ts.map +1 -0
  64. package/lib/dist/painter/fragment-dhader/filter.js +161 -0
  65. package/lib/dist/painter/fragment-dhader/index.d.ts +2 -0
  66. package/lib/dist/painter/fragment-dhader/index.d.ts.map +1 -0
  67. package/lib/dist/painter/fragment-dhader/index.js +2 -0
  68. package/lib/dist/painter/fragment-shader/filter.d.ts +31 -0
  69. package/lib/dist/painter/fragment-shader/filter.d.ts.map +1 -0
  70. package/lib/dist/painter/fragment-shader/filter.js +161 -0
  71. package/lib/dist/painter/fragment-shader/fragment-shader.d.ts +29 -0
  72. package/lib/dist/painter/fragment-shader/fragment-shader.d.ts.map +1 -0
  73. package/lib/dist/painter/fragment-shader/fragment-shader.js +70 -0
  74. package/lib/dist/painter/fragment-shader/index.d.ts +2 -0
  75. package/lib/dist/painter/fragment-shader/index.d.ts.map +1 -0
  76. package/lib/dist/painter/fragment-shader/index.js +2 -0
  77. package/lib/dist/painter/framebuffer-msaa.d.ts +5 -2
  78. package/lib/dist/painter/framebuffer-msaa.d.ts.map +1 -1
  79. package/lib/dist/painter/framebuffer-msaa.js +2 -2
  80. package/lib/dist/painter/index.d.ts +1 -0
  81. package/lib/dist/painter/index.d.ts.map +1 -1
  82. package/lib/dist/painter/index.js +2 -1
  83. package/lib/dist/painter/mesh/gltf/gltf.d.ts.map +1 -1
  84. package/lib/dist/painter/mesh/gltf/gltf.js +4 -3
  85. package/lib/dist/painter/mesh/mesh/mesh.d.ts.map +1 -1
  86. package/lib/dist/painter/mesh/mesh/mesh.js +9 -12
  87. package/lib/dist/painter/segments/segments.js +3 -2
  88. package/lib/dist/painter/x-ray/x-ray.d.ts +8 -2
  89. package/lib/dist/painter/x-ray/x-ray.d.ts.map +1 -1
  90. package/lib/dist/painter/x-ray/x-ray.js +1 -1
  91. package/lib/dist/parser/gltf/gltf.d.ts +17 -26
  92. package/lib/dist/parser/gltf/gltf.d.ts.map +1 -1
  93. package/lib/dist/parser/gltf/gltf.js +147 -128
  94. package/lib/dist/types/gltf.d.ts +69 -51
  95. package/lib/dist/types/gltf.d.ts.map +1 -1
  96. package/lib/dist/types/gltf.js +17 -3
  97. package/lib/dist/types/input-pointer.d.ts +4 -0
  98. package/lib/dist/types/input-pointer.d.ts.map +1 -1
  99. package/lib/dist/utils/cyclic-buffer.d.ts +12 -0
  100. package/lib/dist/utils/cyclic-buffer.d.ts.map +1 -0
  101. package/lib/dist/utils/cyclic-buffer.js +26 -0
  102. package/lib/dist/utils/index.d.ts +1 -0
  103. package/lib/dist/utils/index.d.ts.map +1 -1
  104. package/lib/dist/utils/index.js +2 -1
  105. package/lib/dist/utils/math.d.ts +1 -0
  106. package/lib/dist/utils/math.d.ts.map +1 -1
  107. package/lib/dist/utils/math.js +8 -1
  108. package/lib/dist/utils/webgl.d.ts +1 -1
  109. package/lib/dist/utils/webgl.d.ts.map +1 -1
  110. package/lib/dist/utils/webgl.js +4 -1
  111. package/package.json +2 -2
@@ -1,24 +1,21 @@
1
1
  import { TgdPainterState, } from "../index.js";
2
2
  export class TgdMaterial {
3
- constructor() {
4
- this.attPosition = "POSITION";
5
- this.attNormal = "NORMAL";
6
- this.attUV = "TEXCOORD_0";
7
- /**
8
- * Example:
9
- * ```
10
- * {
11
- * varNormal: "vec3",
12
- * varUV: "vec2"
13
- * }
14
- * ```
15
- */
16
- this.varyings = {};
17
- this.uniforms = {};
18
- this.state = {};
19
- }
20
3
  applyState(gl, action) {
21
4
  TgdPainterState.do(Object.assign({ gl }, this.state), action);
22
5
  }
6
+ constructor({ attPosition = "POSITION", attNormal = "NORMAL", attUV = "TEXCOORD_0", varyings = {}, uniforms = {}, fragmentShaderCode = ["return vec4(1, .666, .1, 1);"], extraFragmentShaderFunctions = {}, vertexShaderCode = [], extraVertexShaderFunctions = {}, vertexShaderCodeForGetPosition = "return pos;", setUniforms, state = {}, }) {
7
+ this.attPosition = attPosition;
8
+ this.attNormal = attNormal;
9
+ this.attUV = attUV;
10
+ this.varyings = varyings;
11
+ this.uniforms = uniforms;
12
+ this.fragmentShaderCode = fragmentShaderCode;
13
+ this.extraFragmentShaderFunctions = extraFragmentShaderFunctions;
14
+ this.vertexShaderCode = vertexShaderCode;
15
+ this.extraVertexShaderFunctions = extraVertexShaderFunctions;
16
+ this.vertexShaderCodeForGetPosition = vertexShaderCodeForGetPosition;
17
+ this.setUniforms = setUniforms;
18
+ this.state = state;
19
+ }
23
20
  }
24
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWF0ZXJpYWwuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvbWF0ZXJpYWwvbWF0ZXJpYWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUNILGVBQWUsR0FJbEIsTUFBTSxJQUFJLENBQUE7QUFHWCxNQUFNLE9BQWdCLFdBQVc7SUFBakM7UUFDVyxnQkFBVyxHQUFHLFVBQVUsQ0FBQTtRQUN4QixjQUFTLEdBQUcsUUFBUSxDQUFBO1FBQ3BCLFVBQUssR0FBRyxZQUFZLENBQUE7UUFFM0I7Ozs7Ozs7O1dBUUc7UUFDYSxhQUFRLEdBQTJDLEVBQUUsQ0FBQTtRQUVyRCxhQUFRLEdBQXlDLEVBQUUsQ0FBQTtRQXVCaEQsVUFBSyxHQUFvQyxFQUFFLENBQUE7SUFXbEUsQ0FBQztJQVRVLFVBQVUsQ0FBQyxFQUEwQixFQUFFLE1BQWtCO1FBQzVELGVBQWUsQ0FBQyxFQUFFLGlCQUVWLEVBQUUsSUFDQyxJQUFJLENBQUMsS0FBSyxHQUVqQixNQUFNLENBQ1QsQ0FBQTtJQUNMLENBQUM7Q0FDSiJ9
21
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWF0ZXJpYWwuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvbWF0ZXJpYWwvbWF0ZXJpYWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUNILGVBQWUsR0FJbEIsTUFBTSxJQUFJLENBQUE7QUE0Q1gsTUFBTSxPQUFPLFdBQVc7SUErQ2IsVUFBVSxDQUFDLEVBQTBCLEVBQUUsTUFBa0I7UUFDNUQsZUFBZSxDQUFDLEVBQUUsaUJBRVYsRUFBRSxJQUNDLElBQUksQ0FBQyxLQUFLLEdBRWpCLE1BQU0sQ0FDVCxDQUFBO0lBQ0wsQ0FBQztJQUVELFlBQVksRUFDUixXQUFXLEdBQUcsVUFBVSxFQUN4QixTQUFTLEdBQUcsUUFBUSxFQUNwQixLQUFLLEdBQUcsWUFBWSxFQUNwQixRQUFRLEdBQUcsRUFBRSxFQUNiLFFBQVEsR0FBRyxFQUFFLEVBQ2Isa0JBQWtCLEdBQUcsQ0FBQyw4QkFBOEIsQ0FBQyxFQUNyRCw0QkFBNEIsR0FBRyxFQUFFLEVBQ2pDLGdCQUFnQixHQUFHLEVBQUUsRUFDckIsMEJBQTBCLEdBQUcsRUFBRSxFQUMvQiw4QkFBOEIsR0FBRyxhQUFhLEVBQzlDLFdBQVcsRUFDWCxLQUFLLEdBQUcsRUFBRSxHQUNnQjtRQUMxQixJQUFJLENBQUMsV0FBVyxHQUFHLFdBQVcsQ0FBQTtRQUM5QixJQUFJLENBQUMsU0FBUyxHQUFHLFNBQVMsQ0FBQTtRQUMxQixJQUFJLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQTtRQUNsQixJQUFJLENBQUMsUUFBUSxHQUFHLFFBQVEsQ0FBQTtRQUN4QixJQUFJLENBQUMsUUFBUSxHQUFHLFFBQVEsQ0FBQTtRQUN4QixJQUFJLENBQUMsa0JBQWtCLEdBQUcsa0JBQWtCLENBQUE7UUFDNUMsSUFBSSxDQUFDLDRCQUE0QixHQUFHLDRCQUE0QixDQUFBO1FBQ2hFLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxnQkFBZ0IsQ0FBQTtRQUN4QyxJQUFJLENBQUMsMEJBQTBCLEdBQUcsMEJBQTBCLENBQUE7UUFDNUQsSUFBSSxDQUFDLDhCQUE4QixHQUFHLDhCQUE4QixDQUFBO1FBQ3BFLElBQUksQ0FBQyxXQUFXLEdBQUcsV0FBVyxDQUFBO1FBQzlCLElBQUksQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFBO0lBQ3RCLENBQUM7Q0FDSiJ9
@@ -1,14 +1,5 @@
1
- import { WebglAttributeType } from "../types";
2
1
  import { TgdMaterial } from "./material";
3
- import { TgdCodeBloc } from "../shader/code";
4
- import { TgdProgram } from "../program";
5
2
  export declare class TgdMaterialNormals extends TgdMaterial {
6
- readonly varyings: {
7
- [name: string]: WebglAttributeType;
8
- };
9
- readonly fragmentShaderCode: TgdCodeBloc;
10
- readonly vertexShaderCode: TgdCodeBloc;
11
3
  constructor();
12
- setUniforms(_program: TgdProgram): void;
13
4
  }
14
5
  //# sourceMappingURL=normals.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"normals.d.ts","sourceRoot":"","sources":["../../src/material/normals.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAA;AAC/C,OAAO,EAAE,WAAW,EAAE,MAAM,YAAY,CAAA;AACxC,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAA;AAC9C,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAA;AAEzC,qBAAa,kBAAmB,SAAQ,WAAW;IAC/C,SAAgB,QAAQ,EAAE;QAAE,CAAC,IAAI,EAAE,MAAM,GAAG,kBAAkB,CAAA;KAAE,CAAA;IAChE,SAAgB,kBAAkB,EAAE,WAAW,CAAA;IAC/C,SAAgB,gBAAgB,EAAE,WAAW,CAAA;;IAe7C,WAAW,CAAC,QAAQ,EAAE,UAAU,GAAG,IAAI;CAC1C"}
1
+ {"version":3,"file":"normals.d.ts","sourceRoot":"","sources":["../../src/material/normals.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,YAAY,CAAA;AAExC,qBAAa,kBAAmB,SAAQ,WAAW;;CAYlD"}
@@ -1,17 +1,15 @@
1
1
  import { TgdMaterial } from "./material.js";
2
2
  export class TgdMaterialNormals extends TgdMaterial {
3
3
  constructor() {
4
- super();
5
- this.fragmentShaderCode = [
6
- `vec3 color = vec3(1.0) + normalize(varNormal);`,
7
- `color *= 0.5;`,
8
- `return vec4(color, 1.0);`,
9
- ];
10
- this.vertexShaderCode = ["varNormal = NORMAL;"];
11
- this.varyings = {
12
- varNormal: "vec3",
13
- };
4
+ super({
5
+ varyings: { varNormal: "vec3" },
6
+ fragmentShaderCode: [
7
+ `vec3 color = vec3(1.0) + normalize(varNormal);`,
8
+ `color *= 0.5;`,
9
+ `return vec4(color, 1.0);`,
10
+ ],
11
+ vertexShaderCode: ["varNormal = NORMAL;"],
12
+ });
14
13
  }
15
- setUniforms(_program) { }
16
14
  }
17
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibm9ybWFscy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9tYXRlcmlhbC9ub3JtYWxzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxZQUFZLENBQUE7QUFJeEMsTUFBTSxPQUFPLGtCQUFtQixTQUFRLFdBQVc7SUFLL0M7UUFDSSxLQUFLLEVBQUUsQ0FBQTtRQUNQLElBQUksQ0FBQyxrQkFBa0IsR0FBRztZQUN0QixnREFBZ0Q7WUFDaEQsZUFBZTtZQUNmLDBCQUEwQjtTQUM3QixDQUFBO1FBQ0QsSUFBSSxDQUFDLGdCQUFnQixHQUFHLENBQUMscUJBQXFCLENBQUMsQ0FBQTtRQUMvQyxJQUFJLENBQUMsUUFBUSxHQUFHO1lBQ1osU0FBUyxFQUFFLE1BQU07U0FDcEIsQ0FBQTtJQUNMLENBQUM7SUFFRCxXQUFXLENBQUMsUUFBb0IsSUFBUyxDQUFDO0NBQzdDIn0=
15
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibm9ybWFscy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9tYXRlcmlhbC9ub3JtYWxzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxZQUFZLENBQUE7QUFFeEMsTUFBTSxPQUFPLGtCQUFtQixTQUFRLFdBQVc7SUFDL0M7UUFDSSxLQUFLLENBQUM7WUFDRixRQUFRLEVBQUUsRUFBRSxTQUFTLEVBQUUsTUFBTSxFQUFFO1lBQy9CLGtCQUFrQixFQUFFO2dCQUNoQixnREFBZ0Q7Z0JBQ2hELGVBQWU7Z0JBQ2YsMEJBQTBCO2FBQzdCO1lBQ0QsZ0JBQWdCLEVBQUUsQ0FBQyxxQkFBcUIsQ0FBQztTQUM1QyxDQUFDLENBQUE7SUFDTixDQUFDO0NBQ0oifQ==
@@ -1,10 +1,8 @@
1
- import { ArrayNumber4, WebglAttributeType, WebglUniformType } from "../types";
1
+ import { ArrayNumber4 } from "../types";
2
2
  import { TgdVec4 } from "../math";
3
3
  import { TgdMaterial } from "./material";
4
- import { TgdCodeBloc } from "../shader/code";
5
4
  import { TgdLight } from "../light";
6
5
  import { TgdTexture2D } from "../texture";
7
- import { TgdProgram } from "../program";
8
6
  export type TgdMaterialToonOptions = Partial<{
9
7
  color: TgdVec4 | ArrayNumber4 | TgdTexture2D;
10
8
  light: TgdLight;
@@ -12,6 +10,7 @@ export type TgdMaterialToonOptions = Partial<{
12
10
  specularSharpness: number;
13
11
  specularSize: number;
14
12
  specularIntensity: number;
13
+ shades: number;
15
14
  }>;
16
15
  export type TgdMaterialToonShades = number;
17
16
  export declare class TgdMaterialToon extends TgdMaterial {
@@ -20,19 +19,10 @@ export declare class TgdMaterialToon extends TgdMaterial {
20
19
  specularSharpness: number;
21
20
  specularSize: number;
22
21
  specularIntensity: number;
23
- readonly varyings: {
24
- [name: string]: WebglAttributeType;
25
- };
26
- readonly uniforms: {
27
- [name: string]: WebglUniformType;
28
- };
29
- readonly fragmentShaderCode: TgdCodeBloc;
30
- readonly vertexShaderCode: TgdCodeBloc;
22
+ shades: number;
31
23
  private readonly texture;
32
24
  private readonly lightColor;
33
25
  private readonly ambientColor;
34
- private _shades;
35
26
  constructor(options?: TgdMaterialToonOptions);
36
- setUniforms(program: TgdProgram): void;
37
27
  }
38
28
  //# sourceMappingURL=toon.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"toon.d.ts","sourceRoot":"","sources":["../../src/material/toon.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,kBAAkB,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAA;AAC/E,OAAO,EAAW,OAAO,EAAE,MAAM,WAAW,CAAA;AAC5C,OAAO,EAAE,WAAW,EAAE,MAAM,YAAY,CAAA;AACxC,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAA;AAC9C,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAA;AACrC,OAAO,EAAE,YAAY,EAAE,MAAM,cAAc,CAAA;AAC3C,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAA;AAEzC,MAAM,MAAM,sBAAsB,GAAG,OAAO,CAAC;IACzC,KAAK,EAAE,OAAO,GAAG,YAAY,GAAG,YAAY,CAAA;IAC5C,KAAK,EAAE,QAAQ,CAAA;IACf,OAAO,EAAE,QAAQ,CAAA;IACjB,iBAAiB,EAAE,MAAM,CAAA;IACzB,YAAY,EAAE,MAAM,CAAA;IACpB,iBAAiB,EAAE,MAAM,CAAA;CAC5B,CAAC,CAAA;AAIF,MAAM,MAAM,qBAAqB,GAAG,MAAM,CAAA;AAE1C,qBAAa,eAAgB,SAAQ,WAAW;IACrC,KAAK,WAEV;IACK,OAAO,WAAuD;IAC9D,iBAAiB,SAAM;IACvB,YAAY,SAAM;IAClB,iBAAiB,SAAM;IAE9B,SAAgB,QAAQ,EAAE;QAAE,CAAC,IAAI,EAAE,MAAM,GAAG,kBAAkB,CAAA;KAAE,CAAA;IAChE,SAAgB,QAAQ,EAAE;QAAE,CAAC,IAAI,EAAE,MAAM,GAAG,gBAAgB,CAAA;KAAE,CAQ7D;IACD,SAAgB,kBAAkB,EAAE,WAAW,CAAA;IAC/C,SAAgB,gBAAgB,EAAE,WAAW,CAAA;IAE7C,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAqB;IAC7C,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAgB;IAC3C,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAgB;IAE7C,OAAO,CAAC,OAAO,CAA2B;gBAE9B,OAAO,GAAE,sBAA2B;IAwDhD,WAAW,CAAC,OAAO,EAAE,UAAU,GAAG,IAAI;CAazC"}
1
+ {"version":3,"file":"toon.d.ts","sourceRoot":"","sources":["../../src/material/toon.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAwC,MAAM,YAAY,CAAA;AAC/E,OAAO,EAAW,OAAO,EAAE,MAAM,WAAW,CAAA;AAC5C,OAAO,EAAE,WAAW,EAAE,MAAM,YAAY,CAAA;AACxC,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAA;AACrC,OAAO,EAAE,YAAY,EAAE,MAAM,cAAc,CAAA;AAG3C,MAAM,MAAM,sBAAsB,GAAG,OAAO,CAAC;IACzC,KAAK,EAAE,OAAO,GAAG,YAAY,GAAG,YAAY,CAAA;IAC5C,KAAK,EAAE,QAAQ,CAAA;IACf,OAAO,EAAE,QAAQ,CAAA;IACjB,iBAAiB,EAAE,MAAM,CAAA;IACzB,YAAY,EAAE,MAAM,CAAA;IACpB,iBAAiB,EAAE,MAAM,CAAA;IACzB,MAAM,EAAE,MAAM,CAAA;CACjB,CAAC,CAAA;AAIF,MAAM,MAAM,qBAAqB,GAAG,MAAM,CAAA;AAE1C,qBAAa,eAAgB,SAAQ,WAAW;IACrC,KAAK,WAEV;IACK,OAAO,WAAuD;IAC9D,iBAAiB,SAAM;IACvB,YAAY,SAAM;IAClB,iBAAiB,SAAM;IACvB,MAAM,SAAI;IAEjB,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAqB;IAC7C,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAgB;IAC3C,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAgB;gBAEjC,OAAO,GAAE,sBAA2B;CAmGnD"}
@@ -5,16 +5,17 @@ import { TgdTexture2D } from "./../texture/index.js";
5
5
  const DEFAULT_COLOR = new TgdVec4(0.8, 0.6, 0.1, 1);
6
6
  export class TgdMaterialToon extends TgdMaterial {
7
7
  constructor(options = {}) {
8
- var _a;
9
- super();
10
- this.light = new TgdLight({
11
- direction: new TgdVec3(0.2, -0.3, -0.6).normalize(),
12
- });
13
- this.ambient = new TgdLight({ color: new TgdVec4(0.2, 0.1, 0, 0) });
14
- this.specularSharpness = 0.9;
15
- this.specularSize = 0.1;
16
- this.specularIntensity = 0.5;
17
- this.uniforms = {
8
+ var _a, _b, _c;
9
+ const color = options.color instanceof TgdTexture2D
10
+ ? options.color
11
+ : new TgdVec4((_a = options.color) !== null && _a !== void 0 ? _a : DEFAULT_COLOR);
12
+ const hasTexture = !(color instanceof TgdVec4);
13
+ const vertexShaderCode = [
14
+ "varNormal = mat3(uniTransfoMatrix) * NORMAL;",
15
+ ];
16
+ const uniforms = {
17
+ uniShades: "float",
18
+ uniShadesInverse: "float",
18
19
  uniLight: "vec3",
19
20
  uniLightDir: "vec3",
20
21
  uniAmbient: "vec3",
@@ -23,18 +24,75 @@ export class TgdMaterialToon extends TgdMaterial {
23
24
  uniSpecularIntensity: "float",
24
25
  uniModelViewMatrix: "mat4",
25
26
  };
27
+ const varyings = {
28
+ varNormal: "vec3",
29
+ };
30
+ if (hasTexture) {
31
+ vertexShaderCode.push("varUV = TEXCOORD_0;");
32
+ varyings.varUV = "vec2";
33
+ uniforms.texDiffuse = "sampler2D";
34
+ }
35
+ super({
36
+ uniforms,
37
+ varyings,
38
+ fragmentShaderCode: [
39
+ "vec3 normal = normalize(varNormal);",
40
+ `float light = .2 + .4 * (1.0 - dot(normal, uniLightDir));`,
41
+ `light *= uniShades;`,
42
+ `light -= fract(light);`,
43
+ `light /= uniShadesInverse;`,
44
+ hasTexture
45
+ ? `vec4 color = texture(texDiffuse, varUV);`
46
+ : `vec4 color = vec4(${color.join(", ")});`,
47
+ `vec3 normal2 = mat3(uniModelViewMatrix) * normal;`,
48
+ `float spec = max(0.0, reflect(uniLightDir, normal2).z);`,
49
+ `float a = 1.0 - uniSpecularSize;`,
50
+ `float b = a + (1.0 - a) * (1.0 * uniSpecularSharpness);`,
51
+ `spec = smoothstep(a, b, spec) * uniSpecularIntensity;`,
52
+ `color = vec4(`,
53
+ ` color.rgb * (`,
54
+ ` uniAmbient + uniLight * light`,
55
+ ` ) + vec3(spec),`,
56
+ ` 1.0`,
57
+ `);`,
58
+ `return color;`,
59
+ ],
60
+ setUniforms: (program) => {
61
+ program.uniform1f("uniShades", this.shades);
62
+ program.uniform1f("uniShadesInverse", 1 / this.shades);
63
+ program.uniform3fv("uniLightDir", this.light.direction);
64
+ this.lightColor.from(this.light.color).scale(this.light.color.w);
65
+ program.uniform3fv("uniLight", this.lightColor);
66
+ this.ambientColor
67
+ .from(this.ambient.color)
68
+ .scale(this.ambient.color.w);
69
+ program.uniform3fv("uniAmbient", this.ambientColor);
70
+ program.uniform1f("uniSpecularSharpness", this.specularSharpness);
71
+ program.uniform1f("uniSpecularSize", this.specularSize);
72
+ program.uniform1f("uniSpecularIntensity", this.specularIntensity);
73
+ const { texture } = this;
74
+ if (texture)
75
+ texture.activate(0, program, "texDiffuse");
76
+ },
77
+ });
78
+ this.light = new TgdLight({
79
+ direction: new TgdVec3(0.2, -0.3, -0.6).normalize(),
80
+ });
81
+ this.ambient = new TgdLight({ color: new TgdVec4(0.2, 0.1, 0, 0) });
82
+ this.specularSharpness = 0.9;
83
+ this.specularSize = 0.1;
84
+ this.specularIntensity = 0.5;
85
+ this.shades = 3;
26
86
  this.lightColor = new TgdVec3();
27
87
  this.ambientColor = new TgdVec3();
28
- this._shades = 3;
29
- const color = options.color instanceof TgdTexture2D
30
- ? options.color
31
- : new TgdVec4((_a = options.color) !== null && _a !== void 0 ? _a : DEFAULT_COLOR);
88
+ this.shades = (_b = options.shades) !== null && _b !== void 0 ? _b : this.shades;
32
89
  if (options.light) {
33
90
  this.light = options.light;
34
91
  }
35
- if (options.ambient) {
36
- this.ambient = options.ambient;
37
- }
92
+ this.ambient =
93
+ (_c = options.ambient) !== null && _c !== void 0 ? _c : new TgdLight({
94
+ color: new TgdVec4(1, 1, 1, 1),
95
+ });
38
96
  if (typeof options.specularSharpness === "number") {
39
97
  this.specularSharpness = options.specularSharpness;
40
98
  }
@@ -44,52 +102,7 @@ export class TgdMaterialToon extends TgdMaterial {
44
102
  if (typeof options.specularIntensity === "number") {
45
103
  this.specularIntensity = options.specularIntensity;
46
104
  }
47
- const hasTexture = !(color instanceof TgdVec4);
48
105
  this.texture = hasTexture ? color : null;
49
- this.fragmentShaderCode = [
50
- "vec3 normal = normalize(varNormal);",
51
- `float light = .2 + .4 * (1.0 - dot(normal, uniLightDir));`,
52
- `light *= 3.0;`,
53
- `light -= fract(light);`,
54
- `light /= 3.0;`,
55
- hasTexture
56
- ? `vec4 color = texture(texDiffuse, varUV);`
57
- : `vec4 color = vec4(${color.join(", ")});`,
58
- `vec3 normal2 = mat3(uniModelViewMatrix) * normal;`,
59
- `float spec = max(0.0, reflect(uniLightDir, normal2).z);`,
60
- `float a = 1.0 - uniSpecularSize;`,
61
- `float b = a + (1.0 - a) * (1.0 * uniSpecularSharpness);`,
62
- `spec = smoothstep(a, b, spec) * uniSpecularIntensity;`,
63
- `color = vec4(`,
64
- ` color.rgb * (`,
65
- ` uniAmbient + uniLight * light`,
66
- ` ) + vec3(spec),`,
67
- ` 1.0`,
68
- `);`,
69
- `return color;`,
70
- ];
71
- this.vertexShaderCode = ["varNormal = mat3(uniTransfoMatrix) * NORMAL;"];
72
- this.varyings = {
73
- varNormal: "vec3",
74
- };
75
- if (hasTexture) {
76
- this.vertexShaderCode.push("varUV = TEXCOORD_0;");
77
- this.varyings.varUV = "vec2";
78
- this.uniforms.texDiffuse = "sampler2D";
79
- }
80
- }
81
- setUniforms(program) {
82
- program.uniform3fv("uniLightDir", this.light.direction);
83
- this.lightColor.from(this.light.color).scale(this.light.color.w);
84
- program.uniform3fv("uniLight", this.lightColor);
85
- this.ambientColor.from(this.ambient.color).scale(this.ambient.color.w);
86
- program.uniform3fv("uniAmbient", this.ambientColor);
87
- program.uniform1f("uniSpecularSharpness", this.specularSharpness);
88
- program.uniform1f("uniSpecularSize", this.specularSize);
89
- program.uniform1f("uniSpecularIntensity", this.specularIntensity);
90
- const { texture } = this;
91
- if (texture)
92
- texture.activate(0, program, "texDiffuse");
93
106
  }
94
107
  }
95
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidG9vbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9tYXRlcmlhbC90b29uLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sV0FBVyxDQUFBO0FBQzVDLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxZQUFZLENBQUE7QUFFeEMsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLFlBQVksQ0FBQTtBQUNyQyxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sY0FBYyxDQUFBO0FBWTNDLE1BQU0sYUFBYSxHQUFHLElBQUksT0FBTyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFBO0FBSW5ELE1BQU0sT0FBTyxlQUFnQixTQUFRLFdBQVc7SUE0QjVDLFlBQVksVUFBa0MsRUFBRTs7UUFDNUMsS0FBSyxFQUFFLENBQUE7UUE1QkosVUFBSyxHQUFHLElBQUksUUFBUSxDQUFDO1lBQ3hCLFNBQVMsRUFBRSxJQUFJLE9BQU8sQ0FBQyxHQUFHLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxTQUFTLEVBQUU7U0FDdEQsQ0FBQyxDQUFBO1FBQ0ssWUFBTyxHQUFHLElBQUksUUFBUSxDQUFDLEVBQUUsS0FBSyxFQUFFLElBQUksT0FBTyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQTtRQUM5RCxzQkFBaUIsR0FBRyxHQUFHLENBQUE7UUFDdkIsaUJBQVksR0FBRyxHQUFHLENBQUE7UUFDbEIsc0JBQWlCLEdBQUcsR0FBRyxDQUFBO1FBR2QsYUFBUSxHQUF5QztZQUM3RCxRQUFRLEVBQUUsTUFBTTtZQUNoQixXQUFXLEVBQUUsTUFBTTtZQUNuQixVQUFVLEVBQUUsTUFBTTtZQUNsQixvQkFBb0IsRUFBRSxPQUFPO1lBQzdCLGVBQWUsRUFBRSxPQUFPO1lBQ3hC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
108
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidG9vbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9tYXRlcmlhbC90b29uLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sV0FBVyxDQUFBO0FBQzVDLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxZQUFZLENBQUE7QUFDeEMsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLFlBQVksQ0FBQTtBQUNyQyxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sY0FBYyxDQUFBO0FBYTNDLE1BQU0sYUFBYSxHQUFHLElBQUksT0FBTyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFBO0FBSW5ELE1BQU0sT0FBTyxlQUFnQixTQUFRLFdBQVc7SUFjNUMsWUFBWSxVQUFrQyxFQUFFOztRQUM1QyxNQUFNLEtBQUssR0FDUCxPQUFPLENBQUMsS0FBSyxZQUFZLFlBQVk7WUFDakMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxLQUFLO1lBQ2YsQ0FBQyxDQUFDLElBQUksT0FBTyxDQUFDLE1BQUEsT0FBTyxDQUFDLEtBQUssbUNBQUksYUFBYSxDQUFDLENBQUE7UUFDckQsTUFBTSxVQUFVLEdBQUcsQ0FBQyxDQUFDLEtBQUssWUFBWSxPQUFPLENBQUMsQ0FBQTtRQUM5QyxNQUFNLGdCQUFnQixHQUFHO1lBQ3JCLDhDQUE4QztTQUNqRCxDQUFBO1FBQ0QsTUFBTSxRQUFRLEdBQXlDO1lBQ25ELFNBQVMsRUFBRSxPQUFPO1lBQ2xCLGdCQUFnQixFQUFFLE9BQU87WUFDekIsUUFBUSxFQUFFLE1BQU07WUFDaEIsV0FBVyxFQUFFLE1BQU07WUFDbkIsVUFBVSxFQUFFLE1BQU07WUFDbEIsb0JBQW9CLEVBQUUsT0FBTztZQUM3QixlQUFlLEVBQUUsT0FBTztZQUN4QixvQkFBb0IsRUFBRSxPQUFPO1lBQzdCLGtCQUFrQixFQUFFLE1BQU07U0FDN0IsQ0FBQTtR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
@@ -0,0 +1,31 @@
1
+ import { TgdContext } from "../../context";
2
+ import { TgdPainter } from "../painter";
3
+ import { TgdFilter } from "../../filter";
4
+ import { TgdTexture2D } from "../../texture";
5
+ export interface TgdPainterFilterOptions {
6
+ filters: TgdFilter[];
7
+ texture?: TgdTexture2D;
8
+ z?: number;
9
+ name?: string;
10
+ flipY?: boolean;
11
+ }
12
+ export declare class TgdPainterFilter extends TgdPainter {
13
+ private readonly context;
14
+ texture?: TgdTexture2D;
15
+ z: number;
16
+ private readonly program;
17
+ private readonly filter;
18
+ private readonly vao;
19
+ private readonly programs;
20
+ private readonly filters;
21
+ private readonly vaos;
22
+ private readonly framebuffer;
23
+ private textures;
24
+ private texturesWith;
25
+ private texturesHeight;
26
+ constructor(context: TgdContext, options: TgdPainterFilterOptions);
27
+ delete(): void;
28
+ paint(time: number, delay: number): void;
29
+ private getTextures;
30
+ }
31
+ //# sourceMappingURL=filter.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"filter.d.ts","sourceRoot":"","sources":["../../../src/painter/fragment-dhader/filter.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAA;AACzC,OAAO,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAA;AAIjD,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAA;AAGvC,OAAO,EAAE,YAAY,EAAE,MAAM,cAAc,CAAA;AAG3C,MAAM,WAAW,uBAAuB;IACpC,OAAO,EAAE,SAAS,EAAE,CAAA;IACpB,OAAO,CAAC,EAAE,YAAY,CAAA;IACtB,CAAC,CAAC,EAAE,MAAM,CAAA;IACV,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,KAAK,CAAC,EAAE,OAAO,CAAA;CAClB;AAED,qBAAa,gBAAiB,SAAQ,UAAU;IAgBxC,OAAO,CAAC,QAAQ,CAAC,OAAO;IAfrB,OAAO,CAAC,EAAE,YAAY,CAAA;IACtB,CAAC,SAAI;IAEZ,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAY;IACpC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAW;IAClC,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAgB;IACpC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAc;IACvC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAa;IACrC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAkB;IACvC,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAkB;IAC9C,OAAO,CAAC,QAAQ,CAA4C;IAC5D,OAAO,CAAC,YAAY,CAAK;IACzB,OAAO,CAAC,cAAc,CAAK;gBAGN,OAAO,EAAE,UAAU,EACpC,OAAO,EAAE,uBAAuB;IAiEpC,MAAM,IAAI,IAAI;IAWd,KAAK,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI;IAuDxC,OAAO,CAAC,WAAW;CAyCtB"}
@@ -0,0 +1,161 @@
1
+ import { TgdPainter } from "./../painter.js";
2
+ import { TgdDataset } from "./../../dataset/dataset.js";
3
+ import { TgdVertexArray } from "./../../vao/index.js";
4
+ import { TgdShaderVertex } from "./../../shader/vertex.js";
5
+ import { TgdShaderFragment } from "./../../shader/fragment.js";
6
+ import { TgdProgram } from "./../../program/index.js";
7
+ export class TgdPainterFilter extends TgdPainter {
8
+ constructor(context, options) {
9
+ var _a, _b, _c;
10
+ super();
11
+ this.context = context;
12
+ this.z = 0;
13
+ this.textures = null;
14
+ this.texturesWith = -1;
15
+ this.texturesHeight = -1;
16
+ this.z = (_a = options.z) !== null && _a !== void 0 ? _a : 0.999999;
17
+ this.texture = options.texture;
18
+ const filters = (_b = options.filters) !== null && _b !== void 0 ? _b : [];
19
+ if (filters.length === 0) {
20
+ throw new Error(`[TgdPainterFilter] filters is expected to have at least one element!`);
21
+ }
22
+ const programs = filters.map(filter => {
23
+ const vert = new TgdShaderVertex({
24
+ attributes: {
25
+ attPoint: "vec2",
26
+ attUV: "vec2",
27
+ },
28
+ varying: {
29
+ varUV: "vec2",
30
+ },
31
+ uniforms: {
32
+ uniZ: "float",
33
+ },
34
+ mainCode: [
35
+ "varUV = attUV;",
36
+ "gl_Position = vec4(",
37
+ ["attPoint,", "uniZ,", "1.0"],
38
+ ");",
39
+ ],
40
+ }).code;
41
+ const frag = new TgdShaderFragment({
42
+ uniforms: Object.assign({ uniWidth: "float", uniHeight: "float", uniTexture: "sampler2D" }, filter.uniforms),
43
+ varying: {
44
+ varUV: "vec2",
45
+ },
46
+ mainCode: filter.fragmentShaderCode,
47
+ functions: filter.extraFunctions,
48
+ }).code;
49
+ return new TgdProgram(context.gl, { vert, frag });
50
+ });
51
+ const vaos = programs.map(program => createVAO(context, program, options.flipY ? -1 : +1));
52
+ this.program = programs.pop();
53
+ this.programs = programs;
54
+ this.filter = filters.pop();
55
+ this.filters = filters;
56
+ const vao = vaos.pop();
57
+ this.vaos = vaos;
58
+ const count = vaos.length + (options.flipY ? 1 : 0);
59
+ this.vao = count % 2 === 0 ? vao : createVAO(context, this.program, -1);
60
+ const framebuffer = context.gl.createFramebuffer();
61
+ if (!framebuffer)
62
+ throw new Error("Unable to create a WebGL Framebuffer!");
63
+ this.framebuffer = framebuffer;
64
+ this.name = (_c = options.name) !== null && _c !== void 0 ? _c : `Filter/${this.name}`;
65
+ }
66
+ delete() {
67
+ const { context, textures, vaos, vao, framebuffer } = this;
68
+ const { gl } = context;
69
+ for (const vao of vaos)
70
+ vao.delete();
71
+ vao.delete();
72
+ gl.deleteFramebuffer(framebuffer);
73
+ if (textures) {
74
+ for (const tex of textures)
75
+ gl.deleteTexture(tex);
76
+ }
77
+ }
78
+ paint(time, delay) {
79
+ const { vaos, texture, z, context } = this;
80
+ const { gl } = this.program;
81
+ let inputTexture = texture === null || texture === void 0 ? void 0 : texture.glTexture;
82
+ if (!inputTexture) {
83
+ console.warn("[TgdPainterFilter] Input texture is undefined!");
84
+ return;
85
+ }
86
+ if (vaos.length > 0) {
87
+ const { programs, filters, framebuffer } = this;
88
+ const currentFramebuffer = gl.getParameter(gl.FRAMEBUFFER_BINDING);
89
+ const textures = this.getTextures(gl);
90
+ let texIndex = 0;
91
+ let outputTexture = textures[texIndex];
92
+ for (const [index, vao] of vaos.entries()) {
93
+ gl.bindFramebuffer(gl.FRAMEBUFFER, framebuffer);
94
+ gl.framebufferTexture2D(gl.FRAMEBUFFER, gl.COLOR_ATTACHMENT0, gl.TEXTURE_2D, outputTexture, 0);
95
+ paintOneFilter(time, delay, vao, programs[index], filters[index], inputTexture, z, context);
96
+ texIndex = 1 - texIndex;
97
+ inputTexture = outputTexture;
98
+ outputTexture = textures[texIndex];
99
+ }
100
+ gl.bindFramebuffer(gl.FRAMEBUFFER, currentFramebuffer);
101
+ }
102
+ paintOneFilter(time, delay, this.vao, this.program, this.filter, inputTexture, z, context);
103
+ gl.bindVertexArray(null);
104
+ }
105
+ getTextures(gl) {
106
+ var _a;
107
+ const { width, height } = (_a = this.texture) !== null && _a !== void 0 ? _a : { width: 64, height: 64 };
108
+ if (this.textures &&
109
+ this.texturesWith === width &&
110
+ this.texturesHeight === height) {
111
+ return [...this.textures];
112
+ }
113
+ if (this.textures) {
114
+ for (const tex of this.textures)
115
+ gl.deleteTexture(tex);
116
+ }
117
+ this.texturesWith = width;
118
+ this.texturesHeight = height;
119
+ this.textures = [0, 1].map(() => {
120
+ const texture = gl.createTexture();
121
+ gl.bindTexture(gl.TEXTURE_2D, texture);
122
+ gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_S, gl.CLAMP_TO_EDGE);
123
+ gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_T, gl.CLAMP_TO_EDGE);
124
+ gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, gl.LINEAR);
125
+ gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, gl.LINEAR);
126
+ gl.texImage2D(gl.TEXTURE_2D, 0, gl.RGBA, width, height, 0, gl.RGBA, gl.UNSIGNED_BYTE, null);
127
+ return texture;
128
+ });
129
+ return this.textures;
130
+ }
131
+ }
132
+ function paintOneFilter(time, delay, vao, program, filter, texture, z, context) {
133
+ const { gl } = program;
134
+ program.use();
135
+ program.uniform1f("uniZ", z);
136
+ filter.setUniforms({ context, program, time, delay });
137
+ gl.activeTexture(gl.TEXTURE0);
138
+ gl.bindTexture(gl.TEXTURE_2D, texture);
139
+ program.uniform1i("uniTexture", 0);
140
+ vao.bind();
141
+ gl.drawArrays(gl.TRIANGLE_STRIP, 0, 4);
142
+ }
143
+ function createVAO(context, program, flipY = +1) {
144
+ const dataset = new TgdDataset({
145
+ attPoint: "vec2",
146
+ attUV: "vec2",
147
+ });
148
+ // prettier-ignore
149
+ dataset.set("attPoint", new Float32Array([
150
+ -1, +1 * flipY,
151
+ +1, +1 * flipY,
152
+ -1, -1 * flipY,
153
+ +1, -1 * flipY,
154
+ ]));
155
+ dataset.set("attUV", new Float32Array([0, 0, 1, 0, 0, 1, 1, 1]));
156
+ const vao = new TgdVertexArray(context.gl, program, [dataset]);
157
+ if (!vao)
158
+ throw new Error("Unable to create WebGL VAO!");
159
+ return vao;
160
+ }
161
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmlsdGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL3BhaW50ZXIvZnJhZ21lbnQtZGhhZGVyL2ZpbHRlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sc0JBQXNCLENBQUE7QUFDakQsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLHNCQUFzQixDQUFBO0FBQ2pELE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxVQUFVLENBQUE7QUFHekMsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLG9CQUFvQixDQUFBO0FBQ3BELE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLHNCQUFzQixDQUFBO0FBRXhELE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxjQUFjLENBQUE7QUFVekMsTUFBTSxPQUFPLGdCQUFpQixTQUFRLFVBQVU7SUFlNUMsWUFDcUIsT0FBbUIsRUFDcEMsT0FBZ0M7O1FBRWhDLEtBQUssRUFBRSxDQUFBO1FBSFUsWUFBTyxHQUFQLE9BQU8sQ0FBWTtRQWRqQyxNQUFDLEdBQUcsQ0FBQyxDQUFBO1FBU0osYUFBUSxHQUF3QyxJQUFJLENBQUE7UUFDcEQsaUJBQVksR0FBRyxDQUFDLENBQUMsQ0FBQTtRQUNqQixtQkFBYyxHQUFHLENBQUMsQ0FBQyxDQUFBO1FBT3ZCLElBQUksQ0FBQyxDQUFDLEdBQUcsTUFBQSxPQUFPLENBQUMsQ0FBQyxtQ0FBSSxRQUFRLENBQUE7UUFDOUIsSUFBSSxDQUFDLE9BQU8sR0FBRyxPQUFPLENBQUMsT0FBTyxDQUFBO1FBQzlCLE1BQU0sT0FBTyxHQUFHLE1BQUEsT0FBTyxDQUFDLE9BQU8sbUNBQUksRUFBRSxDQUFBO1FBQ3JDLElBQUksT0FBTyxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUUsQ0FBQztZQUN2QixNQUFNLElBQUksS0FBSyxDQUNYLHNFQUFzRSxDQUN6RSxDQUFBO1FBQ0wsQ0FBQztRQUVELE1BQU0sUUFBUSxHQUFHLE9B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
@@ -0,0 +1,2 @@
1
+ export * from "./filter";
2
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/painter/fragment-dhader/index.ts"],"names":[],"mappings":"AAAA,cAAc,UAAU,CAAA"}
@@ -0,0 +1,2 @@
1
+ export * from "./filter.js";
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvcGFpbnRlci9mcmFnbWVudC1kaGFkZXIvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsY0FBYyxVQUFVLENBQUEifQ==
@@ -0,0 +1,31 @@
1
+ import { TgdContext } from "../../context";
2
+ import { TgdPainter } from "../painter";
3
+ import { TgdFilter } from "../../filter";
4
+ import { TgdTexture2D } from "../../texture";
5
+ export interface TgdPainterFilterOptions {
6
+ filters: TgdFilter[];
7
+ texture?: TgdTexture2D;
8
+ z?: number;
9
+ name?: string;
10
+ flipY?: boolean;
11
+ }
12
+ export declare class TgdPainterFilter extends TgdPainter {
13
+ private readonly context;
14
+ texture?: TgdTexture2D;
15
+ z: number;
16
+ private readonly program;
17
+ private readonly filter;
18
+ private readonly vao;
19
+ private readonly programs;
20
+ private readonly filters;
21
+ private readonly vaos;
22
+ private readonly framebuffer;
23
+ private textures;
24
+ private texturesWith;
25
+ private texturesHeight;
26
+ constructor(context: TgdContext, options: TgdPainterFilterOptions);
27
+ delete(): void;
28
+ paint(time: number, delay: number): void;
29
+ private getTextures;
30
+ }
31
+ //# sourceMappingURL=filter.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"filter.d.ts","sourceRoot":"","sources":["../../../src/painter/fragment-shader/filter.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAA;AACzC,OAAO,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAA;AAIjD,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAA;AAGvC,OAAO,EAAE,YAAY,EAAE,MAAM,cAAc,CAAA;AAG3C,MAAM,WAAW,uBAAuB;IACpC,OAAO,EAAE,SAAS,EAAE,CAAA;IACpB,OAAO,CAAC,EAAE,YAAY,CAAA;IACtB,CAAC,CAAC,EAAE,MAAM,CAAA;IACV,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,KAAK,CAAC,EAAE,OAAO,CAAA;CAClB;AAED,qBAAa,gBAAiB,SAAQ,UAAU;IAgBxC,OAAO,CAAC,QAAQ,CAAC,OAAO;IAfrB,OAAO,CAAC,EAAE,YAAY,CAAA;IACtB,CAAC,SAAI;IAEZ,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAY;IACpC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAW;IAClC,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAgB;IACpC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAc;IACvC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAa;IACrC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAkB;IACvC,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAkB;IAC9C,OAAO,CAAC,QAAQ,CAA4C;IAC5D,OAAO,CAAC,YAAY,CAAK;IACzB,OAAO,CAAC,cAAc,CAAK;gBAGN,OAAO,EAAE,UAAU,EACpC,OAAO,EAAE,uBAAuB;IAiEpC,MAAM,IAAI,IAAI;IAWd,KAAK,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI;IAuDxC,OAAO,CAAC,WAAW;CAyCtB"}