diff options
| author | syuilo <4439005+syuilo@users.noreply.github.com> | 2025-06-05 12:25:22 +0900 |
|---|---|---|
| committer | syuilo <4439005+syuilo@users.noreply.github.com> | 2025-06-05 12:25:22 +0900 |
| commit | 2a78360588f48fcc4345ac3b5bfab0d438251086 (patch) | |
| tree | 62629cfa81059f061c890632dead4af933ce2d78 /packages/frontend/src/utility/webgl.ts | |
| parent | fix(backend): avoid deadlock when deleting account (#16162) (diff) | |
| download | misskey-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.ts | 40 |
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; +} |