DreamShaderLang
插件参考C++ API

DreamShaderTypes.h

DreamShaderTypes.h

DreamShaderTypes.h

DreamShader » C++ API » DreamShaderTypes.h

1.x 源代码数据模型。一直到 1.9.x,FTextShaderParser::Parse 会填充这些结构体,生成器则根据它们构建资产。自 2.0 起,已没有任何解析会填充它们:1.x 源代码由旧版前端读取到语言模块的 AST 中(参见已废弃的解析器页面)。该头文件之所以保留,是因为编译器的资产层仍然在使用它——BuildDefinitionForIRProduct 会从某个 IR 产物填充一个 FTextShaderDefinition(名称、根、设置),以解析资产应放置于何处以及其材质如何配置——同时也因为编辑器模块中的 VirtualFunction 工具和 dump-graph 仍在使用其部分结构体和枚举。

定义于头文件 DreamShaderTypes.h。

模块DreamShader(Runtime)
包含#include "DreamShaderTypes.h"
命名空间UE::DreamShader
内容13 个结构体、5 个枚举、1 个内联函数、1 个自由函数、2 个成员函数
反射无——没有 USTRUCT、没有 UENUM、没有 UPROPERTY
引入仅 CoreMinimal.h

[!NOTE] 这些结构体均不携带 DREAMSHADER_API。 它们是仅头文件的聚合体,具有隐式的 特殊成员函数,因此无需导出符号即可跨模块边界构造、复制或销毁它们。 此头文件中只有三样东西是导出的: FTextShaderDefinition::TryGetSetting、FTextShaderDefinition::GetSetting 和 NormalizeSettingKey。

声明索引

namespace UE::DreamShader
{
    enum class ETextShaderPropertyType : uint8;
    enum class ETextShaderTextureType : uint8;
    enum class ETextShaderPropertySource : uint8;
    enum class ETextShaderMaterialFunctionKind : uint8;

    struct FTextShaderMetadata;
    struct FTextShaderPropertyDefinition;
    struct FTextShaderOutputBinding;             // nests enum class ETargetKind : uint8
    struct FTextShaderVariableDeclaration;
    struct FTextShaderGraphRegion;
    struct FTextShaderLayoutNode;
    struct FTextShaderLayoutComment;
    struct FTextShaderLayout;
    struct FTextShaderFunctionParameter;
    struct FTextShaderFunctionDefinition;
    struct FTextShaderMaterialFunctionDefinition;
    struct FTextShaderVirtualFunctionDefinition;
    struct FTextShaderDefinition;

    inline const TCHAR* LexToString(ETextShaderMaterialFunctionKind Kind);

    DREAMSHADER_API FString NormalizeSettingKey(const FString& InKey);
}

枚举

ETextShaderPropertyType

enum class ETextShaderPropertyType : uint8
{
    Scalar,
    Vector,
    Texture2D,
};
枚举值值含义
Scalar0标量值属性——float / int / bool 系列
Vector1矢量值属性——float2 / float3 / float4 系列
Texture2D2任意维度的纹理值属性;维度单独携带于 ETextShaderTextureType 中

Texture2D 枚举值名称是一种历史拼写。TextureCube 或 VolumeTexture 属性 也拥有 Type == Texture2D。

ETextShaderTextureType

enum class ETextShaderTextureType : uint8
{
    Texture2D,
    TextureCube,
    Texture2DArray,
    VolumeTexture,
};
枚举值值
Texture2D0
TextureCube1
Texture2DArray2
VolumeTexture3

ETextShaderPropertySource

enum class ETextShaderPropertySource : uint8
{
    Parameter,
    UEBuiltin,
};
枚举值值含义
Parameter0该属性变为材质参数节点
UEBuiltin1该属性是绑定到某个名称的内置 UE.* 调用

FTextShaderOutputBinding::ETargetKind

enum class ETargetKind : uint8
{
    MaterialProperty,
    ExpressionInput,
};
枚举值值含义
MaterialProperty0绑定目标是材质属性,例如 Base.BaseColor
ExpressionInput1绑定目标是某个具名表达式上的输入引脚,例如 Expression(Class="…").Pin[0]

ETextShaderMaterialFunctionKind

enum class ETextShaderMaterialFunctionKind : uint8
{
    ShaderFunction,
    MaterialLayer,
    MaterialLayerBlend,
};

