在 Linux 下使用 XRender,通常是指使用 X Window System 的 XRender 扩展 来进行 2D 图形渲染(抗锯齿、渐变、透明度、合成等)。下面从概念、检查、开发、调试几个方面系统说明。
XRender 是 X11 的一个扩展,用于增强 2D 渲染能力,支持:
它常用于:
xdpyinfo | grep Render
如果看到:
RENDER
说明 XRender 已启用。
xprop -root | grep RENDER
或使用:
X -version
glxinfo | grep -i render
(虽然 glxinfo 偏 OpenGL,但可辅助判断渲染路径)
sudo apt install libx11-dev libxrender-dev
sudo yum install libX11-devel libXrender-devel
#include <X11/Xlib.h>
#include <X11/extensions/Xrender.h>
int main() {
Display *dpy = XOpenDisplay(NULL);
Window root = DefaultRootWindow(dpy);
Window win = XCreateSimpleWindow(dpy, root, 100, 100, 400, 300, 1,
0, 0xffffff);
XMapWindow(dpy, win);
XRenderPictFormat *fmt =
XRenderFindVisualFormat(dpy, DefaultVisual(dpy, 0));
Picture picture = XRenderCreatePicture(dpy, win, fmt, 0, NULL);
XRenderColor color;
color.red = 0xffff;
color.green = 0;
color.blue = 0;
color.alpha = 0x7fff; // 半透明
XRenderFillRectangle(dpy, PictOpOver, picture, &color,
50, 50, 200, 150);
XFlush(dpy);
sleep(5);
XCloseDisplay(dpy);
return 0;
}
gcc xrender_demo.c -o xrender_demo -lX11 -lXrender
#include <X11/Xft/Xft.h>
cairo_xlib_surface_create()
Cairo 会自动使用 XRender(如果可用)
x11perf -render
xtrace
或:
strace -e trace=ioctl,read,write ./your_app
不冲突,但:
❌ 不能
Wayland 不使用 X11 扩展,包括 XRender
替代方案:
✅ 适合:
❌ 不适合:
如果你愿意,我可以:
只要告诉我你的使用场景即可。