mirror of
https://github.com/yquake2/yquake2remaster.git
synced 2024-11-26 22:40:50 +00:00
palette check
This commit is contained in:
parent
bec4c4accc
commit
a4b011c5fd
2 changed files with 70 additions and 46 deletions
|
@ -589,17 +589,6 @@ image_t *R_FindImage(char *name, imagetype_t type);
|
||||||
void R_FreeUnusedImages(void);
|
void R_FreeUnusedImages(void);
|
||||||
|
|
||||||
void R_InitSkyBox(void);
|
void R_InitSkyBox(void);
|
||||||
|
|
||||||
typedef struct swstate_s
|
|
||||||
{
|
|
||||||
qboolean fullscreen;
|
|
||||||
int prev_mode; // last valid SW mode
|
|
||||||
|
|
||||||
unsigned char gammatable[256];
|
|
||||||
unsigned char currentpalette[1024];
|
|
||||||
|
|
||||||
} swstate_t;
|
|
||||||
|
|
||||||
void R_IMFlatShadedQuad( vec3_t a, vec3_t b, vec3_t c, vec3_t d, int color, float alpha );
|
void R_IMFlatShadedQuad( vec3_t a, vec3_t b, vec3_t c, vec3_t d, int color, float alpha );
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
|
|
@ -57,6 +57,19 @@ model_t *r_worldmodel;
|
||||||
|
|
||||||
pixel_t *r_warpbuffer;
|
pixel_t *r_warpbuffer;
|
||||||
|
|
||||||
|
typedef struct swstate_s
|
||||||
|
{
|
||||||
|
qboolean fullscreen;
|
||||||
|
int prev_mode; // last valid SW mode
|
||||||
|
|
||||||
|
unsigned char gammatable[256];
|
||||||
|
unsigned char currentpalette[1024];
|
||||||
|
|
||||||
|
// SDL colors
|
||||||
|
Uint32 palette_colors[256];
|
||||||
|
|
||||||
|
} swstate_t;
|
||||||
|
|
||||||
static swstate_t sw_state;
|
static swstate_t sw_state;
|
||||||
|
|
||||||
void *colormap;
|
void *colormap;
|
||||||
|
@ -193,6 +206,8 @@ unsigned int d_zwidth;
|
||||||
|
|
||||||
qboolean insubmodel;
|
qboolean insubmodel;
|
||||||
|
|
||||||
|
static qboolean sdl_palette_outdated;
|
||||||
|
|
||||||
static struct texture_buffer {
|
static struct texture_buffer {
|
||||||
image_t image;
|
image_t image;
|
||||||
byte buffer[1024];
|
byte buffer[1024];
|
||||||
|
@ -307,7 +322,7 @@ R_Register (void)
|
||||||
|
|
||||||
r_mode->modified = true; // force us to do mode specific stuff later
|
r_mode->modified = true; // force us to do mode specific stuff later
|
||||||
vid_gamma->modified = true; // force us to rebuild the gamma table later
|
vid_gamma->modified = true; // force us to rebuild the gamma table later
|
||||||
sw_overbrightbits->modified = true; // force us to rebuild pallete later
|
sw_overbrightbits->modified = true; // force us to rebuild palette later
|
||||||
|
|
||||||
//PGM
|
//PGM
|
||||||
r_lockpvs = ri.Cvar_Get ("r_lockpvs", "0", 0);
|
r_lockpvs = ri.Cvar_Get ("r_lockpvs", "0", 0);
|
||||||
|
@ -1265,6 +1280,8 @@ R_GammaCorrectAndSetPalette( const unsigned char *palette )
|
||||||
sw_state.currentpalette[i*4+1] = sw_state.gammatable[palette[i*4+1]];
|
sw_state.currentpalette[i*4+1] = sw_state.gammatable[palette[i*4+1]];
|
||||||
sw_state.currentpalette[i*4+2] = sw_state.gammatable[palette[i*4+2]];
|
sw_state.currentpalette[i*4+2] = sw_state.gammatable[palette[i*4+2]];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
sdl_palette_outdated = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@ -1737,9 +1754,9 @@ CreateSDLWindow(int flags, int w, int h)
|
||||||
surface = SDL_CreateRGBSurface(0, w, h, bpp, Rmask, Gmask, Bmask, Amask);
|
surface = SDL_CreateRGBSurface(0, w, h, bpp, Rmask, Gmask, Bmask, Amask);
|
||||||
|
|
||||||
texture = SDL_CreateTexture(renderer,
|
texture = SDL_CreateTexture(renderer,
|
||||||
SDL_PIXELFORMAT_ARGB8888,
|
SDL_PIXELFORMAT_ARGB8888,
|
||||||
SDL_TEXTUREACCESS_STREAMING,
|
SDL_TEXTUREACCESS_STREAMING,
|
||||||
w, h);
|
w, h);
|
||||||
return window != NULL;
|
return window != NULL;
|
||||||
#else
|
#else
|
||||||
window = SDL_SetVideoMode(w, h, 0, flags);
|
window = SDL_SetVideoMode(w, h, 0, flags);
|
||||||
|
@ -2017,12 +2034,47 @@ SWimp_InitGraphics(int fullscreen, int *pwidth, int *pheight)
|
||||||
vid_polygon_spans = malloc(sizeof(espan_t) * (vid.height + 1));
|
vid_polygon_spans = malloc(sizeof(espan_t) * (vid.height + 1));
|
||||||
|
|
||||||
memset(sw_state.currentpalette, 0, sizeof(sw_state.currentpalette));
|
memset(sw_state.currentpalette, 0, sizeof(sw_state.currentpalette));
|
||||||
|
memset(sw_state.palette_colors, 0, sizeof(sw_state.palette_colors));
|
||||||
|
|
||||||
|
sdl_palette_outdated = true;
|
||||||
X11_active = true;
|
X11_active = true;
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
static void
|
||||||
|
RE_SDLPaletteConvert (void)
|
||||||
|
{
|
||||||
|
int i;
|
||||||
|
const unsigned char *palette = sw_state.currentpalette;
|
||||||
|
Uint32 *sdl_palette = sw_state.palette_colors;
|
||||||
|
|
||||||
|
if (!sdl_palette_outdated)
|
||||||
|
return;
|
||||||
|
|
||||||
|
sdl_palette_outdated = false;
|
||||||
|
for ( i = 0; i < 256; i++ )
|
||||||
|
{
|
||||||
|
#if SDL_VERSION_ATLEAST(2, 0, 0)
|
||||||
|
if (surface)
|
||||||
|
sdl_palette[i] = SDL_MapRGB(surface->format,
|
||||||
|
palette[i * 4 + 0], // red
|
||||||
|
palette[i * 4 + 1], // green
|
||||||
|
palette[i * 4 + 2] //blue
|
||||||
|
);
|
||||||
|
#else
|
||||||
|
if (window)
|
||||||
|
sdl_palette[i] = SDL_MapRGB(window->format,
|
||||||
|
palette[i * 4 + 0], // red
|
||||||
|
palette[i * 4 + 1], // green
|
||||||
|
palette[i * 4 + 2] //blue
|
||||||
|
);
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
** RE_EndFrame
|
** RE_EndFrame
|
||||||
**
|
**
|
||||||
|
@ -2034,44 +2086,27 @@ SWimp_InitGraphics(int fullscreen, int *pwidth, int *pheight)
|
||||||
static void
|
static void
|
||||||
RE_EndFrame (void)
|
RE_EndFrame (void)
|
||||||
{
|
{
|
||||||
int y,x, i;
|
int y,x, pitch, buffer_pos;
|
||||||
const unsigned char *pallete = sw_state.currentpalette;
|
|
||||||
Uint32 pallete_colors[256];
|
|
||||||
|
|
||||||
for(i=0; i < 256; i++)
|
|
||||||
{
|
|
||||||
#if SDL_VERSION_ATLEAST(2, 0, 0)
|
|
||||||
pallete_colors[i] = SDL_MapRGB(surface->format,
|
|
||||||
pallete[i * 4 + 0], // red
|
|
||||||
pallete[i * 4 + 1], // green
|
|
||||||
pallete[i * 4 + 2] //blue
|
|
||||||
);
|
|
||||||
#else
|
|
||||||
pallete_colors[i] = SDL_MapRGB(window->format,
|
|
||||||
pallete[i * 4 + 0], // red
|
|
||||||
pallete[i * 4 + 1], // green
|
|
||||||
pallete[i * 4 + 2] //blue
|
|
||||||
);
|
|
||||||
#endif
|
|
||||||
}
|
|
||||||
|
|
||||||
#if SDL_VERSION_ATLEAST(2, 0, 0)
|
#if SDL_VERSION_ATLEAST(2, 0, 0)
|
||||||
Uint32 * pixels = (Uint32 *)surface->pixels;
|
Uint32 * pixels = (Uint32 *)surface->pixels;
|
||||||
|
pitch = surface->pitch / sizeof(Uint32);
|
||||||
#else
|
#else
|
||||||
Uint32 * pixels = (Uint32 *)window->pixels;
|
Uint32 * pixels = (Uint32 *)window->pixels;
|
||||||
|
pitch = window->pitch / sizeof(Uint32);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
RE_SDLPaletteConvert();
|
||||||
|
|
||||||
|
buffer_pos = 0;
|
||||||
for (y=0; y < vid.height; y++)
|
for (y=0; y < vid.height; y++)
|
||||||
{
|
{
|
||||||
for (x=0; x < vid.width; x ++)
|
for (x=0; x < vid.width; x ++)
|
||||||
{
|
{
|
||||||
int buffer_pos = y * vid.width + x;
|
pixels[x] = sw_state.palette_colors[vid_buffer[buffer_pos + x]];
|
||||||
Uint32 color = pallete_colors[vid_buffer[buffer_pos]];
|
|
||||||
#if SDL_VERSION_ATLEAST(2, 0, 0)
|
|
||||||
pixels[y * surface->pitch / sizeof(Uint32) + x] = color;
|
|
||||||
#else
|
|
||||||
pixels[y * window->pitch / sizeof(Uint32) + x] = color;
|
|
||||||
#endif
|
|
||||||
}
|
}
|
||||||
|
pixels += pitch;
|
||||||
|
buffer_pos += vid.width;
|
||||||
}
|
}
|
||||||
|
|
||||||
#if SDL_VERSION_ATLEAST(2, 0, 0)
|
#if SDL_VERSION_ATLEAST(2, 0, 0)
|
||||||
|
@ -2178,7 +2213,7 @@ R_ScreenShot_f(void)
|
||||||
{
|
{
|
||||||
int x, y;
|
int x, y;
|
||||||
byte *buffer = malloc(vid.width * vid.height * 3);
|
byte *buffer = malloc(vid.width * vid.height * 3);
|
||||||
const unsigned char *pallete = sw_state.currentpalette;
|
const unsigned char *palette = sw_state.currentpalette;
|
||||||
|
|
||||||
if (!buffer)
|
if (!buffer)
|
||||||
{
|
{
|
||||||
|
@ -2190,9 +2225,9 @@ R_ScreenShot_f(void)
|
||||||
{
|
{
|
||||||
for (y=0; y < vid.height; y ++) {
|
for (y=0; y < vid.height; y ++) {
|
||||||
int buffer_pos = y * vid.width + x;
|
int buffer_pos = y * vid.width + x;
|
||||||
buffer[buffer_pos * 3 + 0] = pallete[vid_buffer[buffer_pos] * 4 + 0]; // red
|
buffer[buffer_pos * 3 + 0] = palette[vid_buffer[buffer_pos] * 4 + 0]; // red
|
||||||
buffer[buffer_pos * 3 + 1] = pallete[vid_buffer[buffer_pos] * 4 + 1]; // green
|
buffer[buffer_pos * 3 + 1] = palette[vid_buffer[buffer_pos] * 4 + 1]; // green
|
||||||
buffer[buffer_pos * 3 + 2] = pallete[vid_buffer[buffer_pos] * 4 + 2]; // blue
|
buffer[buffer_pos * 3 + 2] = palette[vid_buffer[buffer_pos] * 4 + 2]; // blue
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue