Open jk20012001 opened 2 years ago
Effect Parser的一些功能介绍
YAML部分的语法
预处理指令
编译前预先字符串搜索替换,优先级高,匹配#if这样的用法,主要用于材质UI开关
编译前预先字符串搜索替换,优先级高
完全不管,前两项处理完直接传入编译,优先级低 所以说低优先级的#ifndef必须包在高优先级的#if里,否则会在前两步处理时报错
__VERSION__相关
Pass相关
Shader代码相关
矩阵访问
xScale 0 0 0 0 yScale 0 0 0 0 zf/(zf-zn) -zn*zf/(zf-zn)(引擎中[11]或shader中[2][3]) 0 0 1(引擎中[14]或shader中[3][2]) 0 shader里访问是[列][行]
会parse IA输入(无视宏条件)
migrations:参考builtin-unlit,可以进行方便的变量更名,但更复杂的迁移还是得写engine-extensions
pragma define-meta 名称 options/range/default(true) 这个是运行期宏, default编译期是常量,运行时从CPU传常量值
编译前预先字符串搜索替换,优先级高,匹配#if这样的用法,主要用于材质UI开关
pragma define 是effect编译期的宏, 主要为了支持WebGL1下的带参数宏, 以及定义UBO中数组的数量,
编译前预先字符串搜索替换,优先级高
define #ifndef是正常的宏定义, 和C++相同
完全不管,前两项处理完直接传入编译,优先级低 所以说低优先级的#ifndef必须包在高优先级的#if里,否则会在前两步处理时报错
include ""和<>是一样的, 先搜索chunks文件夹, 再搜索同级文件夹
if A || B这种写法最好不要出现,尤其是定义IA数据时,目前支持收集B,但仅仅只是收集,可能在另外的流程中并不包含B,这个需要找小薛的调试代码来输出error
110及以上支持用动态变量访问vector元素、数组元素,及动态的for循环 130及以上就统一用texture / textureGrad / textureLod函数采样,而无需贴图类型 130及以上支持textureSize获取分辨率 300及以上有GL_OES_standard_derivatives和 texelFetch指令,包括dFdx dFdy fwidth等 310以上可以声明32bit unsigned int的IA Input项 400及以上支持textureQueryLod 450及以上支持subpass
可以加embeddedMacros,但不要在里面直接给CC_SURFACES_宏,而是定义一个别名,如TECHNIQUE_XXX,然后在MacroRemapping中#if TECHNIQUE_XXX #define CC_SURFACES_XXX #endif这样,参考glass.effect
VS Out和FS In不要传矩阵,可能导致vk的location的编排重叠,出现overlapping的错误提示,应该把矩阵拆成vec4来传,然后组装起来
xScale 0 0 0 0 yScale 0 0 0 0 zf/(zf-zn) -zn*zf/(zf-zn)(引擎中[11]或shader中[2][3]) 0 0 1(引擎中[14]或shader中[3][2]) 0 shader里访问是[列][行]