mirror of
https://git.do.srb2.org/STJr/SRB2.git
synced 2025-03-21 18:32:08 +00:00
R_GetTextureFlat -> R_GetLevelFlat
This commit is contained in:
parent
76a6710f8b
commit
5b5f371b0c
6 changed files with 29 additions and 51 deletions
|
@ -638,7 +638,7 @@ texturefound:
|
|||
{
|
||||
flatfound:
|
||||
/* This could be a flat, patch, or PNG. */
|
||||
flatpatch = W_CacheLumpNum(flatnum, PU_STATIC);
|
||||
flatpatch = W_CacheLumpNum(flatnum, PU_CACHE);
|
||||
lumplength = W_LumpLength(flatnum);
|
||||
if (Picture_CheckIfPatch(flatpatch, lumplength))
|
||||
levelflat->type = LEVELFLAT_PATCH;
|
||||
|
|
|
@ -72,7 +72,6 @@ typedef struct
|
|||
u;
|
||||
|
||||
UINT16 width, height;
|
||||
fixed_t topoffset, leftoffset;
|
||||
|
||||
// for flat animation
|
||||
INT32 animseq; // start pos. in the anim sequence
|
||||
|
|
|
@ -615,7 +615,7 @@ boolean Picture_CheckIfPatch(patch_t *patch, size_t size)
|
|||
|
||||
width = SHORT(patch->width);
|
||||
height = SHORT(patch->height);
|
||||
result = (height > 0 && height <= 16384 && width > 0 && width <= 16384 && width < (INT16)(size / 4));
|
||||
result = (height > 0 && height <= 16384 && width > 0 && width <= 16384);
|
||||
|
||||
if (result)
|
||||
{
|
||||
|
@ -930,6 +930,9 @@ void *Picture_PNGConvert(
|
|||
png_bytep *row_pointers = PNG_Read(png, w, h, topoffset, leftoffset, insize);
|
||||
png_uint_32 width = *w, height = *h;
|
||||
|
||||
if (png == NULL)
|
||||
I_Error("Picture_PNGConvert: picture was NULL!");
|
||||
|
||||
// Find the output format's bits per pixel amount
|
||||
outbpp = Picture_FormatBPP(outformat);
|
||||
|
||||
|
|
|
@ -777,12 +777,11 @@ d.z = (v1.x * v2.y) - (v1.y * v2.x)
|
|||
|
||||
void R_DrawSinglePlane(visplane_t *pl)
|
||||
{
|
||||
UINT8 *flat;
|
||||
levelflat_t *levelflat;
|
||||
INT32 light = 0;
|
||||
INT32 x;
|
||||
INT32 stop, angle;
|
||||
ffloor_t *rover;
|
||||
levelflat_t *levelflat;
|
||||
int type;
|
||||
int spanfunctype = BASEDRAWFUNC;
|
||||
|
||||
|
@ -943,30 +942,15 @@ void R_DrawSinglePlane(visplane_t *pl)
|
|||
case LEVELFLAT_NONE:
|
||||
return;
|
||||
case LEVELFLAT_FLAT:
|
||||
ds_source = R_GetFlat(levelflat->u.flat.lumpnum);
|
||||
ds_source = (UINT8 *)R_GetFlat(levelflat->u.flat.lumpnum);
|
||||
R_CheckFlatLength(W_LumpLength(levelflat->u.flat.lumpnum));
|
||||
// Raw flats always have dimensions that are powers-of-two numbers.
|
||||
ds_powersoftwo = true;
|
||||
break;
|
||||
default:
|
||||
switch (type)
|
||||
{
|
||||
case LEVELFLAT_TEXTURE:
|
||||
/* Textures get cached differently and don't need ds_source */
|
||||
ds_source = R_GetTextureFlat(levelflat, true, false);
|
||||
break;
|
||||
default:
|
||||
ds_source = R_GetFlat(levelflat->u.flat.lumpnum);
|
||||
flat = R_GetTextureFlat(levelflat, false,
|
||||
#ifndef NO_PNG_LUMPS
|
||||
( type == LEVELFLAT_PNG )
|
||||
#else
|
||||
false
|
||||
#endif
|
||||
);
|
||||
Z_ChangeTag(ds_source, PU_CACHE);
|
||||
ds_source = flat;
|
||||
}
|
||||
ds_source = (UINT8 *)R_GetLevelFlat(levelflat);
|
||||
if (!ds_source)
|
||||
return;
|
||||
// Check if this texture or patch has power-of-two dimensions.
|
||||
if (R_CheckPowersOfTwo())
|
||||
R_CheckFlatLength(ds_flatwidth * ds_flatheight);
|
||||
|
|
|
@ -497,31 +497,29 @@ UINT8 *R_GetColumn(fixed_t tex, INT32 col)
|
|||
return data + LONG(texturecolumnofs[tex][col]);
|
||||
}
|
||||
|
||||
UINT8 *R_GetFlat(lumpnum_t flatlumpnum)
|
||||
void *R_GetFlat(lumpnum_t flatlumpnum)
|
||||
{
|
||||
return W_CacheLumpNum(flatlumpnum, PU_CACHE);
|
||||
}
|
||||
|
||||
//
|
||||
// R_GetTextureFlat
|
||||
// R_GetLevelFlat
|
||||
//
|
||||
// Convert a texture or patch to a flat.
|
||||
// If needed, convert a texture or patch to a flat.
|
||||
//
|
||||
UINT8 *R_GetTextureFlat(levelflat_t *levelflat, boolean leveltexture, boolean ispng)
|
||||
void *R_GetLevelFlat(levelflat_t *levelflat)
|
||||
{
|
||||
UINT8 *flat;
|
||||
UINT8 *flatdata = NULL;
|
||||
boolean leveltexture = (levelflat->type == LEVELFLAT_TEXTURE);
|
||||
textureflat_t *texflat = &texflats[levelflat->u.texture.num];
|
||||
patch_t *patch = NULL;
|
||||
boolean texturechanged = (leveltexture ? (levelflat->u.texture.num != levelflat->u.texture.lastnum) : false);
|
||||
|
||||
(void)ispng;
|
||||
|
||||
// Check if the texture changed.
|
||||
if (leveltexture && (!texturechanged))
|
||||
{
|
||||
if (texflat != NULL && texflat->flat)
|
||||
{
|
||||
flat = texflat->flat;
|
||||
flatdata = texflat->flat;
|
||||
ds_flatwidth = texflat->width;
|
||||
ds_flatheight = texflat->height;
|
||||
texturechanged = false;
|
||||
|
@ -547,23 +545,19 @@ UINT8 *R_GetTextureFlat(levelflat_t *levelflat, boolean leveltexture, boolean is
|
|||
converted = (UINT8 *)Picture_TextureToFlat(levelflat->u.texture.num);
|
||||
M_Memcpy(texflat->flat, converted, size);
|
||||
Z_Free(converted);
|
||||
flat = texflat->flat;
|
||||
|
||||
levelflat->flatpatch = flat;
|
||||
levelflat->flatpatch = texflat->flat;
|
||||
levelflat->width = ds_flatwidth;
|
||||
levelflat->height = ds_flatheight;
|
||||
}
|
||||
// Patch (never happens yet)
|
||||
else
|
||||
{
|
||||
patch = (patch_t *)ds_source;
|
||||
#ifndef NO_PNG_LUMPS
|
||||
if (ispng)
|
||||
if (levelflat->type == LEVELFLAT_PNG)
|
||||
{
|
||||
INT32 pngwidth, pngheight;
|
||||
|
||||
levelflat->flatpatch = Picture_PNGConvert(ds_source, PICFMT_FLAT, &pngwidth, &pngheight, NULL, NULL, W_LumpLength(levelflat->u.flat.lumpnum), NULL, 0);
|
||||
levelflat->topoffset = levelflat->leftoffset = 0;
|
||||
levelflat->flatpatch = Picture_PNGConvert(W_CacheLumpNum(levelflat->u.flat.lumpnum, PU_CACHE), PICFMT_FLAT, &pngwidth, &pngheight, NULL, NULL, W_LumpLength(levelflat->u.flat.lumpnum), NULL, 0);
|
||||
levelflat->width = (UINT16)pngwidth;
|
||||
levelflat->height = (UINT16)pngheight;
|
||||
|
||||
|
@ -572,35 +566,33 @@ UINT8 *R_GetTextureFlat(levelflat_t *levelflat, boolean leveltexture, boolean is
|
|||
}
|
||||
else
|
||||
#endif
|
||||
if (levelflat->type == LEVELFLAT_PATCH)
|
||||
{
|
||||
UINT8 *converted;
|
||||
size_t size;
|
||||
patch_t *patch = W_CacheLumpNum(levelflat->u.flat.lumpnum, PU_CACHE);
|
||||
|
||||
levelflat->width = ds_flatwidth = SHORT(patch->width);
|
||||
levelflat->height = ds_flatheight = SHORT(patch->height);
|
||||
|
||||
levelflat->topoffset = patch->topoffset * FRACUNIT;
|
||||
levelflat->leftoffset = patch->leftoffset * FRACUNIT;
|
||||
|
||||
levelflat->flatpatch = Z_Malloc(levelflat->width * levelflat->height, PU_LEVEL, NULL);
|
||||
converted = Picture_FlatConvert(PICFMT_PATCH, patch, PICFMT_FLAT, 0, &size, levelflat->width, levelflat->height, patch->topoffset, patch->leftoffset, 0);
|
||||
M_Memcpy(levelflat->flatpatch, converted, size);
|
||||
Z_Free(converted);
|
||||
}
|
||||
flat = levelflat->flatpatch;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
flat = levelflat->flatpatch;
|
||||
ds_flatwidth = levelflat->width;
|
||||
ds_flatheight = levelflat->height;
|
||||
}
|
||||
|
||||
//xoffs += levelflat->leftoffset;
|
||||
//yoffs += levelflat->topoffset;
|
||||
|
||||
levelflat->u.texture.lastnum = levelflat->u.texture.num;
|
||||
return flat;
|
||||
|
||||
if (flatdata == NULL)
|
||||
flatdata = levelflat->flatpatch;
|
||||
return flatdata;
|
||||
}
|
||||
|
||||
//
|
||||
|
|
|
@ -93,8 +93,8 @@ void R_ClearTextureNumCache(boolean btell);
|
|||
|
||||
// Retrieve texture data.
|
||||
UINT8 *R_GetColumn(fixed_t tex, INT32 col);
|
||||
UINT8 *R_GetFlat(lumpnum_t flatnum);
|
||||
UINT8 *R_GetTextureFlat(levelflat_t *levelflat, boolean leveltexture, boolean ispng);
|
||||
void *R_GetFlat(lumpnum_t flatnum);
|
||||
void *R_GetLevelFlat(levelflat_t *levelflat);
|
||||
|
||||
boolean R_CheckPowersOfTwo(void);
|
||||
void R_CheckFlatLength(size_t size);
|
||||
|
|
Loading…
Reference in a new issue