You've already forked UnrealEngineUWP
mirror of
https://github.com/izzy2lost/UnrealEngineUWP.git
synced 2026-03-26 18:15:20 -07:00
#jira #preflight 6358b841767e539cca9ea2e3 [CL 22814154 by bryan sefcik in ue5-main branch]
96 lines
3.2 KiB
C++
96 lines
3.2 KiB
C++
// Copyright Epic Games, Inc. All Rights Reserved.
|
|
|
|
#include "SparseVolumeTexture/SparseVolumeTextureViewerSceneProxy.h"
|
|
#include "SparseVolumeTexture/SparseVolumeTextureViewerComponent.h"
|
|
#include "SparseVolumeTexture/SparseVolumeTexture.h"
|
|
|
|
#include "RenderGraphUtils.h"
|
|
#include "ScenePrivate.h"
|
|
#include "SceneView.h"
|
|
|
|
#define LOCTEXT_NAMESPACE "FSparseVolumeTextureViewerSceneProxy"
|
|
|
|
void FScene::AddSparseVolumeTextureViewer(FSparseVolumeTextureViewerSceneProxy* SVTV)
|
|
{
|
|
check(SVTV);
|
|
FScene* Scene = this;
|
|
|
|
ENQUEUE_RENDER_COMMAND(FAddSparseVolumeTextureViewerCommand)(
|
|
[Scene, SVTV](FRHICommandListImmediate& RHICmdList)
|
|
{
|
|
Scene->SparseVolumeTextureViewers.Emplace(SVTV);
|
|
});
|
|
}
|
|
|
|
void FScene::RemoveSparseVolumeTextureViewer(FSparseVolumeTextureViewerSceneProxy* SVTV)
|
|
{
|
|
check(SVTV);
|
|
FScene* Scene = this;
|
|
|
|
ENQUEUE_RENDER_COMMAND(FRemoveSparseVolumeTextureCommand)(
|
|
[Scene, SVTV](FRHICommandListImmediate& RHICmdList)
|
|
{
|
|
Scene->SparseVolumeTextureViewers.Remove(SVTV);
|
|
});
|
|
}
|
|
|
|
////////////////////////////////////////////////////////////////////////////////////////////////
|
|
|
|
FSparseVolumeTextureViewerSceneProxy::FSparseVolumeTextureViewerSceneProxy(const USparseVolumeTextureViewerComponent* InComponent, int32 FrameIndex, FName ResourceName)
|
|
: FPrimitiveSceneProxy((UPrimitiveComponent*)InComponent, ResourceName)
|
|
, SparseVolumeTextureSceneProxy(nullptr)
|
|
{
|
|
if (InComponent->SparseVolumeTexturePreview)
|
|
{
|
|
check(InComponent->SparseVolumeTexturePreview);
|
|
if (InComponent->SparseVolumeTexturePreview->IsA(UAnimatedSparseVolumeTexture::StaticClass()))
|
|
{
|
|
const UAnimatedSparseVolumeTexture* AnimatedSparseVolumeTexture = CastChecked<const UAnimatedSparseVolumeTexture>(InComponent->SparseVolumeTexturePreview);
|
|
SparseVolumeTextureSceneProxy = AnimatedSparseVolumeTexture->GetSparseVolumeTextureFrameSceneProxy(FrameIndex);
|
|
}
|
|
else
|
|
{
|
|
// Regular texture from proxy
|
|
SparseVolumeTextureSceneProxy = InComponent->SparseVolumeTexturePreview->GetSparseVolumeTextureSceneProxy();
|
|
}
|
|
}
|
|
}
|
|
|
|
SIZE_T FSparseVolumeTextureViewerSceneProxy::GetTypeHash() const
|
|
{
|
|
static size_t UniquePointer = 0;
|
|
return reinterpret_cast<size_t>(&UniquePointer);
|
|
}
|
|
|
|
void FSparseVolumeTextureViewerSceneProxy::GetDynamicMeshElements(const TArray<const FSceneView*>& Views, const FSceneViewFamily& ViewFamily, uint32 VisibilityMap, FMeshElementCollector& Collector) const
|
|
{
|
|
check(IsInRenderingThread());
|
|
|
|
for (int32 ViewIndex = 0; ViewIndex < Views.Num(); ViewIndex++)
|
|
{
|
|
const FSceneView* View = Views[ViewIndex];
|
|
|
|
if (IsShown(View) && (VisibilityMap & (1 << ViewIndex)))
|
|
{
|
|
// Only render Bounds
|
|
FPrimitiveDrawInterface* PDI = Collector.GetPDI(ViewIndex);
|
|
FBoxSphereBounds LocalBound = GetBounds();
|
|
RenderBounds(PDI, ViewFamily.EngineShowFlags, LocalBound, IsSelected());
|
|
}
|
|
}
|
|
}
|
|
|
|
FPrimitiveViewRelevance FSparseVolumeTextureViewerSceneProxy::GetViewRelevance(const FSceneView * View) const
|
|
{
|
|
FPrimitiveViewRelevance Result;
|
|
Result.bDrawRelevance = IsShown(View);
|
|
Result.bDynamicRelevance = true;
|
|
Result.bStaticRelevance = false;
|
|
Result.bRenderInMainPass = ShouldRenderInMainPass();
|
|
Result.bOpaque = false;
|
|
Result.bNormalTranslucency = true;
|
|
return Result;
|
|
}
|
|
|
|
#undef LOCTEXT_NAMESPACE
|