Skip to content

Commit

Permalink
PopcornFX Plugin v2.11.3
Browse files Browse the repository at this point in the history
  • Loading branch information
HugoPKFX committed Apr 1, 2022
1 parent cfc3e30 commit 4099175
Show file tree
Hide file tree
Showing 60 changed files with 592 additions and 259 deletions.
2 changes: 1 addition & 1 deletion Download_SDK_Desktop.bat
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ setlocal

bitsadmin /reset
bitsadmin /create third_party_download_desktop
bitsadmin /addfile third_party_download_desktop https://downloads.popcornfx.com/Plugins/UE4/UnrealEngine_PopcornFXPlugin_2.11.2_Win64_Linux64_Mac64.7z "%~dp0\_PopcornFX_Runtime_SDK_Desktop.7z"
bitsadmin /addfile third_party_download_desktop https://downloads.popcornfx.com/Plugins/UE4/UnrealEngine_PopcornFXPlugin_2.11.3_Win64_Linux64_Mac64.7z "%~dp0\_PopcornFX_Runtime_SDK_Desktop.7z"
bitsadmin /setpriority third_party_download_desktop "FOREGROUND"
bitsadmin /resume third_party_download_desktop

Expand Down
2 changes: 1 addition & 1 deletion Download_SDK_Mobile.bat
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ setlocal

bitsadmin /reset
bitsadmin /create third_party_download_mobile
bitsadmin /addfile third_party_download_mobile https://downloads.popcornfx.com/Plugins/UE4/UnrealEngine_PopcornFXPlugin_2.11.2_iOS_Android.7z "%~dp0\_PopcornFX_Runtime_SDK_Mobile.7z"
bitsadmin /addfile third_party_download_mobile https://downloads.popcornfx.com/Plugins/UE4/UnrealEngine_PopcornFXPlugin_2.11.3_iOS_Android.7z "%~dp0\_PopcornFX_Runtime_SDK_Mobile.7z"
bitsadmin /setpriority third_party_download_mobile "FOREGROUND"
bitsadmin /resume third_party_download_mobile

