[feat] 低质量ttf render
This commit is contained in:
@@ -21,7 +21,10 @@ void gfx_init(EFI_GRAPHICS_OUTPUT_PROTOCOL *GOP) {
|
||||
|
||||
void gfx_clear(void) {
|
||||
EFI_GRAPHICS_OUTPUT_BLT_PIXEL black = {0, 0, 0, 0};
|
||||
g_gfx.GOP->Blt(g_gfx.GOP, &black, EfiBltVideoFill, 0, 0, 0, 0, g_gfx.hr, g_gfx.vr, 0);
|
||||
uefi_call_wrapper(g_gfx.GOP->Blt, 10,
|
||||
g_gfx.GOP, &black, EfiBltVideoFill,
|
||||
(UINTN)0, (UINTN)0, (UINTN)0, (UINTN)0,
|
||||
(UINTN)g_gfx.hr, (UINTN)g_gfx.vr, (UINTN)0);
|
||||
}
|
||||
|
||||
void draw_set_target(EFI_GRAPHICS_OUTPUT_BLT_PIXEL *buf, SUINT32 w, SUINT32 h) {
|
||||
|
||||
@@ -34,3 +34,21 @@ void draw_rect(SUINT32 bx, SUINT32 by, SUINT32 ex, SUINT32 ey,
|
||||
for (SUINT32 y = by; y <= ey; y++)
|
||||
draw_pixel(x, y, color);
|
||||
}
|
||||
|
||||
void draw_pixel_alpha(SUINT32 x, SUINT32 y, EFI_GRAPHICS_OUTPUT_BLT_PIXEL color, SUINT8 alpha) {
|
||||
if (x >= g_draw_target.w || y >= g_draw_target.h) return;
|
||||
if (alpha == 0) return;
|
||||
EFI_GRAPHICS_OUTPUT_BLT_PIXEL *p = g_draw_target.buf + (g_draw_target.w * y) + x;
|
||||
if (alpha == 255) {
|
||||
p->Blue = color.Blue;
|
||||
p->Green = color.Green;
|
||||
p->Red = color.Red;
|
||||
p->Reserved = color.Reserved;
|
||||
return;
|
||||
}
|
||||
SUINT32 inv = 255 - alpha;
|
||||
p->Blue = (SUINT8)((color.Blue * alpha + p->Blue * inv) / 255);
|
||||
p->Green = (SUINT8)((color.Green * alpha + p->Green * inv) / 255);
|
||||
p->Red = (SUINT8)((color.Red * alpha + p->Red * inv) / 255);
|
||||
p->Reserved = color.Reserved;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user