It's likely that you're not handling the padding correctly. Is (ximage->bytes_per_line == windowWidth * windowDepthBytes) ? In general, I like to create the XImage first and then allocate the data later. That saves you from having to do the work of finding out what the padding is supposed to be. That is, pass NULL for the data field in XShmCreateImage. Then shmget with (ximage->height * ximage->bytes_per_line), then fill in ximage->data with the value returned by shmat. Eg: ximage = XShmCreateImage(..., &shminfo); shminfo.shmid = shmget (.., ximage->height * ximage->bytes_per_line, ...); shminfo.shmaddr = ximage->data = shmat(shminfo.shmid, 0, 0); shminfo.readOnly = False; XShmAttach (display, &shminfo); So the pitch you should use is ximage->bytes_per_line. You can get that independently by looking up pixmap formats, but it's easier to just have XShmCreateImage fill it in for you. Mark. On Mon, 3 Nov 2003, Callum Prentice wrote: > > 1) Does your X-server have SHM support? "MIT-SHM" should show up in > > the list of extensions reported by xdpyinfo. > > Yep - that extension is listed when i run xdpyinfo. > > > 2) Does your operating system have SHM support? This sort of thing > > is often disabled for security reasons. > > i'm not sure how to test this - i'm very much a x/unix novice - but after adding printf's to > another library i've been looking at (SDL), it seems that it is - SDL is certainly calling > XShmPutImage () successfully. > > > 3) Programming errors on your part? BadAccess is generated if: > > Very likely. > > > a) the server doesn't know about the segment (you called > > XShmAttach on it didn't you?). > > Yep - I do that. > > > b) The size is bad, that is, the segment is too small to > > contain the source you specified (or the XImage is > > improperly initialized). > > I suspect that it is some kind of unitialized structure problem. > > I chopped the return value tests and the error handler out of my code for clarity and tacked > it on the end of this message - might be something obvious. > > Thanks. > > cp > > > -------- snip -------- > shmInfo.shmid = shmget ( IPC_PRIVATE, windowWidth * windowDepthBytes * windowHeight, IPC_CREAT > | 0777 ); > shmInfo.shmaddr = (char *)shmat ( shmInfo.shmid, 0, 0); > shminfo.readOnly = False; > > XShmAttach ( display, &shmInfo ); > > XSync ( display, True ); > > shmctl ( shmInfo.shmid, IPC_RMID, NULL ); > > pixels = shmInfo.shmaddr; > > ximage = XShmCreateImage ( display, DefaultVisual ( display, screen ), windowDepth, ZPixmap, > shmInfo.shmaddr, &shmInfo, windowWidth, windowHeight ); > > XShmPutImage ( display, window, DefaultGC ( display, screen ), ximage, 0, 0, 0, 0, > windowWidth, windowHeight, False ); > > ---------------------- > > > > > > > > i'm attempting to put together a simple test that creates a window, allocates a buffer in > > > memory and using an XImage and XShmPutImage () displays it on my screen. > > > > > > i have a tiny piece of code that (as far as i know) does all the right things - it creates > > the > > > window but when i try to display the contents of my buffer via an XImage i get a message > > like > > > this: > > > > > > X Error of failed request: BadAccess (attempt to access private resource denied) > > > Major opcode of failed request: 144 (MIT-SHM) > > > Minor opcode of failed request: 3 (X_ShmPutImage) > > > > > > i've seen this type of problem described in the newsgroups but there don't seem to be any > > > answers posted. > > > > > > i check the return from all my previous calls and they're fine. > > > > > > i'm using XFree86 version 4.3.0 (27 feb 2003), X Protocol version 11, rev 0, rel 6.6 and > > my OS > > > is NetBSD/i386 1.6 [elf]. > _______________________________________________ XFree86 mailing list XFree86@xxxxxxxxxxx http://XFree86.Org/mailman/listinfo/xfree86