MCPcopy Create free account
hub / github.com/Apress/Ray-Tracing-Gems-II / LoadDeviceResources

Method LoadDeviceResources

Chapter_27/Core/ParticleEffect.cpp:63–104  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

61}
62
63void ParticleEffect::LoadDeviceResources(ID3D12Device* device)
64{
65 (device); // Currently unused. May be useful with multi-adapter support.
66
67 m_OriginalEffectProperties = m_EffectProperties; //In case we want to reset
68
69 //Fill particle spawn data buffer
70 ParticleSpawnData* pSpawnData = (ParticleSpawnData*)_malloca(m_EffectProperties.EmitProperties.MaxParticles * sizeof(ParticleSpawnData));
71
72 for (UINT i = 0; i < m_EffectProperties.EmitProperties.MaxParticles; i++)
73 {
74 ParticleSpawnData& SpawnData = pSpawnData[i];
75 SpawnData.AgeRate = 1.0f / s_RNG.NextFloat( m_EffectProperties.LifeMinMax.x, m_EffectProperties.LifeMinMax.y );
76 float horizontalAngle = s_RNG.NextFloat(XM_2PI);
77 float horizontalVelocity = s_RNG.NextFloat( m_EffectProperties.Velocity.GetX(), m_EffectProperties.Velocity.GetY() );
78 SpawnData.Velocity.x = horizontalVelocity * cos(horizontalAngle);
79 SpawnData.Velocity.y = s_RNG.NextFloat( m_EffectProperties.Velocity.GetZ(), m_EffectProperties.Velocity.GetW() );
80 SpawnData.Velocity.z = horizontalVelocity * sin(horizontalAngle);
81
82 SpawnData.SpreadOffset = RandSpread(m_EffectProperties.Spread ) ;
83
84 SpawnData.StartSize = s_RNG.NextFloat( m_EffectProperties.Size.GetX(), m_EffectProperties.Size.GetY() );
85 SpawnData.EndSize = s_RNG.NextFloat( m_EffectProperties.Size.GetZ(), m_EffectProperties.Size.GetW() );
86 SpawnData.StartColor = RandColor( m_EffectProperties.MinStartColor, m_EffectProperties.MaxStartColor );
87 SpawnData.EndColor = RandColor( m_EffectProperties.MinEndColor, m_EffectProperties.MaxEndColor );
88 SpawnData.Mass = s_RNG.NextFloat( m_EffectProperties.MassMinMax.x, m_EffectProperties.MassMinMax.y );
89 SpawnData.RotationSpeed = s_RNG.NextFloat(); //todo
90 SpawnData.Random = s_RNG.NextFloat();
91 }
92
93 m_RandomStateBuffer.Create(L"ParticleSystem::SpawnDataBuffer", m_EffectProperties.EmitProperties.MaxParticles, sizeof(ParticleSpawnData), pSpawnData);
94 _freea(pSpawnData);
95
96 m_StateBuffers[0].Create(L"ParticleSystem::Buffer0", m_EffectProperties.EmitProperties.MaxParticles, sizeof(ParticleMotion));
97 m_StateBuffers[1].Create(L"ParticleSystem::Buffer1", m_EffectProperties.EmitProperties.MaxParticles, sizeof(ParticleMotion));
98 m_CurrentStateBuffer = 0;
99
100 //DispatchIndirect args buffer / number of thread groups
101 __declspec(align(16)) UINT DispatchIndirectData[3] = { 0, 1, 1 };
102 m_DispatchIndirectArgs.Create(L"ParticleSystem::DispatchIndirectArgs", 1, sizeof(D3D12_DISPATCH_ARGUMENTS), DispatchIndirectData);
103
104}
105
106void ParticleEffect::Update(ComputeContext& CompContext, float timeDelta)
107{

Callers 2

InstantiateEffectMethod · 0.80

Calls 8

RandSpreadFunction · 0.85
RandColorFunction · 0.85
NextFloatMethod · 0.80
GetXMethod · 0.45
GetYMethod · 0.45
GetZMethod · 0.45
GetWMethod · 0.45
CreateMethod · 0.45

Tested by

no test coverage detected