{"record":{"id":"7153031bd27d0281","repo":"remotion-dev/remotion","slug":"shader-compile-failed-log-no-log-715303","errorCode":null,"errorMessage":"Shader compile failed: ${log ?? '(no log)'}","messagePattern":"Shader compile failed: (.+?)","errorType":"exception","errorClass":"Error","httpStatus":null,"severity":"error","filePath":"packages/effects/src/fisheye/fisheye-runtime.ts","lineNumber":38,"sourceCode":"\t};\n};\n\nconst compileShader = (\n\tgl: WebGL2RenderingContext,\n\ttype: number,\n\tsource: string,\n): WebGLShader => {\n\tconst shader = gl.createShader(type);\n\tif (!shader) {\n\t\tthrow new Error('Failed to create WebGL shader');\n\t}\n\n\tgl.shaderSource(shader, source);\n\tgl.compileShader(shader);\n\tif (!gl.getShaderParameter(shader, gl.COMPILE_STATUS)) {\n\t\tconst log = gl.getShaderInfoLog(shader);\n\t\tgl.deleteShader(shader);\n\t\tthrow new Error(`Shader compile failed: ${log ?? '(no log)'}`);\n\t}\n\n\treturn shader;\n};\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);","sourceCodeStart":20,"sourceCodeEnd":56,"githubUrl":"https://github.com/remotion-dev/remotion/blob/78fe4bb3fdb5a2cd68724393d63cb223db333fa7/packages/effects/src/fisheye/fisheye-runtime.ts#L20-L56","documentation":"Thrown inside compileShader() in fisheye-runtime.ts when gl.getShaderParameter(shader, gl.COMPILE_STATUS) is false (fisheye-runtime.ts:35-39). The driver's shader translator rejected FISHEYE_VS or FISHEYE_FS GLSL; the InfoLog is captured, the failed shader is deleted, and the error includes the log. This is a genuine compile rejection, not an allocation failure.","triggerScenarios":"setupFisheye() compiles FISHEYE_VS or FISHEYE_FS (imported from fisheye-shaders.js) and the Angle/driver translator reports a compile error. Since fisheye shaders come from a separate module, this can also fire if those shader strings were locally modified or a package version mismatch changed them; otherwise it points at a buggy/incompatible translator.","commonSituations":"Headless Chromium with software GL whose translator mishandles the fisheye GLSL; outdated mobile/Intel drivers; local edits to fisheye-shaders.ts that introduced a syntax/type error; version drift between @remotion/effects and a forked shader module; a context degraded after a GPU reset.","solutions":["Render with --gl=angle (CLI) / chromiumOptions.gl='angle' (SSR) / Angle (Studio) for a consistent translator.","Read the InfoLog in the message — it names the offending line; verify packages/effects/src/fisheye/fisheye-shaders.ts was not locally modified and matches the installed @remotion/effects version.","Update GPU drivers or force a software GL path known to compile the fisheye shaders.","Confirm the context is healthy (gl.isContextLost()) and restore before retrying.","Report a driver/translator bug upstream if the GLSL is valid ES 3.00 yet rejected."],"exampleFix":"// before\nconst shader = gl.createShader(type);\ngl.shaderSource(shader, source);\ngl.compileShader(shader);\nif (!gl.getShaderParameter(shader, gl.COMPILE_STATUS)) {\n  // translator rejected FISHEYE_VS/FISHEYE_FS\n}\n\n// after (stable translator + verify shader source)\n// CLI: remotion render <comp> --gl=angle\n// and confirm fisheye-shaders.ts is unchanged vs the installed version.","handlingStrategy":"try-catch","validationCode":"// FISHEYE_VS/FISHEYE_FS are imported package strings; no user input to validate.\n// Pre-check only context health and GLSL ES 3.00 support.\nconst supportsFisheyeShaders = (gl: WebGL2RenderingContext): boolean =>\n  !gl.isContextLost() &&\n  (gl.getParameter(gl.SHADING_LANGUAGE_VERSION) ?? '').includes('3.00');","typeGuard":null,"tryCatchPattern":"try {\n  // apply fisheye(); for a custom canvas: const state = setupFisheye(canvas);\n} catch (err) {\n  if (err instanceof Error && /Shader compile failed/.test(err.message)) {\n    // err.message contains the InfoLog; render on Angle and retry.\n    console.error('fisheye compile failure:', err.message);\n    throw err;\n  }\n  throw err;\n}","preventionTips":["Render with the Angle backend for a consistent translator.","Do not locally edit fisheye-shaders.ts; keep @remotion/effects version pinned.","Pin a stable software GL path in CI; update GPU drivers on render hosts.","Confirm context health (gl.isContextLost()) before setup."],"tags":["webgl","shader","glsl","compiler","gpu","fisheye","setup"],"backgroundTag":null,"analyzedSha":"78fe4bb3fdb5a2cd68724393d63cb223db333fa7","analyzedAt":"2026-08-12T17:18:50.444Z","schemaVersion":2},"datasetVersion":"2026-08-12T18:17:37.767Z"}