XCopyArea无法使用X11位图(深度为1的像素图)

时间:2019-02-20 08:16:55

标签: c++ x11 xlib

我想在X11中使用Xlib制作纹理图集。我通过从图像文件中加载像素数据创建了一个像素图,该图像文件包含将用作纹理的所有精灵。我可以将纹理地图集像素图的一部分(单一精神)成功复制到另一个作为屏幕外可绘制对象创建的像素图。

问题来了。我希望将纹理以部分透明的方式复制到目标像素图,以便每个精神后面都不会出现背景矩形。为此,我为整个纹理图集图像(500 * 500)创建了一个深度等于1的像素图。

pMaskData是深度为1的像素数据。

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

然后我通过首先创建一个深度为1的像素图,为单个精灵创建一个clip_mask像素图,该图片的大小为16 * 16。

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,发现只要pixmap的深度为32,XCopyArea就可以正常工作,但当深度不为32时,它会失败。你知道哪里出了问题吗?

0 个答案:

没有答案