mirror of
https://github.com/Eragon-Brisingr/UShaderLab.git
synced 2026-09-15 14:54:36 +00:00
Fix -Game no matieral error
This commit is contained in:
@@ -0,0 +1,69 @@
|
||||
// Copyright UShaderLab. All Rights Reserved.
|
||||
//
|
||||
// Object / primitive / bounds intrinsics.
|
||||
|
||||
#include "ShaderLabIntrinsics.h"
|
||||
|
||||
#include "Materials/MaterialExpressionActorPositionWS.h"
|
||||
#include "Materials/MaterialExpressionBounds.h"
|
||||
#include "Materials/MaterialExpressionDistanceCullFade.h"
|
||||
#include "Materials/MaterialExpressionLocalPosition.h"
|
||||
#include "Materials/MaterialExpressionObjectBounds.h"
|
||||
#include "Materials/MaterialExpressionObjectLocalBounds.h"
|
||||
#include "Materials/MaterialExpressionObjectOrientation.h"
|
||||
#include "Materials/MaterialExpressionObjectPositionWS.h"
|
||||
#include "Materials/MaterialExpressionObjectRadius.h"
|
||||
#include "Materials/MaterialExpressionPrecomputedAOMask.h"
|
||||
#include "Materials/MaterialExpressionPreSkinnedLocalBounds.h"
|
||||
|
||||
void RegisterObjectIntrinsics(FShaderLabIntrinsicRegistry& Registry)
|
||||
{
|
||||
using namespace ShaderLabIntrinsic_Private;
|
||||
using EFreq = EShaderLabIntrinsicFrequency;
|
||||
|
||||
AddSimple(Registry, TEXT("LocalPosition"), EFreq::Any, TEXT("float3"), [](UMaterial& M) { return MakeSimple<UMaterialExpressionLocalPosition>(M); });
|
||||
AddSimple(Registry, TEXT("ActorPositionWS"), EFreq::Any, TEXT("float3"), [](UMaterial& M) { return MakeSimple<UMaterialExpressionActorPositionWS>(M); });
|
||||
AddSimple(Registry, TEXT("ObjectPositionWS"), EFreq::Any, TEXT("float3"), [](UMaterial& M) { return MakeSimple<UMaterialExpressionObjectPositionWS>(M); });
|
||||
AddSimple(Registry, TEXT("ObjectRadius"), EFreq::Any, TEXT("float"), [](UMaterial& M) { return MakeSimple<UMaterialExpressionObjectRadius>(M); });
|
||||
AddSimple(Registry, TEXT("ObjectBounds"), EFreq::Any, TEXT("float3"), [](UMaterial& M) { return MakeSimple<UMaterialExpressionObjectBounds>(M); });
|
||||
// Multi-output nodes: connect output 0 (matches existing behavior).
|
||||
AddSimple(Registry, TEXT("ObjectLocalBounds"), EFreq::Any, TEXT("float3"), [](UMaterial& M) { return MakeSimple<UMaterialExpressionObjectLocalBounds>(M); });
|
||||
AddSimple(Registry, TEXT("ObjectOrientation"), EFreq::Any, TEXT("float3"), [](UMaterial& M) { return MakeSimple<UMaterialExpressionObjectOrientation>(M); });
|
||||
AddSimple(Registry, TEXT("PreSkinnedLocalBounds"), EFreq::Any, TEXT("float3"), [](UMaterial& M) { return MakeSimple<UMaterialExpressionPreSkinnedLocalBounds>(M); });
|
||||
AddSimple(Registry, TEXT("DistanceCullFade"), EFreq::Any, TEXT("float"), [](UMaterial& M) { return MakeSimple<UMaterialExpressionDistanceCullFade>(M); });
|
||||
AddSimple(Registry, TEXT("PrecomputedAOMask"), EFreq::Any, TEXT("float"), [](UMaterial& M) { return MakeSimple<UMaterialExpressionPrecomputedAOMask>(M); });
|
||||
|
||||
// Bounds(Space) — unified bounds node; Space is an EMaterialExpressionBoundsType token (MEILB_*).
|
||||
{
|
||||
FShaderLabIntrinsicDesc Desc;
|
||||
Desc.Name = FName(TEXT("Bounds"));
|
||||
Desc.ReturnType = TEXT("float3");
|
||||
Desc.Doc = TEXT("Space is an EMaterialExpressionBoundsType token (e.g. MEILB_ObjectLocal).");
|
||||
|
||||
FShaderLabIntrinsicParam SpaceParam;
|
||||
SpaceParam.Name = TEXT("Space");
|
||||
SpaceParam.Enum = StaticEnum<EMaterialExpressionBoundsType>();
|
||||
check(SpaceParam.Enum);
|
||||
Desc.Params = { MoveTemp(SpaceParam) };
|
||||
|
||||
Desc.MakeNode = [](UMaterial& M, const TArray<FString>& Args, FString& OutError) -> UMaterialExpression*
|
||||
{
|
||||
UMaterialExpressionBounds* E = NewObject<UMaterialExpressionBounds>(&M);
|
||||
if (Args.Num() >= 1)
|
||||
{
|
||||
UEnum* Enum = StaticEnum<EMaterialExpressionBoundsType>();
|
||||
check(Enum);
|
||||
const int64 Value = Enum->GetValueByNameString(Args[0]);
|
||||
if (Value == INDEX_NONE)
|
||||
{
|
||||
OutError = FString::Printf(TEXT("unknown bounds space '%s'"), *Args[0]);
|
||||
return nullptr;
|
||||
}
|
||||
E->Type = static_cast<EMaterialExpressionBoundsType>(Value);
|
||||
}
|
||||
M.GetExpressionCollection().AddExpression(E);
|
||||
return E;
|
||||
};
|
||||
Registry.Register(MoveTemp(Desc));
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user