mirror of https://github.com/tsoding/boomer
(#26) Experimental MIT-SHM support
parent
99a0048332
commit
09e1b5c7e3
@ -0,0 +1,67 @@
|
|||||||
|
import x11/xlib # of course
|
||||||
|
import x11/xutil
|
||||||
|
import x11/xshm
|
||||||
|
import x11/x
|
||||||
|
|
||||||
|
import syscall
|
||||||
|
import image
|
||||||
|
|
||||||
|
const
|
||||||
|
IPC_PRIVATE = 0
|
||||||
|
IPC_CREAT = 512
|
||||||
|
IPC_RMID = 0
|
||||||
|
|
||||||
|
block:
|
||||||
|
let display = XOpenDisplay(nil)
|
||||||
|
defer:
|
||||||
|
discard display.XCloseDisplay
|
||||||
|
|
||||||
|
var major, minor: cint
|
||||||
|
var pixmaps: TBool
|
||||||
|
discard XShmQueryVersion(display, addr major, addr minor, addr pixmaps)
|
||||||
|
echo "SHM Version ", major, ".", minor, ", Pixmaps supported: ", pixmaps
|
||||||
|
|
||||||
|
var vinfo: TXVisualInfo
|
||||||
|
discard XMatchVisualInfo(
|
||||||
|
display,
|
||||||
|
XDefaultScreen(display),
|
||||||
|
24,
|
||||||
|
TrueColor,
|
||||||
|
addr vinfo)
|
||||||
|
|
||||||
|
var attributes: TXWindowAttributes
|
||||||
|
discard XGetWindowAttributes(
|
||||||
|
display,
|
||||||
|
DefaultRootWindow(display),
|
||||||
|
addr attributes)
|
||||||
|
|
||||||
|
var shminfo: TXShmSegmentInfo
|
||||||
|
var image = XShmCreateImage(
|
||||||
|
display, vinfo.visual, 24.cuint, ZPixmap, nil,
|
||||||
|
addr shminfo,
|
||||||
|
attributes.width.cuint,
|
||||||
|
attributes.height.cuint)
|
||||||
|
|
||||||
|
shminfo.shmid = syscall(SHMGET,
|
||||||
|
IPC_PRIVATE,
|
||||||
|
image.bytes_per_line * image.height,
|
||||||
|
1023).cint
|
||||||
|
echo "shminfo.shmid = ", shminfo.shmid
|
||||||
|
|
||||||
|
shminfo.shmaddr = cast[cstring](syscall(SHMAT, shminfo.shmid, 0, 0))
|
||||||
|
image.data = shminfo.shmaddr
|
||||||
|
shminfo.readOnly = 0
|
||||||
|
|
||||||
|
let err = XShmAttach(display, addr shminfo)
|
||||||
|
echo "Status of XShmAttach call = ", err
|
||||||
|
discard XSync(display, 0)
|
||||||
|
|
||||||
|
discard XShmGetImage(display, DefaultRootWindow(display), image, 0.cint, 0.cint, AllPlanes);
|
||||||
|
discard XSync(display, 0);
|
||||||
|
|
||||||
|
image.saveToPPM("nim-shmack.ppm")
|
||||||
|
|
||||||
|
discard XShmDetach(display, addr shminfo)
|
||||||
|
discard XDestroyImage(image)
|
||||||
|
discard syscall(SHMDT, shminfo.shmaddr)
|
||||||
|
discard syscall(SHMCTL, shminfo.shmid, IPC_RMID, 0)
|
Loading…
Reference in New Issue