История изменений
Исправление Zubok, (текущая версия) :
Только я не понял, это аналог XShmPutImage или Shared Memory Pixmaps?
Это XShmPutImage. Для Pixmap не нужно Put и Get. Он же уже Pixmap (drawable).
И чем плох этот Shared Memory Pixmaps?
Они плохи тем, что делает невозможной миграцию Pixmap в память GPU. Они из-за shm «прибиты» к системной памяти. Соответственно, затрудняется аппаратное ускорение.
https://www.x.org/releases/X11R7.7/doc/xextproto/shm.html
Shared memory pixmaps can only be supported when the X server can use regular virtual memory for pixmap data; if the pixmaps are stored in some magic graphics hardware, your application will not be able to share them with the server.
Но зато в Shared Memory Pixmaps можно рисовать иксовыми функциями рисования и тут же получать результат напрямую в приложение попискельно, тут же по месту обрабатывать и забрасывать назад без посредников. В XImage нельзя иксовыми функциями рисовать.
В некоторых драйверах по умолчанию эти Shared Pixmaps отключены и их надо опцией включать. Просто раньше некоторые старые приложения, которые, возможно, еще существуют, могли использовать этот механизм (я знаю, что в Java 2D можно включить этот механизм, например). Для них и оставили опцию, если они не смогут работать:
http://us.download.nvidia.com/XFree86/Linux-x86/325.15/README/xconfigoptions....
Option «AllowSHMPixmaps» «boolean»
This option controls whether applications can use the MIT-SHM X extension to create pixmaps whose contents are shared between the X server and the client. These pixmaps prevent the NVIDIA driver from performing a number of optimizations and degrade performance in many circumstances.
Disabling this option disables only shared memory pixmaps. Applications can still use the MIT-SHM extension to transfer data to the X server through shared memory using XShmPutImage.
Default: off (shared memory pixmaps are not allowed).
Но вроде не у всех это отключено.
Исходная версия Zubok, :
Только я не понял, это аналог XShmPutImage или Shared Memory Pixmaps?
Это XShmPutImage. Для Pixmap не нужно Put и Get. Он же уже Pixmap (drawable).
И чем плох этот Shared Memory Pixmaps?
Они плохи тем, что делает невозможной миграцию Pixmap в память GPU. Они из-за shm «прибиты» к системной памяти. Соответственно, затрудняется аппаратное ускорение.
https://www.x.org/releases/X11R7.7/doc/xextproto/shm.html
Shared memory pixmaps can only be supported when the X server can use regular virtual memory for pixmap data; if the pixmaps are stored in some magic graphics hardware, your application will not be able to share them with the server.
Но зато в Shared Memory Pixmaps можно рисовать иксовыми функциями рисования и тут же получать результат напрямую в приложение попискельно, тут же по месту обрабатывать и забрасывать назад. В XImage нельзя иксовыми функциями рисовать.
В некоторых драйверах по умолчанию эти Shared Pixmaps отключены и их надо опцией включать. Просто раньше некоторые старые приложения, которые, возможно, еще существуют, могли использовать этот механизм (я знаю, что в Java 2D можно включить этот механизм, например). Для них и оставили опцию, если они не смогут работать:
http://us.download.nvidia.com/XFree86/Linux-x86/325.15/README/xconfigoptions....
Option «AllowSHMPixmaps» «boolean»
This option controls whether applications can use the MIT-SHM X extension to create pixmaps whose contents are shared between the X server and the client. These pixmaps prevent the NVIDIA driver from performing a number of optimizations and degrade performance in many circumstances.
Disabling this option disables only shared memory pixmaps. Applications can still use the MIT-SHM extension to transfer data to the X server through shared memory using XShmPutImage.
Default: off (shared memory pixmaps are not allowed).
Но вроде не у всех это отключено.