我的节目真的很慢。分析显示瓶颈在XGetImage中(不,我无法摆脱在循环中调用XGetImage )。在阅读时,推荐的解决方案是调用XShmGetImage,但是文档确实很糟糕。
我正在寻找关于如何调用XShmCreateImage、XShmGetImage和XShmSetImage的非常简单的示例代码。
深度分析肯定会使XGetImage成为根瓶颈,而不是XPutImage (是的,我知道调用XFlush以使分析准确),因此我可能会得出结论,对内存分配器的隐式调用实际上是缓慢的,但是除了XShmGetImage之外,没有一个XGetImage的变体允许我传递预先分配的XImage。无论如何,Shm函数的使用可能会有更大的改进。
发布于 2017-04-19 15:51:54
麻省理工学院-SHM文档不烂。它根本不存在。
以下是一个有用的咒语:
Display *d;
int s;
XImage *image;
XShmSegmentInfo shminfo;
d = XOpenDisplay(NULL);
s = DefaultScreen(d);
image = XShmCreateImage(d,
DefaultVisual(d,0), // Use a correct visual. Omitted for brevity
24, // Determine correct depth from the visual. Omitted for brevity
ZPixmap, NULL, &shminfo, 100, 100);
shminfo.shmid = shmget(IPC_PRIVATE,
image->bytes_per_line * image->height,
IPC_CREAT|0777);
shminfo.shmaddr = image->data = shmat(shminfo.shmid, 0, 0);
shminfo.readOnly = False;
XShmAttach(d, &shminfo);
XShmGetImage(d,
RootWindow(d,0),
image,
50,
50,
AllPlanes);
https://stackoverflow.com/questions/43442675
复制相似问题