type
Post
status
Published
date
Nov 30, 2023
slug
macros-inside-v2f-in-diff-platform
summary
tags
Unity
着色
疑难杂症
category
疑难杂症
icon
password
今天在工作任务中出现了一个仅在Metal平台的Shader报错,这个报错会造成应用该Shader的材质在Mac平台直接消失。
报错如下:
Metal:Fragment input(s) mismatching vertex shader output type(s) or not written by vertex shader
经查明发现造成这个问题的原因是有一个宏定义的方式是shader_feature_local_fragment,但是这个宏应用在了从vertex shader到fragment shader传递的结构体v2f中。
这个问题在Win平台Unity支持的所有平台编译版本中都不会出现问题。即便在Shader的Inspector选项里Compiled Code选择All Platforms或者Custom里包含Metal平台,之后点击Compile and show code都不会有任何的报错。
测试之后发现如果单纯设置为shader_feature_local就可以解决问题,猜测是Metal平台的编译更加严格,_fragment或者_vertex后缀的宏在Metal平台并不会被应用到结构体中。要么在结构体中不使用此类宏定义,要么在宏定义中去掉该后缀
- 作者:Reguluz
- 链接:https://reguluz.site/article/macros-inside-v2f-in-diff-platform
- 声明:本文采用 CC BY-NC-SA 4.0 许可协议,转载请注明出处。
相关文章