inline const TCHAR* LexToString(const ETextShaderMaterialFunctionKind Kind);
枚举值值LexToString 结果生成
ShaderFunction0"ShaderFunction"UMaterialFunction
MaterialLayer1"ShaderLayer"UMaterialFunctionMaterialLayer
MaterialLayerBlend2"ShaderLayerBlend"UMaterialFunctionMaterialLayerBlend

[!NOTE] 枚举值名称仍使用 1.3.0 之前的 MaterialLayer* 拼写,但 LexToString 打印 的是当前的 ShaderLayer* 拼写。因此生成的消息会说 ShaderLayer,而绝不会是 MaterialLayer,即使源文件使用了已弃用的关键字。default: 标签 与 ShaderFunction 情形共用,因此超出范围的值也会打印 "ShaderFunction"。

结构体

[!NOTE] 下面的含义列说明了 1.x 解析器在每个成员中存储了什么,以及 1.x 生成器如何读取它。自 2.0.0 起,没有任何解析会填充这些结构体;剩下的少数使用者已在 引言和备注下命名。此处提到的解析时检查、警告和源映射 属于已废弃的解析器:1.x 源代码现在由旧版前端诊断, 其 DSHnnnn 代码会携带该构造的行号和列号。

FTextShaderMetadata

附加到属性或函数参数的声明元数据。

struct FTextShaderMetadata
{
    FString Group;
    bool bHasSortPriority = false;
    int32 SortPriority = 32;
    FString Description;
    TMap<FString, FString> ReflectedProperties;
};
成员类型默认值含义
GroupFString""参数组。当声明未显式设置时,从外层 Properties Group("…") 作用域继承。
bHasSortPriorityboolfalseSortPriority 是否有意义。由显式的 SortPriority / Sort 键设为 true,也会由应用于 Group("…") 作用域内声明的自动编号设置。省略该键的顶层(未分组)声明保持 false。
SortPriorityint3232组内的排序顺序。
DescriptionFString""工具提示 / 描述文本。
ReflectedPropertiesTMap<FString, FString>空来自 [ … ] 块的任意反射 UPROPERTY 名称 → 字面文本对。键会使用 NormalizeSettingKey 进行规范化,即去除首尾空白并转为小写。

1.x 解析器自行消费(而非放入 ReflectedProperties)的键:Group / Category、Description、SortPriority / Sort,以及由 Slider(min, max) 生成的 SliderMin / SliderMax 对。参见元数据块。

FTextShaderPropertyDefinition

Properties 节的一个条目。

struct FTextShaderPropertyDefinition
{
    FString Name;
    ETextShaderPropertySource Source = ETextShaderPropertySource::Parameter;
    FString ParameterNodeType;
    FString UEBuiltinFunctionName;
    TMap<FString, FString> UEBuiltinArguments;
    ETextShaderPropertyType Type = ETextShaderPropertyType::Scalar;
    ETextShaderTextureType TextureType = ETextShaderTextureType::Texture2D;
    bool bHasExplicitTextureType = false;
    int32 ComponentCount = 1;
    bool bConst = false;
    bool bHasDefaultValue = false;
    double ScalarDefaultValue = 0.0;
    FLinearColor VectorDefaultValue = FLinearColor::White;
    FString TextureDefaultObjectPath;
    FTextShaderMetadata Metadata;
};
成员类型默认值含义
NameFString""按书写形式给出的属性 / 参数名称。
SourceETextShaderPropertySourceParameter表示参数节点还是 UE.* 内置项。
ParameterNodeTypeFString""当声明指定了 Unreal 表达式类标记时,该标记的显式内容,例如 ScalarParameter、TextureSampleParameter2D。对于紧凑类型标记则为空。
UEBuiltinFunctionNameFString""当 Source == UEBuiltin 时的内置项名称。
UEBuiltinArgumentsTMap<FString, FString>空该内置项的命名参数,以原始文本形式给出。
TypeETextShaderPropertyTypeScalar标量 / 向量 / 纹理系列。
TextureTypeETextShaderTextureTypeTexture2D纹理维度。仅在配合 bHasExplicitTextureType 时才有意义。
bHasExplicitTextureTypeboolfalse仅当声明的标记指明了维度时为 true —— Texture2D、TextureCube、Texture2DArray、VolumeTexture,或某个 TextureSampleParameter* 变体。
ComponentCountint321对于标量和向量属性为 1–4。
bConstboolfalse声明为 const —— 一个常量节点,而非参数。
bHasDefaultValueboolfalse该声明是否带有 = <value>。
ScalarDefaultValuedouble0.0标量属性的默认值。
VectorDefaultValueFLinearColorFLinearColor::White向量属性的默认值。
TextureDefaultObjectPathFString""由 Path(...) 解析出的对象路径。
MetadataFTextShaderMetadata默认构造[ … ] 块。