Expand Down
4 changes: 2 additions & 2 deletions PopcornFX.uplugin
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
{
"FileVersion": 3,
"Version": 21102,
"VersionName": "2.11.2",
"Version": 21103,
"VersionName": "2.11.3",
"FriendlyName": "PopcornFX",
"Description": "PopcornFX Realtime Particle Solution integration into Unreal Engine",
"Category": "PopcornFX",
Expand Down
2 changes: 1 addition & 1 deletion README.md
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
# Unreal Engine PopcornFX Plugin

Integrates the **PopcornFX Runtime SDK** into **Unreal Engine 4** and **Unreal Engine 5** as a Plugin.
* **Version:** `v2.11.2`
* **Version:** `v2.11.3`
* **Unreal Engine:** `4.26` to `4.27` and `5.0`
* **Supported platforms:** `Windows`, `MacOS`, `Linux`, `iOS`, `Android`, `PS4`, `PS5`, `XboxOne`, `Xbox Series`, `Switch`

Expand Down
22 changes: 22 additions & 0 deletions Shaders/Private/PopcornFXGPUBillboard.ush
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,8 @@ PopcornFXGPUBillboard.ush: GPU billboarder code
// TODO: Make this an uniform (configurable in UE settings)
#define GLOBAL_SCALE 100.0f

//----------------------------------------------------------------------------

struct FVertexFactoryIntermediates
{
float3 ParticleWorldPosition; // UE units
Expand Down Expand Up @@ -60,6 +62,11 @@ struct FVertexFactoryIntermediates
#if (DYNAMIC_PARAMETERS_MASK & 8)
float4 DynamicParameter3;
#endif

#if (ENGINE_MAJOR_VERSION == 5)
/** Cached primitive and instance data */
FSceneDataIntermediates SceneData;
#endif // (ENGINE_MAJOR_VERSION == 5)
};

//----------------------------------------------------------------------------
Expand Down Expand Up @@ -156,6 +163,8 @@ void RotateTangents(uint particleID, inout float3 xAxis, inout float3 yAxis)

void PopcornFXGPUBillboard(uint instanceID, float2 texCoords, out FVertexFactoryIntermediates intermediates)
{
intermediates = (FVertexFactoryIntermediates)0;

uint particleID = instanceID;

BRANCH
Expand Down Expand Up @@ -197,7 +206,12 @@ void PopcornFXGPUBillboard(uint instanceID, float2 texCoords, out FVertexFactory
const int flipUVs = (flags & BB_Flag_VFlipUVs) != 0U;

const float2 cornerCoords = texCoords;

#if (ENGINE_MAJOR_VERSION == 5)
const float3 worldCameraOrigin = LWCToFloat(ResolvedView.WorldViewOrigin).xyz * 0.01f; // PKFX positions are 1unit = 1meter. UE 1unit = 1centimeter
#else
const float3 worldCameraOrigin = ResolvedView.WorldViewOrigin.xyz * 0.01f; // PKFX positions are 1unit = 1meter. UE 1unit = 1centimeter
#endif // (ENGINE_MAJOR_VERSION == 5)

switch (billboarderType)
{
Expand Down Expand Up @@ -294,11 +308,19 @@ void PopcornFXGPUBillboard(uint instanceID, float2 texCoords, out FVertexFactory
intermediates.ParticleWorldPosition = worldPos * GLOBAL_SCALE;

intermediates.VertexWorldPosition = (worldPos + bbCorner) * GLOBAL_SCALE;
#if (ENGINE_MAJOR_VERSION == 5)
intermediates.VertexWorldPosition += LWCToFloat(ResolvedView.PreViewTranslation);
#else
intermediates.VertexWorldPosition += ResolvedView.PreViewTranslation;
#endif // (ENGINE_MAJOR_VERSION == 5)

#if USE_PARTICLE_POSITION
const float particleRadius = min(radius.x, radius.y) * GLOBAL_SCALE;
# if (ENGINE_MAJOR_VERSION == 5)
const float3 particleTranslatedWorldPosition = (worldPos * GLOBAL_SCALE) + LWCToFloat(ResolvedView.PreViewTranslation).xyz;
# else
const float3 particleTranslatedWorldPosition = (worldPos * GLOBAL_SCALE) + ResolvedView.PreViewTranslation.xyz;
# endif // (ENGINE_MAJOR_VERSION == 5)
intermediates.TranslatedWorldPositionAndSize = float4(particleTranslatedWorldPosition, particleRadius);
#endif
#if USE_PARTICLE_SIZE
Expand Down
15 changes: 13 additions & 2 deletions Shaders/Private/PopcornFXGPUVertexFactory.ush
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@
//----------------------------------------------------------------------------

/*=============================================================================
PopcornFXGPUVertexFactory.usf: PopcornFX Vertex factory shader code, implementing vertex shader billboarding.
PopcornFXGPUVertexFactory.ush: PopcornFX Vertex factory shader code (Vertex billboarded Billboards)
=============================================================================*/

#include "/Engine/Public/Platform.ush"
Expand Down Expand Up @@ -122,11 +122,15 @@ struct FVertexFactoryInterpolantsVSToPS
// Construct the vertex factory intermediates
FVertexFactoryIntermediates GetVertexFactoryIntermediates(FVertexFactoryInput Input)
{
FVertexFactoryIntermediates Intermediates = (FVertexFactoryIntermediates)0;
FVertexFactoryIntermediates Intermediates;

uint particleId = GetInstanceId(Input.InstanceId); // Necessary for VR Instanced Stereo rendering (returns Input.InstanceId / 2)
PopcornFXGPUBillboard(particleId, Input.TexCoord, Intermediates);

#if (ENGINE_MAJOR_VERSION == 5)
Intermediates.SceneData = VF_GPUSCENE_GET_INTERMEDIATES(Input);
#endif // (ENGINE_MAJOR_VERSION == 5)

return Intermediates;
}

Expand Down Expand Up @@ -158,6 +162,9 @@ FMaterialVertexParameters GetMaterialVertexParameters(FVertexFactoryInput Input,
#endif // > 3
#endif // NUM_MATERIAL_TEXCOORDS_VERTEX

#if (ENGINE_MAJOR_VERSION == 5)
VertexParameters.SceneData = Intermediates.SceneData;
#endif // (ENGINE_MAJOR_VERSION == 5)
VertexParameters.WorldPosition = WorldPosition;
VertexParameters.VertexColor = float4(Intermediates.ParticleEmissiveColor, 1.0);
VertexParameters.TangentToWorld = mul(TangentToLocal, GetLocalToWorld3x3());
Expand All @@ -168,7 +175,11 @@ FMaterialVertexParameters GetMaterialVertexParameters(FVertexFactoryInput Input,

VertexParameters.PreSkinnedPosition = Intermediates.ParticleWorldPosition.xyz;
VertexParameters.PreSkinnedNormal = TangentToLocal[2].xyz;
#if (ENGINE_MAJOR_VERSION == 5)
VertexParameters.PrevFrameLocalToWorld = GetPrimitiveDataFromUniformBuffer().LocalToWorld; // No velocity
#else
VertexParameters.PrevFrameLocalToWorld = Primitive.LocalToWorld; // No velocity
#endif // (ENGINE_MAJOR_VERSION == 5)

#if (DYNAMIC_PARAMETERS_MASK != 0)
VertexParameters.Particle.DynamicParameterValidMask = 0x1 | 0x2 | 0x4 | 0x8; // Add them all, we don't have that info yet. TODO
Expand Down
84 changes: 70 additions & 14 deletions Shaders/Private/PopcornFXMeshVertexFactory.ush
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@
#include "/Engine/Public/Platform.ush"

/*=============================================================================
MeshParticleVertexFactory.usf: Mesh particle vertex factory shader code.
PopcornFXMeshVertexFactory.ush: PopcornFX Vertex factory shader code (CPU billboarded Meshes)
=============================================================================*/

#include "/Engine/Private/VertexFactoryCommon.ush"
Expand All @@ -15,10 +15,8 @@
#define USE_PARTICLE_POSITION ((NEEDS_PARTICLE_POSITION || PASS_NEEDS_PRIMITIVE_VOLUME_BOUNDS))
#define USE_PARTICLE_TIME (NEEDS_PARTICLE_TIME)

#define HAS_INSTANCE_ID (ONEPASS_POINTLIGHT_SHADOW && USING_VERTEX_SHADER_LAYER)

#define USE_PARTICLE_LOCAL_TO_WORLD (NEEDS_PARTICLE_LOCAL_TO_WORLD)
#define USE_PARTICLE_WORLD_TO_LOCAL (NEEDS_PARTICLE_WORLD_TO_LOCAL)
#define USE_PARTICLE_LOCAL_TO_WORLD (NEEDS_PARTICLE_LOCAL_TO_WORLD || NEEDS_INSTANCE_LOCAL_TO_WORLD_PS)
#define USE_PARTICLE_WORLD_TO_LOCAL (NEEDS_PARTICLE_WORLD_TO_LOCAL || NEEDS_INSTANCE_WORLD_TO_LOCAL_PS)

struct FVertexFactoryInput
{
Expand Down Expand Up @@ -149,6 +147,11 @@ struct FVertexFactoryIntermediates

float4x4 ParticleToWorld;
float4x4 WorldToParticle;

#if (ENGINE_MAJOR_VERSION == 5)
/** Cached primitive and instance data */
FSceneDataIntermediates SceneData;
#endif // (ENGINE_MAJOR_VERSION == 5)
};

float4x4 GetParticleTransform(FVertexFactoryInput Input)
Expand Down Expand Up @@ -219,28 +222,45 @@ FMaterialPixelParameters GetMaterialPixelParameters(FVertexFactoryInterpolantsVS
Result.Particle.TranslatedWorldPositionAndSize.w = 1;
#endif

#if NEEDS_PARTICLE_TRANSFORM
#if (ENGINE_MAJOR_VERSION == 5)
# if USE_PARTICLE_LOCAL_TO_WORLD
Result.Particle.ParticleToWorld = LWCPromote(transpose(float4x4(Interpolants.ParticleToWorld[0], Interpolants.ParticleToWorld[1], Interpolants.ParticleToWorld[2], float4(0.0f, 0.0f, 0.0f, 1.0f))));
# if NEEDS_INSTANCE_LOCAL_TO_WORLD_PS
Result.InstanceLocalToWorld = Result.Particle.ParticleToWorld;
# endif // NEEDS_INSTANCE_LOCAL_TO_WORLD_PS
# endif // USE_PARTICLE_LOCAL_TO_WORLD

# if USE_PARTICLE_WORLD_TO_LOCAL
Result.Particle.WorldToParticle = LWCPromoteInverse(transpose(float4x4(Interpolants.WorldToParticle[0], Interpolants.WorldToParticle[1], Interpolants.WorldToParticle[2], float4(0.0f, 0.0f, 0.0f, 1.0f))));
# if NEEDS_INSTANCE_WORLD_TO_LOCAL_PS
Result.InstanceWorldtoLocal = Result.Particle.WorldToParticle;
# endif // NEEDS_INSTANCE_WORLD_TO_LOCAL_PS
# endif // USE_PARTICLE_WORLD_TO_LOCAL
#else

# if NEEDS_PARTICLE_TRANSFORM
Result.Particle.LocalToWorld[0] = Interpolants.LocalToWorld[0];
Result.Particle.LocalToWorld[1] = Interpolants.LocalToWorld[1];
Result.Particle.LocalToWorld[2] = Interpolants.LocalToWorld[2];
Result.Particle.LocalToWorld[3] = Interpolants.LocalToWorld[3];
#endif
# endif // NEEDS_PARTICLE_TRANSFORM

#if USE_PARTICLE_LOCAL_TO_WORLD
# if USE_PARTICLE_LOCAL_TO_WORLD
Result.Particle.ParticleToWorld = transpose(float4x4(
Interpolants.ParticleToWorld[0],
Interpolants.ParticleToWorld[1],
Interpolants.ParticleToWorld[2],
float4(0.0f, 0.0f, 0.0f, 1.0f)));
#endif
# endif // USE_PARTICLE_LOCAL_TO_WORLD

#if USE_PARTICLE_WORLD_TO_LOCAL
# if USE_PARTICLE_WORLD_TO_LOCAL
Result.Particle.WorldToParticle = transpose(float4x4(
Interpolants.WorldToParticle[0],
Interpolants.WorldToParticle[1],
Interpolants.WorldToParticle[2],
float4(0.0f, 0.0f, 0.0f, 1.0f)));
#endif
# endif // USE_PARTICLE_WORLD_TO_LOCAL
#endif // (ENGINE_MAJOR_VERSION == 5)

Result.Particle.MotionBlurFade = 1.0f;
Result.TangentToWorld = AssembleTangentToWorld(TangentToWorld0, TangentToWorld2);
Expand Down Expand Up @@ -282,6 +302,9 @@ float4x4 InverseTransform(float4x4 InTransform)
FMaterialVertexParameters GetMaterialVertexParameters(FVertexFactoryInput Input, FVertexFactoryIntermediates Intermediates, float3 WorldPosition, float3x3 TangentToLocal)
{
FMaterialVertexParameters Result = (FMaterialVertexParameters)0;
#if (ENGINE_MAJOR_VERSION == 5)
Result.SceneData = Intermediates.SceneData;
#endif // (ENGINE_MAJOR_VERSION == 5)
Result.WorldPosition = WorldPosition;
Result.VertexColor = Intermediates.VertexColor;
Result.PreSkinnedPosition = Input.Position.xyz;
Expand Down Expand Up @@ -309,16 +332,30 @@ FMaterialVertexParameters GetMaterialVertexParameters(FVertexFactoryInput Input,
Result.Particle.TranslatedWorldPositionAndSize.xyz = Intermediates.ParticleTranslatedWorldPosition.xyz;
Result.Particle.TranslatedWorldPositionAndSize.w = 1;

#if (ENGINE_MAJOR_VERSION == 5)
float4x4 _transform = GetParticleTransform(Input);
FLWCMatrix Transform = LWCPromote(_transform);
#else
float4x4 Transform = GetParticleTransform(Input);
#endif // (ENGINE_MAJOR_VERSION == 5)

Result.InstanceLocalToWorld = Transform;
#if NEEDS_PARTICLE_TRANSFORM
#if (ENGINE_MAJOR_VERSION == 5)
Result.InstanceWorldToLocal = LWCPromoteInverse(InverseTransform(_transform));
#else
# if NEEDS_PARTICLE_TRANSFORM
Result.Particle.LocalToWorld[0] = Transform[0];
Result.Particle.LocalToWorld[1] = Transform[1];
Result.Particle.LocalToWorld[2] = Transform[2];
Result.Particle.LocalToWorld[3] = Transform[3];
#endif
# endif // NEEDS_PARTICLE_TRANSFORM
#endif // (ENGINE_MAJOR_VERSION == 5)

#if (ENGINE_MAJOR_VERSION == 5)
Result.TangentToWorld = mul(TangentToLocal, (float3x3)_transform);
#else
Result.TangentToWorld = mul(TangentToLocal, (float3x3)Transform);
#endif // (ENGINE_MAJOR_VERSION == 5)

#if NUM_MATERIAL_TEXCOORDS_VERTEX
for (int CoordinateIndex = 0; CoordinateIndex < NUM_MATERIAL_TEXCOORDS_VERTEX; CoordinateIndex++)
Expand All @@ -328,20 +365,31 @@ FMaterialVertexParameters GetMaterialVertexParameters(FVertexFactoryInput Input,
#endif

Result.Particle.ParticleToWorld = Transform;
#if (ENGINE_MAJOR_VERSION == 5)
Result.Particle.WorldToParticle = Result.InstanceWorldToLocal;
#else
Result.Particle.WorldToParticle = InverseTransform(Transform);
#endif // (ENGINE_MAJOR_VERSION == 5)
return Result;
}

float4 CalcWorldPosition(FVertexFactoryInput Input)
{
float4x4 Transform = GetParticleTransform(Input);
#if (ENGINE_MAJOR_VERSION == 5)
float3 WorldPosition = mul(Input.Position, Transform).xyz + LWCHackToFloat(ResolvedView.PreViewTranslation);
#else
float3 WorldPosition = mul(Input.Position, Transform).xyz + ResolvedView.PreViewTranslation;
#endif // (ENGINE_MAJOR_VERSION == 5)
return float4(WorldPosition, Input.Position.w);
}

FVertexFactoryIntermediates GetVertexFactoryIntermediates(FVertexFactoryInput Input)
{
FVertexFactoryIntermediates Intermediates = (FVertexFactoryIntermediates)0;
#if (ENGINE_MAJOR_VERSION == 5)
Intermediates.SceneData = VF_GPUSCENE_GET_INTERMEDIATES(Input);
#endif // (ENGINE_MAJOR_VERSION == 5)
// Swizzle vertex color.
Intermediates.VertexColor = Input.VertexColor FCOLOR_COMPONENT_SWIZZLE;

Expand All @@ -355,7 +403,11 @@ FVertexFactoryIntermediates GetVertexFactoryIntermediates(FVertexFactoryInput In
Intermediates.LocalToWorld[3] = LocalToWorldMat[3];
#endif

#if (ENGINE_MAJOR_VERSION == 5)
Intermediates.ParticleTranslatedWorldPosition = ParticleWorldPosition + LWCHackToFloat(ResolvedView.PreViewTranslation).xyz;
#else
Intermediates.ParticleTranslatedWorldPosition = ParticleWorldPosition + ResolvedView.PreViewTranslation.xyz;
#endif // (ENGINE_MAJOR_VERSION == 5)

Intermediates.ParticleColor = Input.ParticleColor;
Intermediates.VATCursor = Input.VATCursor;
Expand Down Expand Up @@ -442,7 +494,11 @@ void CalcTangentToWorld(FVertexFactoryInput Input, FVertexFactoryIntermediates I

// Normalize to remove scaling. Incorrect but faster than computing the inverse-transpose.
TangentToWorld0 = normalize(TangentToWorld[0]);
TangentToWorld2 = normalize(float4(TangentToWorld[2], TangentBias(Input.TangentZ.w) * Primitive.InvNonUniformScaleAndDeterminantSign.w));
#if (ENGINE_MAJOR_VERSION == 5)
TangentToWorld2 = float4(normalize(TangentToWorld[2]), TangentBias(Input.TangentZ.w) * GetPrimitive_DeterminantSign_FromFlags(Primitive.Flags));
#else
TangentToWorld2 = float4(normalize(TangentToWorld[2]), TangentBias(Input.TangentZ.w) * Primitive.InvNonUniformScaleAndDeterminantSign.w);
#endif // (ENGINE_MAJOR_VERSION == 5)
}

FVertexFactoryInterpolantsVSToPS VertexFactoryGetInterpolantsVSToPS(FVertexFactoryInput Input, FVertexFactoryIntermediates Intermediates, FMaterialVertexParameters VertexParameters)
Expand Down
18 changes: 17 additions & 1 deletion Shaders/Private/PopcornFXVertexFactory.ush
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@
#include "/Engine/Public/Platform.ush"

/*=============================================================================
PopcornFXVertexFactory.usf: PopcornFX Vertex factory shader code.
PopcornFXVertexFactory.ush: PopcornFX Vertex factory shader code (CPU billboarded Billboards/Ribbons/Triangles)
=============================================================================*/

#include "/Engine/Private/VertexFactoryCommon.ush"
Expand Down Expand Up @@ -103,6 +103,11 @@ struct FVertexFactoryIntermediates
#if (DYNAMIC_PARAMETERS_MASK & 8)
float4 DynamicParameter3;
#endif

#if (ENGINE_MAJOR_VERSION == 5)
/** Cached primitive and instance data */
FSceneDataIntermediates SceneData;
#endif // (ENGINE_MAJOR_VERSION == 5)
};

//----------------------------------------------------------------------------
Expand Down Expand Up @@ -245,6 +250,9 @@ FMaterialVertexParameters GetMaterialVertexParameters(FVertexFactoryInput Input,

#endif // NUM_MATERIAL_TEXCOORDS_VERTEX

#if (ENGINE_MAJOR_VERSION == 5)
VertexParameters.SceneData = Intermediates.SceneData;
#endif // (ENGINE_MAJOR_VERSION == 5)
VertexParameters.WorldPosition = WorldPosition;
VertexParameters.VertexColor = float4(Intermediates.ParticleEmissiveColor, 1);
VertexParameters.PreSkinnedPosition = Input.Position.xyz;
Expand Down Expand Up @@ -282,6 +290,9 @@ FMaterialVertexParameters GetMaterialVertexParameters(FVertexFactoryInput Input,
FVertexFactoryIntermediates GetVertexFactoryIntermediates(FVertexFactoryInput Input)
{
FVertexFactoryIntermediates Intermediates = (FVertexFactoryIntermediates)0;
#if (ENGINE_MAJOR_VERSION == 5)
Intermediates.SceneData = VF_GPUSCENE_GET_INTERMEDIATES(Input);
#endif // (ENGINE_MAJOR_VERSION == 5)

uint vertexID = Input.VertexId;
uint particleID = 0;
Expand Down Expand Up @@ -311,8 +322,13 @@ FVertexFactoryIntermediates GetVertexFactoryIntermediates(FVertexFactoryInput In

float3 vertexPosition = Input.Position;

#if (ENGINE_MAJOR_VERSION == 5)
float3 worldVertexPosition = mul(float4(vertexPosition,1), LWCToFloat(GetPrimitiveDataFromUniformBuffer().LocalToWorld)).xyz;
worldVertexPosition += LWCToFloat(ResolvedView.PreViewTranslation);
#else
float3 worldVertexPosition = mul(float4(vertexPosition,1), Primitive.LocalToWorld).xyz;
worldVertexPosition += ResolvedView.PreViewTranslation;
#endif // (ENGINE_MAJOR_VERSION == 5)

Intermediates.Position = worldVertexPosition;

Expand Down
4 changes: 2 additions & 2 deletions Source/PopcornFX/Private/Assets/PopcornFXEffect.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -974,8 +974,8 @@ void UPopcornFXEffect::ReloadRendererMaterials()
const PopcornFX::PParticleDescriptor desc = ecMap->m_LayerSlots[iLayer].m_ParentDescriptor;
if (!PK_VERIFY(desc != null))
return;
TMemoryView<const PopcornFX::PRendererDataBase> renderers = desc->Renderers();
const u32 rendererCount = renderers.Count();
PopcornFX::TMemoryView<const PopcornFX::PRendererDataBase> renderers = desc->Renderers();
const u32 rendererCount = renderers.Count();
for (u32 iRenderer = 0; iRenderer < rendererCount; ++iRenderer)
{
globalRendererIndex++;
Expand Down
Loading

0 comments on commit 4099175

Please sign in to comment.