fix conflict

This commit is contained in:
Jaime Passos 2019-11-10 00:04:11 -03:00 committed by Latapostrophe
parent eb8cb12b8f
commit f22e767380
8 changed files with 92 additions and 21 deletions

View file

@ -581,7 +581,7 @@ static void HWR_RenderPlane(sector_t *sector, extrasubsector_t *xsub, boolean is
if (nrPlaneVerts < 3) //not even a triangle ? if (nrPlaneVerts < 3) //not even a triangle ?
return; return;
if ((UINT32)nrPlaneVerts > UINT16_MAX) // FIXME: exceeds plVerts size if (nrPlaneVerts > INT16_MAX) // FIXME: exceeds plVerts size
{ {
CONS_Debug(DBG_RENDER, "polygon size of %d exceeds max value of %d vertices\n", nrPlaneVerts, UINT16_MAX); CONS_Debug(DBG_RENDER, "polygon size of %d exceeds max value of %d vertices\n", nrPlaneVerts, UINT16_MAX);
return; return;
@ -3228,7 +3228,7 @@ static void HWR_RenderPolyObjectPlane(polyobj_t *polysector, boolean isceiling,
if (nrPlaneVerts < 3) //not even a triangle ? if (nrPlaneVerts < 3) //not even a triangle ?
return; return;
if (nrPlaneVerts > UINT16_MAX) // FIXME: exceeds plVerts size if (nrPlaneVerts > INT16_MAX) // FIXME: exceeds plVerts size
{ {
CONS_Debug(DBG_RENDER, "polygon size of %s exceeds max value of %d vertices\n", sizeu1(nrPlaneVerts), UINT16_MAX); CONS_Debug(DBG_RENDER, "polygon size of %s exceeds max value of %d vertices\n", sizeu1(nrPlaneVerts), UINT16_MAX);
return; return;

View file

@ -19,6 +19,10 @@
#include "v_video.h" #include "v_video.h"
#include "i_video.h" #include "i_video.h"
#ifdef HWRENDER
#include "hardware/hw_main.h"
#endif
// GIFs are always little-endian // GIFs are always little-endian
#include "byteptr.h" #include "byteptr.h"
@ -452,6 +456,32 @@ const UINT8 gifframe_gchead[4] = {0x21,0xF9,0x04,0x04}; // GCE, bytes, packed by
static UINT8 *gifframe_data = NULL; static UINT8 *gifframe_data = NULL;
static size_t gifframe_size = 8192; static size_t gifframe_size = 8192;
#ifdef HWRENDER
static void hwrconvert(void)
{
UINT8 *linear = HWR_GetScreenshot();
UINT8 *dest = screens[2];
UINT8 r, g, b;
INT32 x, y;
size_t i = 0;
InitColorLUT();
for (y = 0; y < vid.height; y++)
{
for (x = 0; x < vid.width; x++, i += 3)
{
r = (UINT8)linear[i];
g = (UINT8)linear[i + 1];
b = (UINT8)linear[i + 2];
dest[(y * vid.width) + x] = colorlookup[r >> SHIFTCOLORBITS][g >> SHIFTCOLORBITS][b >> SHIFTCOLORBITS];
}
}
free(linear);
}
#endif
// //
// GIF_framewrite // GIF_framewrite
// writes a frame into the file. // writes a frame into the file.
@ -477,7 +507,12 @@ static void GIF_framewrite(void)
GIF_optimizeregion(cur_screen, movie_screen, &blitx, &blity, &blitw, &blith); GIF_optimizeregion(cur_screen, movie_screen, &blitx, &blity, &blitw, &blith);
// blit to temp screen // blit to temp screen
if (rendermode == render_soft)
I_ReadScreen(movie_screen); I_ReadScreen(movie_screen);
#ifdef HWRENDER
else if (rendermode == render_opengl)
hwrconvert();
#endif
} }
else else
{ {
@ -486,7 +521,18 @@ static void GIF_framewrite(void)
blith = vid.height; blith = vid.height;
if (gif_frames == 0) if (gif_frames == 0)
{
if (rendermode == render_soft)
I_ReadScreen(movie_screen); I_ReadScreen(movie_screen);
#ifdef HWRENDER
else if (rendermode == render_opengl)
{
hwrconvert();
VID_BlitLinearScreen(screens[2], screens[0], vid.width*vid.bpp, vid.height, vid.width*vid.bpp, vid.rowbytes);
}
#endif
}
movie_screen = screens[0]; movie_screen = screens[0];
} }
@ -575,7 +621,7 @@ static void GIF_framewrite(void)
// //
INT32 GIF_open(const char *filename) INT32 GIF_open(const char *filename)
{ {
#ifdef HWRENDER #if 0
if (rendermode != render_soft) if (rendermode != render_soft)
{ {
CONS_Alert(CONS_WARNING, M_GetText("GIFs cannot be taken in non-software modes!\n")); CONS_Alert(CONS_WARNING, M_GetText("GIFs cannot be taken in non-software modes!\n"));

View file

@ -1100,12 +1100,8 @@ void M_StartMovie(void)
switch (cv_moviemode.value) switch (cv_moviemode.value)
{ {
case MM_GIF: case MM_GIF:
if (rendermode == render_soft)
{
moviemode = M_StartMovieGIF(pathname); moviemode = M_StartMovieGIF(pathname);
break; break;
}
/* FALLTHRU */
case MM_APNG: case MM_APNG:
moviemode = M_StartMovieAPNG(pathname); moviemode = M_StartMovieAPNG(pathname);
break; break;

View file

@ -1177,7 +1177,6 @@ void R_ClearColormaps(void)
// //
static double deltas[256][3], map[256][3]; static double deltas[256][3], map[256][3];
static UINT8 NearestColor(UINT8 r, UINT8 g, UINT8 b);
static int RoundUp(double number); static int RoundUp(double number);
#ifdef HASINVERT #ifdef HASINVERT
@ -1403,7 +1402,7 @@ INT32 R_CreateColormap(char *p1, char *p2, char *p3)
// Thanks to quake2 source! // Thanks to quake2 source!
// utils3/qdata/images.c // utils3/qdata/images.c
static UINT8 NearestColor(UINT8 r, UINT8 g, UINT8 b) UINT8 NearestColor(UINT8 r, UINT8 g, UINT8 b)
{ {
int dr, dg, db; int dr, dg, db;
int distortion, bestdistortion = 256 * 256 * 4, bestcolor = 0, i; int distortion, bestdistortion = 256 * 256 * 4, bestcolor = 0, i;

View file

@ -98,6 +98,8 @@ void R_MakeInvertmap(void);
#endif #endif
const char *R_ColormapNameForNum(INT32 num); const char *R_ColormapNameForNum(INT32 num);
UINT8 NearestColor(UINT8 r, UINT8 g, UINT8 b);
extern INT32 numtextures; extern INT32 numtextures;
#endif #endif

View file

@ -1641,6 +1641,7 @@ INT32 VID_SetMode(INT32 modeNum)
//Impl_SetWindowName("SRB2Kart "VERSIONSTRING); //Impl_SetWindowName("SRB2Kart "VERSIONSTRING);
SDLSetMode(vid.width, vid.height, USE_FULLSCREEN); SDLSetMode(vid.width, vid.height, USE_FULLSCREEN);
Impl_VideoSetupBuffer();
if (rendermode == render_soft) if (rendermode == render_soft)
{ {
@ -1649,8 +1650,6 @@ INT32 VID_SetMode(INT32 modeNum)
SDL_FreeSurface(bufSurface); SDL_FreeSurface(bufSurface);
bufSurface = NULL; bufSurface = NULL;
} }
Impl_VideoSetupBuffer();
} }
return SDL_TRUE; return SDL_TRUE;
@ -1773,7 +1772,7 @@ static void Impl_VideoSetupSDLBuffer(void)
static void Impl_VideoSetupBuffer(void) static void Impl_VideoSetupBuffer(void)
{ {
// Set up game's software render buffer // Set up game's software render buffer
if (rendermode == render_soft) //if (rendermode == render_soft)
{ {
vid.rowbytes = vid.width * vid.bpp; vid.rowbytes = vid.width * vid.bpp;
vid.direct = NULL; vid.direct = NULL;

View file

@ -2593,6 +2593,27 @@ Unoptimized version
#endif #endif
} }
// Taken from my videos-in-SRB2 project
// Generates a color look-up table
// which has up to 64 colors at each channel
// (see the defines in v_video.h)
UINT8 colorlookup[CLUTSIZE][CLUTSIZE][CLUTSIZE];
void InitColorLUT(void)
{
UINT8 r, g, b;
static boolean clutinit = false;
if (!clutinit)
{
for (r = 0; r < CLUTSIZE; r++)
for (g = 0; g < CLUTSIZE; g++)
for (b = 0; b < CLUTSIZE; b++)
colorlookup[r][g][b] = NearestColor(r << SHIFTCOLORBITS, g << SHIFTCOLORBITS, b << SHIFTCOLORBITS);
clutinit = true;
}
}
// V_Init // V_Init
// old software stuff, buffers are allocated at video mode setup // old software stuff, buffers are allocated at video mode setup
// here we set the screens[x] pointers accordingly // here we set the screens[x] pointers accordingly
@ -2604,13 +2625,9 @@ void V_Init(void)
const INT32 screensize = vid.rowbytes * vid.height; const INT32 screensize = vid.rowbytes * vid.height;
LoadMapPalette(); LoadMapPalette();
// hardware modes do not use screens[] pointers
for (i = 0; i < NUMSCREENS; i++) for (i = 0; i < NUMSCREENS; i++)
screens[i] = NULL; screens[i] = NULL;
if (rendermode != render_soft)
{
return; // be sure to cause a NULL read/write error so we detect it, in case of..
}
// start address of NUMSCREENS * width*height vidbuffers // start address of NUMSCREENS * width*height vidbuffers
if (base) if (base)

View file

@ -33,6 +33,18 @@ extern consvar_t cv_ticrate, cv_usegamma, cv_allcaps, cv_constextsize;
// Allocates buffer screens, call before R_Init. // Allocates buffer screens, call before R_Init.
void V_Init(void); void V_Init(void);
// Taken from my videos-in-SRB2 project
// Generates a color look-up table
// which has up to 64 colors at each channel
#define COLORBITS 6
#define SHIFTCOLORBITS (8-COLORBITS)
#define CLUTSIZE (1<<COLORBITS)
extern UINT8 colorlookup[CLUTSIZE][CLUTSIZE][CLUTSIZE];
void InitColorLUT(void);
// Set the current RGB palette lookup to use for palettized graphics // Set the current RGB palette lookup to use for palettized graphics
void V_SetPalette(INT32 palettenum); void V_SetPalette(INT32 palettenum);