summaryrefslogtreecommitdiff
path: root/packages/frontend
diff options
context:
space:
mode:
authorsyuilo <4439005+syuilo@users.noreply.github.com>2025-09-22 19:00:47 +0900
committersyuilo <4439005+syuilo@users.noreply.github.com>2025-09-22 19:00:47 +0900
commit13d5c6d2b21565490fa5a43aee6fd9e373d90cd2 (patch)
tree93deb2e8bb8906be40855debb5b4f0bf7dc1eff4 /packages/frontend
parentupdate pnpm (diff)
downloadmisskey-13d5c6d2b21565490fa5a43aee6fd9e373d90cd2.tar.gz
misskey-13d5c6d2b21565490fa5a43aee6fd9e373d90cd2.tar.bz2
misskey-13d5c6d2b21565490fa5a43aee6fd9e373d90cd2.zip
refactor MkAnimBg
Diffstat (limited to 'packages/frontend')
-rw-r--r--packages/frontend/src/components/MkAnimBg.vue76
1 files changed, 17 insertions, 59 deletions
diff --git a/packages/frontend/src/components/MkAnimBg.vue b/packages/frontend/src/components/MkAnimBg.vue
index 19a21f6e24..0e1018dcbf 100644
--- a/packages/frontend/src/components/MkAnimBg.vue
+++ b/packages/frontend/src/components/MkAnimBg.vue
@@ -10,6 +10,7 @@ SPDX-License-Identifier: AGPL-3.0-only
<script lang="ts" setup>
import { onMounted, onUnmounted, useTemplateRef } from 'vue';
import isChromatic from 'chromatic/isChromatic';
+import { initShaderProgram } from '@/utility/webgl.js';
const canvasEl = useTemplateRef('canvasEl');
@@ -21,47 +22,6 @@ const props = withDefaults(defineProps<{
focus: 1.0,
});
-function loadShader(gl: WebGLRenderingContext, type: number, source: string) {
- const shader = gl.createShader(type);
- if (shader == null) return null;
-
- gl.shaderSource(shader, source);
- gl.compileShader(shader);
-
- if (!gl.getShaderParameter(shader, gl.COMPILE_STATUS)) {
- alert(
- `falied to compile shader: ${gl.getShaderInfoLog(shader)}`,
- );
- gl.deleteShader(shader);
- return null;
- }
-
- return shader;
-}
-
-function initShaderProgram(gl: WebGLRenderingContext, vsSource: string, fsSource: string) {
- const vertexShader = loadShader(gl, gl.VERTEX_SHADER, vsSource);
- const fragmentShader = loadShader(gl, gl.FRAGMENT_SHADER, fsSource);
-
- const shaderProgram = gl.createProgram();
- if (vertexShader == null || fragmentShader == null) return null;
-
- gl.attachShader(shaderProgram, vertexShader);
- gl.attachShader(shaderProgram, fragmentShader);
- gl.linkProgram(shaderProgram);
-
- if (!gl.getProgramParameter(shaderProgram, gl.LINK_STATUS)) {
- alert(
- `failed to init shader: ${gl.getProgramInfoLog(
- shaderProgram,
- )}`,
- );
- return null;
- }
-
- return shaderProgram;
-}
-
let handle: ReturnType<typeof window['requestAnimationFrame']> | null = null;
onMounted(() => {
@@ -71,7 +31,7 @@ onMounted(() => {
canvas.width = width;
canvas.height = height;
- const maybeGl = canvas.getContext('webgl', { premultipliedAlpha: true });
+ const maybeGl = canvas.getContext('webgl2', { premultipliedAlpha: true });
if (maybeGl == null) return;
const gl = maybeGl;
@@ -82,18 +42,16 @@ onMounted(() => {
const positionBuffer = gl.createBuffer();
gl.bindBuffer(gl.ARRAY_BUFFER, positionBuffer);
- const shaderProgram = initShaderProgram(gl, `
- attribute vec2 vertex;
-
+ const shaderProgram = initShaderProgram(gl, `#version 300 es
+ in vec2 position;
uniform vec2 u_scale;
-
- varying vec2 v_pos;
+ out vec2 in_uv;
void main() {
- gl_Position = vec4(vertex, 0.0, 1.0);
- v_pos = vertex / u_scale;
+ gl_Position = vec4(position, 0.0, 1.0);
+ in_uv = position / u_scale;
}
- `, `
+ `, `#version 300 es
precision mediump float;
vec3 mod289(vec3 x) {
@@ -143,6 +101,7 @@ onMounted(() => {
return 130.0 * dot(m, g);
}
+ in vec2 in_uv;
uniform float u_time;
uniform vec2 u_resolution;
uniform float u_spread;
@@ -150,8 +109,7 @@ onMounted(() => {
uniform float u_warp;
uniform float u_focus;
uniform float u_itensity;
-
- varying vec2 v_pos;
+ out vec4 out_color;
float circle( in vec2 _pos, in vec2 _origin, in float _radius ) {
float SPREAD = 0.7 * u_spread;
@@ -182,13 +140,13 @@ onMounted(() => {
float ratio = u_resolution.x / u_resolution.y;
- vec2 uv = vec2( v_pos.x, v_pos.y / ratio ) * 0.5 + 0.5;
+ vec2 uv = vec2( in_uv.x, in_uv.y / ratio ) * 0.5 + 0.5;
vec3 color = vec3( 0.0 );
- float greenMix = snoise( v_pos * 1.31 + u_time * 0.8 * 0.00017 ) * 0.5 + 0.5;
- float purpleMix = snoise( v_pos * 1.26 + u_time * 0.8 * -0.0001 ) * 0.5 + 0.5;
- float orangeMix = snoise( v_pos * 1.34 + u_time * 0.8 * 0.00015 ) * 0.5 + 0.5;
+ float greenMix = snoise( in_uv * 1.31 + u_time * 0.8 * 0.00017 ) * 0.5 + 0.5;
+ float purpleMix = snoise( in_uv * 1.26 + u_time * 0.8 * -0.0001 ) * 0.5 + 0.5;
+ float orangeMix = snoise( in_uv * 1.34 + u_time * 0.8 * 0.00015 ) * 0.5 + 0.5;
float alphaOne = 0.35 + 0.65 * pow( snoise( vec2( u_time * 0.00012, uv.x ) ) * 0.5 + 0.5, 1.2 );
float alphaTwo = 0.35 + 0.65 * pow( snoise( vec2( ( u_time + 1561.0 ) * 0.00014, uv.x ) ) * 0.5 + 0.5, 1.2 );
@@ -198,10 +156,10 @@ onMounted(() => {
color += vec3( circle( uv, vec2( 0.90 + cos( u_time * 0.000166 ) * 0.06, 0.42 + sin( u_time * 0.000138 ) * 0.06 ), 0.18 ) ) * alphaTwo * ( green * greenMix + purple * purpleMix );
color += vec3( circle( uv, vec2( 0.19 + sin( u_time * 0.000112 ) * 0.06, 0.25 + sin( u_time * 0.000192 ) * 0.06 ), 0.09 ) ) * alphaThree * ( orange * orangeMix );
- color *= u_itensity + 1.0 * pow( snoise( vec2( v_pos.y + u_time * 0.00013, v_pos.x + u_time * -0.00009 ) ) * 0.5 + 0.5, 2.0 );
+ color *= u_itensity + 1.0 * pow( snoise( vec2( in_uv.y + u_time * 0.00013, in_uv.x + u_time * -0.00009 ) ) * 0.5 + 0.5, 2.0 );
vec3 inverted = vec3( 1.0 ) - color;
- gl_FragColor = vec4( color, max(max(color.x, color.y), color.z) );
+ out_color = vec4(color, max(max(color.x, color.y), color.z));
}
`);
if (shaderProgram == null) return;
@@ -223,7 +181,7 @@ onMounted(() => {
gl.uniform1f(u_itensity, 0.5);
gl.uniform2fv(u_scale, [props.scale, props.scale]);
- const vertex = gl.getAttribLocation(shaderProgram, 'vertex');
+ const vertex = gl.getAttribLocation(shaderProgram, 'position');
gl.enableVertexAttribArray(vertex);
gl.vertexAttribPointer(vertex, 2, gl.FLOAT, false, 0, 0);