Есть задачка, не знаю как решить:
Есть моя программа, которая открывает Display, в нем создает Window и gc. Затем, в цикле в окне происходит рисование примитивов всяких типа XDrawLine и подобных им. Затем, когда один кадр отрисовался - мне надо полученную картинку в виде битмапа сохранить в файл. Для этого я делаю XGetImage и его сохраняю. Дальше рендерится следующий кадр, и так по кругу. Все работает, но очень медленно. Рисование примитивов занимает сотню микросекунд (окно небольшое и рисования не много), а вот получение картинки с X-сервера функцией XGetImage занимает почти миллисекунду. Под виндой на этой же машине такое-же рисование с получением памяти занимает примерно в 10 раз меньше времени.
XSHMGetImage проблему особо не решает, т.к. продолжает копировать память через pipe.
И вот задача, как бы обойти этот XGetImage? Мне по факту не нужно окно, рисование в некие области памяти вполне подойдет, лишь бы был быстрый перевод того что находится в Window и gc в Image/битмап. Но при текущей реализации окно по факту есть, и отрисовка в него тоже.
Видится мне такое решение - так как XDrawLine по сути выполняется на X-сервере, и так или иначе память кадра будет в любом случае формироваться именно там, а дальше получить ее можно только через XGetImage/XSHMGetImage - то исключить впринципе Xorg из процесса, написав на все функции рисования примтивов - обертки, которые по факту меняют бмп, которая затем идет в файл. Но это много кода и довольно нетривиальная задача.
Может есть способ проще?