59 lines
1.2 KiB
TypeScript
59 lines
1.2 KiB
TypeScript
/*
|
|
* SPDX-FileCopyrightText: syuilo and misskey-project
|
|
* SPDX-License-Identifier: AGPL-3.0-only
|
|
*/
|
|
|
|
import { defineImageEffectorFx } from '../ImageEffector.js';
|
|
import { i18n } from '@/i18n.js';
|
|
|
|
const shader = `#version 300 es
|
|
precision mediump float;
|
|
|
|
in vec2 in_uv;
|
|
uniform sampler2D in_texture;
|
|
uniform vec2 in_resolution;
|
|
uniform int u_h;
|
|
uniform int u_v;
|
|
out vec4 out_color;
|
|
|
|
void main() {
|
|
vec2 uv = in_uv;
|
|
if (u_h == -1 && in_uv.x > 0.5) {
|
|
uv.x = 1.0 - uv.x;
|
|
}
|
|
if (u_h == 1 && in_uv.x < 0.5) {
|
|
uv.x = 1.0 - uv.x;
|
|
}
|
|
if (u_v == -1 && in_uv.y > 0.5) {
|
|
uv.y = 1.0 - uv.y;
|
|
}
|
|
if (u_v == 1 && in_uv.y < 0.5) {
|
|
uv.y = 1.0 - uv.y;
|
|
}
|
|
out_color = texture(in_texture, uv);
|
|
}
|
|
`;
|
|
|
|
export const FX_mirror = defineImageEffectorFx({
|
|
id: 'mirror' as const,
|
|
name: i18n.ts._imageEffector._fxs.mirror,
|
|
shader,
|
|
uniforms: ['h', 'v'] as const,
|
|
params: {
|
|
h: {
|
|
type: 'number:enum' as const,
|
|
enum: [{ value: -1, label: '<-' }, { value: 0, label: '|' }, { value: 1, label: '->' }],
|
|
default: -1,
|
|
},
|
|
v: {
|
|
type: 'number:enum' as const,
|
|
enum: [{ value: -1, label: '^' }, { value: 0, label: '-' }, { value: 1, label: 'v' }],
|
|
default: 0,
|
|
},
|
|
},
|
|
main: ({ gl, u, params }) => {
|
|
gl.uniform1i(u.h, params.h);
|
|
gl.uniform1i(u.v, params.v);
|
|
},
|
|
});
|