Xscreensaver代码给出BadMatch错误

时间:2013-05-30 02:42:08

标签: c cairo xlib screensaver xorg

我已经能够将Xscreensaver破解到我想要的外观(非常感谢luser droog的帮助)。我添加了一些开罗代码,因为单独使用Xlib很难实现我想要的东西。由于这对我来说只是一个黑客,我不打算分发它。

无论如何,当我在一个窗口中预览Fuzzyflakes它看起来很好,但是当我全屏预览时(就像任何好的屏幕保护程序一样)它给了我这个错误:

X error in fuzzyflakes:
X Error of failed request: BadMatch (invalid parameter attribute)
  Major Optcode of failed request: 139 (RENDER)
  Minor optcode of failed request: 4 (RenderCreatePicture)
  Serial number of failed request: 528
  Current serial number in output stream: 1654

以下是一些进一步的信息。我正在使用Linux Mint 14,164位版本。我正在使用nVidia专有驱动程序,版本304.88。我不得不破解xscreensaver配置脚本生成的Makefile。我将Makefile的第800行更改为:

fuzzyflakes:    fuzzyflakes.o   $(HACK_OBJS) 
    $(CC_HACK) `pkg-config --cflags cairo` -g -o $@ $@.o    $(HACK_OBJS) $(HACK_LIBS) -lcairo -lm

对于完整的源代码,您可以查看here

1 个答案:

答案 0 :(得分:3)

从快速看看,您似乎正在向cairo提供无效信息:


flake->Fluff.gradient_image_background =
               cairo_xlib_surface_create(flake->dpy,
               flake->DB.b, DefaultVisual(flake->dpy, 0),
               flake->XGWA.width, flake->XGWA.height);

这声称可绘制的DB.p使用显示器的第一个屏幕的默认视觉效果。但是,实际窗口似乎是fuzzyflakes_init()的参数,因此可以使用另一个视觉。

从另一个快速查看,请尝试将DefaultVisual(flake->dpy, 0)替换为flake->XGWA.visual