第一点就是之前也提到过的渲染平台的差异,OpenGL和DirectX的屏幕空间坐标的差异,虽然大多数情况下,这样的差异并不会造成影响,因为Unity在背后为我们处理了这些问题,但是当我们开启了抗锯齿(Edit>Project Setting>Quality>Anti Aliasing)并且在此时使用了渲染到纹理技术。
此时Unity首先渲染得到屏幕图像,再由硬件进行抗锯齿处理后,得到一张渲染纹理给我们进行后续处理,当我们只需要处理一张渲染图像时,也不需要处理翻转的问题,但是如果我们需要同时处理多张渲染图像且开启了抗锯齿,就需要在顶点着色器中翻转某些渲染纹理的纵坐标。
//判断是否是DirectX类型的平台
#if UNITY_UV_STARTS_AT_TOP
//判断是否开启了抗锯齿
if(_MainTex_TexelSize.y<0)
nv.y = 1-uv.y;
#endif
shader的语法差异,如果看到以下的报错信息,都是因为DirectX9/11对Shader的语义更加严格造成的。
float4 v = float4(0.0);
就比如这行代码,在OpenGL平台上是合法的,它会得到一个4个分量都是0.0的float4类型的变量,但是在directX 11平台上,我们必须提供和变量类型相匹配的参数数目。</