diff -urNX dontdiff2 fbtest.old/clut.c fbtest/clut.c --- fbtest.old/clut.c 2002-10-06 16:14:20.000000000 -0400 +++ fbtest/clut.c 2004-05-13 21:12:53.000000000 -0400 @@ -114,6 +114,29 @@ /* + * Create table with maximum dynamic range + */ + +void clut_create_maximum(rgba_t *clut, u32 rlen, u32 glen, u32 blen, u32 alen) +{ + u32 i; + u32 len = max(max(rlen, glen), max(blen, alen)); + + Debug("clut_create_maximum: RGBA %dx%dx%dx%d\n", rlen, glen, blen, alen); + for (i = 0; i < len; i++) { + if (i < rlen) + clut->r = EXPAND_TO_16BIT(i, rlen-1); + if (i < glen) + clut->g = EXPAND_TO_16BIT(i, glen-1); + if (i < blen) + clut->b = EXPAND_TO_16BIT(i, blen-1); + if (i < alen) + clut->a = (alen-1) ? EXPAND_TO_16BIT(i, alen-1) : 0xffff; + clut++; + } +} + + /* * Create a linear ramp */ @@ -158,7 +181,7 @@ clut_create_rgbcube(clut, 4, 4, 4); } else if (idx_len >= 32) { clut_create_rgbcube(clut, 3, 3, 3); - /* FIXME: still 3 entries left */ + /* FIXME: still 5 entries left */ } else if (idx_len >= 16) { memcpy(clut, clut_console, sizeof(clut_console)); } else if (idx_len >= 8) { diff -urNX dontdiff2 fbtest.old/include/clut.h fbtest/include/clut.h --- fbtest.old/include/clut.h 2001-05-01 10:39:20.000000000 -0400 +++ fbtest/include/clut.h 2004-05-13 20:36:03.000000000 -0400 @@ -16,6 +16,7 @@ extern const rgba_t clut_windows[4]; extern void clut_create_rgbcube(rgba_t *clut, u32 rlen, u32 glen, u32 blen); +extern void clut_create_maximum(rgba_t *clut, u32 rlen, u32 glen, u32 blen, u32 alen); extern void clut_create_linear(rgba_t *clut, u32 len); extern void clut_init_nice(void); diff -urNX dontdiff2 fbtest.old/pnmtohex/Makefile fbtest/pnmtohex/Makefile --- fbtest.old/pnmtohex/Makefile 2003-01-20 07:58:47.000000000 -0500 +++ fbtest/pnmtohex/Makefile 2004-05-13 19:00:43.000000000 -0400 @@ -3,7 +3,7 @@ HOST_TARGET = pnmtohex -LIBS += -lnetpnm -lnetpbm -lnetpgm -lnetppm +LIBS += -lnetpbm include $(TOPDIR)/Rules.make diff -urNX dontdiff2 fbtest.old/visops/directcolor.c fbtest/visops/directcolor.c --- fbtest.old/visops/directcolor.c 2003-03-18 11:53:44.000000000 -0500 +++ fbtest/visops/directcolor.c 2004-05-13 21:11:37.000000000 -0400 @@ -94,7 +94,18 @@ /* - * Truecolor/Grayscale + * Truecolor/Generic + */ + +static void directcolor_set_maximum(void) +{ + clut_create_maximum(clut, red_len, green_len, blue_len, alpha_len); + directcolor_update_cmap(); +} + + + /* + * Grayscale */ static void directcolor_set_linear(void) @@ -119,11 +130,14 @@ case VISUAL_DIRECTCOLOR: break; - case VISUAL_GENERIC: case VISUAL_GRAYSCALE: - case VISUAL_TRUECOLOR: directcolor_set_linear(); break; + + case VISUAL_GENERIC: + case VISUAL_TRUECOLOR: + directcolor_set_maximum(); + break; default: return 0;