Changed colormap format to 256 x 24bit RGB to allow for richer gfx; first step towards fulfilling bug #314
git-svn-id: svn://svn.code.sf.net/p/sc2/code/trunk@1509 8092fc87-c524-0410-9efc-e669fe64eaf9
This commit is contained in:
+19
-55
@@ -488,7 +488,7 @@ typedef struct xform_control
|
||||
{
|
||||
COLORMAPPTR CMapPtr;
|
||||
SIZE Ticks, TTotal, TOrig;
|
||||
DWORD OldCMap[NUMBER_OF_PLUT_UINT32s];
|
||||
UBYTE OldCMap[PLUT_BYTE_SIZE];
|
||||
} XFORM_CONTROL;
|
||||
|
||||
#define MAX_XFORMS 32
|
||||
@@ -565,7 +565,6 @@ xform_PLUT_step (SIZE TDelta)
|
||||
{
|
||||
XFORM_CONTROL *control;
|
||||
COLORMAPPTR ColorMapPtr;
|
||||
DWORD *pCurCMap, *pOldCMap;
|
||||
int i;
|
||||
|
||||
if (!XFormControl.XFormsPending)
|
||||
@@ -578,56 +577,26 @@ xform_PLUT_step (SIZE TDelta)
|
||||
if (TDelta > control->TTotal)
|
||||
TDelta = control->TTotal;
|
||||
|
||||
pCurCMap = (DWORD *)((BYTE *)_varPLUTs + (*ColorMapPtr * PLUT_BYTE_SIZE));
|
||||
pOldCMap = control->OldCMap;
|
||||
|
||||
ColorMapPtr += 2;
|
||||
if (_varPLUTs)
|
||||
if (_varPLUTs && control->TOrig != 0)
|
||||
{
|
||||
for (i = 0; i < NUMBER_OF_PLUT_UINT32s; i++)
|
||||
#define XFORM_SCALE 0x10000
|
||||
UBYTE *pCurCMap, *pOldCMap, *pNewCMap;
|
||||
int frac;
|
||||
|
||||
pCurCMap = GET_VAR_PLUT (*ColorMapPtr);
|
||||
pOldCMap = control->OldCMap;
|
||||
pNewCMap = (UBYTE*)ColorMapPtr + 2;
|
||||
|
||||
frac = (int)(control->TOrig - control->TTotal) * XFORM_SCALE
|
||||
/ control->TOrig;
|
||||
|
||||
for (i = 0; i < PLUT_BYTE_SIZE; i++)
|
||||
{
|
||||
SIZE c0, c1;
|
||||
DWORD v0, v1, val;
|
||||
float f = (control->TOrig - control->TTotal) / (float)control->TOrig;
|
||||
COLORMAPPTR oldmap = (COLORMAPPTR) pOldCMap;
|
||||
|
||||
v0 = UQM_SwapBE32 (*(DWORD *)oldmap);
|
||||
v1 = UQM_SwapBE32 (*(DWORD *)ColorMapPtr);
|
||||
|
||||
ColorMapPtr += sizeof (DWORD);
|
||||
|
||||
c0 = (SIZE)((v0 >> (10 + 16)) & 0x1F);
|
||||
c1 = (SIZE)((v1 >> (10 + 16)) & 0x1F);
|
||||
c0 += (SIZE)((c1 - c0) * f);
|
||||
val = (c0 & 0x1F) | (1 << 5);
|
||||
|
||||
c0 = (SIZE)((v0 >> (5 + 16)) & 0x1F);
|
||||
c1 = (SIZE)((v1 >> (5 + 16)) & 0x1F);
|
||||
c0 += (SIZE)((c1 - c0) * f);
|
||||
val = (val << 5) | (c0 & 0x1F);
|
||||
|
||||
c0 = (SIZE)((v0 >> (0 + 16)) & 0x1F);
|
||||
c1 = (SIZE)((v1 >> (0 + 16)) & 0x1F);
|
||||
c0 += (SIZE)((c1 - c0) * f);
|
||||
val = (val << 5) | (c0 & 0x1F);
|
||||
|
||||
c0 = (SIZE)((v0 >> 10) & 0x1F);
|
||||
c1 = (SIZE)((v1 >> 10) & 0x1F);
|
||||
c0 += (SIZE)((c1 - c0) * f);
|
||||
val = (val << (5 + 1)) | (c0 & 0x1F) | (1 << 5);
|
||||
|
||||
c0 = (SIZE)((v0 >> 5) & 0x1F);
|
||||
c1 = (SIZE)((v1 >> 5) & 0x1F);
|
||||
c0 += (SIZE)((c1 - c0) * f);
|
||||
val = (val << 5) | (c0 & 0x1F);
|
||||
|
||||
c0 = (SIZE)((v0 >> 0) & 0x1F);
|
||||
c1 = (SIZE)((v1 >> 0) & 0x1F);
|
||||
c0 += (SIZE)((c1 - c0) * f);
|
||||
val = (val << 5) | (c0 & 0x1F);
|
||||
|
||||
*pCurCMap = (UBYTE)(*pOldCMap + ((int)*pNewCMap - *pOldCMap)
|
||||
* frac / XFORM_SCALE);
|
||||
pOldCMap++;
|
||||
*pCurCMap++ = UQM_SwapBE32 (val);
|
||||
pCurCMap++;
|
||||
pNewCMap++;
|
||||
}
|
||||
ColorChange = TRUE;
|
||||
}
|
||||
@@ -657,9 +626,7 @@ XFormPLUT (COLORMAPPTR ColorMapPtr, SIZE TimeInterval)
|
||||
{
|
||||
if (ColorMapPtr)
|
||||
{
|
||||
DWORD *pOldCMap, *pCurCMap;
|
||||
XFORM_CONTROL *control;
|
||||
int i;
|
||||
|
||||
// FlushPLUTXForms ();
|
||||
|
||||
@@ -674,10 +641,7 @@ XFormPLUT (COLORMAPPTR ColorMapPtr, SIZE TimeInterval)
|
||||
|
||||
control = &XFormControl.TaskControl[XFormControl.XFormInsertPoint];
|
||||
|
||||
pCurCMap = (DWORD *)((BYTE *)_varPLUTs + (*ColorMapPtr * PLUT_BYTE_SIZE));
|
||||
pOldCMap = control->OldCMap;
|
||||
for (i = 0; i < NUMBER_OF_PLUT_UINT32s; ++i)
|
||||
*pOldCMap++ = *pCurCMap++;
|
||||
memcpy (control->OldCMap, GET_VAR_PLUT (*ColorMapPtr), PLUT_BYTE_SIZE);
|
||||
|
||||
control->CMapPtr = ColorMapPtr;
|
||||
if ((control->Ticks = TimeInterval) <= 0)
|
||||
|
||||
@@ -35,45 +35,30 @@ static struct
|
||||
volatile int FadeAmount = FADE_NORMAL_INTENSITY;
|
||||
static volatile int end, XForming;
|
||||
|
||||
DWORD* _varPLUTs;
|
||||
static unsigned int varPLUTsize = VARPLUTS_SIZE;
|
||||
UBYTE* _varPLUTs;
|
||||
static unsigned int varPLUTsize = 0;
|
||||
|
||||
|
||||
void TFB_ColorMapToRGB (TFB_Palette *pal, int colormap_index)
|
||||
{
|
||||
DWORD i, k;
|
||||
UWORD cval;
|
||||
UBYTE j, r, g, b, rtot, gtot, btot;
|
||||
int i;
|
||||
UBYTE *colors;
|
||||
|
||||
colors = (UBYTE*)_varPLUTs + (colormap_index * PLUT_BYTE_SIZE);
|
||||
colors = GET_VAR_PLUT (colormap_index);
|
||||
|
||||
for (i = 0; i < 32; i++)
|
||||
for (i = 0; i < NUMBER_OF_PLUTVALS; i++)
|
||||
{
|
||||
cval = MAKE_WORD (colors[1], colors[0]);
|
||||
colors += 2;
|
||||
|
||||
rtot = r = (UBYTE)((cval >> 10) & 0x1f); // bits 10-14
|
||||
gtot = g = (UBYTE)((cval >> 5) & 0x1f); // bits 5-9
|
||||
btot = b = (UBYTE)(cval & 0x1f); // bits 0-4
|
||||
|
||||
for (j = 0; j < 8; ++j)
|
||||
{
|
||||
k = ((j << 5) + i);
|
||||
pal[k].r = rtot;
|
||||
rtot += r;
|
||||
pal[k].g = gtot;
|
||||
gtot += g;
|
||||
pal[k].b = btot;
|
||||
btot += b;
|
||||
}
|
||||
pal[i].r = *colors++;
|
||||
pal[i].g = *colors++;
|
||||
pal[i].b = *colors++;
|
||||
}
|
||||
}
|
||||
|
||||
BOOLEAN
|
||||
SetColorMap (COLORMAPPTR map)
|
||||
{
|
||||
int start, end, bytes;
|
||||
int start, end;
|
||||
DWORD size, total_size;
|
||||
UBYTE *colors = (UBYTE*)map;
|
||||
UBYTE *vp;
|
||||
|
||||
@@ -85,17 +70,27 @@ SetColorMap (COLORMAPPTR map)
|
||||
if (start > end)
|
||||
return TRUE;
|
||||
|
||||
bytes = (end - start + 1) * PLUT_BYTE_SIZE;
|
||||
size = (end - start + 1) * PLUT_BYTE_SIZE;
|
||||
total_size = (end + 1) * PLUT_BYTE_SIZE;
|
||||
|
||||
if (!_varPLUTs)
|
||||
{
|
||||
if (!(_varPLUTs = (DWORD *) HMalloc (bytes)))
|
||||
return TRUE;
|
||||
varPLUTsize = bytes;
|
||||
_varPLUTs = (UBYTE *) HMalloc (total_size);
|
||||
varPLUTsize = total_size;
|
||||
}
|
||||
else if (total_size > varPLUTsize)
|
||||
{
|
||||
_varPLUTs = (UBYTE *) HRealloc (_varPLUTs, total_size);
|
||||
varPLUTsize = total_size;
|
||||
}
|
||||
if (!_varPLUTs)
|
||||
{
|
||||
varPLUTsize = 0;
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
vp = (UBYTE*)_varPLUTs + (start * PLUT_BYTE_SIZE);
|
||||
memcpy (vp, colors, bytes);
|
||||
vp = GET_VAR_PLUT (start);
|
||||
memcpy (vp, colors, size);
|
||||
|
||||
//fprintf (stderr, "SetColorMap(): vp %x map %x bytes %d, start %d end %d\n", vp, map, bytes, start, end);
|
||||
return TRUE;
|
||||
|
||||
@@ -22,14 +22,11 @@
|
||||
#define CMAP_H
|
||||
|
||||
#define NUMBER_OF_VARPLUTS 256
|
||||
#define NUMBER_OF_PLUTVALS 32
|
||||
#define NUMBER_OF_PLUT_UINT32s (NUMBER_OF_PLUTVALS >> 1)
|
||||
#define PLUT_BYTE_SIZE (sizeof (unsigned int) * \
|
||||
NUMBER_OF_PLUT_UINT32s)
|
||||
#define NUMBER_OF_CLUTVALS 32
|
||||
#define VARPLUTS_SIZE (NUMBER_OF_VARPLUTS * \
|
||||
NUMBER_OF_PLUT_UINT32s * sizeof (unsigned int))
|
||||
#define GET_VAR_PLUT(i) (_varPLUTs + (i) * NUMBER_OF_PLUT_UINT32s)
|
||||
#define PLUTVAL_BYTE_SIZE 3
|
||||
#define NUMBER_OF_PLUTVALS 256
|
||||
#define PLUT_BYTE_SIZE (PLUTVAL_BYTE_SIZE * NUMBER_OF_PLUTVALS)
|
||||
#define VARPLUTS_SIZE (NUMBER_OF_VARPLUTS * PLUT_BYTE_SIZE)
|
||||
#define GET_VAR_PLUT(i) (_varPLUTs + (i) * PLUT_BYTE_SIZE)
|
||||
|
||||
#define BUILD_FRAME (1 << 0)
|
||||
#define FIND_PAGE (1 << 1)
|
||||
@@ -43,7 +40,7 @@
|
||||
#define FADE_NORMAL_INTENSITY 255
|
||||
#define FADE_FULL_INTENSITY 510
|
||||
|
||||
extern DWORD* _varPLUTs;
|
||||
extern UBYTE* _varPLUTs;
|
||||
extern volatile int FadeAmount;
|
||||
|
||||
void TFB_ColorMapToRGB (TFB_Palette *pal, int colormap_index);
|
||||
|
||||
Reference in New Issue
Block a user