Hello,
i want to change the colormap-entries of an 8-bpp PseudoColor
mode. Unfortunately it does not work.
I set up a collormap where every color is black and another one, where
every color is yellow. After setting the video mode and clearing it
with zeros, I install the black colormap, wait 3 seconds and then I
install the yellow colormap and wait 3 seconds to see the result.
I thought that I would then see a black screen and after 3 seconds I
would see a yellow screen. But all I see is the black screen so the
yellow colormap seems not to be installed.
I have appended my source-code and would appreciate your help.
Regards, Arne Caspari
-----//snip//------------
#include <stdlib.h>
#include <stdio.h>
#include <X11/Xos.h>
#include <X11/Intrinsic.h>
#include <X11/Shell.h>
#include <X11/StringDefs.h>
#include <X11/Xatom.h>
#include <X11/extensions/xf86dga.h>
int main(){
Display *dis;
XDGAMode *mode;
XDGADevice *device;
Colormap black_cmap;
Colormap yellow_cmap;
int selectedMode=-1;
int num;
int i, j;
if (geteuid()){
fprintf(stderr, "Must be root!\n");
exit(1);
}
if ( (dis=XOpenDisplay(NULL))==NULL){
fprintf(stderr, "Cannot connect to X server %s\n", XDisplayName(NULL));
exit(-1);
}
mode=XDGAQueryModes(dis, DefaultScreen(dis), &num);
for (i=0; i<num; i++){
printf ("----------------------------\n");
printf ("Mode: %i\n", mode[i].num);
printf ("%i x %i x %i\n",
mode[i].viewportWidth,
mode[i].viewportHeight,
mode[i].depth);
switch (mode[i].visualClass){
case PseudoColor:
printf("PseudoColor\n");
break;
default:
break;
}
if (mode[i].viewportWidth==800 &&
mode[i].viewportHeight==600 &&
mode[i].depth==8){
selectedMode=mode[i].num;
}
}
printf ("----------------------------\n");
XFree(mode);
printf ("Selected mode: %i\n", selectedMode);
printf ("Bpp: %i\n",DisplayPlanes(dis, DefaultScreen(dis)));
if (!XDGAOpenFramebuffer(dis, DefaultScreen(dis))){
fprintf(stderr, "Failed to map framebuffer-memory!\n");
exit(2);
}
if ( (device=XDGASetMode(dis, DefaultScreen(dis), selectedMode))==NULL){
fprintf(stderr, "Cannot set Mode!\n");
exit(2);
}
XDGASetViewport(dis, DefaultScreen(dis), 0, 0, XDGAFlipRetrace);
black_cmap=XDGACreateColormap(dis, DefaultScreen(dis), device, AllocAll);
for (i=0; i<256; i++){
XColor xcol;
xcol.pixel=i;
xcol.red=0;
xcol.green=0;
xcol.blue=0;
xcol.flags=DoBlue|DoRed|DoGreen;
XStoreColor(dis, black_cmap, &xcol);
}
yellow_cmap=XDGACreateColormap(dis, DefaultScreen(dis), device, AllocAll);
for (i=0; i<256; i++){
XColor xcol;
xcol.pixel=i;
xcol.red=255*255;
xcol.green=255*255;
xcol.blue=0;
xcol.flags=DoBlue|DoRed|DoGreen;
XStoreColor(dis, yellow_cmap, &xcol);
}
//Fill viewport with 0s
memset(device->data, (unsigned char)0,
device->mode.viewportWidth*device->mode.viewportHeight);
XDGAInstallColormap(dis, DefaultScreen(dis), black_cmap);
sleep(3);
XDGAInstallColormap(dis, DefaultScreen(dis), yellow_cmap);
sleep(3);
XDGACloseFramebuffer(dis, DefaultScreen(dis));
XDGASetMode(dis, DefaultScreen(dis), 0);
exit(0);
}
-------------------------//snip//-----------------------------------
_______________________________________________
Xpert mailing list
[EMAIL PROTECTED]
http://XFree86.Org/mailman/listinfo/xpert