解决:Both vertex and fragment programs must be present in a CGPROGRAM

        最近正在做unity项目从2018升级到unity2021版本,某个shader报Shader warnig in "xxxx.shader":Both vertex and fragment programs must be present in a CGPROGRAM. Excluding it from compilation.错误,第一反应是肯定是Shader本省错误。肉眼看去并没有发现有什么错误,也与2018的版本Shader进行比较,并无差异

        奇怪的现象,总是有一些不为人知的隐藏,但往往又无法解释,就此开始一一尝试:

1、怀疑语法错误

        因为我的shader有多个pass,我就一一屏蔽,发现情况依旧,结果失败

2、检查 CGPROGRAM,ENDCG 是否拼写 错误

       仔仔细细检查,结果失败

3、是否用到特殊Shader语法特性

        shader内容相对简单,并没有特殊语义的地方

4、神奇时刻,用subline text 打开

      先前看shader文件都是通过vs打开,阴差阳错我想看下类似的shader与该shader文件有什么不同,通过subline text文本编辑器软件打开该文件,神奇的情况发现了,在#pragma vertex vert 语句后面竟然有一个 特殊转义字符(0x0a)Ascii换行符,并发现其他语句也有,尝试删除该字符

既然成功了,直接破案。

 结论:

        原来的shader是Ascii编码,而 subline Text是utf8编码,所以subline Text能看出来,为啥VS打开时候看不到呢,是因为vs是自适应文件的编码格式,所以用它打开无法看到(0x0a)Ascii换行符

猜你喜欢

转载自blog.csdn.net/lejian/article/details/125515511