// Copyright Epic Games, Inc. All Rights Reserved. Buffer {ParameterName}_PositionBuffer; Buffer {ParameterName}_VelocityBuffer; Buffer {ParameterName}_ExtentMinBuffer; Buffer {ParameterName}_ExtentMaxBuffer; Buffer {ParameterName}_VolumeBuffer; Buffer {ParameterName}_SolverIDBuffer; // NOTE(mv): Not used? Buffer {ParameterName}_DensityBuffer; Buffer {ParameterName}_FrictionBuffer; Buffer {ParameterName}_RestitutionBuffer; Buffer {ParameterName}_SurfaceTypeBuffer; Buffer {ParameterName}_ColorBuffer; Buffer {ParameterName}_IncomingLocationBuffer; Buffer {ParameterName}_IncomingAccumulatedImpulseBuffer; Buffer {ParameterName}_IncomingNormalBuffer; Buffer {ParameterName}_IncomingVelocity1Buffer; Buffer {ParameterName}_IncomingVelocity2Buffer; Buffer {ParameterName}_IncomingAngularVelocity1Buffer; Buffer {ParameterName}_IncomingAngularVelocity2Buffer; Buffer {ParameterName}_IncomingMass1Buffer; Buffer {ParameterName}_IncomingMass2Buffer; Buffer {ParameterName}_IncomingTimeBuffer; Buffer {ParameterName}_TransformTranslationBuffer; Buffer {ParameterName}_TransformRotationBuffer; Buffer {ParameterName}_TransformScaleBuffer; Buffer {ParameterName}_BoundsBuffer; // NOTE(mv): Not implemented in the CPU-side functionality yet. // Returns 0 in GetPointType instead. // // Buffer PointTypeBuffer; int {ParameterName}_LastSpawnedPointID; float {ParameterName}_SolverTime; void GetPosition_{ParameterName}(in int ParticleID, out float3 Out_Position) { ParticleID -= {ParameterName}_LastSpawnedPointID + 1; Out_Position = {ParameterName}_PositionBuffer[ParticleID]; } void GetNormal_{ParameterName}(in int ParticleID, out float3 Out_Normal) { ParticleID -= {ParameterName}_LastSpawnedPointID + 1; Out_Normal = {ParameterName}_IncomingNormalBuffer[ParticleID]; } void GetVelocity_{ParameterName}(in int ParticleID, out float3 Out_Velocity) { ParticleID -= {ParameterName}_LastSpawnedPointID + 1; Out_Velocity = {ParameterName}_VelocityBuffer[ParticleID]; } void GetAngularVelocity_{ParameterName}(in int ParticleID, out float3 Out_AngularVelocity) { ParticleID -= {ParameterName}_LastSpawnedPointID + 1; Out_AngularVelocity = {ParameterName}_IncomingAngularVelocity1Buffer[ParticleID]; } void GetExtentMin_{ParameterName}(in int ParticleID, out float Out_ExtentMin) { ParticleID -= {ParameterName}_LastSpawnedPointID + 1; Out_ExtentMin = {ParameterName}_ExtentMinBuffer[ParticleID]; } void GetExtentMax_{ParameterName}(in int ParticleID, out float Out_ExtentMax) { ParticleID -= {ParameterName}_LastSpawnedPointID + 1; Out_ExtentMax = {ParameterName}_ExtentMaxBuffer[ParticleID]; } void GetVolume_{ParameterName}(in int ParticleID, out float Out_Volume) { ParticleID -= {ParameterName}_LastSpawnedPointID + 1; Out_Volume = {ParameterName}_VolumeBuffer[ParticleID]; } void GetParticleIdsToSpawnAtTime_{ParameterName}(in float Time, out int Out_Min, out int Out_Max, out int Out_Count) { // This function cannot be called on the GPU, as all spawn scripts are run on the CPU.. // TODO: Find a way to warn/error about this. Out_Count = 0; Out_Min = 0; Out_Max = 0; } void GetPointType_{ParameterName}(in int ParticleID, out int Out_PointType) { // NOTE(mv): Not yet part of the CPU functionality. Out_PointType = 0; } void GetColor_{ParameterName}(in int ParticleID, out float4 Out_Color) { ParticleID -= {ParameterName}_LastSpawnedPointID + 1; Out_Color = {ParameterName}_ColorBuffer[ParticleID]; } void GetSolverTime_{ParameterName}(out float Out_SolverTime) { Out_SolverTime = {ParameterName}_SolverTime; } void GetDensity_{ParameterName}(in int ParticleID, out float Out_Density) { ParticleID -= {ParameterName}_LastSpawnedPointID + 1; Out_Density = {ParameterName}_DensityBuffer[ParticleID]; } void GetFriction_{ParameterName}(in int ParticleID, out float Out_Friction) { ParticleID -= {ParameterName}_LastSpawnedPointID + 1; Out_Friction = {ParameterName}_FrictionBuffer[ParticleID]; } void GetRestitution_{ParameterName}(in int ParticleID, out float Out_Restitution) { ParticleID -= {ParameterName}_LastSpawnedPointID + 1; Out_Restitution = {ParameterName}_RestitutionBuffer[ParticleID]; } void GetTransform_{ParameterName}(in int ParticleID, out float3 Out_Translation, out float4 Out_Rotation, out float3 Out_Scale) { ParticleID -= {ParameterName}_LastSpawnedPointID + 1; Out_Translation = {ParameterName}_TransformTranslationBuffer[ParticleID]; Out_Rotation = {ParameterName}_TransformRotationBuffer[ParticleID]; Out_Scale = {ParameterName}_TransformScaleBuffer[ParticleID]; } void GetSize_{ParameterName}(in int ParticleID, out float3 Out_Size) { ParticleID -= {ParameterName}_LastSpawnedPointID + 1; Out_Size = {ParameterName}_BoundsBuffer[ParticleID]; } void GetSurfaceType_{ParameterName}(in int ParticleID, out int Out_SurfaceType) { ParticleID -= {ParameterName}_LastSpawnedPointID + 1; Out_SurfaceType = {ParameterName}_SurfaceTypeBuffer[ParticleID]; } void GetCollisionData_{ParameterName}(in int ParticleID, out float3 Out_Location, out float3 Out_AccumulatedImpulse, out float3 Out_Normal, out float3 Out_Velocity1, out float3 Out_Velocity2, out float3 Out_AngularVelocity1, out float3 Out_AngularVelocity2, out float Out_Mass1, out float Out_Mass2, out float Out_Time) { ParticleID -= {ParameterName}_LastSpawnedPointID + 1; Out_Location = {ParameterName}_IncomingLocationBuffer[ParticleID]; Out_AccumulatedImpulse = {ParameterName}_IncomingAccumulatedImpulseBuffer[ParticleID]; Out_Normal = {ParameterName}_IncomingNormalBuffer[ParticleID]; Out_Velocity1 = {ParameterName}_IncomingVelocity1Buffer[ParticleID]; Out_Velocity2 = {ParameterName}_IncomingVelocity2Buffer[ParticleID]; Out_AngularVelocity1 = {ParameterName}_IncomingAngularVelocity1Buffer[ParticleID]; Out_AngularVelocity2 = {ParameterName}_IncomingAngularVelocity2Buffer[ParticleID]; Out_Mass1 = {ParameterName}_IncomingMass1Buffer[ParticleID]; Out_Mass2 = {ParameterName}_IncomingMass2Buffer[ParticleID]; Out_Time = {ParameterName}_IncomingTimeBuffer[ParticleID]; } void GetBreakingData_{ParameterName}(in int ParticleID, out float3 Out_Location, out float3 Out_Velocity, out float3 Out_AngularVelocity, out float Out_Mass, out float Out_Time) { ParticleID -= {ParameterName}_LastSpawnedPointID + 1; Out_Location = {ParameterName}_IncomingLocationBuffer[ParticleID]; Out_Velocity = {ParameterName}_IncomingVelocity1Buffer[ParticleID]; Out_AngularVelocity = {ParameterName}_IncomingAngularVelocity1Buffer[ParticleID]; Out_Mass = {ParameterName}_IncomingMass1Buffer[ParticleID]; Out_Time = {ParameterName}_IncomingTimeBuffer[ParticleID]; } void GetTrailingData_{ParameterName}(in int ParticleID, out float3 Out_Location, out float3 Out_Velocity, out float3 Out_AngularVelocity, out float Out_Mass, out float Out_Time) { ParticleID -= {ParameterName}_LastSpawnedPointID + 1; Out_Location = {ParameterName}_IncomingLocationBuffer[ParticleID]; Out_Velocity = {ParameterName}_IncomingVelocity1Buffer[ParticleID]; Out_AngularVelocity = {ParameterName}_IncomingAngularVelocity1Buffer[ParticleID]; Out_Mass = {ParameterName}_IncomingMass1Buffer[ParticleID]; Out_Time = {ParameterName}_IncomingTimeBuffer[ParticleID]; }