KlassischeKeplerKriege/game/renderer_polygon_3d/particle_batch.hpp

56 lines
1.5 KiB
C++
Raw Normal View History

#pragma once
#include <vector>
#include <glm/vec2.hpp>
#include "glclasses.hpp"
namespace endofthejedi {
class ParticleBatch {
public:
2016-09-30 18:19:10 +00:00
ParticleBatch(size_t id, size_t numParticles, float particleRadius, float maxAge);
// 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);
void bind();
void upload();
void render();
2016-09-29 06:28:56 +00:00
void tick(float dt);
bool done() const;
Shader *shader() { return &m_shader; }
2016-09-30 18:19:10 +00:00
size_t id() const { return m_id; }
private:
size_t dataSizeForIndex(int i);
void *dataSourceForIndex(int i);
private:
2016-09-30 18:19:10 +00:00
size_t m_id;
size_t m_numParticles;
2016-09-28 22:50:14 +00:00
float m_particleRadius;
2016-09-29 06:28:56 +00:00
const float m_maxAge;
float m_age;
2016-09-28 22:50:14 +00:00
GLuint m_data_vbos[5];
2016-09-28 22:50:14 +00:00
std::vector<float> m_data_quad;
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;
2016-09-30 18:19:10 +00:00
GLuint m_attr_locations[5];
Shader m_shader;
};
}