诸如 TextureObjectParameter 之类的标记映射到单个 Unreal 节点类,该类可容纳任意纹理维度。对于这些标记,bHasExplicitTextureType 保持为 false,TextureType 保持其 Texture2D 默认值,而 1.x 生成器会从所指定的默认资产推断出真实维度,而不是拒绝它。自 2.0.0 起,1.x 对纹理默认值中所写类与其属性之间的检查在绑定之前针对源进行: DSH1043 针对非纹理类, DSH1044 针对另一维度的纹理类。

FTextShaderOutputBinding

Outputs 段内的一条 <target> = <variable>; 语句。

struct FTextShaderOutputBinding
{
    enum class ETargetKind : uint8 { MaterialProperty, ExpressionInput };

    ETargetKind TargetKind = ETargetKind::MaterialProperty;
    FString MaterialProperty;
    FString ExpressionClass;
    TMap<FString, FString> ExpressionArguments;
    int32 ExpressionPinIndex = INDEX_NONE;
    FString TargetText;
    FString SourceText;
};
成员类型默认值含义
TargetKindETargetKindMaterialProperty书写的是两种目标形式中的哪一种。
MaterialPropertyFString""材质属性名称,例如 Base.BaseColor。当 TargetKind == MaterialProperty 时使用。
ExpressionClassFString""当 TargetKind == ExpressionInput 时的目标表达式类。
ExpressionArgumentsTMap<FString, FString>空该表达式的构造函数参数,以原始文本形式给出。
ExpressionPinIndexint32INDEX_NONE目标输入引脚索引。1.x 会在解析时拒绝负数或无法解析的索引。
TargetTextFString""原始左侧源文本,1.x 会在诊断中原样重现。
SourceTextFString""原始右侧源文本 —— 即 1.x 生成器所求值的表达式。

FTextShaderVariableDeclaration

Outputs 段中的输出变量声明。

struct FTextShaderVariableDeclaration
{
    FString Type;
    FString Name;
    bool bHasDefaultValue = false;
    FString DefaultValueText;
};
成员类型默认值含义
TypeFString""类型标记,已通过 GLSL 别名规范化处理 —— vec3 会以 float3 的形式传入。
NameFString""变量名称。
bHasDefaultValueboolfalse该声明是否带有初始化器。带有至少一个已初始化输出声明的 Shader 可以省略其 Graph 块。
DefaultValueTextFString""初始化器表达式,以原始文本形式给出。

FTextShaderGraphRegion

Graph 块内的一个 #Region / #EndRegion 范围。

struct FTextShaderGraphRegion
{
    FString Name;
    int32 StartLine = 1;
    int32 EndLine = MAX_int32;
};
成员类型默认值含义
NameFString""区域标签;会成为注释框标题。
StartLineint321从 1 开始,含端点。
EndLineint32MAX_int32从 1 开始。因此未终止的区域会一直延伸到图的末尾。

FTextShaderLayoutNode

一条 Node(Var=…, X=…, Y=…) 指令。

struct FTextShaderLayoutNode
{
    FString Var;
    int32 X = 0;
    int32 Y = 0;
};
成员类型默认值含义
VarFString""其节点被固定的图变量。
Xint320编辑器 X 坐标。
Yint320编辑器 Y 坐标。

FTextShaderLayoutComment

一条 Comment(Name=…, X=…, Y=…, W=…, H=…) 指令。

struct FTextShaderLayoutComment
{
    FString Name;
    int32 X = 0;
    int32 Y = 0;
    int32 W = 420;
    int32 H = 240;
    FLinearColor Color = FLinearColor(0.10f, 0.16f, 0.22f, 0.35f);
};
成员类型默认值含义
NameFString""注释框文本。
Xint320编辑器 X 坐标。
Yint320编辑器 Y 坐标。
Wint32420框宽度。
Hint32240框高度。
ColorFLinearColor(0.10, 0.16, 0.22, 0.35)框色调。

FTextShaderLayout

整个 Layout 段。

