MCPcopy Create free account
hub / github.com/FlaxEngine/FlaxEngine / Init

Method Init

Source/Engine/Particles/Graph/GPU/GPUParticles.cpp:39–96  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

37 });
38
39bool GPUParticles::Init(ParticleEmitter* owner, MemoryReadStream& shaderCacheStream, ReadStream* materialParamsStream, int32 customDataSize)
40{
41 ASSERT(!_shader);
42
43 // Load shader
44 ASSERT(GPUDevice::Instance);
45#if GPU_ENABLE_RESOURCE_NAMING
46 const StringView name(owner->GetPath());
47#else
48 const StringView name;
49#endif
50 _shader = GPUDevice::Instance->CreateShader(name);
51 if (_shader->Create(shaderCacheStream))
52 {
53 LOG(Warning, "Failed to load shader.");
54 return true;
55 }
56
57 // Setup pipeline
58 _mainCS = _shader->GetCS("CS_Main");
59 if (!_mainCS)
60 {
61 LOG(Warning, "Missing CS_Main shader.");
62 return true;
63 }
64 const auto cb0 = _shader->GetCB(0);
65 if (!cb0)
66 {
67 LOG(Warning, "Missing valid GPU particles constant buffer.");
68 return true;
69 }
70 const int32 cbSize = cb0->GetSize();
71 if (cbSize < sizeof(GPUParticlesData))
72 {
73 LOG(Warning, "Invalid size GPU particles constant buffer. required {0} bytes but got {1}", sizeof(GPUParticlesData), cbSize);
74 return true;
75 }
76 _cbData.Resize(cbSize);
77 Platform::MemoryClear(_cbData.Get(), cbSize);
78
79 // Load material parameters
80 if (_params.Load(materialParamsStream))
81 {
82 LOG(Warning, "Cannot load material parameters.");
83 return true;
84 }
85 if (_params.Count() < owner->Graph.Parameters.Count())
86 {
87 LOG(Warning, "Invalid amount of GPU parameters load material parameters. Shader has {0} params, graph has {1}.", _params.Count(), owner->Graph.Parameters.Count());
88 return true;
89 }
90
91 // Setup custom data size stored by the particle emitter graph generator for the GPU
92 ASSERT(customDataSize >= 0 && customDataSize <= 1024);
93 CustomDataSize = customDataSize;
94
95 return false;
96}

Callers

nothing calls this directly

Calls 9

MemoryClearFunction · 0.85
GetPathMethod · 0.45
CreateShaderMethod · 0.45
CreateMethod · 0.45
GetSizeMethod · 0.45
ResizeMethod · 0.45
GetMethod · 0.45
LoadMethod · 0.45
CountMethod · 0.45

Tested by

no test coverage detected