webgl开发中,很多功能效果呀还是必须得要shader才能实现,shader我这边用的glsl写的,webgl三维框架用的three,既然GPU编程肯定要与CPU通信,这边我自己研究出了比较好用的通讯方式
1.一般类似传值
一.js传值:
let tempIndex=1;
const hzbb = shader.uniformLocations("hzbb");
gl.uniform1i(hzbb,tempIndex);
二.shader定义: uniform int hzbb;(uniform和attribute 这两种都可以,注意:这两种类型只能作用当前片段或者顶点着色 内)
三.拓展:uniform1i对应int/sampler2D、uniform1f对应float、uniform对应bool、uniform3f对应vec3、uniformMatrix4对应mat4 等等(这些可以看webgl api)
2.数组传值
一.js传值:
let marks=[ ];
const glMarks = shader.uniformLocations["glMarks[0]"];(记得只要数组就是下标0的形式去传值)
gl.uniform1iv(glMarks,marks);
二.shader定义: uniform int uClipPolygonVCount[10];(uniform和attribute 这两种都可以,注意:shader里数组长度自己根据需求而定,我这是为了省事)。
三.拓展:uniform1iv对应int[ ]/sampler2D[ ]、uniform1fv对应float[ ]、uniform3fv对应vec3[ ]、uniformMatrix4v对应mat4[ ]等等(在后面加个v就是数组了)
3.自定义方法
原理是一样的就是为了自己在项目中使用方便
//自定义方法
setUniform1i(name, value) {
let gl = this.gl;
let location = this.uniformLocations[name];
if (location == null) {
return;
}
gl.uniform1i(location, value);
}
};
//js定义与传值
let hzbb = 527438
shader.setUniform1i("hzbb",hzbb);
//shader 定义
uniform int hzbb;