struct FTextShaderLayout
{
    TArray<FTextShaderLayoutNode> Nodes;
    TArray<FTextShaderLayoutComment> Comments;
};
成员类型含义
NodesTArray<FTextShaderLayoutNode>固定的节点位置,按声明顺序排列。
CommentsTArray<FTextShaderLayoutComment>注释框,按声明顺序排列。

既没有节点也没有注释的布局会被视为“无布局”,转而运行自动放置。请参阅 图布局。

FTextShaderFunctionParameter

Inputs、Outputs 或 Results 段中的一条条目。

struct FTextShaderFunctionParameter
{
    FString Type;
    FString Name;
    bool bOptional = false;
    bool bHasDefaultValue = false;
    FString DefaultValueText;
    FTextShaderMetadata Metadata;
};
成员类型默认值含义
TypeFString""类型标记,GLSL 别名已重写。
NameFString""参数名称。对于经过返回类型降级的 Function,合成的结果参数名为 __return。
bOptionalboolfalse声明为 opt。
bHasDefaultValueboolfalse是否给出了预览值 / 默认值。
DefaultValueTextFString""该值,以原始文本形式给出。
MetadataFTextShaderMetadata默认构造[ … ] 块。

FTextShaderFunctionDefinition

一个 Function 或 GraphFunction 块 —— 是一个 HLSL 辅助函数,而非资产。

struct FTextShaderFunctionDefinition
{
    FString Name;
    bool bSelfContained = false;
    TArray<FTextShaderFunctionParameter> Inputs;
    TArray<FTextShaderFunctionParameter> Results;
    FString HLSL;
    TArray<FString> IncludePaths;
};
成员类型默认值含义
NameFString""函数名。在 Namespace 块内声明时限定为 Namespace::Function。
bSelfContainedboolfalse由 SelfContained 或 Inline 修饰符关键字设置。
InputsTArray<FTextShaderFunctionParameter>空in 参数 —— 包括限定符为隐式的那些参数。
ResultsTArray<FTextShaderFunctionParameter>空out 参数,外加声明带有返回类型时的合成 __return 参数。
HLSLFString""规范化后的正文文本。
IncludePathsTArray<FString>空位于正文最顶部的 #include 行,已从 HLSL 中剥离:对于普通 Function,提升到生成的 .ush 顶部;对于嵌入式正文,提升到 Custom 节点的 include 列表。虚拟着色器路径,已去除引号。

FTextShaderMaterialFunctionDefinition

一个 ShaderFunction、ShaderLayer 或 ShaderLayerBlend 块 —— 每一种生成一个资产。

struct FTextShaderMaterialFunctionDefinition
{
    FString Name;
    FString Root;
    ETextShaderMaterialFunctionKind Kind = ETextShaderMaterialFunctionKind::ShaderFunction;
    TArray<FTextShaderPropertyDefinition> Properties;
    TArray<FTextShaderFunctionParameter> Inputs;
    TArray<FTextShaderFunctionParameter> Outputs;
    TMap<FString, FString> Settings;
    FString Code;
    int32 CodeStartIndex = INDEX_NONE;
    TArray<FTextShaderGraphRegion> GraphRegions;
    FTextShaderLayout Layout;
    FString HLSL;
};
成员类型默认值含义
NameFString""来自 Name= 特性的资产路径。
RootFString""来自 Root= 特性的包根路径。
KindETextShaderMaterialFunctionKindShaderFunction使用了三个关键字中的哪一个。
PropertiesTArray<FTextShaderPropertyDefinition>空函数局部属性节点。
InputsTArray<FTextShaderFunctionParameter>空Inputs 区段。
OutputsTArray<FTextShaderFunctionParameter>空Outputs 区段。
SettingsTMap<FString, FString>空Settings 区段。键会被 NormalizeSettingKey 转为小写。
CodeFString""Graph 块正文。
CodeStartIndexint32INDEX_NONE该正文在预处理源中的字符偏移量,1.x 曾据此推算图诊断所在行。自 2.0.0 起无任何读取。
GraphRegionsTArray<FTextShaderGraphRegion>空#Region 跨度。
LayoutFTextShaderLayoutdefault-constructedLayout 区段。
HLSLFString""从不被 1.x 解析器填充。

FTextShaderVirtualFunctionDefinition

一个 VirtualFunction 块 —— 对现有 UMaterialFunction 的声明;不生成任何内容。

