You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

WebGL2设置uniform float时报No active linked Program错误求助

你遗漏的核心操作是:在修改uniform变量前,需要先将你编译链接完成的程序激活为WebGL上下文的当前使用程序。
WebGL是状态机模型,gl.uniform*系列方法只会修改当前处于激活状态的程序的uniform值,如果你没有指定激活的程序,就会抛出No active linked Program警告。

你只需要在获取uniform位置、赋值uniform之前,添加一行代码:

gl.useProgram(math_program);

完整的正确执行顺序如下:

// 1. 创建编译着色器(你代码中没贴这两步,确认你实际已经执行,否则链接会失败)
gl.compileShader(vertex_shader);
gl.compileShader(math_pass_shader);

// 2. 附着、链接程序
var math_program = gl.createProgram();
gl.attachShader(math_program, vertex_shader);
gl.attachShader(math_program, math_pass_shader);
gl.linkProgram(math_program);

// 3. 【你遗漏的步骤】激活当前要使用的程序
gl.useProgram(math_program);

// 4. 获取uniform位置、赋值
var zoom = gl.getUniformLocation(math_program, "zoom");
var x = gl.getUniformLocation(math_program, "center_x");
var y = gl.getUniformLocation(math_program, "center_y");

gl.uniform1f(zoom, 2.5);
gl.uniform1f(x, -0.5);
gl.uniform1f(y, 0.0);

额外注意:如果你后续需要切换使用不同的着色器程序,每次切换前都需要重新调用gl.useProgram()指定新的激活程序。

内容的提问来源于stack exchange,提问作者bamia

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.05 22:27:03