写好的 Custom Render Texture 的 shader 在打包的时候报出了一个错误:
[Unity] Player export failed. Reason: Shader error in 'Hidden/MyCustomRenderTextureShader': 'asuint' : no matching overloaded function found at ***/CGIncludes/UnityCustomRenderTexture.cginc(189) (on gles)
查资料发现 asuint 这个函数是在 Shader Model 4 (SM4) 才开始支持。
然后稍微看了一下 cginc 里边的代码,发现只有一个地方用到了这个函数——是把浮点类型的 primitive ID 转成 uint 类型。
OUT.primitiveID = asuint(CustomRenderTexturePrimitiveIDs[primitiveID]);
这个 primitiveID 是 update zone 的当前正在处理的索引,而我目前并没有使用很多 update zone 来实现效果的需求,所以决定尝试一下,直接将 float 类型强转成 uint 。
OUT.primitiveID = (uint)(CustomRenderTexturePrimitiveIDs[primitiveID]);
操作步骤:
- 在自己的工作目录下创建一个自己的 CustomRenderTexture 的 cginc ,也就是新建个文本文件,把后缀改成 .cginc。
- 把 UnityCustomRenderTexture.cginc 中的代码全部复制到自己新建的 cginc 中,并且按照上面代码修改。
- 别忘了修改一下头部的宏定义名称 #ifndef UNITY_CUSTOM_TEXTURE_INCLUDED 跟默认的做一个区分。
- 在 shader 代码中引用我们自己的 cginc ,就可以用了。