优化Waveform渲染性能

This commit is contained in:
2024-01-27 19:16:15 +08:00
parent e79b8f3ed2
commit 55d6cdaade
26 changed files with 461 additions and 178 deletions

View File

@@ -3,32 +3,29 @@
#include "SSamplePatternThumbnail.h"
#include "Async.h"
#include "SlateApplication.h"
#include "SlateOptMacros.h"
#include "ExecutionTime.h"
#include "Pattern/SamplePatternInstance.h"
#include "PluginHost/Sampler.h"
#include "UI/Widget/SUpdatableImage.h"
#include "UI/Widget/Thumbnail.h"
BEGIN_SLATE_FUNCTION_BUILD_OPTIMIZATION
TArray<float> FSampleWaveformHandle::GetWaveform(int32 SizeX) const
TArrayView<const FSamplePeak> FSamplePatternWaveformHandle::GetWaveform(int32 SizeX)
{
const FSampler* Sampler = SampleInstance->GetInstanceOwner()->GetSampler();
TArray<TArray64<float>> Copy = Sampler->GetSampleBuffer(); // 拷贝以防在渲染时被修改
uint32 Count = Sampler->GetFrameCount();
TRange<uint32> Range = SampleInstance->GetRange();
return Thumbnail::GenerateWaveformData(SizeX, Copy, Count, Range);
if (!RenderData)
{
RenderData = new FWaveform(1, 1024);
RenderData->UpdatePeak(Sampler->GetSampleBuffer());
}
return RenderData->GetPeakFromRange(0, SizeX, 0, Sampler->GetFrameCount());
}
void SSamplePatternThumbnail::Construct(const FArguments& InArgs, FSampler* InSampler)
{
WaveformHandle = MakeShared<FSamplePatternWaveformHandle>(InSampler);
ChildSlot
[
SAssignNew(WaveformViewer, SWaveformViewer)
.WaveformHandle(WaveformHandle)
];
}