Shmup/src/pixellistshader.cpp

54 lines
1.1 KiB
C++

#include <azur/gint/render.h>
#include "MyAzurShaders.h"
#include "starfield.h"
#include <vector>
uint8_t AZRP_SHADER_PIXELLIST = -1;
__attribute__((constructor))
static void register_shader(void)
{
extern azrp_shader_t azrp_shader_pixellist;
AZRP_SHADER_PIXELLIST = azrp_register_shader(azrp_shader_pixellist);
}
void azrp_shader_pixellist_configure(void)
{
azrp_set_uniforms(AZRP_SHADER_PIXELLIST, (void *)azrp_width);
}
struct command {
uint8_t shader_id;
uint16_t length;
Pixel * const *data;
};
void azrp_pixellist(std::vector<Pixel*> const &list, int fragnum )
{
prof_enter(azrp_perf_cmdgen);
struct command cmd;
cmd.shader_id = AZRP_SHADER_PIXELLIST;
cmd.length = list.size();
cmd.data = list.data();
azrp_queue_command(&cmd, sizeof cmd, fragnum, 1);
prof_leave(azrp_perf_cmdgen);
}
void azrp_shader_pixellist( void *uniforms, void *comnd, void *fragment )
{
struct command *cmd = (struct command *) comnd;
uint16_t *frag = (uint16_t *) fragment;
for(int i = 0; i < cmd->length; i++) {
Pixel *pix = cmd->data[i];
frag[azrp_width * pix->y + pix->x] = pix->c;
}
}