-前言-
之前也写过一篇关于Laya2D自定义Shader的博客。不过那篇博客局限性太大,是完全独立于Laya框架下独自更新的。不能通过Laya的添加层级关系,设置坐标等。所以这次Shader方案是基于Laya的运行框架下的。
-正文-
Laya框架简述
在开始说具体方案时,还是先来了解下Laya框架的运行规则。
Laya框架下分为3块:
- 用户逻辑层,这一层逻辑是我们自己写游戏的逻辑层,基于Timer帧更新去循环跑
- 框架逻辑层,这一层逻辑是确定每个图元的渲染方式,是否重绘等逻辑。是根据用户层所设置的各种数据所确定
- CPU到GPU的渲染层,这一层逻辑是Laya根据框架逻辑层所设值的Sumit渲染函数依次向显卡提交渲染申请。其中每一次的调用WebGL接口为一次着色器调用请求。
//上面三层都存在于Stage.render函数
updateTimers();//用户逻辑层
//框架逻辑层
if (this.renderingEnabled) {
for (var i: number = 0, n: number = this._scene3Ds.length; i < n; i++)//更新3D场景,必须提出来,否则在脚本中移除节点会导致BUG
this._scene3Ds[i]._update();
context.clear();
super.render(context, x, y);
Stat._StatRender.renderNotCanvas(context, x, y);
}
//渲染层
if (this.renderingEnabled) {
Stage.clear(this._bgColor);
context.flush();
VectorGraphManager.instance && VectorGraphManager.getInstance().endDispose();
}
自定义Shader
在明确了Laya的框架之后,我们可以确定,我们的Shader完整流程也是需要从用户逻辑层——>框架逻辑层——>渲染层一步一步的透传的。
实现目标
我们可过下面的伪代码来感受下实现效果
//step0 创建图片对象
let shaderImage:Laya.Image = new Laya.Image(图片路径);
//step1 创建控制Image的Shader对象
let shader:Laya.Shader2X = new Laya.Shader2X(顶点着色器、片元着色器、其余参数)
//step2 连接shader与shaderImage
//关键步骤

本文详细介绍了如何在Laya2D框架下自定义Shader,实现个性化滤镜和高级图形效果。从理解Laya框架运行规则,到创建自定义Value2D对象,再到修改渲染逻辑,最后实现Shader与Image的连接,提供了完整的实现步骤。

1572

被折叠的 条评论
为什么被折叠?



