11 #ifndef hifi_RenderableParticleEffectEntityItem_h
12 #define hifi_RenderableParticleEffectEntityItem_h
14 #include "RenderableEntityItem.h"
15 #include <ParticleEffectEntityItem.h>
16 #include <TextureCache.h>
18 namespace render {
namespace entities {
20 class ParticleEffectEntityRenderer :
public TypedEntityRenderer<ParticleEffectEntityItem> {
21 using Parent = TypedEntityRenderer<ParticleEffectEntityItem>;
22 friend class EntityRenderer;
25 ParticleEffectEntityRenderer(
const EntityItemPointer& entity);
28 virtual void doRenderUpdateSynchronousTyped(
const ScenePointer& scene, Transaction& transaction,
const TypedEntityPointer& entity)
override;
29 virtual void doRenderUpdateAsynchronousTyped(
const TypedEntityPointer& entity)
override;
31 bool isTransparent()
const override;
32 virtual ShapeKey getShapeKey()
override;
33 virtual Item::Bound getBound(RenderArgs* args)
override;
34 virtual void doRender(RenderArgs* args)
override;
37 using PipelinePointer = gpu::PipelinePointer;
38 using BufferPointer = gpu::BufferPointer;
39 using TexturePointer = gpu::TexturePointer;
40 using Format = gpu::Stream::Format;
41 using Buffer = gpu::Buffer;
42 using BufferView = gpu::BufferView;
48 uint64_t expiration { 0 };
49 float lifetime { 0.0f };
50 glm::vec3 basePosition;
51 glm::vec3 relativePosition;
53 glm::vec3 acceleration;
55 void integrate(
float deltaTime) {
56 glm::vec3 atSquared = (0.5f * deltaTime * deltaTime) * acceleration;
57 relativePosition += velocity * deltaTime + atSquared;
58 velocity += acceleration * deltaTime;
59 lifetime += deltaTime;
62 using CpuParticles = std::deque<CpuParticle>;
66 struct InterpolationData {
73 struct ParticleUniforms {
74 InterpolationData<float> radius;
75 InterpolationData<glm::vec4> color;
76 InterpolationData<float> spin;
82 void computeTriangles(
const hfm::Model& hfmModel);
83 bool _hasComputedTriangles{
false };
85 std::vector<Triangle> triangles;
86 std::vector<size_t> samplesPerTriangle;
91 static CpuParticle createParticle(
const Transform& baseTransform,
const particle::Properties& particleProperties,
92 const ShapeType& shapeType,
const GeometryResource::Pointer& geometryResource,
93 const TriangleInfo& triangleInfo);
94 void stepSimulation();
96 particle::Properties _particleProperties;
97 bool _prevEmitterShouldTrail;
98 bool _prevEmitterShouldTrailInitialized {
false };
99 CpuParticles _cpuParticles;
100 bool _emitting {
false };
101 uint64_t _timeUntilNextEmit { 0 };
102 BufferPointer _particleBuffer { std::make_shared<Buffer>() };
103 BufferView _uniformBuffer;
104 quint64 _lastSimulated { 0 };
106 PulsePropertyGroup _pulseProperties;
107 ShapeType _shapeType;
108 QString _compoundShapeURL;
110 void fetchGeometryResource();
111 GeometryResource::Pointer _geometryResource;
113 NetworkTexturePointer _networkTexture;
114 bool _textureLoaded {
false };
The runtime model format.
Definition: HFM.h:302