5.1 Screen Backend

Renders debug output as overlay on the screen:

void d3tui_debug_screen_init(uint16_t width, uint16_t height) {
    // Initialize screen buffer
    screen_buffer = malloc(width * height * sizeof(uint32_t));
    screen_width = width;
    screen_height = height;
    screen_x = 0;
    screen_y = 0;

    // Add to backends
    d3tui_debug_backend_t backend = {
        .name = "screen",
        .write = d3tui_debug_screen_write,
        .flush = d3tui_debug_screen_flush,
        .userdata = NULL
    };
    d3tui_debug_add_backend(&backend);
}

void d3tui_debug_screen_write(const char *msg, size_t len) {
    // Render text to screen buffer
    for (size_t i = 0; i < len; i++) {
        if (msg[i] == '\n') {
            screen_x = 0;
            screen_y += font_height;
        } else {
            d3tui_render_char(screen_buffer, screen_width, screen_height,
                            screen_x, screen_y, msg[i]);
            screen_x += font_width;
        }
    }
}

void d3tui_debug_screen_flush(void) {
    // Render screen buffer to PVR2
    d3tui_render_flush(screen_buffer);
}