struct FTextShaderVirtualFunctionDefinition
{
    FString Name;
    FString Asset;
    TArray<FTextShaderFunctionParameter> Inputs;
    TArray<FTextShaderFunctionParameter> Outputs;
    TMap<FString, FString> Options;
};
成员类型默认值含义
NameFString""可从 Graph 调用的名称。必需;没有它,旧版前端会报告 DSH6311。
AssetFString""目标 UMaterialFunction 的已解析对象路径。必需,来自 Asset= 特性或 Options.Asset;没有它,DSH6312。
InputsTArray<FTextShaderFunctionParameter>空已声明的输入。Properties 可作为该区段的同义词接受。
OutputsTArray<FTextShaderFunctionParameter>空已声明的输出。必须非空;否则 DSH6313。
OptionsTMap<FString, FString>空Options 区段。键会被 NormalizeSettingKey 转为小写。

FTextShaderDefinition

解析结果的根:一整个翻译单元。

struct FTextShaderDefinition
{
    FString Name;
    FString Root;
    TArray<FTextShaderPropertyDefinition> Properties;
    TMap<FString, FString> Settings;
    TArray<FTextShaderVariableDeclaration> OutputDeclarations;
    TArray<FTextShaderOutputBinding> Outputs;
    FString Code;
    int32 CodeStartIndex = INDEX_NONE;
    TArray<FTextShaderGraphRegion> GraphRegions;
    FTextShaderLayout Layout;
    FString HLSL;
    TArray<FTextShaderFunctionDefinition> Functions;
    TArray<FTextShaderFunctionDefinition> GraphFunctions;
    TArray<FTextShaderMaterialFunctionDefinition> MaterialFunctions;
    TArray<FTextShaderVirtualFunctionDefinition> VirtualFunctions;
    TArray<FString> Warnings;

    DREAMSHADER_API bool TryGetSetting(const TCHAR* Key, FString& OutValue) const;
    DREAMSHADER_API FString GetSetting(const TCHAR* Key, const TCHAR* DefaultValue = TEXT("")) const;
};
成员类型默认值含义
NameFString""顶层 Shader(Name="…")。为空表示该单元未声明材质 —— 这是判断“这里是否有 Shader”的常用测试。
RootFString""Shader(Root="…")。
PropertiesTArray<FTextShaderPropertyDefinition>空Shader 的 Properties 区段。
SettingsTMap<FString, FString>空Shader 的 Settings 区段。键会被转为小写。
OutputDeclarationsTArray<FTextShaderVariableDeclaration>空输出变量声明。
OutputsTArray<FTextShaderOutputBinding>空输出绑定。在 1.x 中,空数组会产生解析警告和生成错误;自 2.0.0 起,没有 Outputs 区段的 Shader 会警告 DSH2256。
CodeFString""Graph 块正文。
CodeStartIndexint32INDEX_NONE该正文在预处理源中的字符偏移量,1.x 曾据此推算图诊断所在行。自 2.0.0 起无任何读取。
GraphRegionsTArray<FTextShaderGraphRegion>空#Region 跨度。
LayoutFTextShaderLayoutdefault-constructedLayout 区段。
HLSLFString""从不被 1.x 解析器填充。
FunctionsTArray<FTextShaderFunctionDefinition>空Function 块。
GraphFunctionsTArray<FTextShaderFunctionDefinition>空GraphFunction 块。
MaterialFunctionsTArray<FTextShaderMaterialFunctionDefinition>空ShaderFunction / ShaderLayer / ShaderLayerBlend 块,按声明顺序。
VirtualFunctionsTArray<FTextShaderVirtualFunctionDefinition>空VirtualFunction 块。
WarningsTArray<FString>空1.x 解析收集的非致命诊断;它们从未使 Parse 返回 false。自 2.0.0 起从不填充。

TryGetSetting

bool TryGetSetting(const TCHAR* Key, FString& OutValue) const;
参数 Key任意大小写的设置键,可带或不带外围空白
参数 OutValue命中时接收存储的值;未命中时保持不变
返回值若 Settings 包含 NormalizeSettingKey(Key) 则为 true
常量性const,纯函数,任意线程

GetSetting

FString GetSetting(const TCHAR* Key, const TCHAR* DefaultValue = TEXT("")) const;
参数 Key同上
参数 DefaultValue未命中时返回。默认为空字符串
返回值存储的值,或 DefaultValue
常量性const,纯函数,任意线程

由于存储的键和查询都会经过 NormalizeSettingKey,查找是 不区分大小写且会裁剪空白的。它对内部空格、下划线或连字符 不敏感:Two Sided 和 TwoSided 仍是不同的键。

