+#include "vg/vg_lines.h"
+#include "vg/vg_async.h"
#include "particle.h"
+#include "shaders/particle.h"
+
+struct particle_system particles_grind = {
+ .scale = 0.02f,
+ .velocity_scale = 0.001f,
+ .width = 0.0125f
+},
+particles_env = {
+ .scale = 0.04f,
+ .velocity_scale = 0.001f,
+ .width = 0.25f
+};
-static void particle_spawn( particle_system *sys,
- v3f co, v3f v, f32 lifetime, u32 colour ){
+void particle_spawn( particle_system *sys, v3f co, v3f v,
+ f32 lifetime, u32 colour )
+{
if( sys->alive == sys->max ) return;
particle *p = &sys->array[ sys->alive ++ ];
p->colour = colour;
}
-static void particle_spawn_cone( particle_system *sys,
- v3f co, v3f dir, f32 angle, f32 speed,
- f32 lifetime, u32 colour ){
+void particle_spawn_cone( particle_system *sys,
+ v3f co, v3f dir, f32 angle, f32 speed,
+ f32 lifetime, u32 colour )
+{
if( sys->alive == sys->max ) return;
particle *p = &sys->array[ sys->alive ++ ];
v3_copy( co, p->co );
}
-static void particle_system_update( particle_system *sys, f32 dt ){
+void particle_system_update( particle_system *sys, f32 dt )
+{
u32 i = 0;
iter: if( i == sys->alive ) return;
goto iter;
}
-static void particle_system_debug( particle_system *sys ){
+void particle_system_debug( particle_system *sys )
+{
for( u32 i=0; i<sys->alive; i ++ ){
particle *p = &sys->array[i];
v3f p1;
VG_CHECK_GL_ERR();
}
-static void particle_alloc( particle_system *sys, u32 max ){
- static int reg = 1;
- if( reg ){
- shader_particle_register();
- reg = 0;
- }
-
+void particle_alloc( particle_system *sys, u32 max )
+{
size_t stride = sizeof(particle_vert);
sys->max = max;
vg_async_dispatch( call, async_particle_init );
}
-static void particle_system_prerender( particle_system *sys ){
+void particle_system_prerender( particle_system *sys )
+{
for( u32 i=0; i<sys->alive; i ++ ){
particle *p = &sys->array[i];
particle_vert *vs = &sys->vertices[i*4];
glBufferSubData( GL_ARRAY_BUFFER, 0, sys->alive*stride*4, sys->vertices );
}
-static void particle_system_render( particle_system *sys, camera *cam ){
+void particle_system_render( particle_system *sys, vg_camera *cam )
+{
glDisable( GL_CULL_FACE );
glEnable( GL_DEPTH_TEST );