1 ========================== 2 Understanding fbdev's cmap 3 ========================== 4 5 These notes explain how X's dix layer uses fbd 6 7 - example of relevant structures in fbdev as 8 9 struct fb_var_screeninfo { 10 .bits_per_pixel = 8, 11 .grayscale = 1, 12 .red = { 4, 3, 0 }, 13 .green = { 0, 0, 0 }, 14 .blue = { 0, 0, 0 }, 15 } 16 struct fb_fix_screeninfo { 17 .visual = FB_VISUAL_STATIC_P 18 } 19 for (i = 0; i < 8; i++) 20 info->cmap.red[i] = (((2*i)+1)*(0xFFFF 21 memcpy(info->cmap.green, info->cmap.red, s 22 memcpy(info->cmap.blue, info->cmap.red, si 23 24 - X11 apps do something like the following wh 25 26 for (i=0; i < 8; i++) { 27 char colorspec[64]; 28 memset(colorspec,0,64); 29 sprintf(colorspec, "rgb:%x/%x/%x", i*3 30 if (!XParseColor(outputDisplay, testCo 31 printf("Can't get color %s\n", 32 XAllocColor(outputDisplay, testColorma 33 grays[i] = wantedColor; 34 } 35 36 There's also named equivalents like gray1..x p 37 38 Somewhere in X's callchain, this results in a 39 colormap. For example, Xfbdev hits the followi 40 41 xc-011010/programs/Xserver/dix/colormap.c:: 42 43 FindBestPixel(pentFirst, size, prgb, channel 44 45 dr = (long) pent->co.local.red - prgb->red; 46 dg = (long) pent->co.local.green - prgb->gre 47 db = (long) pent->co.local.blue - prgb->blue 48 sq = dr * dr; 49 UnsignedToBigNum (sq, &sum); 50 BigNumAdd (&sum, &temp, &sum); 51 52 co.local.red are entries that were brought in 53 directly from the info->cmap.red that was list 54 that the app wants to match to. The above code 55 squares matching function. That's why the cmap 56 hand side boundaries of a color range.
Linux® is a registered trademark of Linus Torvalds in the United States and other countries.
TOMOYO® is a registered trademark of NTT DATA CORPORATION.