[Xprint] Re: XCreateColormap() for Pseudocolor 15bit fails
Roland Mainz
roland.mainz at nrubsig.org
Fri Apr 8 16:45:33 PDT 2005
Roland Mainz wrote:
> > does anyone know under which conditions XCreateColormap() can fail? I
> > have selected a Pseudocolor 15bit visual but calling XCreateColormap()
> > fails all the time:
> > X Error of failed request: BadAlloc (insufficient resources for operation)
> > Major opcode of failed request: 78 (X_CreateColormap)
> > Serial number of failed request: 39
> > Current serial number in output stream: 40
> >
> > Breakpoint 1, 0x40178ab6 in exit () from /lib/libc.so.6
> > (gdb) where
> > #0 0x40178ab6 in exit () from /lib/libc.so.6
> > #1 0x40070d10 in _XDefaultError (dpy=0x8052838, event=0xbffff340) at
> > XlibInt.c:2831
> > #2 0x40070e82 in _XError (dpy=0x8052838, rep=0xbffff430) at XlibInt.c:2883
> > #3 0x4006edde in _XReply (dpy=0x8052838, rep=0xbffff430, extra=0,
> > discard=1) at XlibInt.c:1812
> > #4 0x40068762 in XSync (dpy=0x8052838, discard=0) at Sync.c:45
> > #5 0x40068825 in _XSyncFunction (dpy=0x1) at Synchro.c:34
> > #6 0x40047725 in XCreateColormap (dpy=0x8052838, w=61,
> > visual=0x8057d38, alloc=0) at CrCmap.c:51
> >
> > Any ideas, comments, opinions on what I am doing wrong?
>
> AFAIK you're doing nothing wrong. The problem is that the core X
> protocol defines |ColormapEntries| as |CARD16| (which is AFAIK a |signed
> short|). There are two solutions:
> 1. Create a extension (XC-BIGCOLORMAP) which hooks into libX11 and
> allows larger colormaps (e.g. make the field |CARD32| and adjust the
> matching function calls).
Attached patch solves the problem (for 15bit, anything deeper needs
something like XC-BIGCOLORMAP), however it will likely break the Xfree86
Module ABI (which leads to the debate whether we should break the ABI
for 7.0) ... ;-(
----
Bye,
Roland
--
__ . . __
(o.\ \/ /.o) roland.mainz at nrubsig.org
\__\/\/__/ MPEG specialist, C&&JAVA&&Sun&&Unix programmer
/O /==\ O\ TEL +49 641 7950090
(;O/ \/ \O;)
-------------- next part --------------
Index: xc/programs/Xserver/include/scrnintstr.h
===================================================================
RCS file: /cvs/xorg/xc/programs/Xserver/include/scrnintstr.h,v
retrieving revision 1.4
diff -u -2 -0 -r1.4 scrnintstr.h
--- xc/programs/Xserver/include/scrnintstr.h 7 Aug 2004 00:58:21 -0000 1.4
+++ xc/programs/Xserver/include/scrnintstr.h 8 Apr 2005 23:22:06 -0000
@@ -52,41 +52,41 @@
#include "screenint.h"
#include "regionstr.h"
#include "bstore.h"
#include "colormap.h"
#include "cursor.h"
#include "validate.h"
#include "X11/Xproto.h"
#include "dix.h"
typedef struct _PixmapFormat {
unsigned char depth;
unsigned char bitsPerPixel;
unsigned char scanlinePad;
} PixmapFormatRec;
typedef struct _Visual {
VisualID vid;
short class;
short bitsPerRGBValue;
- short ColormapEntries;
+ unsigned long ColormapEntries;
short nplanes;/* = log2 (ColormapEntries). This does not
* imply that the screen has this many planes.
* it may have more or fewer */
unsigned long redMask, greenMask, blueMask;
int offsetRed, offsetGreen, offsetBlue;
} VisualRec;
typedef struct _Depth {
unsigned char depth;
short numVids;
VisualID *vids; /* block of visual ids for this depth */
} DepthRec;
/*
* There is a typedef for each screen function pointer so that code that
* needs to declare a screen function pointer (e.g. in a screen private
* or as a local variable) can easily do so and retain full type checking.
*/
More information about the xorg-arch
mailing list