gl.getUniformLocation无法拿到值

有时候,在webgl中,使用gl.getUniformLocation()方法无法拿到值

比如下述代码:

shader代码

precision mediump float;
varying vec4 v_Color;
uniform vec4 u_FogColor;
void main(){
    gl_FragColor = v_Color;
}

js代码

let u_FogColor = gl.getUniformLocation(gl.program, "u_FogColor");
console.log(u_FogColor);//这里输出的是null

猜测1:

shader中的u_FogColor没有被使用,所以js中拿不到

试验1:

u_FogColor赋值给一个color变量,但是color没有被其他对象使用

precision mediump float;
varying vec4 v_Color;
uniform vec4 u_FogColor;
void main(){
    vec4 color = u_FogColor;//u_FogColor赋值给一个color变量,但是color没有被其他对象使用
    gl_FragColor = v_Color;
}

结果1:

js中得到的还是null

猜测2:

shader中的u_FogColor必须被真正的使用

比如,最终被传递给gl_FragColor,或者被最终被传递给varying 等变量

试验2:

u_FogColor赋值给color变量后,color变量再赋值给gl_FragColor

precision mediump float;
varying vec4 v_Color;
uniform vec4 u_FogColor;
void main(){
    vec4 color = u_FogColor;
    gl_FragColor = color;
}

结果2:

js中成功获取!

最终结论:

shader中的uniform变量,只有在“最终真正被使用”后

才可以在js中拿到具体的值!

  • 5
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

哈哈地图

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值