summaryrefslogtreecommitdiff
path: root/packages/frontend/src/utility/webgl.ts
diff options
context:
space:
mode:
authorsyuilo <4439005+syuilo@users.noreply.github.com>2025-06-05 12:25:22 +0900
committersyuilo <4439005+syuilo@users.noreply.github.com>2025-06-05 12:25:22 +0900
commit2a78360588f48fcc4345ac3b5bfab0d438251086 (patch)
tree62629cfa81059f061c890632dead4af933ce2d78 /packages/frontend/src/utility/webgl.ts
parentfix(backend): avoid deadlock when deleting account (#16162) (diff)
downloadmisskey-2a78360588f48fcc4345ac3b5bfab0d438251086.tar.gz
misskey-2a78360588f48fcc4345ac3b5bfab0d438251086.tar.bz2
misskey-2a78360588f48fcc4345ac3b5bfab0d438251086.zip
refactor(frontend): refactor ImageEffector
Diffstat (limited to 'packages/frontend/src/utility/webgl.ts')
-rw-r--r--packages/frontend/src/utility/webgl.ts40
1 files changed, 40 insertions, 0 deletions
diff --git a/packages/frontend/src/utility/webgl.ts b/packages/frontend/src/utility/webgl.ts
new file mode 100644
index 0000000000..ae595b605c
--- /dev/null
+++ b/packages/frontend/src/utility/webgl.ts
@@ -0,0 +1,40 @@
+/*
+ * SPDX-FileCopyrightText: syuilo and misskey-project
+ * SPDX-License-Identifier: AGPL-3.0-only
+ */
+
+export function loadShader(gl: WebGL2RenderingContext, type: GLenum, source: string): WebGLShader {
+ const shader = gl.createShader(type);
+ if (shader == null) {
+ throw new Error('falied to create shader');
+ }
+
+ gl.shaderSource(shader, source);
+ gl.compileShader(shader);
+
+ if (!gl.getShaderParameter(shader, gl.COMPILE_STATUS)) {
+ console.error(`falied to compile shader: ${gl.getShaderInfoLog(shader)}`);
+ gl.deleteShader(shader);
+ throw new Error(`falied to compile shader: ${gl.getShaderInfoLog(shader)}`);
+ }
+
+ return shader;
+}
+
+export function initShaderProgram(gl: WebGL2RenderingContext, vsSource: string, fsSource: string): WebGLProgram {
+ const vertexShader = loadShader(gl, gl.VERTEX_SHADER, vsSource);
+ const fragmentShader = loadShader(gl, gl.FRAGMENT_SHADER, fsSource);
+
+ const shaderProgram = gl.createProgram();
+
+ gl.attachShader(shaderProgram, vertexShader);
+ gl.attachShader(shaderProgram, fragmentShader);
+ gl.linkProgram(shaderProgram);
+
+ if (!gl.getProgramParameter(shaderProgram, gl.LINK_STATUS)) {
+ console.error(`failed to init shader: ${gl.getProgramInfoLog(shaderProgram)}`);
+ throw new Error('failed to init shader');
+ }
+
+ return shaderProgram;
+}