【Cocos Creator 3.x】 Shader 中的 layout(set = N, binding = M) 是什么意思?

前言
在 Cocos Creator 3.3.0 版本中,在 builtin-sprite.effect 中有一句代码 layout (set = 2, binding = 10) uniform sampler2D cc_spriteTexture 。但是在 Cocos Creator 3.6.0 版本中,变成了 layout (set = 2, binding = 11) uniform sampler2D cc_spriteTexture。那么其中 layout(set = N, binding = M) 是什么,怎么设置其中的 N,M 值呢?

解析
在 GLSL 中:

layout (set = M, binding = N) uniform sampler2D variableName;
  • M 指 pSetLayouts 管道布局成员中的第 M’ 个描述符集布局
  • N 指的 pBindings 是描述符集布局的M的成员中的第N个描述符集(绑定)

您将使用的顶点着色器中统一缓冲区的布局代码如下所示:

 layout (std140, binding = 0) uniform bufferVals {
    mat4 mvp;
} myBufferVals;

这会将统一缓冲区内容映射到myBufferVals结构。未指定“set=M”,默认为 0。
“std140”是描述数据如何打包在统一块中的标准。

对应到 Cocos Effect 中
以 Cocos Creator 3.6.0 版本为例,我们可以从引擎源码找到一些蛛丝马迹。
在这里插入图片描述

类型描述
set = 2, binding = 0uniform CCLocalBatched 或 CCLocal 或 CCWorldBound
set = 2, binding = 1uniform CCForwardLight
set = 2, binding = 2uniform CCSkinningAnimation
set = 2, binding = 3uniform CCSkinningTexture 或 CCSkinning
set = 2, binding = 4uniform CCMorph
set = 2, binding = 5
set = 2, binding = 6uniform highp sampler2D cc_jointTexture 或 cc_realtimeJoint
set = 2, binding = 7uniform sampler2D cc_PositionDisplacements
set = 2, binding = 8uniform sampler2D cc_NormalDisplacements
set = 2, binding = 9uniform sampler2D cc_TangentDisplacements
set = 2, binding = 10uniform sampler2D cc_lightingMap
set = 2, binding = 11uniform sampler2D cc_spriteTexture
set = 2, binding = 12uniform sampler2D cc_reflectionTexture

以上分析来源

  • https://vulkan.lunarg.com/doc/view/1.2.154.1/windows/tutorial/html/08-init_pipeline_layout.html
  • https://vulkan.lunarg.com/doc/view/1.2.154.1/windows/tutorial/html/07-init_uniform_buffer.html
  • https://vulkan.lunarg.com/doc/view/1.2.154.1/windows/tutorial/html/index.html
  • https://vulkan.lunarg.com/doc/view/1.2.154.1/windows/tutorial/html/09-init_descriptor_set.html
  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值