| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091 |
- /*
- * Copyright 2011-2017 Branimir Karadzic. All rights reserved.
- * License: https://github.com/bkaradzic/bgfx#license-bsd-2-clause
- */
- #ifndef PARTICLE_SYSTEM_H_HEADER_GUARD
- #define PARTICLE_SYSTEM_H_HEADER_GUARD
- #include <bx/allocator.h>
- #include <bx/easing.h>
- #include <bx/rng.h>
- #include "../bounds.h"
- struct EmitterShape
- {
- enum Enum
- {
- Sphere,
- Hemisphere,
- Circle,
- Disc,
- Rect,
- Count
- };
- };
- struct EmitterDirection
- {
- enum Enum
- {
- Up,
- Outward,
- Count
- };
- };
- struct EmitterUniforms
- {
- void reset();
- float m_position[3];
- float m_angle[3];
- float m_blendStart[2];
- float m_blendEnd[2];
- float m_offsetStart[2];
- float m_offsetEnd[2];
- float m_scaleStart[2];
- float m_scaleEnd[2];
- float m_lifeSpan[2];
- float m_gravityScale;
- uint32_t m_rgba[5];
- uint32_t m_particlesPerSecond;
- bx::Easing::Enum m_easePos;
- bx::Easing::Enum m_easeRgba;
- bx::Easing::Enum m_easeBlend;
- bx::Easing::Enum m_easeScale;
- };
- struct EmitterHandle { uint16_t idx; };
- ///
- void psInit(uint16_t _maxEmitters = 64, bx::AllocatorI* _allocator = NULL);
- ///
- void psShutdown();
- ///
- EmitterHandle psCreateEmitter(EmitterShape::Enum _shape, EmitterDirection::Enum _direction, uint32_t _maxParticles);
- ///
- void psUpdateEmitter(EmitterHandle _handle, const EmitterUniforms* _uniforms = NULL);
- ///
- void psGetAabb(EmitterHandle _handle, Aabb& _outAabb);
- ///
- void psDestroyEmitter(EmitterHandle _handle);
- ///
- void psUpdate(float _dt);
- ///
- void psRender(uint8_t _view, const float* _mtxView, const float* _eye);
- #endif // PARTICLE_SYSTEM_H_HEADER_GUARD
|