2016-09-28 19:26:11 +00:00
|
|
|
#pragma once
|
|
|
|
|
|
|
|
#include <vector>
|
|
|
|
|
|
|
|
#include <glm/vec2.hpp>
|
|
|
|
|
|
|
|
#include "glclasses.hpp"
|
|
|
|
|
|
|
|
namespace endofthejedi {
|
|
|
|
class ParticleBatch {
|
|
|
|
public:
|
2016-09-28 22:50:14 +00:00
|
|
|
ParticleBatch(size_t numParticles, float particleRadius, float maxAge);
|
2016-09-28 19:26:11 +00:00
|
|
|
|
|
|
|
// deallocate opengl stuff on destroy
|
|
|
|
~ParticleBatch();
|
|
|
|
|
|
|
|
size_t numParticles() const { return m_numParticles; }
|
|
|
|
|
2016-09-28 22:50:14 +00:00
|
|
|
void setParticle(size_t index, const glm::vec2 &p, const glm::vec2 &v);
|
2016-09-28 19:26:11 +00:00
|
|
|
|
|
|
|
void bind();
|
|
|
|
void upload();
|
|
|
|
void render();
|
|
|
|
|
|
|
|
Shader *shader() { return &m_shader; }
|
|
|
|
|
|
|
|
private:
|
|
|
|
size_t dataSizeForIndex(int i);
|
|
|
|
void *dataSourceForIndex(int i);
|
|
|
|
|
|
|
|
private:
|
|
|
|
size_t m_numParticles;
|
2016-09-28 22:50:14 +00:00
|
|
|
float m_particleRadius;
|
|
|
|
float m_maxAge;
|
|
|
|
|
|
|
|
GLuint m_data_vbos[5];
|
2016-09-28 19:26:11 +00:00
|
|
|
|
2016-09-28 22:50:14 +00:00
|
|
|
std::vector<float> m_data_quad;
|
2016-09-28 19:26:11 +00:00
|
|
|
std::vector<glm::vec2> m_data_position;
|
|
|
|
std::vector<glm::vec2> m_data_velocity;
|
|
|
|
std::vector<float> m_data_kind;
|
|
|
|
std::vector<float> m_data_max_age;
|
|
|
|
|
|
|
|
Shader m_shader;
|
|
|
|
};
|
|
|
|
}
|