BosonX/src/fsblend.cpp

45 lines
1.0 KiB
C++

#include <azur/gint/render.h>
uint8_t BOSONX_SHADER_FSBLEND = -1;
extern "C" azrp_shader_t bosonx_shader_fsblend;
static void configure(void)
{
int pixels_in_fragment = azrp_width * azrp_frag_height;
azrp_set_uniforms(BOSONX_SHADER_FSBLEND, (void *)pixels_in_fragment);
}
__attribute__((constructor))
static void register_shader(void)
{
BOSONX_SHADER_FSBLEND =
azrp_register_shader(bosonx_shader_fsblend, configure);
configure();
}
//---
struct command {
uint8_t shader_id;
uint8_t _;
/* Alpha value between 0 and 31 */
uint16_t alpha;
/* Expanded foreground color (XGXRXB565565) */
uint32_t color_expanded;
};
void shader_fsblend(uint16_t color, int alpha)
{
prof_enter(azrp_perf_cmdgen);
struct command *cmd = (struct command *)
azrp_new_command(sizeof *cmd, 0, azrp_frag_count);
if(cmd) {
cmd->shader_id = BOSONX_SHADER_FSBLEND;
cmd->alpha = (alpha & 31);
cmd->color_expanded = ((color << 16) | color) & 0x07e0f81f;
}
prof_leave(azrp_perf_cmdgen);
}