{"record":{"id":"02f0a04e9ee6e73c","repo":"siyuan-note/siyuan","slug":"unable-to-link-graph-shader","errorCode":null,"errorMessage":"Unable to link graph shader","messagePattern":"Unable to link graph shader","errorType":"exception","errorClass":"Error","httpStatus":null,"severity":"error","filePath":"app/src/layout/dock/graph/webglRenderer.ts","lineNumber":510,"sourceCode":"    private setViewUniforms(program: WebGLProgram, state: IGraphRenderState) {\n        this.gl.uniform2f(this.getUniform(program, \"u_viewport\"), state.width, state.height);\n        this.gl.uniform3f(this.getUniform(program, \"u_camera\"), state.camera.x, state.camera.y, state.camera.scale);\n    }\n\n    private createProgram(vertexSource: string, fragmentSource: string) {\n        const gl = this.gl;\n        const program = this.requireValue(gl.createProgram());\n        const vertex = this.createShader(gl.VERTEX_SHADER, vertexSource);\n        const fragment = this.createShader(gl.FRAGMENT_SHADER, fragmentSource);\n        gl.attachShader(program, vertex);\n        gl.attachShader(program, fragment);\n        gl.linkProgram(program);\n        gl.deleteShader(vertex);\n        gl.deleteShader(fragment);\n        if (!gl.getProgramParameter(program, gl.LINK_STATUS)) {\n            const message = gl.getProgramInfoLog(program) || \"Unable to link graph shader\";\n            gl.deleteProgram(program);\n            throw new Error(message);\n        }\n        return program;\n    }\n\n    private createShader(type: number, source: string) {\n        const gl = this.gl;\n        const shader = this.requireValue(gl.createShader(type));\n        gl.shaderSource(shader, source);\n        gl.compileShader(shader);\n        if (!gl.getShaderParameter(shader, gl.COMPILE_STATUS)) {\n            const message = gl.getShaderInfoLog(shader) || \"Unable to compile graph shader\";\n            gl.deleteShader(shader);\n            throw new Error(message);\n        }\n        return shader;\n    }\n\n    private getUniform(program: WebGLProgram, name: string) {","sourceCodeStart":492,"sourceCodeEnd":528,"githubUrl":"https://github.com/siyuan-note/siyuan/blob/8641553a1f07374001902d3ce773285db1292b2d/app/src/layout/dock/graph/webglRenderer.ts#L492-L528","documentation":"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.","triggerScenarios":"Thrown at app/src/layout/dock/graph/webglRenderer.ts:510 when the library encounters an invalid state.","commonSituations":"See trigger scenarios.","solutions":["Check gl.getProgramInfoLog output for the driver-specific reason","Ensure vertex shader outputs match fragment shader inputs","Try disabling GPU extensions or switching drivers/browsers"],"exampleFix":null,"handlingStrategy":"validation","validationCode":null,"typeGuard":null,"tryCatchPattern":null,"preventionTips":[],"tags":[],"backgroundTag":null,"analyzedSha":"8641553a1f07374001902d3ce773285db1292b2d","analyzedAt":"2026-09-11T16:08:28.414Z","contentChangedAt":"2026-09-11T16:08:28.414Z","schemaVersion":2},"datasetVersion":"2026-09-23T08:17:48.524Z"}