61 lines
1.5 KiB
C++
61 lines
1.5 KiB
C++
// Copyright Epic Games, Inc. All Rights Reserved.
|
|
|
|
#include "GerstnerWaterWaveSubsystem.h"
|
|
#include "WaterViewExtension.h"
|
|
|
|
#include UE_INLINE_GENERATED_CPP_BY_NAME(GerstnerWaterWaveSubsystem)
|
|
|
|
UGerstnerWaterWaveSubsystem::UGerstnerWaterWaveSubsystem()
|
|
{
|
|
}
|
|
|
|
void UGerstnerWaterWaveSubsystem::Initialize(FSubsystemCollectionBase& Collection)
|
|
{
|
|
Super::Initialize(Collection);
|
|
|
|
FCoreDelegates::OnBeginFrame.AddUObject(this, &UGerstnerWaterWaveSubsystem::BeginFrameCallback);
|
|
}
|
|
|
|
|
|
void UGerstnerWaterWaveSubsystem::Deinitialize()
|
|
{
|
|
WaterViewExtensions.Empty();
|
|
|
|
FCoreDelegates::OnBeginFrame.RemoveAll(this);
|
|
|
|
Super::Deinitialize();
|
|
}
|
|
|
|
void UGerstnerWaterWaveSubsystem::Register(FWaterViewExtension* InViewExtension)
|
|
{
|
|
check(!WaterViewExtensions.Contains(InViewExtension));
|
|
WaterViewExtensions.Add(InViewExtension);
|
|
}
|
|
|
|
void UGerstnerWaterWaveSubsystem::Unregister(FWaterViewExtension* InViewExtension)
|
|
{
|
|
check(WaterViewExtensions.Contains(InViewExtension));
|
|
WaterViewExtensions.Remove(InViewExtension);
|
|
}
|
|
|
|
void UGerstnerWaterWaveSubsystem::GetResourceSizeEx(FResourceSizeEx& CumulativeResourceSize)
|
|
{
|
|
Super::GetResourceSizeEx(CumulativeResourceSize);
|
|
|
|
CumulativeResourceSize.AddDedicatedSystemMemoryBytes(WaterViewExtensions.GetAllocatedSize());
|
|
}
|
|
|
|
void UGerstnerWaterWaveSubsystem::BeginFrameCallback()
|
|
{
|
|
// In case there was a change, all registered view extensions need to update their GPU data :
|
|
if (bRebuildGPUData)
|
|
{
|
|
for (FWaterViewExtension* WaterViewExtension : WaterViewExtensions)
|
|
{
|
|
WaterViewExtension->MarkGPUDataDirty();
|
|
}
|
|
}
|
|
bRebuildGPUData = false;
|
|
}
|
|
|