mirror of
https://github.com/ZDoom/raze-gles.git
synced 2024-12-25 19:20:46 +00:00
This fixes the cocksucker palette corruption bug that happened when switching video modes back and forth between software and polymost in fullscreen
This has been pissing me off for about 4 years. git-svn-id: https://svn.eduke32.com/eduke32@902 1a8010ca-5511-0410-912e-c29ae57300e0
This commit is contained in:
parent
0f28a14ba3
commit
7e4d003302
8 changed files with 60 additions and 88 deletions
|
@ -131,7 +131,7 @@ void begindrawing(void);
|
||||||
void enddrawing(void);
|
void enddrawing(void);
|
||||||
void showframe(int);
|
void showframe(int);
|
||||||
|
|
||||||
int setpalette(int start, int num, char *dapal);
|
int setpalette(int start, int num);
|
||||||
//int getpalette(int start, int num, char *dapal);
|
//int getpalette(int start, int num, char *dapal);
|
||||||
int setgamma(void);
|
int setgamma(void);
|
||||||
double vid_gamma, vid_contrast, vid_brightness;
|
double vid_gamma, vid_contrast, vid_brightness;
|
||||||
|
|
|
@ -7819,7 +7819,7 @@ int setgamemode(char davidoption, int daxdim, int daydim, int dabpp)
|
||||||
|
|
||||||
setview(0L,0L,xdim-1,ydim-1);
|
setview(0L,0L,xdim-1,ydim-1);
|
||||||
clearallviews(0L);
|
clearallviews(0L);
|
||||||
setbrightness(curbrightness,&palette[0],0);
|
setbrightness(curbrightness,palette,0);
|
||||||
|
|
||||||
if (searchx < 0) { searchx = halfxdimen; searchy = (ydimen>>1); }
|
if (searchx < 0) { searchx = halfxdimen; searchy = (ydimen>>1); }
|
||||||
|
|
||||||
|
@ -9985,7 +9985,7 @@ void setvgapalette(void)
|
||||||
curpalettefaded[i].g = curpalette[i].g = vgapal16[4*i+1] << 2;
|
curpalettefaded[i].g = curpalette[i].g = vgapal16[4*i+1] << 2;
|
||||||
curpalettefaded[i].r = curpalette[i].r = vgapal16[4*i+2] << 2;
|
curpalettefaded[i].r = curpalette[i].r = vgapal16[4*i+2] << 2;
|
||||||
}
|
}
|
||||||
setpalette(0,256,vgapal16);
|
setpalette(0,256);
|
||||||
}
|
}
|
||||||
|
|
||||||
//
|
//
|
||||||
|
@ -10014,13 +10014,13 @@ void setbrightness(char dabrightness, char *dapal, char noapply)
|
||||||
curpalette[i].f = 0;
|
curpalette[i].f = 0;
|
||||||
|
|
||||||
// brightness adjust the palette
|
// brightness adjust the palette
|
||||||
curpalettefaded[i].b = (tempbuf[k++] = britable[j][ curpalette[i].b ]);
|
curpalettefaded[i].b = britable[j][ curpalette[i].b ];
|
||||||
curpalettefaded[i].g = (tempbuf[k++] = britable[j][ curpalette[i].g ]);
|
curpalettefaded[i].g = britable[j][ curpalette[i].g ];
|
||||||
curpalettefaded[i].r = (tempbuf[k++] = britable[j][ curpalette[i].r ]);
|
curpalettefaded[i].r = britable[j][ curpalette[i].r ];
|
||||||
curpalettefaded[i].f = tempbuf[k++] = 0;
|
curpalettefaded[i].f = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
if ((noapply&1) == 0) setpalette(0,256,(char*)tempbuf);
|
if ((noapply&1) == 0) setpalette(0,256);
|
||||||
|
|
||||||
#if defined(POLYMOST) && defined(USE_OPENGL)
|
#if defined(POLYMOST) && defined(USE_OPENGL)
|
||||||
if (rendmode >= 3)
|
if (rendmode >= 3)
|
||||||
|
@ -10068,19 +10068,16 @@ void setpalettefade(char r, char g, char b, char offset)
|
||||||
p.r = britable[curbrightness][ curpalette[i].r ];
|
p.r = britable[curbrightness][ curpalette[i].r ];
|
||||||
}
|
}
|
||||||
|
|
||||||
tempbuf[k++] =
|
curpalettefaded[i].b =
|
||||||
(curpalettefaded[i].b =
|
p.b + (((palfadergb.b - p.b) * offset) >> 6);
|
||||||
p.b + ((((int)palfadergb.b - (int)p.b) * (int)offset) >> 6)) >> 2;
|
curpalettefaded[i].g =
|
||||||
tempbuf[k++] =
|
p.g + (((palfadergb.g - p.g) * offset) >> 6);
|
||||||
(curpalettefaded[i].g =
|
curpalettefaded[i].r =
|
||||||
p.g + ((((int)palfadergb.g - (int)p.g) * (int)offset) >> 6)) >> 2;
|
p.r + (((palfadergb.r - p.r) * offset) >> 6);
|
||||||
tempbuf[k++] =
|
curpalettefaded[i].f = 0;
|
||||||
(curpalettefaded[i].r =
|
|
||||||
p.r + ((((int)palfadergb.r - (int)p.r) * (int)offset) >> 6)) >> 2;
|
|
||||||
tempbuf[k++] = curpalettefaded[i].f = 0;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
setpalette(0,256,(char*)tempbuf);
|
setpalette(0,256);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -1339,7 +1339,7 @@ void showframe(int w)
|
||||||
//
|
//
|
||||||
// setpalette() -- set palette values
|
// setpalette() -- set palette values
|
||||||
//
|
//
|
||||||
int setpalette(int start, int num, char *dapal)
|
int setpalette(int start, int num)
|
||||||
{
|
{
|
||||||
SDL_Color pal[256];
|
SDL_Color pal[256];
|
||||||
int i,n;
|
int i,n;
|
||||||
|
@ -1349,15 +1349,7 @@ int setpalette(int start, int num, char *dapal)
|
||||||
copybuf(curpalettefaded, pal, 256);
|
copybuf(curpalettefaded, pal, 256);
|
||||||
|
|
||||||
for (i=start, n=num; n>0; i++, n--)
|
for (i=start, n=num; n>0; i++, n--)
|
||||||
{
|
|
||||||
/*
|
|
||||||
pal[i].b = dapal[0] << 2;
|
|
||||||
pal[i].g = dapal[1] << 2;
|
|
||||||
pal[i].r = dapal[2] << 2;
|
|
||||||
*/
|
|
||||||
curpalettefaded[i].f = pal[i].unused = 0;
|
curpalettefaded[i].f = pal[i].unused = 0;
|
||||||
dapal += 4;
|
|
||||||
}
|
|
||||||
|
|
||||||
//return SDL_SetPalette(sdl_surface, SDL_LOGPAL|SDL_PHYSPAL, pal, 0, 256);
|
//return SDL_SetPalette(sdl_surface, SDL_LOGPAL|SDL_PHYSPAL, pal, 0, 256);
|
||||||
return SDL_SetColors(sdl_surface, pal, 0, 256);
|
return SDL_SetColors(sdl_surface, pal, 0, 256);
|
||||||
|
|
|
@ -2503,35 +2503,24 @@ void showframe(int w)
|
||||||
// New behaviour: curpalettefaded is the live palette, and any changes this function
|
// New behaviour: curpalettefaded is the live palette, and any changes this function
|
||||||
// makes are done to it and not the base palette.
|
// makes are done to it and not the base palette.
|
||||||
//
|
//
|
||||||
int setpalette(int start, int num, char *dapal)
|
int setpalette(int start, int num)
|
||||||
{
|
{
|
||||||
int i, n;
|
int i, n;
|
||||||
HRESULT result;
|
HRESULT result;
|
||||||
RGBQUAD *rgb;
|
RGBQUAD *rgb;
|
||||||
//HPALETTE hPalPrev;
|
//HPALETTE hPalPrev;
|
||||||
|
|
||||||
struct logpal
|
static struct logpal
|
||||||
{
|
{
|
||||||
WORD palVersion;
|
WORD palVersion;
|
||||||
WORD palNumEntries;
|
WORD palNumEntries;
|
||||||
PALETTEENTRY palPalEntry[256];
|
PALETTEENTRY palPalEntry[256];
|
||||||
} lpal;
|
} lpal;
|
||||||
|
|
||||||
UNREFERENCED_PARAMETER(dapal);
|
// copybufbyte(curpalettefaded, lpal.palPalEntry, 256);
|
||||||
|
Bmemcpy(lpal.palPalEntry, curpalettefaded, sizeof(lpal.palPalEntry));
|
||||||
copybuf(curpalettefaded, lpal.palPalEntry, 256);
|
for (i=start, n=num-1; n>0; i++, n--)
|
||||||
|
curpalettefaded[i].f = lpal.palPalEntry[i].peFlags = PC_NOCOLLAPSE;
|
||||||
for (i=start, n=num; n>0; i++, n--)
|
|
||||||
{
|
|
||||||
/*
|
|
||||||
lpal.palPalEntry[i].peBlue = dapal[0] << 2;
|
|
||||||
lpal.palPalEntry[i].peGreen = dapal[1] << 2;
|
|
||||||
lpal.palPalEntry[i].peRed = dapal[2] << 2;
|
|
||||||
*/
|
|
||||||
curpalettefaded[i].f = lpal.palPalEntry[i].peFlags = PC_RESERVED | PC_NOCOLLAPSE;
|
|
||||||
//dapal += 4;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
if (bpp > 8) return 0; // no palette in opengl
|
if (bpp > 8) return 0; // no palette in opengl
|
||||||
|
|
||||||
|
@ -2600,12 +2589,11 @@ int setpalette(int start, int num, char *dapal)
|
||||||
}
|
}
|
||||||
|
|
||||||
SetBWSystemColours();
|
SetBWSystemColours();
|
||||||
|
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
if (!lpDDPalette) return -1;
|
if (!lpDDPalette) return -1;
|
||||||
result = IDirectDrawPalette_SetEntries(lpDDPalette, 0, start, num, (PALETTEENTRY*)&lpal.palPalEntry[start]);
|
result = IDirectDrawPalette_SetEntries(lpDDPalette, 0, 0, 256, (LPPALETTEENTRY)lpal.palPalEntry);
|
||||||
if (result != DD_OK)
|
if (result != DD_OK)
|
||||||
{
|
{
|
||||||
initprintf("Palette set failed: %s\n", GetDDrawError(result));
|
initprintf("Palette set failed: %s\n", GetDDrawError(result));
|
||||||
|
@ -2937,6 +2925,7 @@ static int SetupDirectDraw(int width, int height)
|
||||||
{
|
{
|
||||||
HRESULT result;
|
HRESULT result;
|
||||||
DDSURFACEDESC ddsd;
|
DDSURFACEDESC ddsd;
|
||||||
|
int i;
|
||||||
|
|
||||||
// now create the DirectDraw surfaces
|
// now create the DirectDraw surfaces
|
||||||
ZeroMemory(&ddsd, sizeof(ddsd));
|
ZeroMemory(&ddsd, sizeof(ddsd));
|
||||||
|
@ -2978,7 +2967,9 @@ static int SetupDirectDraw(int width, int height)
|
||||||
|
|
||||||
// attach a palette to the primary surface
|
// attach a palette to the primary surface
|
||||||
initprintf(" - Creating palette\n");
|
initprintf(" - Creating palette\n");
|
||||||
result = IDirectDraw_CreatePalette(lpDD, DDPCAPS_8BIT | DDPCAPS_ALLOW256, (PALETTEENTRY*)curpalette, &lpDDPalette, NULL);
|
for (i=0; i<256; i++)
|
||||||
|
curpalettefaded[i].f = PC_NOCOLLAPSE;
|
||||||
|
result = IDirectDraw_CreatePalette(lpDD, DDPCAPS_8BIT | DDPCAPS_ALLOW256, (LPPALETTEENTRY)curpalettefaded, &lpDDPalette, NULL);
|
||||||
if (result != DD_OK)
|
if (result != DD_OK)
|
||||||
{
|
{
|
||||||
ShowDDrawErrorBox("Failure creating palette", result);
|
ShowDDrawErrorBox("Failure creating palette", result);
|
||||||
|
@ -3519,7 +3510,6 @@ static BOOL CreateAppWindow(int modenum)
|
||||||
}
|
}
|
||||||
|
|
||||||
modesetusing = -1;
|
modesetusing = -1;
|
||||||
|
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
@ -4072,7 +4062,7 @@ static LRESULT CALLBACK WndProcCallback(HWND hWnd, UINT uMsg, WPARAM wParam, LPA
|
||||||
{
|
{
|
||||||
if (appactive)
|
if (appactive)
|
||||||
{
|
{
|
||||||
setpalette(0,0,0);
|
setpalette(0,0);
|
||||||
SetBWSystemColours();
|
SetBWSystemColours();
|
||||||
// initprintf("Resetting palette.\n");
|
// initprintf("Resetting palette.\n");
|
||||||
}
|
}
|
||||||
|
@ -4094,7 +4084,19 @@ static LRESULT CALLBACK WndProcCallback(HWND hWnd, UINT uMsg, WPARAM wParam, LPA
|
||||||
|
|
||||||
case WM_PALETTECHANGED:
|
case WM_PALETTECHANGED:
|
||||||
// someone stole the palette so try and steal it back
|
// someone stole the palette so try and steal it back
|
||||||
if (appactive && (HWND)wParam != hWindow) setpalette(0,0,0);
|
if (appactive && (HWND)wParam != hWindow) setpalette(0,0);
|
||||||
|
if (bDDrawInited && bpp == 8 && fullscreen)
|
||||||
|
{
|
||||||
|
int result = IDirectDrawSurface_SetPalette(lpDDSPrimary, lpDDPalette);
|
||||||
|
OSD_Printf("DirectDraw palette stolen! Resetting...\n");
|
||||||
|
if (result != DD_OK)
|
||||||
|
{
|
||||||
|
ShowDDrawErrorBox("Failure setting palette", result);
|
||||||
|
UninitDirectDraw();
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
setpalette(0,0);
|
||||||
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case WM_DISPLAYCHANGE:
|
case WM_DISPLAYCHANGE:
|
||||||
|
|
|
@ -4535,11 +4535,13 @@ static void Keys3d(void)
|
||||||
*/
|
*/
|
||||||
if (sector[cursectnum].lotag==2)
|
if (sector[cursectnum].lotag==2)
|
||||||
{
|
{
|
||||||
if (sector[cursectnum].floorpal==8) SetBOSS1Palette();
|
if (sector[cursectnum].ceilingpicnum==FLOORSLIME) SetSLIMEPalette();
|
||||||
else SetWATERPalette();
|
else SetWATERPalette();
|
||||||
}
|
}
|
||||||
else SetGAMEPalette();
|
else SetGAMEPalette();
|
||||||
|
|
||||||
|
if (keystatus[buildkeys[BK_MODE2D_3D]]) // Enter
|
||||||
|
SetGAMEPalette();
|
||||||
|
|
||||||
//Stick this in 3D part of ExtCheckKeys
|
//Stick this in 3D part of ExtCheckKeys
|
||||||
//Also choose your own key scan codes
|
//Also choose your own key scan codes
|
||||||
|
@ -8166,50 +8168,34 @@ void faketimerhandler(void)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static void SetBOSS1Palette()
|
extern short brightness;
|
||||||
|
|
||||||
|
static inline void SetBOSS1Palette()
|
||||||
{
|
{
|
||||||
if (acurpalette==3) return;
|
if (acurpalette==3) return;
|
||||||
acurpalette=3;
|
acurpalette=3;
|
||||||
kensetpalette(BOSS1palette);
|
setbrightness(brightness,BOSS1palette,0);
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
static inline void SetSLIMEPalette()
|
||||||
static void SetSLIMEPalette()
|
|
||||||
{
|
{
|
||||||
if (acurpalette==2) return;
|
if (acurpalette==2) return;
|
||||||
acurpalette=2;
|
acurpalette=2;
|
||||||
kensetpalette(SLIMEpalette);
|
setbrightness(brightness,SLIMEpalette,0);
|
||||||
}
|
}
|
||||||
*/
|
|
||||||
|
|
||||||
static void SetWATERPalette()
|
static inline void SetWATERPalette()
|
||||||
{
|
{
|
||||||
if (acurpalette==1) return;
|
if (acurpalette==1) return;
|
||||||
acurpalette=1;
|
acurpalette=1;
|
||||||
kensetpalette(WATERpalette);
|
setbrightness(brightness,WATERpalette,0);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static inline void SetGAMEPalette()
|
||||||
static void SetGAMEPalette()
|
|
||||||
{
|
{
|
||||||
if (acurpalette==0) return;
|
if (acurpalette==0) return;
|
||||||
acurpalette=0;
|
acurpalette=0;
|
||||||
kensetpalette(GAMEpalette);
|
setbrightness(brightness,GAMEpalette,0);
|
||||||
}
|
|
||||||
|
|
||||||
static void kensetpalette(char *vgapal)
|
|
||||||
{
|
|
||||||
int i;
|
|
||||||
char vesapal[1024];
|
|
||||||
|
|
||||||
for (i=0;i<256;i++)
|
|
||||||
{
|
|
||||||
vesapal[i*4+0] = vgapal[i*3+2];
|
|
||||||
vesapal[i*4+1] = vgapal[i*3+1];
|
|
||||||
vesapal[i*4+2] = vgapal[i*3+0];
|
|
||||||
vesapal[i*4+3] = 0;
|
|
||||||
}
|
|
||||||
setpalette(0L,256L,vesapal);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static void SearchSectorsForward()
|
static void SearchSectorsForward()
|
||||||
|
|
|
@ -194,7 +194,6 @@ extern void fadepal(int r, int g, int b, int start, int end, int step);
|
||||||
extern inline int minitextshade(int x,int y,const char *t,int s,int p,int sb);
|
extern inline int minitextshade(int x,int y,const char *t,int s,int p,int sb);
|
||||||
extern inline int gametext_z(int small, int starttile, int x,int y,const char *t,int s,int p,int orientation,int x1, int y1, int x2, int y2,int z);
|
extern inline int gametext_z(int small, int starttile, int x,int y,const char *t,int s,int p,int orientation,int x1, int y1, int x2, int y2,int z);
|
||||||
extern void txdigitalnumberz(int starttile, int x,int y,int n,int s,int pal,int cs,int x1, int y1, int x2, int y2, int z);
|
extern void txdigitalnumberz(int starttile, int x,int y,int n,int s,int pal,int cs,int x1, int y1, int x2, int y2, int z);
|
||||||
extern void txdigitalnumber(int starttile, int x,int y,int n,int s,int pal,int cs,int x1, int y1, int x2, int y2);
|
|
||||||
extern void myosx(int x,int y,int tilenum,int shade,int orientation);
|
extern void myosx(int x,int y,int tilenum,int shade,int orientation);
|
||||||
extern void myospalx(int x,int y,int tilenum,int shade,int orientation,int p);
|
extern void myospalx(int x,int y,int tilenum,int shade,int orientation,int p);
|
||||||
extern void ResetGameVars(void);
|
extern void ResetGameVars(void);
|
||||||
|
|
|
@ -1812,10 +1812,6 @@ void txdigitalnumberz(int starttile, int x,int y,int n,int s,int pal,int cs,int
|
||||||
j += (tilesizx[p]+1)*z/65536;
|
j += (tilesizx[p]+1)*z/65536;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
void txdigitalnumber(int starttile, int x,int y,int n,int s,int pal,int cs,int x1, int y1, int x2, int y2)
|
|
||||||
{
|
|
||||||
txdigitalnumberz(starttile,x,y,n,s,pal,cs,x1,y1,x2,y2,65536);
|
|
||||||
}
|
|
||||||
|
|
||||||
static void displayinventory(player_struct *p)
|
static void displayinventory(player_struct *p)
|
||||||
{
|
{
|
||||||
|
@ -2695,7 +2691,7 @@ static int strget_(int small,int x,int y,char *t,int dalen,int c)
|
||||||
{
|
{
|
||||||
if (g_player[myconnectindex].ps->gm&MODE_TYPE)
|
if (g_player[myconnectindex].ps->gm&MODE_TYPE)
|
||||||
x = mpgametext(y,t,c,2+8+16);
|
x = mpgametext(y,t,c,2+8+16);
|
||||||
else x = gametext(x,y,t,c,2+8+16);
|
else x = mgametext(x,y,t,c,2+8+16);
|
||||||
}
|
}
|
||||||
c = 4-(sintable[(totalclock<<4)&2047]>>11);
|
c = 4-(sintable[(totalclock<<4)&2047]>>11);
|
||||||
|
|
||||||
|
|
|
@ -101,10 +101,10 @@ static void SearchSectorsForward();
|
||||||
static void SearchSectorsBackward();
|
static void SearchSectorsBackward();
|
||||||
static inline void SpriteName(short spritenum, char *lo2);
|
static inline void SpriteName(short spritenum, char *lo2);
|
||||||
static void PrintStatus(char *string,int num,char x,char y,char color);
|
static void PrintStatus(char *string,int num,char x,char y,char color);
|
||||||
static void SetBOSS1Palette();
|
static inline void SetBOSS1Palette();
|
||||||
// static void SetSLIMEPalette();
|
static inline void SetSLIMEPalette();
|
||||||
static void SetWATERPalette();
|
static inline void SetWATERPalette();
|
||||||
static void SetGAMEPalette();
|
static inline void SetGAMEPalette();
|
||||||
static void kensetpalette(char *vgapal);
|
static void kensetpalette(char *vgapal);
|
||||||
|
|
||||||
extern short grid;
|
extern short grid;
|
||||||
|
|
Loading…
Reference in a new issue