Some more wrongness. just for good measure:
Spoiler:
In essence you are talking about "Dirty Rect" on a per pixel approach if I'm not mistaken. ( probably am ) But assuming the entire screen is dirty?
I'm not 100% what the hell I am talking about
Are you saying some sort of backbuffer logic pass to "Glean" what state the pixel might be in?
or is it an assumption that simply passing through the various pixel states (as said in OP) will eventually end up where you want to be (remember Gray is SLOW)
is that it in a nutshell?
AFAICT GM still has to pass a call to eips to get stuff to finally splat to the screen in a last pass, but again I could be wrong
(just assume the shorthand declarations are enums, structs or typedefs and you can read GM's code with not too much hassle)
PHP Code:
if (GMLIB_INIT==op) { teu=getmsec(); fdFB=open("/dev/fb0",O_RDWR);
ioctl(fdFB,FBIOGET_VSCREENINFO,&screeninfo);
ppb=8/screeninfo.bits_per_pixel; fs=screeninfo.xres_virtual/ppb;
VY=screeninfo.yres_virtual; MX=screeninfo.xres; MY=screeninfo.yres;
ua.x2=MX; ua.y2=MY; ur.update_region.width=MX; ur.update_region.height=MY;
fb0=(u8 *)mmap(0,MY*fs,PROT_READ|PROT_WRITE,MAP_SHARED,fdFB,0); // map fb0
if (VY>MY) { eupcode=EU50; eupdata=&ur; ur.update_mode=0;
if (ioctl(fdFB,eupcode,eupdata)<0) { eupcode=EU51; eupdata=&ur51; }
} else { eupcode=EU3; eupdata=&ua; }
system("eips -f -c;eips -c"); sleep(1);
} else if (GMLIB_UPDATE==op) {
if (ioctl(fdFB,eupcode,eupdata)<0) system("eips ''"); // 5.1.0 fallback
} else if (GMLIB_VSYNC==op) { while (teu>getmsec()) usleep(1000); // fb0 busy
} else if (GMLIB_CLOSE==op) { gmlib(GMLIB_UPDATE); sleep(1); // last screen
system("eips -f -c;eips -c"); munmap(fb0,MY*fs); close(fdFB);
So there will probably be a bit of that in our future too...
Again HTH