diff --git a/src/gfxutil.cpp b/src/gfxutil.cpp index e55afdf3..65e6e8a1 100644 --- a/src/gfxutil.cpp +++ b/src/gfxutil.cpp @@ -1,4 +1,4 @@ - /* +/* * UAE - The Un*x Amiga Emulator * * Common code needed by all the various graphics systems. @@ -13,8 +13,6 @@ #include "rtgmodes.h" #include "xwin.h" -#include - #define RED 0 #define GRN 1 #define BLU 2 @@ -36,7 +34,8 @@ unsigned int doMask(int p, int bits, int shift) int bits_in_mask(unsigned long mask) { int n = 0; - while (mask) { + while (mask) + { n += mask & 1; mask >>= 1; } @@ -48,7 +47,8 @@ int mask_shift(unsigned long mask) int n = 0; if (!mask) return 0; - while (!(mask & 1)) { + while (!(mask & 1)) + { n++; mask >>= 1; } @@ -85,117 +85,6 @@ static unsigned int doAlpha(int alpha, int bits, int shift) return (alpha & ((1 << bits) - 1)) << shift; } -static float video_gamma(float value, float gamma, float bri, float con) -{ - double factor; - float ret; - - value += bri; - value *= con; - - if (value <= 0.0f) - return 0.0f; - - factor = pow(255.0f, 1.0f - gamma); - ret = (float)(factor * pow(value, gamma)); - - if (ret < 0.0f) - ret = 0.0f; - - return ret; -} - -static uae_u32 gamma_value[256 * 3][3]; -static int lf, hf; - -static void video_calc_gammatable() -{ - float bri, con, gam, gams[3]; - - bri = ((float)(currprefs.gfx_luminance)) * (128.0f / 1000.0f); - con = ((float)(currprefs.gfx_contrast + 1000)) / 1000.0f; - gam = ((float)(1000 - currprefs.gfx_gamma)) / 1000.0f - 1.0; - gams[0] = gam + ((float)(1000 - currprefs.gfx_gamma_ch[0])) / 1000.0f; - gams[1] = gam + ((float)(1000 - currprefs.gfx_gamma_ch[1])) / 1000.0f; - gams[2] = gam + ((float)(1000 - currprefs.gfx_gamma_ch[2])) / 1000.0f; - - lf = 64 * currprefs.gf[picasso_on].gfx_filter_blur / 1000; - hf = 256 - lf * 2; - - for (int i = 0; i < (256 * 3); i++) { - for (int j = 0; j < 3; j++) { - float val = i - 256; - float v; - - if (currprefs.gfx_threebitcolors == 2) { - val *= 2; - } - else if (currprefs.gfx_threebitcolors == 3) { - val = (val * 252.0) / 119.0; - } - else if (currprefs.gfx_threebitcolors == 1) { - val = (val * 252.0) / 238.0; - } - - if (currprefs.gfx_luminance == 0 && currprefs.gfx_contrast == 0 && currprefs.gfx_gamma == 0 && - currprefs.gfx_gamma_ch[0] == 0 && currprefs.gfx_gamma_ch[1] == 0 && currprefs.gfx_gamma_ch[2] == 0) { - v = val; - } - else { - v = video_gamma(val, gams[j], bri, con); - } - - if (v < 0.0) - v = 0.0; - if (v > 255.0) - v = 255.0; - - gamma_value[i][j] = (uae_u32)(v + 0.5); - } - } -} - -static uae_u32 limit256(int monid, double v) -{ - struct amigadisplay *ad = &adisplays[monid]; - v = v * (double)(currprefs.gf[ad->picasso_on].gfx_filter_contrast + 1000) / 1000.0 + currprefs.gf[ad->picasso_on].gfx_filter_luminance / 10.0; - if (v < 0) - v = 0; - if (v > 255) - v = 255; - return ((uae_u32)v) & 0xff; -} -static uae_u32 limit256rb(int monid, double v) -{ - struct amigadisplay *ad = &adisplays[monid]; - v *= (double)(currprefs.gf[ad->picasso_on].gfx_filter_saturation + 1000) / 1000.0; - if (v < -128) - v = -128; - if (v > 127) - v = 127; - return ((uae_u32)v) & 0xff; -} -static double get_y(int r, int g, int b) -{ - return 0.2989f * r + 0.5866f * g + 0.1145f * b; -} -static uae_u32 get_yh(int monid, int r, int g, int b) -{ - return limit256(monid, get_y(r, g, b) * hf / 256); -} -static uae_u32 get_yl(int monid, int r, int g, int b) -{ - return limit256(monid, get_y(r, g, b) * lf / 256); -} -static uae_u32 get_cb(int monid, int r, int g, int b) -{ - return limit256rb(monid, -0.168736f * r - 0.331264f * g + 0.5f * b); -} -static uae_u32 get_cr(int monid, int r, int g, int b) -{ - return limit256rb(monid, 0.5f * r - 0.418688f * g - 0.081312f * b); -} - extern uae_s32 tyhrgb[65536]; extern uae_s32 tylrgb[65536]; extern uae_s32 tcbrgb[65536]; @@ -280,14 +169,16 @@ void alloc_colors_picasso(int rw, int gw, int bw, int rs, int gs, int bs, int rg memset(p96_rgbx16, 0, sizeof p96_rgbx16); - if (red_bits) { + if (red_bits) + { int lrbits = 8 - red_bits; int lgbits = 8 - green_bits; int lbbits = 8 - blue_bits; int lrmask = (1 << red_bits) - 1; int lgmask = (1 << green_bits) - 1; int lbmask = (1 << blue_bits) - 1; - for (i = 65535; i >= 0; i--) { + for (i = 65535; i >= 0; i--) + { uae_u32 r, g, b, c; uae_u32 j = byte_swap ? bswap_16(i) : i; r = (((j >> red_shift) & lrmask) << lrbits) | lowbits(j, red_shift, lrbits); @@ -303,27 +194,32 @@ void alloc_colors_picasso(int rw, int gw, int bw, int rs, int gs, int bs, int rg } void alloc_colors_rgb(int rw, int gw, int bw, int rs, int gs, int bs, int aw, int as, int alpha, int byte_swap, - uae_u32 *rc, uae_u32 *gc, uae_u32 *bc) + uae_u32* rc, uae_u32* gc, uae_u32* bc) { int bpp = rw + gw + bw + aw; int i; - for (i = 0; i < 256; i++) { + for (i = 0; i < 256; i++) + { rc[i] = doColor(i, rw, rs); gc[i] = doColor(i, gw, gs); bc[i] = doColor(i, bw, bs); - if (byte_swap) { - if (bpp <= 16) { + if (byte_swap) + { + if (bpp <= 16) + { rc[i] = bswap_16(rc[i]); gc[i] = bswap_16(gc[i]); bc[i] = bswap_16(bc[i]); } - else { + else + { rc[i] = bswap_32(rc[i]); gc[i] = bswap_32(gc[i]); bc[i] = bswap_32(bc[i]); } } - if (bpp <= 16) { + if (bpp <= 16) + { /* Fill upper 16 bits of each colour value with * a copy of the colour. */ rc[i] = rc[i] * 0x00010001; @@ -338,9 +234,9 @@ void alloc_colors64k(int rw, int gw, int bw, int rs, int gs, int bs, int aw, int int bpp = rw + gw + bw; int i, j; - //video_calc_gammatable(); j = 256; - for (i = 0; i < 4096; i++) { + for (i = 0; i < 4096; i++) + { int r = ((i >> 8) << 4) | (i >> 8); int g = (((i >> 4) & 0xf) << 4) | ((i >> 4) & 0x0f); int b = ((i & 0xf) << 4) | (i & 0x0f); @@ -348,96 +244,25 @@ void alloc_colors64k(int rw, int gw, int bw, int rs, int gs, int bs, int aw, int //g = gamma_value[g + j][1]; //b = gamma_value[b + j][2]; xcolors[i] = doMask(r, rw, rs) | doMask(g, gw, gs) | doMask(b, bw, bs); - if (byte_swap) { - if (bpp <= 16) { + if (byte_swap) + { + if (bpp <= 16) + { xcolors[i] = bswap_16(xcolors[i]); } - else { + else + { xcolors[i] = bswap_32(xcolors[i]); } } - if (bpp <= 16) { + if (bpp <= 16) + { /* Fill upper 16 bits of each colour value * with a copy of the colour. */ xcolors[i] |= xcolors[i] * 0x00010001; } } -#if defined(AGA) || defined(GFXFILTER) +#if defined(AGA) alloc_colors_rgb(rw, gw, bw, rs, gs, bs, aw, as, alpha, byte_swap, xredcolors, xgreencolors, xbluecolors); - /* copy original color table */ - //for (i = 0; i < 256; i++) { - // redc[0 * 256 + i] = xredcolors[0]; - // grec[0 * 256 + i] = xgreencolors[0]; - // bluc[0 * 256 + i] = xbluecolors[0]; - // redc[1 * 256 + i] = xredcolors[i]; - // grec[1 * 256 + i] = xgreencolors[i]; - // bluc[1 * 256 + i] = xbluecolors[i]; - // redc[2 * 256 + i] = xredcolors[255]; - // grec[2 * 256 + i] = xgreencolors[255]; - // bluc[2 * 256 + i] = xbluecolors[255]; - //} -#ifdef GFXFILTER - if (yuv) { - /* create internal 5:6:5 color tables */ - for (i = 0; i < 256; i++) { - j = i + 256; - xredcolors[i] = doColor(gamma[j][0], 5, 11); - xgreencolors[i] = doColor(gamma[j][1], 6, 5); - xbluecolors[i] = doColor(gamma[j][2], 5, 0); - if (bpp <= 16) { - /* Fill upper 16 bits of each colour value with - * a copy of the colour. */ - xredcolors[i] = xredcolors[i] * 0x00010001; - xgreencolors[i] = xgreencolors[i] * 0x00010001; - xbluecolors[i] = xbluecolors[i] * 0x00010001; - } - } - for (i = 0; i < 4096; i++) { - int r = ((i >> 8) << 4) | (i >> 8); - int g = (((i >> 4) & 0xf) << 4) | ((i >> 4) & 0x0f); - int b = ((i & 0xf) << 4) | (i & 0x0f); - r = gamma[r + 256][0]; - g = gamma[g + 256][1]; - b = gamma[b + 256][2]; - xcolors[i] = doMask(r, 5, 11) | doMask(g, 6, 5) | doMask(b, 5, 0); - if (byte_swap) { - if (bpp <= 16) - xcolors[i] = bswap_16(xcolors[i]); - else - xcolors[i] = bswap_32(xcolors[i]); - } - if (bpp <= 16) { - /* Fill upper 16 bits of each colour value - * with a copy of the colour. */ - xcolors[i] |= xcolors[i] * 0x00010001; - } - } - - /* create RGB 5:6:5 -> YUV tables */ - for (i = 0; i < 65536; i++) { - uae_u32 r, g, b; - r = (((i >> 11) & 31) << 3) | lowbits(i, 11, 3); - r = gamma[r + 256][0]; - g = (((i >> 5) & 63) << 2) | lowbits(i, 5, 2); - g = gamma[g + 256][1]; - b = (((i >> 0) & 31) << 3) | lowbits(i, 0, 3); - b = gamma[b + 256][2]; - tyhrgb[i] = get_yh(monid, r, g, b) * 256 * 256; - tylrgb[i] = get_yl(monid, r, g, b) * 256 * 256; - tcbrgb[i] = ((uae_s8)get_cb(monid, r, g, b)) * 256; - tcrrgb[i] = ((uae_s8)get_cr(monid, r, g, b)) * 256; - } - } #endif - -#endif - //xredcolor_b = rw; - //xgreencolor_b = gw; - //xbluecolor_b = bw; - //xredcolor_s = rs; - //xgreencolor_s = gs; - //xbluecolor_s = bs; - //xredcolor_m = ((1 << rw) - 1) << xredcolor_s; - //xgreencolor_m = ((1 << gw) - 1) << xgreencolor_s; - //xbluecolor_m = ((1 << bw) - 1) << xbluecolor_s; }