keyword | 要检查的LocalKeyword。 |
keyword | 要检查的LocalKeyword的名称。 |
bool 如果给定的LocalKeyword为此计算着色器启用,则返回 true。否则,返回 false。
检查此计算着色器是否启用了局部着色器关键字。
着色器关键字确定 Unity 使用哪些着色器变体。有关使用局部着色器关键字和全局着色器关键字以及它们如何交互的信息,请参阅使用 C# 脚本的着色器关键字。
如果您传入一个LocalKeyword,并且它不存在于keywordSpace中,则此函数返回false
。如果您传入一个字符串,并且具有该name
的LocalKeyword不存在于keywordSpace中,则此函数返回false
。
采用字符串作为参数的此函数版本比采用LocalKeyword作为参数的版本慢。如果您多次调用此函数,最佳实践是创建一个LocalKeyword结构体,将其缓存并使用它。
注意:LocalKeyword
特定于单个Shader或ComputeShader实例。您不能将其与其他Shader或ComputeShader实例一起使用,即使它们声明了名称相同的关键字。
此示例遍历计算着色器的局部关键字空间中的局部着色器关键字。它确定它们是否被全局着色器关键字覆盖,并打印其状态。
using UnityEngine; using UnityEngine.Rendering;
public class Example : MonoBehaviour { public ComputeShader computeShader;
void Start() { CheckShaderKeywordState(); }
void CheckShaderKeywordState() { // Get all the local keywords that affect the Compute Shader var keywordSpace = computeShader.keywordSpace;
// Iterate over the local keywords foreach (var localKeyword in keywordSpace.keywords) { // If the local keyword is overridable, // and a global keyword with the same name exists and is enabled, // then Unity uses the global keyword state if (localKeyword.isOverridable && Shader.IsKeywordEnabled(localKeyword.name)) { Debug.Log("Local keyword with name of " + localKeyword.name + " is overridden by a global keyword, and is enabled"); } // Otherwise, Unity uses the local keyword state else { var state = computeShader.IsKeywordEnabled(localKeyword) ? "enabled" : "disabled"; Debug.Log("Local keyword with name of " + localKeyword.name + " is " + state); } } } }