VJ Master 1.0
Real-time audio analysis and visualisation.
Loading...
Searching...
No Matches
NiagaraDataInterfaceSTReactiveBoids.h
1// Copyright (c) 2025 Aaron Trotter (ShaderTech). All Rights Reserved.
2
3#pragma once
4
5#include "NiagaraCommon.h"
6#include "NiagaraShared.h"
7#include "NiagaraDataInterface.h"
8#include "RenderGraphFwd.h"
9#include "RenderGraphResources.h"
10#include "NiagaraDataInterfaceSTReactiveBoids.generated.h"
11
12struct FNiagaraDataInterfaceGeneratedFunction;
13struct FNiagaraFunctionSignature;
14
22UCLASS(EditInlineNew, Category = "ShaderTech|AudioVisualisation", meta = (DisplayName = "ST Reactive Boids Query"))
23class ST_AUDIOVISUALISATION_API UNiagaraDataInterfaceSTReactiveBoids : public UNiagaraDataInterface
24{
25 GENERATED_UCLASS_BODY()
26
27
28 BEGIN_SHADER_PARAMETER_STRUCT(FShaderParameters, )
30 SHADER_PARAMETER_RDG_BUFFER_SRV(StructuredBuffer<FST_VJ_BoidItem>, boidsIn)
32 SHADER_PARAMETER(int32, numBoids)
33 END_SHADER_PARAMETER_STRUCT()
34
35private:
37 int32 numBoids = 0;
39 TRefCountPtr<FRDGPooledBuffer> ReadPooled = nullptr;
40
41public:
48 void SetData(int32 _numBoids, TRefCountPtr<FRDGPooledBuffer> _ReadPooled)
49 {
50 numBoids = _numBoids;
51 ReadPooled = _ReadPooled;
52 }
53
54 // UObject Interface
58 virtual void PostInitProperties() override;
59 // UObject Interface End
60
61 // UNiagaraDataInterface Interface
67 virtual void GetFunctions(TArray<FNiagaraFunctionSignature>& OutFunctions)override;
68
75 virtual bool CanExecuteOnTarget(ENiagaraSimTarget Target) const override { return Target == ENiagaraSimTarget::GPUComputeSim; }
76
82 virtual void BuildShaderParameters(FNiagaraShaderParametersBuilder& ShaderParametersBuilder) const override;
83
89 virtual void SetShaderParameters(const FNiagaraDataInterfaceSetShaderParametersContext& Context) const override;
90
91#if WITH_EDITORONLY_DATA
98 virtual bool AppendCompileHash(FNiagaraCompileHashVisitor* InVisitor) const override;
99
109 virtual bool GetFunctionHLSL(const FNiagaraDataInterfaceGPUParamInfo& ParamInfo, const FNiagaraDataInterfaceGeneratedFunction& FunctionInfo, int FunctionInstanceIndex, FString& OutHLSL) override;
110
117 virtual void GetParameterDefinitionHLSL(const FNiagaraDataInterfaceGPUParamInfo& ParamInfo, FString& OutHLSL) override;
118#endif
119
125 virtual bool HasPreSimulateTick() const override { return true; }
126
135 virtual bool PerInstanceTick(void* PerInstanceData, FNiagaraSystemInstance* SystemInstance, float DeltaSeconds) override;
136
142 virtual int32 PerInstanceDataSize() const override;
143
151 virtual bool InitPerInstanceData(void* PerInstanceData, FNiagaraSystemInstance* SystemInstance) override;
152
159 virtual void DestroyPerInstanceData(void* PerInstanceData, FNiagaraSystemInstance* SystemInstance) override;
160 // UNiagaraDataInterface Interface
161};
162
168{
170 TRefCountPtr<FRDGPooledBuffer> ReadPooled = nullptr;
172 int32 numBoids = 0;
173
179
182 {
183 numBoids = 0;
184 ReadPooled.SafeRelease();
185 }
186};
187
193{
195 TRefCountPtr<FRDGPooledBuffer> ReadPooled = nullptr;
197 FRDGBufferRef ReadScopedRef = nullptr;
199 FRDGBufferSRVRef ReadScopedSRV = nullptr;
201 int32 numBoids = 0;
202
208
215 {
216 ReleaseData();
217 ReadPooled = InstanceData_GT.ReadPooled;
218 numBoids = InstanceData_GT.numBoids;
219 }
220
223 {
224 numBoids = 0;
225 ReadPooled.SafeRelease();
226 }
227};
228
233struct FNDISTReactiveBoidsProxy : public FNiagaraDataInterfaceProxy
234{
241 virtual void ConsumePerInstanceDataFromGameThread(void* PerInstanceData, const FNiagaraSystemInstanceID& Instance) override {}
242
248 virtual int32 PerInstanceDataPassedToRenderThreadSize() const override { return 0; }
249
251 TMap<FNiagaraSystemInstanceID, FNDISTReactiveBoidsInstanceData_RenderThread> SystemInstancesToProxyData_RT;
252};
Niagara data interface for ST Reactive Boids Query.
Definition NiagaraDataInterfaceSTReactiveBoids.h:24
virtual bool HasPreSimulateTick() const override
Definition NiagaraDataInterfaceSTReactiveBoids.h:125
void SetData(int32 _numBoids, TRefCountPtr< FRDGPooledBuffer > _ReadPooled)
Definition NiagaraDataInterfaceSTReactiveBoids.h:48
virtual bool CanExecuteOnTarget(ENiagaraSimTarget Target) const override
Definition NiagaraDataInterfaceSTReactiveBoids.h:75
Data structure used to store reactive boid instance data on the game thread.
Definition NiagaraDataInterfaceSTReactiveBoids.h:168
void ReleaseData()
Definition NiagaraDataInterfaceSTReactiveBoids.h:181
~FNDISTReactiveBoidsInstanceData_GameThread()
Definition NiagaraDataInterfaceSTReactiveBoids.h:175
int32 numBoids
Definition NiagaraDataInterfaceSTReactiveBoids.h:172
TRefCountPtr< FRDGPooledBuffer > ReadPooled
Definition NiagaraDataInterfaceSTReactiveBoids.h:170
Data structure used to store reactive boid instance data on the render thread.
Definition NiagaraDataInterfaceSTReactiveBoids.h:193
TRefCountPtr< FRDGPooledBuffer > ReadPooled
Definition NiagaraDataInterfaceSTReactiveBoids.h:195
void ReleaseData()
Definition NiagaraDataInterfaceSTReactiveBoids.h:222
int32 numBoids
Definition NiagaraDataInterfaceSTReactiveBoids.h:201
~FNDISTReactiveBoidsInstanceData_RenderThread()
Definition NiagaraDataInterfaceSTReactiveBoids.h:204
FRDGBufferSRVRef ReadScopedSRV
Definition NiagaraDataInterfaceSTReactiveBoids.h:199
FRDGBufferRef ReadScopedRef
Definition NiagaraDataInterfaceSTReactiveBoids.h:197
void UpdateData(FNDISTReactiveBoidsInstanceData_GameThread &InstanceData_GT)
Definition NiagaraDataInterfaceSTReactiveBoids.h:214
Proxy structure for reactive boids data interface.
Definition NiagaraDataInterfaceSTReactiveBoids.h:234
virtual int32 PerInstanceDataPassedToRenderThreadSize() const override
Definition NiagaraDataInterfaceSTReactiveBoids.h:248
TMap< FNiagaraSystemInstanceID, FNDISTReactiveBoidsInstanceData_RenderThread > SystemInstancesToProxyData_RT
Definition NiagaraDataInterfaceSTReactiveBoids.h:251
virtual void ConsumePerInstanceDataFromGameThread(void *PerInstanceData, const FNiagaraSystemInstanceID &Instance) override
Definition NiagaraDataInterfaceSTReactiveBoids.h:241