js与shader通信

1 篇文章 0 订阅
1 篇文章 0 订阅

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;

  

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值