hultquis@orville.nas.nasa.gov (Jeff P.M. Hultquist) (10/27/89)
I am using a Personal Iris running IRIX 3.1 ... For making screen-dumps, I have been using the program 'scrsave' (which is in '/usr/people/4Dgifts/...'). This works fine for windows which are in colormap mode, but it doesn't grab the proper color-components for windows which are using RGBmode. The source for 'scrsave.c' contains a call to 'gl_readscreen', which appears to be intended to handle pixels regardless of their display mode. This function is not listed in the man pages; however, it *is* in '/usr/lib/libgl.a'. So ... what gives? * Can I find the displayed color of a pixel regardless of its display mode? * If so, how? * If gl_readscreen is the right thing to be using for this, why is my copy broken? Solutions (or even hints) will be warmly welcomed; send mail to me and I will summarize. -- Jeff Hultquist hultquis@nas.nasa.gov (415) 694-4970
thant@horus.sgi.com (Thant Tessman) (10/31/89)
In article <3599@amelia.nas.nasa.gov>, hultquis@orville.nas.nasa.gov (Jeff P.M. Hultquist) writes: > I am using a Personal Iris running IRIX 3.1 ... > > For making screen-dumps, I have been using the program 'scrsave' > (which is in '/usr/people/4Dgifts/...'). This works fine for > windows which are in colormap mode, but it doesn't grab the proper > color-components for windows which are using RGBmode. The source > for 'scrsave.c' contains a call to 'gl_readscreen', which appears > to be intended to handle pixels regardless of their display mode. > This function is not listed in the man pages; however, it *is* in > '/usr/lib/libgl.a'. > > So ... what gives? > > * Can I find the displayed color of a pixel regardless > of its display mode? > * If so, how? > * If gl_readscreen is the right thing to be using for this, > why is my copy broken? I don't know a lot about this stuff, but I think that the reason the source to gl_readscreen isn't available is because it does some hardware dependent things to determine the graphics mode of the pixels. I have no idea why your copy doesn't work. Does the scrsave in /usr/sbin work? (Stuff beginning with 'gl_' is not guaranteed to work from platform to platform or even from release to release, and is not recommended for use.) Here's the 3.2 source for scrsave (from 4Dgifts): (Is it different?) thant ----------------------------------------------------------------------------- /* * scrsave - * Save a part of the screen in an image file. * * Paul Haeberli - 1988 */ #include "gl.h" #include <stdio.h> #include "port.h" #include "image.h" char rbuf[2048]; char gbuf[2048]; char bbuf[2048]; short rs[2048]; short gs[2048]; short bs[2048]; main(argc,argv) int argc; char **argv; { int i, y, gotfirst; int x1, x2, y1, y2; if(argc!=2 && argc!=6) { printf("usage: scrsave outimage [x1 x2 y1 y2]\n"); exit(1); } if(argc==6) { x1 = atoi(argv[2]); x2 = atoi(argv[3]); y1 = atoi(argv[4]); y2 = atoi(argv[5]); } else { x1 = 0; x2 = XMAXSCREEN; y1 = 0; y2 = YMAXSCREEN; } foreground(); noport(); winopen("scrsave"); savescreen(argv[1],x1,x2,y1,y2); } savescreen(name,x1,x2,y1,y2) char *name; int x1, x2, y1, y2; { IMAGE *oimage; int xsize, ysize; int xorg, yorg; int temp, y, i; int pos, togo, n; xorg = MIN(x1,x2); yorg = MIN(y1,y2); if(xorg<0) xorg = 0; if(yorg<0) yorg = 0; xsize = ABS(x2-x1); ysize = ABS(y2-y1); if((xorg+xsize)>XMAXSCREEN) xsize = XMAXSCREEN-xorg; if((yorg+ysize)>YMAXSCREEN) ysize = YMAXSCREEN-yorg; xsize++; ysize++; oimage = iopen(name,"w",RLE(1),3,xsize,ysize,3); wmplanes(); screenspace(); for(y=0; y<ysize; y++) { #define READSCREENBROKEN #ifdef READSCREENBROKEN togo = xsize; pos = 0; while(togo) { n = togo; if(n>256) n = 256; cmov2i(xorg+pos,yorg+y); gl_readscreen(n,rbuf+pos,gbuf+pos,bbuf+pos); pos += n; togo -= n; } #else cmov2i(xorg,yorg+y); gl_readscreen(xsize,rbuf,gbuf,bbuf); #endif ctos(rbuf,rs,xsize); ctos(gbuf,gs,xsize); ctos(bbuf,bs,xsize); putrow(oimage,rs,y,0); putrow(oimage,gs,y,1); putrow(oimage,bs,y,2); } iclose(oimage); } -- There are 336 dimples on the standard golf ball.