NormalizeSettingKey

DREAMSHADER_API FString NormalizeSettingKey(const FString& InKey);

裁剪前导和尾随空白,然后转为小写。这就是全部操作。

输入结果
" ShadingModel ""shadingmodel"
"TWOSIDED""twosided"
"Two Sided""two sided"
"Two_Sided""two_sided"

[!WARNING] NormalizeSettingKey 和 UDreamShaderSettings::NormalizeMappingKey 不可互换。后者还会去除所有空格、_ 和 -,并且适用于 设置值(枚举别名),而非键。使用错误的一个会让 Two Sided Foliage 变成 查找未命中。这四个规范化辅助函数在 DreamShaderModule.h 中并排比较。

此头文件中每一个持有设置或选项的 TMap<FString, FString> —— FTextShaderDefinition::Settings、FTextShaderMaterialFunctionDefinition::Settings、 FTextShaderVirtualFunctionDefinition::Options 和 FTextShaderMetadata::ReflectedProperties —— 在存储之前 都会以这种方式对其键进行规范化。只通过规范化键直接读取这些映射。

说明

  • 在 2.0 中大多数成员是残留物。 编译器填充 FTextShaderDefinition 的 Name、Root 和 Settings (以及 FTextShaderMaterialFunctionDefinition 的 kind、name、root 和 settings) 而不填充其他任何内容:属性、输出、图代码和 布局都以 IR 形式传递。不要指望从编译器获取的定义能描述源代码。 在定义之外,Classic 图布局会从 IR 的布局 提示填充 FTextShaderLayout,而 VirtualFunction 工具会从它们用旧版前端解析的声明中 填充 FTextShaderVirtualFunctionDefinition / FTextShaderFunctionParameter。
  • 这些结构体没有反射、没有 Serialize,也没有 operator==。它们不会被 网络复制、不可保存,并且除非你自己编写比较,否则不可比较。
  • 1.x 解析器在任何内容落入 Type 字段之前会规范化类型标记:vec3 变为 float3,mat4 变为 float4x4,依此类推。自 2.0.0 起,1.x 文本中的 GLSL 拼写会通过 DSH5277 被读取为 其 HLSL 类型。参见 类型。
  • 容器顺序过去是源顺序,1.x 会从前到后生成 MaterialFunctions。自 2.0.0 起,一个文件的资产按调用顺序构建 —— 被另一个函数调用的函数会先 构建 —— 而相互循环调用的函数会被 DSH8299。
  • 每个结构体都可使用编译器生成的操作进行复制和移动。复制是深层的 —— 成员是 FString、TArray 和 TMap 值,而非指针。

示例

读取一个定义:

#include "DreamShaderTypes.h"

using namespace UE::DreamShader;

void Describe(const FTextShaderDefinition& Definition)
{
    if (!Definition.Name.IsEmpty())
    {
        // Case-insensitive; "backend", "Backend" and " BACKEND " all hit.
        const FString Backend = Definition.GetSetting(TEXT("Backend"), TEXT("<project default>"));

        UE_LOG(LogDreamShader, Display, TEXT("Shader '%s' (Root='%s', Backend=%s): %d propert(ies), %d binding(s)"),
            *Definition.Name,
            *Definition.Root,
            *Backend,
            Definition.Properties.Num(),
            Definition.Outputs.Num());
    }

    for (const FTextShaderMaterialFunctionDefinition& Function : Definition.MaterialFunctions)
    {
        UE_LOG(LogDreamShader, Display, TEXT("  %s '%s'"), LexToString(Function.Kind), *Function.Name);
    }

    for (const FString& Warning : Definition.Warnings)
    {
        UE_LOG(LogDreamShader, Warning, TEXT("  %s"), *Warning);
    }
}

对于 生成 中的源代码,当 1.x 解析器填充 该定义时,会打印:

LogDreamShader: Shader 'Materials/M_Emissive' (Root='', Backend=<project default>): 1 propert(ies), 1 binding(s)
LogDreamShader:   ShaderFunction 'Functions/F_Tint'

2.0 编译器构建的定义只携带 Name、Root 和 Settings —— 而 Settings 从不持有 Backend,绑定器会将其取出放到 IR 产物上 —— 因此它会打印 Backend=<project default>,两个计数都是 0,并且不会列出其他任何内容。

另请参见

本页目录