mirror of
https://github.com/EsotericSoftware/spine-runtimes.git
synced 2025-12-20 17:26:01 +08:00
[ue] Closes #2803, pool slate material brush names
This commit is contained in:
parent
febbbbcd17
commit
ddfa736ae2
@ -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) {
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user