没有子载体可以在此图形卡上运行

时间:2015-10-24 11:07:26

标签: unity3d cg

这在PC上工作正常,但我使用的是Mac,它会显示警告

  

此显卡无法运行子着色器

对于着色器,然后调出粉红色错误着色器。

Shader "Custom/wireframeShaderWithLambert" {
Properties {
    _Glossiness ("Smoothness", Range(0,1)) = 0.5
    _Metallic ("Metallic", Range(0,1)) = 0.0
    _Color ("Line Color", Color) = (1,1,1,1)
    _MainTex ("Main Texture", 2D) = "white" {}
    _Thickness ("Thickness", Float) = 1
}     
SubShader {

  Tags { "RenderType" = "Opaque" }
  CGPROGRAM
  #pragma surface surf Lambert

  struct Input {
      float2 uv_MainTex;
  };

  sampler2D _MainTex;

  void surf (Input IN, inout SurfaceOutput o) {
      o.Albedo = tex2D (_MainTex, IN.uv_MainTex).rgb;
  }
  ENDCG
    Pass
    {
        Tags { "RenderType"="Opaque" "Queue"="Geometry" } 

        Blend SrcAlpha OneMinusSrcAlpha

        Cull Off
        LOD 200

        CGPROGRAM
        #pragma target 5.0
        #include "UnityCG.cginc"
        #pragma vertex vert
        #pragma fragment frag
        #pragma geometry geom

            struct vertToGeom
            {
                float4  pos     : POSITION;     // vertex position
                float2  uv      : TEXCOORD0;    // vertex uv coordinate
            };

            // Geometry to  UCLAGL_fragment
            struct geomToFrag
            {
                float4  pos     : POSITION;     // fragment position
                float2  uv      : TEXCOORD0;    // fragment uv coordinate
                float3  dist    : TEXCOORD1;    // distance to each edge of the triangle
            };

            // PARAMETERS //

            //float4 _Texture_ST;           // For the Main Tex UV transform
            float _Thickness = 1;       // Thickness of the wireframe line rendering
            float4 _Color = {1,1,1,1};  // Color of the line
            float4 _MainTex_ST;         // For the Main Tex UV transform
            sampler2D _MainTex;         // Texture used for the line


            // Vertex Shader
            vertToGeom vertShader(appdata_base v)
            {
                //Random shader code

                return output;
            }

            // Geometry Shader
            [maxvertexcount(3)]
            void geomShader(triangle UCLAGL_v2g p[3], inout TriangleStream<UCLAGL_g2f> triStream)
            {
                   //Random shader code
            }

        ENDCG
    }
} 
}

我不确定为什么会这样,我唯一能想到的可能是Cg在Mac上不起作用?

另外,我似乎无法找到使其成为GLSL的方法。

1 个答案:

答案 0 :(得分:0)

并不是说Cg在Mac上不起作用,但是你所使用的着色器版本(5.0)对于Mac的显卡来说太高了。

通常,您应该始终编写一个目标为2.0的子目录,这是默认着色器。效果不如高版本的课程好,有些功能可能无法使用,所以你必须适应它。

然后,根据需要添加更多子目标更高版本,以获得更高质量的版本。

See this Unity3D doc了解有关着色器目标和渲染平台的更多信息。

着色器目标概述:

  

默认情况下,Unity将着色器编译为大致着色器模型2.0   当量。使用#pragma target可以将着色器编译到   其他能力水平。目前支持这些目标:

#pragma target 2.0(默认) - 粗略着色模型2.0

  • Direct3D 9上的Shader Model 2.0。
  • 有限的算术和数量纹理指令;没有顶点纹理采样;碎片着色器中没有衍生物。

#pragma target 3.0 - 编译为着色器模型3.0:

  • Direct3D 9上的Shader Model 3.0。

#pragma target 4.0 - 编译为DX10着色器模型4.0。

  • 此目标目前仅受DirectX 11和XboxOne / PS4平台支持。

#pragma target 5.0 - 编译为DX11着色器模型5.0。

  • 此目标目前仅受DirectX 11和XboxOne / PS4平台支持。