DOS updates (Daniel Borca)
This commit is contained in:
parent
a58214e417
commit
4e28d962ff
|
@ -67,7 +67,7 @@ Available options:
|
|||
|
||||
|
||||
Tested on:
|
||||
CPU: AMD Duron @800 MHz
|
||||
CPU: AMD Athlon XP 1800+
|
||||
Mainboard: EP-8KTA3 w/ 128 MB SDRAM
|
||||
Video card: Voodoo5 5500 AGP w/ 64 MB SDRAM
|
||||
DJGPP: djdev 2.04 + gcc v3.2.2 + make v3.79.1
|
||||
|
|
|
@ -54,6 +54,17 @@ int vl_current_offset, vl_current_delta;
|
|||
|
||||
|
||||
|
||||
#if HUGE_LOOKUP
|
||||
/* These lookup tables are used to extract RGB values in [0,255]
|
||||
* from 15/16-bit pixel values.
|
||||
*/
|
||||
static unsigned char pix15r[0x10000];
|
||||
static unsigned char pix15g[0x10000];
|
||||
static unsigned char pix15b[0x10000];
|
||||
static unsigned char pix16r[0x10000];
|
||||
static unsigned char pix16g[0x10000];
|
||||
static unsigned char pix16b[0x10000];
|
||||
#else
|
||||
/* lookup table for scaling 5 bit colors up to 8 bits */
|
||||
static int _rgb_scale_5[32] = {
|
||||
0, 8, 16, 25, 33, 41, 49, 58,
|
||||
|
@ -61,6 +72,7 @@ static int _rgb_scale_5[32] = {
|
|||
132, 140, 148, 156, 165, 173, 181, 189,
|
||||
197, 206, 214, 222, 230, 239, 247, 255
|
||||
};
|
||||
#endif
|
||||
|
||||
/* lookup table for scaling 6 bit colors up to 8 bits */
|
||||
static int _rgb_scale_6[64] = {
|
||||
|
@ -213,17 +225,29 @@ static void v_getrgba8fake8 (unsigned int offset, unsigned char rgba[])
|
|||
static void v_getrgba15 (unsigned int offset, unsigned char rgba[4])
|
||||
{
|
||||
word32 c = ((word16 *)vl_current_read_buffer)[offset];
|
||||
#if HUGE_LOOKUP
|
||||
rgba[0] = pix15r[c];
|
||||
rgba[1] = pix15g[c];
|
||||
rgba[2] = pix15b[c];
|
||||
#else
|
||||
rgba[0] = _rgb_scale_5[(c >> 10) & 0x1F];
|
||||
rgba[1] = _rgb_scale_5[(c >> 5) & 0x1F];
|
||||
rgba[2] = _rgb_scale_5[c & 0x1F];
|
||||
#endif
|
||||
rgba[3] = 255;
|
||||
}
|
||||
static void v_getrgba16 (unsigned int offset, unsigned char rgba[4])
|
||||
{
|
||||
word32 c = ((word16 *)vl_current_read_buffer)[offset];
|
||||
#if HUGE_LOOKUP
|
||||
rgba[0] = pix16r[c];
|
||||
rgba[1] = pix16g[c];
|
||||
rgba[2] = pix16b[c];
|
||||
#else
|
||||
rgba[0] = _rgb_scale_5[(c >> 11) & 0x1F];
|
||||
rgba[1] = _rgb_scale_6[(c >> 5) & 0x3F];
|
||||
rgba[2] = _rgb_scale_5[c & 0x1F];
|
||||
#endif
|
||||
rgba[3] = 255;
|
||||
}
|
||||
static void v_getrgba24 (unsigned int offset, unsigned char rgba[4])
|
||||
|
@ -339,6 +363,52 @@ static void fake_buildpalette (int bits)
|
|||
|
||||
|
||||
|
||||
#if HUGE_LOOKUP
|
||||
/* Desc: initialize lookup arrays
|
||||
*
|
||||
* In : -
|
||||
* Out : -
|
||||
*
|
||||
* Note: -
|
||||
*/
|
||||
void v_init_pixeltables (void)
|
||||
{
|
||||
unsigned int pixel;
|
||||
|
||||
for (pixel = 0; pixel <= 0xffff; pixel++) {
|
||||
unsigned int r, g, b;
|
||||
|
||||
/* 15bit */
|
||||
r = (pixel & 0x7c00) >> 8;
|
||||
g = (pixel & 0x03E0) >> 3;
|
||||
b = (pixel & 0x001F) << 2;
|
||||
|
||||
r = (unsigned int)(((double)r * 255. / 0x7c) + 0.5);
|
||||
g = (unsigned int)(((double)g * 255. / 0x7c) + 0.5);
|
||||
b = (unsigned int)(((double)b * 255. / 0x7c) + 0.5);
|
||||
|
||||
pix15r[pixel] = r;
|
||||
pix15g[pixel] = g;
|
||||
pix15b[pixel] = b;
|
||||
|
||||
/* 16bit */
|
||||
r = (pixel & 0xF800) >> 8;
|
||||
g = (pixel & 0x07E0) >> 3;
|
||||
b = (pixel & 0x001F) << 3;
|
||||
|
||||
r = (unsigned int)(((double)r * 255. / 0xF8) + 0.5);
|
||||
g = (unsigned int)(((double)g * 255. / 0xFC) + 0.5);
|
||||
b = (unsigned int)(((double)b * 255. / 0xF8) + 0.5);
|
||||
|
||||
pix16r[pixel] = r;
|
||||
pix16g[pixel] = g;
|
||||
pix16b[pixel] = b;
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
|
||||
|
||||
/* Desc: sync buffer with video hardware
|
||||
*
|
||||
* In : ptr to old buffer, position, size
|
||||
|
@ -487,6 +557,11 @@ int vl_video_init (int width, int height, int bpp, int rgb, int refresh)
|
|||
} else if (bpp == 8) {
|
||||
fake = 1;
|
||||
}
|
||||
#if HUGE_LOOKUP
|
||||
else if (bpp < 24) {
|
||||
v_init_pixeltables();
|
||||
}
|
||||
#endif
|
||||
|
||||
/* initialize hardware */
|
||||
drv = &VESA;
|
||||
|
|
Loading…
Reference in New Issue