#include #include "MyAzurShaders.h" #include #include #include #include #include uint8_t AZRP_SHADER_STARFIELD = -1; #define NBPARTS 100 struct particle { int x,y,s,c,frag,off; }; particle datastar[NBPARTS]; __attribute__((constructor)) static void register_shader(void) { extern azrp_shader_t azrp_shader_starfield; AZRP_SHADER_STARFIELD = azrp_register_shader(azrp_shader_starfield); } void azrp_shader_starfield_configure(void) { azrp_set_uniforms(AZRP_SHADER_STARFIELD, (void *)azrp_width); } struct command { uint8_t shader_id; uint8_t current_frag; particle *data; }; void azrp_starfield_init( void ) { srand(rtc_ticks()); for(int i=0; i> 4) + 1; azrp_queue_command(&cmd, sizeof cmd, fragmin, fragcount); prof_leave(azrp_perf_cmdgen); } void azrp_shader_starfield( void *uniforms, void *comnd, void *fragment ) { struct command *cmd = (struct command *) comnd; uint16_t *frag = (uint16_t *) fragment; particle *data = cmd->data; for(int i=0; icurrent_frag == data[i].frag) { frag[azrp_width * data[i].off + data[i].x] = data[i].c; } cmd->current_frag++; }