Я хочу сделать текстурный атлас с 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. Любая идея, что не так?