{"record":{"id":"e88c9d04651e2797","repo":"remotion-dev/remotion","slug":"waves-program-link-failed-log-no-log","errorCode":null,"errorMessage":"Waves program link failed: ${log ?? '(no log)'}","messagePattern":"Waves program link failed: (.+?)","errorType":"exception","errorClass":"Error","httpStatus":null,"severity":"critical","filePath":"packages/effects/src/waves.ts","lineNumber":397,"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(`Waves 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":379,"sourceCodeEnd":415,"githubUrl":"https://github.com/remotion-dev/remotion/blob/78fe4bb3fdb5a2cd68724393d63cb223db333fa7/packages/effects/src/waves.ts#L379-L415","documentation":"Thrown by linkProgram() inside the waves effect when gl.getProgramParameter(program, gl.LINK_STATUS) returns false. This means the vertex and fragment shaders compiled individually but failed to link into an executable program. The error includes the GL driver's info log. Since the shaders are static library constants, this is a driver/GPU compatibility issue.","triggerScenarios":"Called transitively from setupWaves() at packages/effects/src/waves.ts:446. Fires when the GL driver cannot link the compiled WAVES_VS and WAVES_FS — e.g., due to mismatched varying/in-out declarations from a driver bug, exceeding uniform/attribute limits on constrained hardware, or a driver-specific linker issue.","commonSituations":"GPU driver bug rejecting valid linked GLSL ES 3.00 programs; older mobile/integrated GPUs with low uniform limits (the waves fragment shader has many uniforms); software rasterizer with incomplete linker; outdated Chrome/Chromium with a WebGL2 regression.","solutions":["Update GPU drivers and browser to the latest versions.","Check chrome://gpu for any WebGL2-related warnings or denylisted features.","For server-side rendering, use the latest @remotion/renderer with its bundled Chrome, which is tested for WebGL2 effect compatibility.","Try a different GPU or toggle hardware acceleration to isolate driver vs SwiftShader issues.","Report with the full info log from the error message and GPU details."],"exampleFix":null,"handlingStrategy":"try-catch","validationCode":null,"typeGuard":null,"tryCatchPattern":"try {\n  const state = setupWaves(canvas);\n} catch (e) {\n  if ((e as Error).message.startsWith('Waves program link failed')) {\n    console.warn('GPU driver failed to link waves program:', (e as Error).message);\n    // fall back to a non-WebGL effect or different rendering approach\n  }\n}","preventionTips":["Update GPU drivers and browser to the latest versions.","Test WebGL2 effects in the target environment before deploying.","Check chrome://gpu for WebGL2 compatibility issues."],"tags":["webgl","gpu","shader","glsl","waves-effect","driver"],"backgroundTag":null,"analyzedSha":"78fe4bb3fdb5a2cd68724393d63cb223db333fa7","analyzedAt":"2026-08-12T17:18:50.444Z","schemaVersion":2},"datasetVersion":"2026-08-12T18:17:37.767Z"}