new paletten support
This commit is contained in:
parent
87c17eab43
commit
1a0b5a27c5
1 changed files with 57 additions and 28 deletions
|
@ -64,10 +64,9 @@ global void* VideoMemory;
|
||||||
*/
|
*/
|
||||||
global int VideoDepth;
|
global int VideoDepth;
|
||||||
|
|
||||||
global VMemType8 Pixels8[256];
|
global VMemType8 * Pixels8; /// 8 bpp palette FIXME: remove pointer
|
||||||
global VMemType16 Pixels16[256];
|
global VMemType16 * Pixels16; /// 16 bpp palette
|
||||||
global VMemType32 Pixels32[256];
|
global VMemType32 * Pixels32; /// 32 bpp palette
|
||||||
|
|
||||||
global Palette GlobalPalette[256];
|
global Palette GlobalPalette[256];
|
||||||
|
|
||||||
local int old_button;
|
local int old_button;
|
||||||
|
@ -951,27 +950,55 @@ global void WaitEventsAndKeepSync(void)
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
** Create palette.
|
** Create a new hardware dependend palette palette.
|
||||||
|
**
|
||||||
|
** @param palette Hardware independend palette.
|
||||||
|
**
|
||||||
|
** @returns A hardware dependend pixel table.
|
||||||
*/
|
*/
|
||||||
global void VideoCreatePalette(const Palette* palette)
|
global GraphicData * VideoCreateNewPalette(const Palette *palette)
|
||||||
{
|
{
|
||||||
int i;
|
int i;
|
||||||
|
void* pixels;
|
||||||
|
|
||||||
if( !VideoDepth ) {
|
/*
|
||||||
return;
|
if( !Screen ) { // no init
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
*/
|
||||||
|
|
||||||
|
switch( VideoDepth ) {
|
||||||
|
case 8:
|
||||||
|
pixels=malloc(256*sizeof(VMemType8));
|
||||||
|
break;
|
||||||
|
case 15:
|
||||||
|
case 16:
|
||||||
|
pixels=malloc(256*sizeof(VMemType16));
|
||||||
|
break;
|
||||||
|
case 24:
|
||||||
|
case 32:
|
||||||
|
pixels=malloc(256*sizeof(VMemType32));
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
DebugLevel0(__FUNCTION__": Unknown depth\n");
|
||||||
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
// Convert each palette entry into hardware format.
|
||||||
|
//
|
||||||
for( i=0; i<256; ++i ) {
|
for( i=0; i<256; ++i ) {
|
||||||
int r;
|
int r;
|
||||||
int g;
|
int g;
|
||||||
int b;
|
int b;
|
||||||
int v;
|
int v;
|
||||||
|
|
||||||
r=palette[i].r;
|
r=(palette[i].r>>2)&0x3F;
|
||||||
g=palette[i].g;
|
g=(palette[i].g>>2)&0x3F;
|
||||||
b=palette[i].b;
|
b=(palette[i].b>>2)&0x3F;
|
||||||
v=r+g+b;
|
v=r+g+b;
|
||||||
|
|
||||||
|
// Apply global saturation,contrast and brightness
|
||||||
r= ((((r*3-v)*TheUI.Saturation + v*100)
|
r= ((((r*3-v)*TheUI.Saturation + v*100)
|
||||||
*TheUI.Contrast)
|
*TheUI.Contrast)
|
||||||
+TheUI.Brightness*6400*3)/30000;
|
+TheUI.Brightness*6400*3)/30000;
|
||||||
|
@ -987,29 +1014,31 @@ global void VideoCreatePalette(const Palette* palette)
|
||||||
g= g<0 ? 0 : g>63 ? 63 : g;
|
g= g<0 ? 0 : g>63 ? 63 : g;
|
||||||
b= b<0 ? 0 : b>63 ? 63 : b;
|
b= b<0 ? 0 : b>63 ? 63 : b;
|
||||||
|
|
||||||
|
// -> Video
|
||||||
switch( VideoDepth ) {
|
switch( VideoDepth ) {
|
||||||
case 15:
|
case 15:
|
||||||
Pixels16[i] = ((r >> 1) << 10)
|
((VMemType16*)pixels)[i] = ((r >> 1) << 10)
|
||||||
+ ((g >>1) << 5)
|
+ ((g >>1) << 5)
|
||||||
+ (b >> 1);
|
+ (b >> 1);
|
||||||
break;
|
break;
|
||||||
case 16:
|
case 16:
|
||||||
Pixels16[i] = ((r >> 1) << 11)
|
((VMemType16*)pixels)[i] = ((r >> 1) << 11)
|
||||||
+ (g << 5)
|
+ (g << 5)
|
||||||
+ (b >> 1);
|
+ (b >> 1);
|
||||||
break;
|
break;
|
||||||
case 8:
|
case 8:
|
||||||
case 24:
|
case 24:
|
||||||
case 32:
|
case 32:
|
||||||
// FIXME: write this please
|
// FIXME: write this please
|
||||||
default:
|
default:
|
||||||
DebugLevel0(__FUNCTION__": Depth not written\n");
|
DebugLevel0(__FUNCTION__": Depth not written\n");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
SetPlayersPalette();
|
return pixels;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
** Color cycle.
|
** Color cycle.
|
||||||
*/
|
*/
|
||||||
|
|
Loading…
Reference in a new issue