43 lines
1008 B
C++
43 lines
1008 B
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;
|
||
|
cmd.shader_id = BOSONX_SHADER_FSBLEND;
|
||
|
cmd.alpha = (alpha & 31);
|
||
|
cmd.color_expanded = ((color << 16) | color) & 0x07e0f81f;
|
||
|
|
||
|
azrp_queue_command(&cmd, sizeof cmd, 0, azrp_frag_count);
|
||
|
prof_leave(azrp_perf_cmdgen);
|
||
|
}
|