45 lines
1.0 KiB
C++
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);
|
|
}
|