[ue] Closes #2803, pool slate material brush names

This commit is contained in:
Mario Zechner 2025-04-17 14:08:43 +02:00
parent febbbbcd17
commit ddfa736ae2

View File

@ -46,15 +46,33 @@ static int brushNameId = 0;
// Workaround for https://github.com/EsotericSoftware/spine-runtimes/issues/1458 // Workaround for https://github.com/EsotericSoftware/spine-runtimes/issues/1458
// See issue comments for more information. // See issue comments for more information.
struct SpineSlateMaterialBrush : public FSlateBrush { struct SpineSlateMaterialBrush : public FSlateBrush {
static TArray<FName> NamePool;
static FCriticalSection NamePoolLock;
SpineSlateMaterialBrush(class UMaterialInterface &InMaterial, const FVector2D &InImageSize) SpineSlateMaterialBrush(class UMaterialInterface &InMaterial, const FVector2D &InImageSize)
: FSlateBrush(ESlateBrushDrawType::Image, FName(TEXT("None")), FMargin(0), ESlateBrushTileType::NoTile, ESlateBrushImageType::FullColor, InImageSize, FLinearColor::White, &InMaterial) { : FSlateBrush(ESlateBrushDrawType::Image, FName(TEXT("None")), FMargin(0), ESlateBrushTileType::NoTile, ESlateBrushImageType::FullColor, InImageSize, FLinearColor::White, &InMaterial) {
// Workaround for https://github.com/EsotericSoftware/spine-runtimes/issues/2006 // Workaround for https://github.com/EsotericSoftware/spine-runtimes/issues/2006
FString brushName = TEXT("spineslatebrush"); FScopeLock Lock(&NamePoolLock);
brushName.AppendInt(brushNameId++);
ResourceName = FName(brushName); if (NamePool.Num() > 0) {
ResourceName = NamePool.Pop(false);
} else {
static uint32 NextId = 0;
FString brushName = TEXT("SpineSlateMatBrush");
brushName.AppendInt(NextId++);
ResourceName = FName(*brushName);
}
}
~SpineSlateMaterialBrush() {
FScopeLock Lock(&NamePoolLock);
NamePool.Add(ResourceName);
} }
}; };
TArray<FName> SpineSlateMaterialBrush::NamePool;
FCriticalSection SpineSlateMaterialBrush::NamePoolLock;
void SSpineWidget::Construct(const FArguments &args) { void SSpineWidget::Construct(const FArguments &args) {
} }