Files
UnrealEngine/Engine/Plugins/FX/Niagara/Source/NiagaraVertexFactories/Private/NiagaraCutoutVertexBuffer.cpp
2025-05-18 13:04:45 +08:00

52 lines
1.5 KiB
C++

// Copyright Epic Games, Inc. All Rights Reserved.
/*=============================================================================
NiagaraCutoutVertexBuffer.h: Niagara cutout uv buffer implementation.
=============================================================================*/
#include "NiagaraCutoutVertexBuffer.h"
#include "RHI.h"
#include "RHICommandList.h"
FNiagaraCutoutVertexBuffer::FNiagaraCutoutVertexBuffer(int32 ZeroInitCount)
{
if (ZeroInitCount > 0)
{
Data.AddZeroed(ZeroInitCount);
}
}
void FNiagaraCutoutVertexBuffer::InitRHI(FRHICommandListBase& RHICmdList)
{
if (Data.Num())
{
// create a static vertex buffer
const FRHIBufferCreateDesc CreateDesc =
FRHIBufferCreateDesc::CreateVertex<FVector2f>(TEXT("FNiagaraCutoutVertexBuffer"), Data.Num())
.AddUsage(EBufferUsageFlags::Static | EBufferUsageFlags::ShaderResource)
.SetInitialState(ERHIAccess::VertexOrIndexBuffer | ERHIAccess::SRVMask)
.SetInitActionInitializer();
TRHIBufferInitializer<FVector2f> Initializer = RHICmdList.CreateBufferInitializer(CreateDesc);
Initializer.WriteArray(MakeConstArrayView(Data));
VertexBufferRHI = Initializer.Finalize();
VertexBufferSRV = RHICmdList.CreateShaderResourceView(
VertexBufferRHI,
FRHIViewDesc::CreateBufferSRV()
.SetType(FRHIViewDesc::EBufferType::Typed)
.SetFormat(PF_G32R32F));
Data.Empty();
}
}
void FNiagaraCutoutVertexBuffer::ReleaseRHI()
{
VertexBufferSRV.SafeRelease();
FVertexBuffer::ReleaseRHI();
}
TGlobalResource<FNiagaraCutoutVertexBuffer> GFNiagaraNullCutoutVertexBuffer(4);