请问如何代码旋转texture2D 90度?

专家你好,,
我想要使用C++代码旋转加载进来的贴图90度,请问是否有API或者工具类可以使用?

我自己写的代码队友的贴图资源不工作:
void FAssetManager::RotateTexture(UTexture2D* Texture)
{
if (!Texture)
{
return;
}

int32 numMips = Texture->PlatformData->Mips.Num();
for (int32 MipIndex = 0; MipIndex < numMips; MipIndex++)
{
	FTexture2DMipMap& Mip = Texture->PlatformData->Mips[MipIndex];
	int32 NumBlocksX = Mip.SizeX / GPixelFormats[Texture->PlatformData->PixelFormat].BlockSizeX;
	int32 NumBlocksY = Mip.SizeY / GPixelFormats[Texture->PlatformData->PixelFormat].BlockSizeY;

	//get data
	const FPixelFormatInfo& pixelFormatInfo = GPixelFormats[Texture->PlatformData->PixelFormat];
	int32 bytesPerPixel = pixelFormatInfo.BlockBytes / (pixelFormatInfo.BlockSizeX * pixelFormatInfo.BlockSizeY);
	uint8* data = static_cast<uint8*>(Mip.BulkData.Lock(LOCK_READ_WRITE));
	if (data == nullptr) 
	{
		Mip.BulkData.Unlock(); 
		continue;
	}

	TArray<uint8> OrigData(data, NumBlocksX * NumBlocksY * GPixelFormats[Texture->PlatformData->PixelFormat].BlockBytes);

	//rotate
	for (int32 WidthIndex = 0; WidthIndex <  Mip.SizeX; WidthIndex++)
	{
		for (int32 HeightIndex = 0; HeightIndex <  Mip.SizeY; HeightIndex++)
		{
			int32 OriginalIndex = (WidthIndex + HeightIndex * Mip.SizeX)*bytesPerPixel;
			int32 AfterIndex = (HeightIndex + (Mip.SizeX - 1 - WidthIndex) * Mip.SizeY)*bytesPerPixel;
			if (OriginalIndex + bytesPerPixel> OrigData.Num() || AfterIndex + bytesPerPixel > OrigData.Num())
			{
				int32 test = 0;
				test++;
				UE_LOG(LogTemp, Warning, TEXT("Start to load asset"));
			}
			else{
			memcpy(data + AfterIndex, &OrigData[OriginalIndex], bytesPerPixel);
			}
		}
	}

	//int32 temp = Mip.SizeX;
	//Mip.SizeX = Mip.SizeY;
	//Mip.SizeY = temp;

	Mip.BulkData.Unlock();
}

int32 temp = Texture->PlatformData->SizeX;
Texture->PlatformData->SizeX = Texture->PlatformData->SizeY;
Texture->PlatformData->SizeY = temp;
Texture->UpdateResource();

}