linux

Linux XRender的API接口使用指南

小樊
43
2025-12-01 14:00:27
栏目: 智能运维

Linux XRender API 使用指南

一 环境准备与可用性检查

二 核心概念与渲染管线

三 常见操作与示例

#include <X11/Xlib.h>
#include <X11/extensions/Xrender.h>
#include <stdio.h>

int main(void) {
    Display *dpy = XOpenDisplay(NULL);
    if (!dpy) { fprintf(stderr, "Cannot open display\n"); return 1; }

    int evb, errb;
    if (!XRenderQueryExtension(dpy, &evb, &errb)) {
        fprintf(stderr, "XRender extension not available\n");
        XCloseDisplay(dpy); return 1;
    }

    int scr = DefaultScreen(dpy);
    Window win = XCreateSimpleWindow(dpy, DefaultRootWindow(dpy),
                                    0, 0, 320, 240, 1,
                                    BlackPixel(dpy, scr), WhitePixel(dpy, scr));
    XMapWindow(dpy, win);

    // 为目标窗口创建 Picture(使用 ARGB32 便于透明/抗锯齿)
    XRenderPictureAttributes pa = {0};
    Picture dst = XRenderCreatePicture(dpy, win, PictStandardARGB32, &pa, 0);

    // 创建一个同尺寸的 ARGB32 Pixmap 作为源
    Pixmap src_pm = XCreatePixmap(dpy, win, 320, 240, 32);
    Picture src = XRenderCreatePictureFromPixmap(dpy, src_pm, PictStandardARGB32, &pa, 0);

    // 清源为不透明红(示例用,实际可上传位图)
    GC gc = XCreateGC(dpy, src_pm, 0, NULL);
    XSetForeground(dpy, gc, 0xFFFF0000);  // ARGB: 不透明红
    XFillRectangle(dpy, src_pm, gc, 0, 0, 320, 240);
    XFreeGC(dpy, gc);

    // 将源合成到目标(PictOpOver 实现 alpha 混合)
    XRenderComposite(dpy, PictOpOver, src, None, dst,
                    0, 0, 0, 0, 0, 0, 320, 240);

    XFlush(dpy);

    // 资源释放
    XRenderFreePicture(dpy, src);
    XRenderFreePicture(dpy, dst);
    XFreePixmap(dpy, src_pm);
    XCloseDisplay(dpy);
    return 0;
}

四 性能优化与注意事项

五 故障排查与进阶

0
看了该问题的人还看了