@tolokoban/tgd 2.0.33 → 2.0.35
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.
- package/lib/dist/code/coords.d.ts +5 -0
- package/lib/dist/code/coords.d.ts.map +1 -1
- package/lib/dist/code/coords.js +7 -2
- package/lib/dist/code/index.d.ts +3 -0
- package/lib/dist/code/index.d.ts.map +1 -1
- package/lib/dist/code/index.js +4 -1
- package/lib/dist/code/math.d.ts +38 -0
- package/lib/dist/code/math.d.ts.map +1 -0
- package/lib/dist/code/math.js +70 -0
- package/lib/dist/code/noise.d.ts +21 -0
- package/lib/dist/code/noise.d.ts.map +1 -0
- package/lib/dist/code/noise.js +279 -0
- package/lib/dist/code/space.d.ts +24 -0
- package/lib/dist/code/space.d.ts.map +1 -0
- package/lib/dist/code/space.js +42 -0
- package/lib/dist/code/transfo.d.ts +2 -2
- package/lib/dist/code/transfo.d.ts.map +1 -1
- package/lib/dist/code/transfo.js +2 -2
- package/lib/dist/geometry/geometry.d.ts +4 -0
- package/lib/dist/geometry/geometry.d.ts.map +1 -1
- package/lib/dist/geometry/geometry.js +11 -3
- package/lib/dist/input/pointer.d.ts +5 -0
- package/lib/dist/input/pointer.d.ts.map +1 -1
- package/lib/dist/input/pointer.js +30 -2
- package/lib/dist/material/camera-light.d.ts +4 -15
- package/lib/dist/material/camera-light.d.ts.map +1 -1
- package/lib/dist/material/camera-light.js +55 -47
- package/lib/dist/material/depth.d.ts +0 -8
- package/lib/dist/material/depth.d.ts.map +1 -1
- package/lib/dist/material/depth.js +12 -14
- package/lib/dist/material/diffuse.d.ts +1 -12
- package/lib/dist/material/diffuse.d.ts.map +1 -1
- package/lib/dist/material/diffuse.js +53 -44
- package/lib/dist/material/face-orientation.d.ts +0 -12
- package/lib/dist/material/face-orientation.d.ts.map +1 -1
- package/lib/dist/material/face-orientation.js +40 -37
- package/lib/dist/material/flat.d.ts +1 -11
- package/lib/dist/material/flat.d.ts.map +1 -1
- package/lib/dist/material/flat.js +7 -9
- package/lib/dist/material/ghost.d.ts +1 -9
- package/lib/dist/material/ghost.d.ts.map +1 -1
- package/lib/dist/material/ghost.js +15 -15
- package/lib/dist/material/hull.d.ts +1 -14
- package/lib/dist/material/hull.d.ts.map +1 -1
- package/lib/dist/material/hull.js +22 -25
- package/lib/dist/material/index.d.ts +0 -1
- package/lib/dist/material/index.d.ts.map +1 -1
- package/lib/dist/material/index.js +1 -2
- package/lib/dist/material/material.d.ts +52 -5
- package/lib/dist/material/material.d.ts.map +1 -1
- package/lib/dist/material/material.js +15 -18
- package/lib/dist/material/normals.d.ts +0 -9
- package/lib/dist/material/normals.d.ts.map +1 -1
- package/lib/dist/material/normals.js +10 -12
- package/lib/dist/material/toon.d.ts +3 -13
- package/lib/dist/material/toon.d.ts.map +1 -1
- package/lib/dist/material/toon.js +76 -63
- package/lib/dist/painter/fragment-dhader/filter.d.ts +31 -0
- package/lib/dist/painter/fragment-dhader/filter.d.ts.map +1 -0
- package/lib/dist/painter/fragment-dhader/filter.js +161 -0
- package/lib/dist/painter/fragment-dhader/index.d.ts +2 -0
- package/lib/dist/painter/fragment-dhader/index.d.ts.map +1 -0
- package/lib/dist/painter/fragment-dhader/index.js +2 -0
- package/lib/dist/painter/fragment-shader/filter.d.ts +31 -0
- package/lib/dist/painter/fragment-shader/filter.d.ts.map +1 -0
- package/lib/dist/painter/fragment-shader/filter.js +161 -0
- package/lib/dist/painter/fragment-shader/fragment-shader.d.ts +29 -0
- package/lib/dist/painter/fragment-shader/fragment-shader.d.ts.map +1 -0
- package/lib/dist/painter/fragment-shader/fragment-shader.js +70 -0
- package/lib/dist/painter/fragment-shader/index.d.ts +2 -0
- package/lib/dist/painter/fragment-shader/index.d.ts.map +1 -0
- package/lib/dist/painter/fragment-shader/index.js +2 -0
- package/lib/dist/painter/framebuffer-msaa.d.ts +5 -2
- package/lib/dist/painter/framebuffer-msaa.d.ts.map +1 -1
- package/lib/dist/painter/framebuffer-msaa.js +2 -2
- package/lib/dist/painter/index.d.ts +1 -0
- package/lib/dist/painter/index.d.ts.map +1 -1
- package/lib/dist/painter/index.js +2 -1
- package/lib/dist/painter/mesh/gltf/gltf.d.ts.map +1 -1
- package/lib/dist/painter/mesh/gltf/gltf.js +1 -1
- package/lib/dist/painter/mesh/mesh/mesh.d.ts.map +1 -1
- package/lib/dist/painter/mesh/mesh/mesh.js +9 -12
- package/lib/dist/painter/segments/segments.js +3 -2
- package/lib/dist/painter/x-ray/x-ray.d.ts +8 -2
- package/lib/dist/painter/x-ray/x-ray.d.ts.map +1 -1
- package/lib/dist/painter/x-ray/x-ray.js +1 -1
- package/lib/dist/types/input-pointer.d.ts +4 -0
- package/lib/dist/types/input-pointer.d.ts.map +1 -1
- package/lib/dist/utils/cyclic-buffer.d.ts +12 -0
- package/lib/dist/utils/cyclic-buffer.d.ts.map +1 -0
- package/lib/dist/utils/cyclic-buffer.js +26 -0
- package/lib/dist/utils/index.d.ts +1 -0
- package/lib/dist/utils/index.d.ts.map +1 -1
- package/lib/dist/utils/index.js +2 -1
- package/lib/dist/utils/math.d.ts +1 -0
- package/lib/dist/utils/math.d.ts.map +1 -1
- package/lib/dist/utils/math.js +8 -1
- package/lib/dist/utils/webgl.d.ts +1 -1
- package/lib/dist/utils/webgl.d.ts.map +1 -1
- package/lib/dist/utils/webgl.js +4 -1
- package/package.json +2 -2
- package/lib/dist/painter/segments/segments.frag +0 -22
- package/lib/dist/painter/segments/segments.vert +0 -121
|
@@ -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
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
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.
|
|
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
|
-
|
|
36
|
-
|
|
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,
|
|
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 @@
|
|
|
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"}
|
|
@@ -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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmlsdGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL3BhaW50ZXIvZnJhZ21lbnQtc2hhZGVyL2ZpbHRlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sc0JBQXNCLENBQUE7QUFDakQsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLHNCQUFzQixDQUFBO0FBQ2pELE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxVQUFVLENBQUE7QUFHekMsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLG9CQUFvQixDQUFBO0FBQ3BELE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLHNCQUFzQixDQUFBO0FBRXhELE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxjQUFjLENBQUE7QUFVekMsTUFBTSxPQUFPLGdCQUFpQixTQUFRLFVBQVU7SUFlNUMsWUFDcUIsT0FBbUIsRUFDcEMsT0FBZ0M7O1FBRWhDLEtBQUssRUFBRSxDQUFBO1FBSFUsWUFBTyxHQUFQLE9BQU8sQ0FBWTtRQWRqQyxNQUFDLEdBQUcsQ0FBQyxDQUFBO1FBU0osYUFBUSxHQUF3QyxJQUFJLENBQUE7UUFDcEQsaUJBQVksR0FBRyxDQUFDLENBQUMsQ0FBQTtRQUNqQixtQkFBYyxHQUFHLENBQUMsQ0FBQyxDQUFBO1FBT3ZCLElBQUksQ0FBQyxDQUFDLEdBQUcsTUFBQSxPQUFPLENBQUMsQ0FBQyxtQ0FBSSxRQUFRLENBQUE7UUFDOUIsSUFBSSxDQUFDLE9BQU8sR0FBRyxPQUFPLENBQUMsT0FBTyxDQUFBO1FBQzlCLE1BQU0sT0FBTyxHQUFHLE1BQUEsT0FBTyxDQUFDLE9BQU8sbUNBQUksRUFBRSxDQUFBO1FBQ3JDLElBQUksT0FBTyxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUUsQ0FBQztZQUN2QixNQUFNLElBQUksS0FBSyxDQUNYLHNFQUFzRSxDQUN6RSxDQUFBO1FBQ0wsQ0FBQztRQUVELE1BQU0sUUFBUSxHQUFHLE9BQU8sQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLEVBQUU7WUFDbEMsTUFBTSxJQUFJLEdBQUcsSUFBSSxlQUFlLENBQUM7Z0JBQzdCLFVBQVUsRUFBRTtvQkFDUixRQUFRLEVBQUUsTUFBTTtvQkFDaEIsS0FBSyxFQUFFLE1BQU07aUJBQ2hCO2dCQUNELE9BQU8sRUFBRTtvQkFDTCxLQUFLLEVBQUUsTUFBTTtpQkFDaEI7Z0JBQ0QsUUFBUSxFQUFFO29CQUNOLElBQUksRUFBRSxPQUFPO2lCQUNoQjtnQkFDRCxRQUFRLEVBQUU7b0JBQ04sZ0JBQWdCO29CQUNoQixxQkFBcUI7b0JBQ3JCLENBQUMsV0FBVyxFQUFFLE9BQU8sRUFBRSxLQUFLLENBQUM7b0JBQzdCLElBQUk7aUJBQ1A7YUFDSixDQUFDLENBQUMsSUFBSSxDQUFBO1lBQ1AsTUFBTSxJQUFJLEdBQUcsSUFBSSxpQkFBaUIsQ0FBQztnQkFDL0IsUUFBUSxrQkFDSixRQUFRLEVBQUUsT0FBTyxFQUNqQixTQUFTLEVBQUUsT0FBTyxFQUNsQixVQUFVLEVBQUUsV0FBVyxJQUNwQixNQUFNLENBQUMsUUFBUSxDQUNyQjtnQkFDRCxPQUFPLEVBQUU7b0JBQ0wsS0FBSyxFQUFFLE1BQU07aUJBQ2hCO2dCQUNELFFBQVEsRUFBRSxNQUFNLENBQUMsa0JBQWtCO2dCQUNuQyxTQUFTLEVBQUUsTUFBTSxDQUFDLGNBQWM7YUFDbkMsQ0FBQyxDQUFDLElBQUksQ0FBQTtZQUNQLE9BQU8sSUFBSSxVQUFVLENBQUMsT0FBTyxDQUFDLEVBQUUsRUFBRSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFBO1FBQ3JELENBQUMsQ0FBQyxDQUFBO1FBQ0YsTUFBTSxJQUFJLEdBQUcsUUFBUSxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUNoQyxTQUFTLENBQUMsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FDdkQsQ0FBQTtRQUNELElBQUksQ0FBQyxPQUFPLEdBQUcsUUFBUSxDQUFDLEdBQUcsRUFBZ0IsQ0FBQTtRQUMzQyxJQUFJLENBQUMsUUFBUSxHQUFHLFFBQVEsQ0FBQTtRQUN4QixJQUFJLENBQUMsTUFBTSxHQUFHLE9BQU8sQ0FBQyxHQUFHLEVBQWUsQ0FBQTtRQUN4QyxJQUFJLENBQUMsT0FBTyxHQUFHLE9BQU8sQ0FBQTtRQUN0QixNQUFNLEdBQUcsR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFvQixDQUFBO1FBQ3hDLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFBO1FBQ2hCLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFBO1FBQ25ELElBQUksQ0FBQyxHQUFHLEdBQUcsS0FBSyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLE9BQU8sRUFBRSxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUE7UUFDdkUsTUFBTSxXQUFXLEdBQUcsT0FBTyxDQUFDLEVBQUUsQ0FBQyxpQkFBaUIsRUFBRSxDQUFBO1FBQ2xELElBQUksQ0FBQyxXQUFXO1lBQ1osTUFBTSxJQUFJLEtBQUssQ0FBQyx1Q0FBdUMsQ0FBQyxDQUFBO1FBRTVELElBQUksQ0FBQyxXQUFXLEdBQUcsV0FBVyxDQUFBO1FBQzlCLElBQUksQ0FBQyxJQUFJLEdBQUcsTUFBQSxPQUFPLENBQUMsSUFBSSxtQ0FBSSxVQUFVLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQTtJQUNyRCxDQUFDO0lBRUQsTUFBTTtRQUNGLE1BQU0sRUFBRSxPQUFPLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxHQUFHLEVBQUUsV0FBVyxFQUFFLEdBQUcsSUFBSSxDQUFBO1FBQzFELE1BQU0sRUFBRSxFQUFFLEVBQUUsR0FBRyxPQUFPLENBQUE7UUFDdEIsS0FBSyxNQUFNLEdBQUcsSUFBSSxJQUFJO1lBQUUsR0FBRyxDQUFDLE1BQU0sRUFBRSxDQUFBO1FBQ3BDLEdBQUcsQ0FBQyxNQUFNLEVBQUUsQ0FBQTtRQUNaLEVBQUUsQ0FBQyxpQkFBaUIsQ0FBQyxXQUFXLENBQUMsQ0FBQTtRQUNqQyxJQUFJLFFBQVEsRUFBRSxDQUFDO1lBQ1gsS0FBSyxNQUFNLEdBQUcsSUFBSSxRQUFRO2dCQUFFLEVBQUUsQ0FBQyxhQUFhLENBQUMsR0FBRyxDQUFDLENBQUE7UUFDckQsQ0FBQztJQUNMLENBQUM7SUFFRCxLQUFLLENBQUMsSUFBWSxFQUFFLEtBQWE7UUFDN0IsTUFBTSxFQUFFLElBQUksRUFBRSxPQUFPLEVBQUUsQ0FBQyxFQUFFLE9BQU8sRUFBRSxHQUFHLElBQUksQ0FBQTtRQUMxQyxNQUFNLEVBQUUsRUFBRSxFQUFFLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQTtRQUMzQixJQUFJLFlBQVksR0FBRyxPQUFPLGFBQVAsT0FBTyx1QkFBUCxPQUFPLENBQUUsU0FBUyxDQUFBO1FBQ3JDLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztZQUNoQixPQUFPLENBQUMsSUFBSSxDQUFDLGdEQUFnRCxDQUFDLENBQUE7WUFDOUQsT0FBTTtRQUNWLENBQUM7UUFFRCxJQUFJLElBQUksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFLENBQUM7WUFDbEIsTUFBTSxFQUFFLFFBQVEsRUFBRSxPQUFPLEVBQUUsV0FBVyxFQUFFLEdBQUcsSUFBSSxDQUFBO1lBQy9DLE1BQU0sa0JBQWtCLEdBQUcsRUFBRSxDQUFDLFlBQVksQ0FDdEMsRUFBRSxDQUFDLG1CQUFtQixDQUNFLENBQUE7WUFDNUIsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxFQUFFLENBQUMsQ0FBQTtZQUNyQyxJQUFJLFFBQVEsR0FBRyxDQUFDLENBQUE7WUFDaEIsSUFBSSxhQUFhLEdBQUcsUUFBUSxDQUFDLFFBQVEsQ0FBQyxDQUFBO1lBQ3RDLEtBQUssTUFBTSxDQUFDLEtBQUssRUFBRSxHQUFHLENBQUMsSUFBSSxJQUFJLENBQUMsT0FBTyxFQUFFLEVBQUUsQ0FBQztnQkFDeEMsRUFBRSxDQUFDLGVBQWUsQ0FBQyxFQUFFLENBQUMsV0FBVyxFQUFFLFdBQVcsQ0FBQyxDQUFBO2dCQUMvQyxFQUFFLENBQUMsb0JBQW9CLENBQ25CLEVBQUUsQ0FBQyxXQUFXLEVBQ2QsRUFBRSxDQUFDLGlCQUFpQixFQUNwQixFQUFFLENBQUMsVUFBVSxFQUNiLGFBQWEsRUFDYixDQUFDLENBQ0osQ0FBQTtnQkFDRCxjQUFjLENBQ1YsSUFBSSxFQUNKLEtBQUssRUFDTCxHQUFHLEVBQ0gsUUFBUSxDQUFDLEtBQUssQ0FBQyxFQUNmLE9BQU8sQ0FBQyxLQUFLLENBQUMsRUFDZCxZQUFZLEVBQ1osQ0FBQyxFQUNELE9BQU8sQ0FDVixDQUFBO2dCQUNELFFBQVEsR0FBRyxDQUFDLEdBQUcsUUFBUSxDQUFBO2dCQUN2QixZQUFZLEdBQUcsYUFBYSxDQUFBO2dCQUM1QixhQUFhLEdBQUcsUUFBUSxDQUFDLFFBQVEsQ0FBQyxDQUFBO1lBQ3RDLENBQUM7WUFDRCxFQUFFLENBQUMsZUFBZSxDQUFDLEVBQUUsQ0FBQyxXQUFXLEVBQUUsa0JBQWtCLENBQUMsQ0FBQTtRQUMxRCxDQUFDO1FBQ0QsY0FBYyxDQUNWLElBQUksRUFDSixLQUFLLEVBQ0wsSUFBSSxDQUFDLEdBQUcsRUFDUixJQUFJLENBQUMsT0FBTyxFQUNaLElBQUksQ0FBQyxNQUFNLEVBQ1gsWUFBWSxFQUNaLENBQUMsRUFDRCxPQUFPLENBQ1YsQ0FBQTtRQUNELEVBQUUsQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLENBQUE7SUFDNUIsQ0FBQztJQUVPLFdBQVcsQ0FDZixFQUEwQjs7UUFFMUIsTUFBTSxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsR0FBRyxNQUFBLElBQUksQ0FBQyxPQUFPLG1DQUFJLEVBQUUsS0FBSyxFQUFFLEVBQUUsRUFBRSxNQUFNLEVBQUUsRUFBRSxFQUFFLENBQUE7UUFDbkUsSUFDSSxJQUFJLENBQUMsUUFBUTtZQUNiLElBQUksQ0FBQyxZQUFZLEtBQUssS0FBSztZQUMzQixJQUFJLENBQUMsY0FBYyxLQUFLLE1BQU0sRUFDaEMsQ0FBQztZQUNDLE9BQU8sQ0FBQyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQTtRQUM3QixDQUFDO1FBRUQsSUFBSSxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7WUFDaEIsS0FBSyxNQUFNLEdBQUcsSUFBSSxJQUFJLENBQUMsUUFBUTtnQkFBRSxFQUFFLENBQUMsYUFBYSxDQUFDLEdBQUcsQ0FBQyxDQUFBO1FBQzFELENBQUM7UUFDRCxJQUFJLENBQUMsWUFBWSxHQUFHLEtBQUssQ0FBQTtRQUN6QixJQUFJLENBQUMsY0FBYyxHQUFHLE1BQU0sQ0FBQTtRQUM1QixJQUFJLENBQUMsUUFBUSxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUU7WUFDNUIsTUFBTSxPQUFPLEdBQUcsRUFBRSxDQUFDLGFBQWEsRUFBRSxDQUFBO1lBQ2xDLEVBQUUsQ0FBQyxXQUFXLENBQUMsRUFBRSxDQUFDLFVBQVUsRUFBRSxPQUFPLENBQUMsQ0FBQTtZQUV0QyxFQUFFLENBQUMsYUFBYSxDQUFDLEVBQUUsQ0FBQyxVQUFVLEVBQUUsRUFBRSxDQUFDLGNBQWMsRUFBRSxFQUFFLENBQUMsYUFBYSxDQUFDLENBQUE7WUFDcEUsRUFBRSxDQUFDLGFBQWEsQ0FBQyxFQUFFLENBQUMsVUFBVSxFQUFFLEVBQUUsQ0FBQyxjQUFjLEVBQUUsRUFBRSxDQUFDLGFBQWEsQ0FBQyxDQUFBO1lBQ3BFLEVBQUUsQ0FBQyxhQUFhLENBQUMsRUFBRSxDQUFDLFVBQVUsRUFBRSxFQUFFLENBQUMsa0JBQWtCLEVBQUUsRUFBRSxDQUFDLE1BQU0sQ0FBQyxDQUFBO1lBQ2pFLEVBQUUsQ0FBQyxhQUFhLENBQUMsRUFBRSxDQUFDLFVBQVUsRUFBRSxFQUFFLENBQUMsa0JBQWtCLEVBQUUsRUFBRSxDQUFDLE1BQU0sQ0FBQyxDQUFBO1lBRWpFLEVBQUUsQ0FBQyxVQUFVLENBQ1QsRUFBRSxDQUFDLFVBQVUsRUFDYixDQUFDLEVBQ0QsRUFBRSxDQUFDLElBQUksRUFDUCxLQUFLLEVBQ0wsTUFBTSxFQUNOLENBQUMsRUFDRCxFQUFFLENBQUMsSUFBSSxFQUNQLEVBQUUsQ0FBQyxhQUFhLEVBQ2hCLElBQUksQ0FDUCxDQUFBO1lBQ0QsT0FBTyxPQUFPLENBQUE7UUFDbEIsQ0FBQyxDQUFpQyxDQUFBO1FBQ2xDLE9BQU8sSUFBSSxDQUFDLFFBQVEsQ0FBQTtJQUN4QixDQUFDO0NBQ0o7QUFFRCxTQUFTLGNBQWMsQ0FDbkIsSUFBWSxFQUNaLEtBQWEsRUFDYixHQUFtQixFQUNuQixPQUFtQixFQUNuQixNQUFpQixFQUNqQixPQUFxQixFQUNyQixDQUFTLEVBQ1QsT0FBbUI7SUFFbkIsTUFBTSxFQUFFLEVBQUUsRUFBRSxHQUFHLE9BQU8sQ0FBQTtJQUN0QixPQUFPLENBQUMsR0FBRyxFQUFFLENBQUE7SUFDYixPQUFPLENBQUMsU0FBUyxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUMsQ0FBQTtJQUM1QixNQUFNLENBQUMsV0FBVyxDQUFDLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQTtJQUNyRCxFQUFFLENBQUMsYUFBYSxDQUFDLEVBQUUsQ0FBQyxRQUFRLENBQUMsQ0FBQTtJQUM3QixFQUFFLENBQUMsV0FBVyxDQUFDLEVBQUUsQ0FBQyxVQUFVLEVBQUUsT0FBTyxDQUFDLENBQUE7SUFDdEMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxZQUFZLEVBQUUsQ0FBQyxDQUFDLENBQUE7SUFDbEMsR0FBRyxDQUFDLElBQUksRUFBRSxDQUFBO0lBQ1YsRUFBRSxDQUFDLFVBQVUsQ0FBQyxFQUFFLENBQUMsY0FBYyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQTtBQUMxQyxDQUFDO0FBRUQsU0FBUyxTQUFTLENBQUMsT0FBbUIsRUFBRSxPQUFtQixFQUFFLEtBQUssR0FBRyxDQUFDLENBQUM7SUFDbkUsTUFBTSxPQUFPLEdBQUcsSUFBSSxVQUFVLENBQUM7UUFDM0IsUUFBUSxFQUFFLE1BQU07UUFDaEIsS0FBSyxFQUFFLE1BQU07S0FDaEIsQ0FBQyxDQUFBO0lBQ0Ysa0JBQWtCO0lBQ2xCLE9BQU8sQ0FBQyxHQUFHLENBQ1AsVUFBVSxFQUNWLElBQUksWUFBWSxDQUFDO1FBQ2IsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEdBQUcsS0FBSztRQUNkLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxHQUFHLEtBQUs7UUFDZCxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsR0FBRyxLQUFLO1FBQ2QsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEdBQUcsS0FBSztLQUNqQixDQUFDLENBQ0wsQ0FBQTtJQUNELE9BQU8sQ0FBQyxHQUFHLENBQUMsT0FBTyxFQUFFLElBQUksWUFBWSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQTtJQUNoRSxNQUFNLEdBQUcsR0FBRyxJQUFJLGNBQWMsQ0FBQyxPQUFPLENBQUMsRUFBRSxFQUFFLE9BQU8sRUFBRSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUE7SUFDOUQsSUFBSSxDQUFDLEdBQUc7UUFBRSxNQUFNLElBQUksS0FBSyxDQUFDLDZCQUE2QixDQUFDLENBQUE7SUFDeEQsT0FBTyxHQUFHLENBQUE7QUFDZCxDQUFDIn0=
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import { TgdContext } from "../../context";
|
|
2
|
+
import { TgdPainter } from "../painter";
|
|
3
|
+
import { TgdShaderFragment } from "../../shader/fragment";
|
|
4
|
+
import { TgdProgram } from "../../program";
|
|
5
|
+
export interface TgdPainterFragmentShaderOptions {
|
|
6
|
+
shader: TgdShaderFragment | string;
|
|
7
|
+
flipY?: boolean;
|
|
8
|
+
name?: string;
|
|
9
|
+
/**
|
|
10
|
+
* If this function is defined, it will be called at each frame.
|
|
11
|
+
* Most of the time, it is used tu update the uniforms.
|
|
12
|
+
*/
|
|
13
|
+
setUniforms?(options: {
|
|
14
|
+
context: TgdContext;
|
|
15
|
+
program: TgdProgram;
|
|
16
|
+
time: number;
|
|
17
|
+
delay: number;
|
|
18
|
+
}): void;
|
|
19
|
+
}
|
|
20
|
+
export declare class TgdPainterFragmentShader extends TgdPainter {
|
|
21
|
+
private readonly context;
|
|
22
|
+
private readonly options;
|
|
23
|
+
private readonly program;
|
|
24
|
+
private readonly vao;
|
|
25
|
+
constructor(context: TgdContext, options: TgdPainterFragmentShaderOptions);
|
|
26
|
+
delete(): void;
|
|
27
|
+
paint(time: number, delay: number): void;
|
|
28
|
+
}
|
|
29
|
+
//# sourceMappingURL=fragment-shader.d.ts.map
|