From: Antonino A. D. <ad...@gm...> - 2006-08-06 00:02:23
|
Antonino A. Daplas wrote: > James Lehman wrote: >> Can someone please explain the difference between these two display types? >> >> FB_VISUAL_TRUECOLOR >> FB_VISUAL_DIRECTCOLOR >> >> My frame buffer API, ezfb, works well with cards that are >> FB_VISUAL_TRUECOLOR, but not so well with cards that are >> FB_VISUAL_DIRECTCOLOR. >> >> http://www.akrobiz.com/ezfb/ > > Truecolor: > > pixel = red << offset | green << offset | blue << offset | alpha << offset; > > where red, green, blue, alpha are the actual values of each pixel component > > Directcolor: > > pixel = red_index << offset | green_index << offset | > blue_index << offset | alpha_index << offset; > > where *_index's are the index to the Hardware LUT, ie: > > red = red_map[red_index]; > > Thusly: In Directcolor, you have to initialize the LUT first, by > sending an FBIOPUTCMAP ioctl. If you want Directcolor to behave like > Truecolor, then send a linear colormap where: > > {red|green|blue|alpha}_map[i] = i; One more note, the above is fine if each color component is 8-bits in size (RGB888, for instance), but for RGB555, you have to downscale. So the untested code below will work better: red_map[i/(1 << (8 - red_length))] = i; red_map[i/(1 << (8 - 5))] = i; red_map[i/8] = i; Tony |