UTexture2D 写纹理操作

	
	UTexture2D* texture = UTexture2D::CreateTransient(w, h, PF_G32R32F);
	texture->CompressionSettings = TextureCompressionSettings::TC_VectorDisplacementmap;
	texture->SRGB = 0;
	texture->AddToRoot();
	texture->UpdateResource();	

	FTextureResource* DestTextureResource = (FTextureResource*)texture->Resource;
	ENQUEUE_RENDER_COMMAND(copyTextureBuffer)(
		[DestTextureResource, buffer](FRHICommandListImmediate& RHICmdList)
		{
    
    
			FTexture2DRHIRef Texture2DRHI = DestTextureResource->TextureRHI->GetTexture2D();
			uint32 DestPitch = 0;
			float* DestinationBuffer = (float*)RHILockTexture2D(
				Texture2DRHI,
				0,
				RLM_WriteOnly,
				DestPitch,
				false);

			if (DestinationBuffer) {
    
    
				const float* SourceBuffer = buffer;
				const int32 MaxRow = FMath::Min(Texture2DRHI->GetSizeY(), (uint32)your_row_here);

				if (DestPitch == your_pitch_here)
				{
    
    
					FMemory::Memcpy(DestinationBuffer, SourceBuffer, DestPitch * MaxRow);
				}
				else for (int32 Row = 0; Row < MaxRow; ++Row)
				{
    
    
					FMemory::Memcpy(DestinationBuffer, SourceBuffer, FMath::Min((uint32)(your_pitch_here), DestPitch));
					DestinationBuffer += DestPitch;
					SourceBuffer += your_pitch_here;
				}
			}
			RHIUnlockTexture2D(Texture2DRHI, 0, false);
		}
	);
}