12 #ifndef hifi_RenderableProceduralParticleEffectEntityItem_h
13 #define hifi_RenderableProceduralParticleEffectEntityItem_h
15 #include "RenderableEntityItem.h"
16 #include <ProceduralParticleEffectEntityItem.h>
18 #include <procedural/Procedural.h>
20 namespace render {
namespace entities {
22 class ProceduralParticleEffectEntityRenderer :
public TypedEntityRenderer<ProceduralParticleEffectEntityItem> {
23 using Parent = TypedEntityRenderer<ProceduralParticleEffectEntityItem>;
24 friend class EntityRenderer;
27 ProceduralParticleEffectEntityRenderer(
const EntityItemPointer& entity);
29 virtual void renderSimulate(RenderArgs* args)
override;
31 ComponentMode getFadeOutMode()
const override {
return ComponentMode::COMPONENT_MODE_DISABLED; }
34 virtual void doRenderUpdateSynchronousTyped(
const ScenePointer& scene, Transaction& transaction,
const TypedEntityPointer& entity)
override;
35 virtual void doRenderUpdateAsynchronousTyped(
const TypedEntityPointer& entity)
override;
37 bool isTransparent()
const override;
38 virtual ItemKey getKey()
override;
39 virtual ShapeKey getShapeKey()
override;
40 virtual void doRender(RenderArgs* args)
override;
43 using TexturePointer = gpu::TexturePointer;
44 using FramebufferPointer = gpu::FramebufferPointer;
46 void recreateParticles();
48 QString _particleUpdateData;
49 Procedural _updateProcedural;
50 QString _particleRenderData;
51 Procedural _renderProcedural {
false };
53 size_t _numParticles { 0 };
54 size_t _particlePropTextureDim { 128 };
55 size_t _numTrianglesPerParticle { particle::DEFAULT_NUM_TRIS_PER };
56 size_t _numUpdateProps { particle::DEFAULT_NUM_UPDATE_PROPS };
57 bool _transparent {
false };
59 std::array<FramebufferPointer, 2> _particleBuffers;
60 bool _evenPass {
true };