Linux 系统中 XRender 的使用技巧
一 环境准备与能力检测
二 高效渲染与常见操作
三 性能优化与加速
四 兼容性与故障排查
五 快速示例 创建 Picture 并执行合成
#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 scr = DefaultScreen(dpy);
Window root = RootWindow(dpy, scr);
// 检查扩展
int major_opcode, first_event, first_error;
if (!XQueryExtension(dpy, "RENDER", &major_opcode, &first_event, &first_error)) {
fprintf(stderr, "XRender extension not available\n");
XCloseDisplay(dpy);
return 1;
}
// 创建源/目标 Picture(示例用根窗口,实际可替换为 Pixmap)
Picture src = XRenderCreatePicture(dpy, root, PictStandardRootVisual, 0, NULL);
Picture dst = XRenderCreatePicture(dpy, root, PictStandardRootVisual, 0, NULL);
if (!src || !dst) {
fprintf(stderr, "Failed to create Picture\n");
goto cleanup;
}
// 执行一次覆盖合成
Status ok = XRenderComposite(dpy, PictOpOver, src, None, dst,
0, 0, 0, 0, 0, 0, 800, 600);
if (!ok) {
fprintf(stderr, "XRenderComposite failed\n");
}
cleanup:
if (src) XRenderFreePicture(dpy, src);
if (dst) XRenderFreePicture(dpy, dst);
XCloseDisplay(dpy);
return 0;
}