优化Waveform渲染性能
This commit is contained in:
@@ -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)
|
||||
];
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user