{"record":{"id":"4ff6e0b6b93c9ce3","repo":"remotion-dev/remotion","slug":"lines-program-link-failed-log-no-log","errorCode":null,"errorMessage":"Lines program link failed: ${log ?? '(no log)'}","messagePattern":"Lines program link failed: (.+?)","errorType":"exception","errorClass":"Error","httpStatus":null,"severity":"critical","filePath":"packages/effects/src/lines.ts","lineNumber":337,"sourceCode":"};\n\nconst linkProgram = (\n\tgl: WebGL2RenderingContext,\n\tvs: WebGLShader,\n\tfs: WebGLShader,\n): WebGLProgram => {\n\tconst program = gl.createProgram();\n\tif (!program) {\n\t\tthrow new Error('Failed to create WebGL program');\n\t}\n\n\tgl.attachShader(program, vs);\n\tgl.attachShader(program, fs);\n\tgl.linkProgram(program);\n\tif (!gl.getProgramParameter(program, gl.LINK_STATUS)) {\n\t\tconst log = gl.getProgramInfoLog(program);\n\t\tgl.deleteProgram(program);\n\t\tthrow new Error(`Lines program link failed: ${log ?? '(no log)'}`);\n\t}\n\n\treturn program;\n};\n\nconst createProgram = (\n\tgl: WebGL2RenderingContext,\n\tvertexSource: string,\n\tfragmentSource: string,\n): WebGLProgram => {\n\tconst vs = compileShader(gl, gl.VERTEX_SHADER, vertexSource);\n\tconst fs = compileShader(gl, gl.FRAGMENT_SHADER, fragmentSource);\n\tconst program = linkProgram(gl, vs, fs);\n\tgl.deleteShader(vs);\n\tgl.deleteShader(fs);\n\treturn program;\n};\n","sourceCodeStart":319,"sourceCodeEnd":355,"githubUrl":"https://github.com/remotion-dev/remotion/blob/78fe4bb3fdb5a2cd68724393d63cb223db333fa7/packages/effects/src/lines.ts#L319-L355","documentation":"A plain Error thrown by linkProgram in the Lines effect when gl.getProgramParameter(program, gl.LINK_STATUS) is false. The program is deleted and the GL info log is appended to the message. Linking can fail even when both shaders compiled — e.g. mismatched varying declarations or exceeding uniform/attribute limits on the device.","triggerScenarios":"Device exposes WebGL2 and compiles LINES_VS/LINES_FS, but the linker rejects the pair. The shaders are static library code, so this is a driver/limits issue (e.g. too many uniforms, varying packing limits), not a user-param issue.","commonSituations":"A GPU/driver reports link errors for specific uniform counts or precision qualifiers; mobile/embedded GPUs with low uniform limits; buggy ANGLE builds.","solutions":["Read the embedded info log to see the exact linker complaint.","Update GPU drivers and the Chromium build used to render.","Switch GL backend (ANGLE over D3D/Vulkan/Metal/software) to isolate driver bugs.","File a Remotion issue with the device, driver version, and info log."],"exampleFix":null,"handlingStrategy":"try-catch","validationCode":null,"typeGuard":null,"tryCatchPattern":"try {\n  lines(...);\n} catch (err) {\n  if (err instanceof Error && /program link failed/.test(err.message)) {\n    // log info log, switch GL backend or update driver\n  } else throw err;\n}","preventionTips":["Read the embedded info log to confirm it is a driver/limits issue, not user input.","Test on the lowest-spec target device to catch uniform/varying-limit link failures early.","Report recurring driver-specific link failures to Remotion maintainers."],"tags":["webgl2","lines-effect","glsl","program-link","driver"],"backgroundTag":null,"analyzedSha":"78fe4bb3fdb5a2cd68724393d63cb223db333fa7","analyzedAt":"2026-08-12T17:18:50.444Z","schemaVersion":2},"datasetVersion":"2026-08-14T00:17:13.853Z"}