0

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

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

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

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 并发现只要 pixmap 的深度为 32 XCopyArea 工作正常,当深度不是 32 时它会失败。知道有什么问题吗?

4

0 回答 0