Merge branch '3.7' into 3.8-beta

This commit is contained in:
badlogic 2019-03-06 12:02:18 +01:00
commit e7e64ebf2f
3 changed files with 95 additions and 86 deletions

View File

@ -76,6 +76,12 @@ void USpineSkeletonRendererComponent::TickComponent (float DeltaTime, ELevelTick
UClass* skeletonClass = USpineSkeletonComponent::StaticClass(); UClass* skeletonClass = USpineSkeletonComponent::StaticClass();
USpineSkeletonComponent* skeleton = Cast<USpineSkeletonComponent>(owner->GetComponentByClass(skeletonClass)); USpineSkeletonComponent* skeleton = Cast<USpineSkeletonComponent>(owner->GetComponentByClass(skeletonClass));
UpdateRenderer(skeleton);
}
}
void USpineSkeletonRendererComponent::UpdateRenderer(USpineSkeletonComponent* skeleton)
{
if (skeleton && !skeleton->IsBeingDestroyed() && skeleton->GetSkeleton() && skeleton->Atlas) { if (skeleton && !skeleton->IsBeingDestroyed() && skeleton->GetSkeleton() && skeleton->Atlas) {
skeleton->GetSkeleton()->getColor().set(Color.R, Color.G, Color.B, Color.A); skeleton->GetSkeleton()->getColor().set(Color.R, Color.G, Color.B, Color.A);
@ -92,27 +98,28 @@ void USpineSkeletonRendererComponent::TickComponent (float DeltaTime, ELevelTick
for (int i = 0; i < skeleton->Atlas->atlasPages.Num(); i++) { for (int i = 0; i < skeleton->Atlas->atlasPages.Num(); i++) {
AtlasPage* currPage = skeleton->Atlas->GetAtlas()->getPages()[i]; AtlasPage* currPage = skeleton->Atlas->GetAtlas()->getPages()[i];
UMaterialInstanceDynamic* material = UMaterialInstanceDynamic::Create(NormalBlendMaterial, owner); UMaterialInstanceDynamic* material = UMaterialInstanceDynamic::Create(NormalBlendMaterial, this);
material->SetTextureParameterValue(TextureParameterName, skeleton->Atlas->atlasPages[i]); material->SetTextureParameterValue(TextureParameterName, skeleton->Atlas->atlasPages[i]);
atlasNormalBlendMaterials.Add(material); atlasNormalBlendMaterials.Add(material);
pageToNormalBlendMaterial.Add(currPage, material); pageToNormalBlendMaterial.Add(currPage, material);
material = UMaterialInstanceDynamic::Create(AdditiveBlendMaterial, owner); material = UMaterialInstanceDynamic::Create(AdditiveBlendMaterial, this);
material->SetTextureParameterValue(TextureParameterName, skeleton->Atlas->atlasPages[i]); material->SetTextureParameterValue(TextureParameterName, skeleton->Atlas->atlasPages[i]);
atlasAdditiveBlendMaterials.Add(material); atlasAdditiveBlendMaterials.Add(material);
pageToAdditiveBlendMaterial.Add(currPage, material); pageToAdditiveBlendMaterial.Add(currPage, material);
material = UMaterialInstanceDynamic::Create(MultiplyBlendMaterial, owner); material = UMaterialInstanceDynamic::Create(MultiplyBlendMaterial, this);
material->SetTextureParameterValue(TextureParameterName, skeleton->Atlas->atlasPages[i]); material->SetTextureParameterValue(TextureParameterName, skeleton->Atlas->atlasPages[i]);
atlasMultiplyBlendMaterials.Add(material); atlasMultiplyBlendMaterials.Add(material);
pageToMultiplyBlendMaterial.Add(currPage, material); pageToMultiplyBlendMaterial.Add(currPage, material);
material = UMaterialInstanceDynamic::Create(ScreenBlendMaterial, owner); material = UMaterialInstanceDynamic::Create(ScreenBlendMaterial, this);
material->SetTextureParameterValue(TextureParameterName, skeleton->Atlas->atlasPages[i]); material->SetTextureParameterValue(TextureParameterName, skeleton->Atlas->atlasPages[i]);
atlasScreenBlendMaterials.Add(material); atlasScreenBlendMaterials.Add(material);
pageToScreenBlendMaterial.Add(currPage, material); pageToScreenBlendMaterial.Add(currPage, material);
} }
} else { }
else {
pageToNormalBlendMaterial.Empty(); pageToNormalBlendMaterial.Empty();
pageToAdditiveBlendMaterial.Empty(); pageToAdditiveBlendMaterial.Empty();
pageToMultiplyBlendMaterial.Empty(); pageToMultiplyBlendMaterial.Empty();
@ -125,32 +132,32 @@ void USpineSkeletonRendererComponent::TickComponent (float DeltaTime, ELevelTick
UTexture* oldTexture = nullptr; UTexture* oldTexture = nullptr;
UMaterialInstanceDynamic* current = atlasNormalBlendMaterials[i]; UMaterialInstanceDynamic* current = atlasNormalBlendMaterials[i];
if(!current || !current->GetTextureParameterValue(TextureParameterName, oldTexture) || oldTexture != texture) { if (!current || !current->GetTextureParameterValue(TextureParameterName, oldTexture) || oldTexture != texture) {
UMaterialInstanceDynamic* material = UMaterialInstanceDynamic::Create(NormalBlendMaterial, owner); UMaterialInstanceDynamic* material = UMaterialInstanceDynamic::Create(NormalBlendMaterial, this);
material->SetTextureParameterValue(TextureParameterName, texture); material->SetTextureParameterValue(TextureParameterName, texture);
atlasNormalBlendMaterials[i] = material; atlasNormalBlendMaterials[i] = material;
} }
pageToNormalBlendMaterial.Add(currPage, atlasNormalBlendMaterials[i]); pageToNormalBlendMaterial.Add(currPage, atlasNormalBlendMaterials[i]);
current = atlasAdditiveBlendMaterials[i]; current = atlasAdditiveBlendMaterials[i];
if(!current || !current->GetTextureParameterValue(TextureParameterName, oldTexture) || oldTexture != texture) { if (!current || !current->GetTextureParameterValue(TextureParameterName, oldTexture) || oldTexture != texture) {
UMaterialInstanceDynamic* material = UMaterialInstanceDynamic::Create(AdditiveBlendMaterial, owner); UMaterialInstanceDynamic* material = UMaterialInstanceDynamic::Create(AdditiveBlendMaterial, this);
material->SetTextureParameterValue(TextureParameterName, texture); material->SetTextureParameterValue(TextureParameterName, texture);
atlasAdditiveBlendMaterials[i] = material; atlasAdditiveBlendMaterials[i] = material;
} }
pageToAdditiveBlendMaterial.Add(currPage, atlasAdditiveBlendMaterials[i]); pageToAdditiveBlendMaterial.Add(currPage, atlasAdditiveBlendMaterials[i]);
current = atlasMultiplyBlendMaterials[i]; current = atlasMultiplyBlendMaterials[i];
if(!current || !current->GetTextureParameterValue(TextureParameterName, oldTexture) || oldTexture != texture) { if (!current || !current->GetTextureParameterValue(TextureParameterName, oldTexture) || oldTexture != texture) {
UMaterialInstanceDynamic* material = UMaterialInstanceDynamic::Create(MultiplyBlendMaterial, owner); UMaterialInstanceDynamic* material = UMaterialInstanceDynamic::Create(MultiplyBlendMaterial, this);
material->SetTextureParameterValue(TextureParameterName, texture); material->SetTextureParameterValue(TextureParameterName, texture);
atlasMultiplyBlendMaterials[i] = material; atlasMultiplyBlendMaterials[i] = material;
} }
pageToMultiplyBlendMaterial.Add(currPage, atlasMultiplyBlendMaterials[i]); pageToMultiplyBlendMaterial.Add(currPage, atlasMultiplyBlendMaterials[i]);
current = atlasScreenBlendMaterials[i]; current = atlasScreenBlendMaterials[i];
if(!current || !current->GetTextureParameterValue(TextureParameterName, oldTexture) || oldTexture != texture) { if (!current || !current->GetTextureParameterValue(TextureParameterName, oldTexture) || oldTexture != texture) {
UMaterialInstanceDynamic* material = UMaterialInstanceDynamic::Create(ScreenBlendMaterial, owner); UMaterialInstanceDynamic* material = UMaterialInstanceDynamic::Create(ScreenBlendMaterial, this);
material->SetTextureParameterValue(TextureParameterName, texture); material->SetTextureParameterValue(TextureParameterName, texture);
atlasScreenBlendMaterials[i] = material; atlasScreenBlendMaterials[i] = material;
} }
@ -158,13 +165,12 @@ void USpineSkeletonRendererComponent::TickComponent (float DeltaTime, ELevelTick
} }
} }
UpdateMesh(skeleton->GetSkeleton()); UpdateMesh(skeleton->GetSkeleton());
} else { }
else {
ClearAllMeshSections(); ClearAllMeshSections();
} }
}
} }
void USpineSkeletonRendererComponent::Flush (int &Idx, TArray<FVector> &Vertices, TArray<int32> &Indices, TArray<FVector2D> &Uvs, TArray<FColor> &Colors, TArray<FVector>& Colors2, UMaterialInstanceDynamic* Material) { void USpineSkeletonRendererComponent::Flush (int &Idx, TArray<FVector> &Vertices, TArray<int32> &Indices, TArray<FVector2D> &Uvs, TArray<FColor> &Colors, TArray<FVector>& Colors2, UMaterialInstanceDynamic* Material) {
if (Vertices.Num() == 0) return; if (Vertices.Num() == 0) return;
SetMaterial(Idx, Material); SetMaterial(Idx, Material);

View File

@ -47,6 +47,9 @@ public:
virtual void TickComponent (float DeltaTime, ELevelTick TickType, FActorComponentTickFunction* ThisTickFunction) override; virtual void TickComponent (float DeltaTime, ELevelTick TickType, FActorComponentTickFunction* ThisTickFunction) override;
/* Updates this skeleton renderer using the provided skeleton animation component. */
void UpdateRenderer(USpineSkeletonComponent* Skeleton);
// Material Instance parents // Material Instance parents
UPROPERTY(Category = Spine, EditAnywhere, BlueprintReadOnly) UPROPERTY(Category = Spine, EditAnywhere, BlueprintReadOnly)
UMaterialInterface* NormalBlendMaterial; UMaterialInterface* NormalBlendMaterial;