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);
27 virtual void renderSimulate(RenderArgs* args)
override;
29 ComponentMode getFadeOutMode()
const override {
return ComponentMode::COMPONENT_MODE_DISABLED; }
32 virtual void doRenderUpdateSynchronousTyped(
const ScenePointer& scene, Transaction& transaction,
const TypedEntityPointer& entity)
override;
33 virtual void doRenderUpdateAsynchronousTyped(
const TypedEntityPointer& entity)
override;
35 bool isTransparent()
const override;
36 virtual ItemKey getKey()
override;
37 virtual ShapeKey getShapeKey()
override;
38 virtual Item::Bound getBound(RenderArgs* args)
override;
39 virtual void doRender(RenderArgs* args)
override;
42 using PipelinePointer = gpu::PipelinePointer;
43 using BufferPointer = gpu::BufferPointer;
44 using TexturePointer = gpu::TexturePointer;
45 using Format = gpu::Stream::Format;
46 using Buffer = gpu::Buffer;
47 using BufferView = gpu::BufferView;
53 uint64_t expiration { 0 };
54 float lifetime { 0.0f };
55 glm::vec3 basePosition;
56 glm::vec3 relativePosition;
58 glm::vec3 acceleration;
60 void integrate(
float deltaTime) {
61 glm::vec3 atSquared = (0.5f * deltaTime * deltaTime) * acceleration;
62 relativePosition += velocity * deltaTime + atSquared;
63 velocity += acceleration * deltaTime;
64 lifetime += deltaTime;
67 using CpuParticles = std::deque<CpuParticle>;
71 struct InterpolationData {
78 struct ParticleUniforms {
79 InterpolationData<float> radius;
80 InterpolationData<glm::vec4> color;
81 InterpolationData<float> spin;
87 void computeTriangles(
const hfm::Model& hfmModel);
88 bool _hasComputedTriangles{
false };
90 std::vector<Triangle> triangles;
91 std::vector<size_t> samplesPerTriangle;
96 static CpuParticle createParticle(
const Transform& baseTransform,
const particle::Properties& particleProperties,
97 const ShapeType& shapeType,
const GeometryResource::Pointer& geometryResource,
98 const TriangleInfo& triangleInfo);
99 void stepSimulation();
101 particle::Properties _particleProperties;
102 bool _prevEmitterShouldTrail;
103 bool _prevEmitterShouldTrailInitialized {
false };
104 CpuParticles _cpuParticles;
105 bool _emitting {
false };
106 uint64_t _timeUntilNextEmit { 0 };
107 BufferPointer _particleBuffer { std::make_shared<Buffer>(gpu::Buffer::VertexBuffer) };
108 BufferView _uniformBuffer;
109 quint64 _lastSimulated { 0 };
111 PulsePropertyGroup _pulseProperties;
112 ShapeType _shapeType;
113 QString _compoundShapeURL;
115 void fetchGeometryResource();
116 GeometryResource::Pointer _geometryResource;
118 NetworkTexturePointer _networkTexture;
119 bool _textureLoaded {
false };
The runtime model format.
Definition: HFM.h:305