我的节目真的很慢。分析显示瓶颈在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);