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
- 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
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)