siyuan-note/siyuan · error · Error

Unable to link graph shader

Error message

Unable to link graph shader

What it means

GraphWebGLRenderer.createProgram reports that linking the vertex and fragment shaders into a WebGLProgram failed (LINK_STATUS false). Both shaders compiled, but the GPU driver rejected the linked program; the info-log text is used when present, otherwise this generic text. Thrown during renderer construction.

Solutions

  1. Check gl.getProgramInfoLog output for the driver-specific reason
  2. Ensure vertex shader outputs match fragment shader inputs
  3. Try disabling GPU extensions or switching drivers/browsers
Defensive patterns

Strategy: validation

When it happens

Trigger: Thrown at app/src/layout/dock/graph/webglRenderer.ts:510 when the library encounters an invalid state.

Common situations: See trigger scenarios.


AI-assisted analysis of siyuan-note/siyuan@8641553a1f (2026-09-11). Data as JSON: /api/errors/02f0a04e9ee6e73c. Report an issue: GitHub.

Appendix: source

Thrown at app/src/layout/dock/graph/webglRenderer.ts:510

    private setViewUniforms(program: WebGLProgram, state: IGraphRenderState) {
        this.gl.uniform2f(this.getUniform(program, "u_viewport"), state.width, state.height);
        this.gl.uniform3f(this.getUniform(program, "u_camera"), state.camera.x, state.camera.y, state.camera.scale);
    }

    private createProgram(vertexSource: string, fragmentSource: string) {
        const gl = this.gl;
        const program = this.requireValue(gl.createProgram());
        const vertex = this.createShader(gl.VERTEX_SHADER, vertexSource);
        const fragment = this.createShader(gl.FRAGMENT_SHADER, fragmentSource);
        gl.attachShader(program, vertex);
        gl.attachShader(program, fragment);
        gl.linkProgram(program);
        gl.deleteShader(vertex);
        gl.deleteShader(fragment);
        if (!gl.getProgramParameter(program, gl.LINK_STATUS)) {
            const message = gl.getProgramInfoLog(program) || "Unable to link graph shader";
            gl.deleteProgram(program);
            throw new Error(message);
        }
        return program;
    }

    private createShader(type: number, source: string) {
        const gl = this.gl;
        const shader = this.requireValue(gl.createShader(type));
        gl.shaderSource(shader, source);
        gl.compileShader(shader);
        if (!gl.getShaderParameter(shader, gl.COMPILE_STATUS)) {
            const message = gl.getShaderInfoLog(shader) || "Unable to compile graph shader";
            gl.deleteShader(shader);
            throw new Error(message);
        }
        return shader;
    }

    private getUniform(program: WebGLProgram, name: string) {

View on GitHub (pinned to 8641553a1f)