Ошибка XCopyArea для растрового изображения X11 (Pixmap с глубиной 1) - PullRequest
0 голосов
/ 20 февраля 2019

Я хочу сделать текстурный атлас с Xlib в X11.Я создал растровое изображение, загрузив пиксельные данные из файла изображения, который содержит все спрайты, которые будут использоваться в качестве текстуры.Я могу скопировать часть растрового растрового изображения атласа текстуры (единый дух) в другое растровое изображение, созданное как удачно отображаемое за пределами экрана.

Здесь возникает проблема.Я хочу, чтобы текстура копировалась в целевое растровое изображение с частичной прозрачностью, чтобы после каждого объекта не было фонового прямоугольника.Для этого я создал растровое изображение с глубиной, равной 1, для всего изображения текстурного атласа (500 * 500).

pMaskData - это данные пикселей с глубиной 1.

Pixmap texAtlasMask = XCreatePixmapFromBitmapData(kTheDisplay, kRootWindow,
        (char*)pMaskData, 500, 500, 1, 0, 1);

Затем я создаю растровое изображение clip_mask для одного спрайта, размер спрайта вначале 16 * 16создание растрового изображения глубиной 1:

Pixmap clipMask = XCreatePixmap(kTheDisplay, kRootWindow, 16, 16, 1); 

, а затем используйте следующий вызов для заполнения содержимого clipMask:

// Error occurs here 
// reqest code: 62:X_CopyArea               
// Error code: 8:BadMatch (invalid parameter attributes)
 XCopyArea(kTheDisplay, texAtlasMask, clipMask, m_gc, 0, 0,16, 16, 0, 0);

После этого:

XSetClipMask(kTheDisplay, m_gc, clipMask);

// Copy source spirit to backing store pixmap
XSetClipOrigin(kTheDisplay, m_gc, destX, destY);
XCopyArea(kTheDisplay, m_symAtlas, m_backStore, m_gc, srcLeft, srcTop,
          width, height, destX, destY);

m_symAtlas - это растровое растровое изображение атласа, m_backStore - растровое растровое изображение, к которому мы рисуем.

Как указано выше, ошибка возникает при первом вызове XCopyArea.Я попробовал XCopyPlane, но ничего не изменилось.

И я поэкспериментировал с XCopyArea и обнаружил, что, если глубина растрового изображения равна 32, XCopyArea работает нормально, он не работает, если глубина не равна 32. Любая идея, что не так?

...