在 Unity 中,纹理和采样器不是单独的对象,因此要在计算着色器在 GPU 上运行的程序。 更多信息
参见 术语表中使用它们,必须遵循以下 Unity 特定规则之一
使用与纹理名称相同的名称,并在开头添加 sampler
(例如,Texture2D MyTex
;SamplerState samplerMyTex
)。在这种情况下,采样器将初始化为该纹理的过滤器/环绕/各向异性设置。
使用预定义的采样器。为此,名称必须具有 Linear
或 Point
(用于过滤模式)和 Clamp
或 Repeat
(用于环绕模式)。例如,SamplerState MyLinearClampSampler
创建一个具有线性过滤模式和钳位环绕模式的采样器。
有关更多信息,请参阅有关采样器状态的文档。
您可以使用关键字生成计算着色器的多个变体,就像您可以为图形着色器生成一样。
有关变体的常规信息,请参阅着色器变体Unity 根据特定组合的着色器关键字及其状态生成的着色器程序的版本。一个着色器对象可以包含多个着色器变体。 更多信息
参见 术语表。有关如何在计算着色器中实现这些功能的信息,请参阅在 HLSL 中声明和使用着色器关键字和ComputeShader API 文档。
通常,计算着色器文件是用HLSL编写的,并自动编译或转换为所有必要的平台。但是,可以防止转换为其他语言(即,仅保留 HLSL 平台),或者手动编写GLSL 计算代码。
以下信息仅适用于仅限 HLSL 或仅限 GLSL 的计算着色器,不适用于跨平台构建。这是因为此信息可能导致计算着色器源代码从某些平台中排除。
被 CGPROGRAM
和 ENDCG
关键字包围的计算着色器源代码不会针对非 HLSL 平台进行处理。
被 GLSLPROGRAM
和 ENDGLSL
关键字包围的计算着色器源代码被视为 GLSL 源代码,并逐字输出。这仅在针对 OpenGL 或 GLSL 平台时有效。您还应该注意,虽然自动转换的着色器在缓冲区上遵循 HLSL 数据布局,但手动编写的 GLSL 着色器遵循 GLSL 布局规则。