SRB2/src/r_picformats.h

135 lines
3.5 KiB
C
Raw Normal View History

2019-10-28 18:28:42 +00:00
// SONIC ROBO BLAST 2
//-----------------------------------------------------------------------------
// Copyright (C) 1993-1996 by id Software, Inc.
2020-01-06 21:22:23 +00:00
// Copyright (C) 2018-2020 by Jaime "Lactozilla" Passos.
// Copyright (C) 2019-2020 by Sonic Team Junior.
2019-10-28 18:28:42 +00:00
//
// This program is free software distributed under the
// terms of the GNU General Public License, version 2.
// See the 'LICENSE' file for more details.
//-----------------------------------------------------------------------------
2020-01-06 21:22:23 +00:00
/// \file r_picformats.h
2019-10-28 18:28:42 +00:00
/// \brief Patch generation.
#ifndef __R_PICFORMATS__
#define __R_PICFORMATS__
2019-10-28 18:28:42 +00:00
#include "r_defs.h"
#include "doomdef.h"
2020-01-06 21:22:23 +00:00
typedef enum
{
PICFMT_NONE = 0,
// Doom formats
PICFMT_PATCH,
PICFMT_FLAT,
// PNG
PICFMT_PNG,
// 16bpp
PICFMT_PATCH16,
PICFMT_FLAT16,
// 32bpp
PICFMT_PATCH32,
PICFMT_FLAT32
} pictureformat_t;
typedef enum
{
PICFLAGS_XFLIP = 1,
PICFLAGS_YFLIP = 1<<1
} pictureflags_t;
2020-01-07 21:52:12 +00:00
enum
{
PICDEPTH_NONE = 0,
PICDEPTH_8BPP = 8,
PICDEPTH_16BPP = 16,
PICDEPTH_32BPP = 32
};
2020-01-06 21:22:23 +00:00
void *Picture_Convert(
pictureformat_t informat, void *picture, pictureformat_t outformat,
size_t insize, size_t *outsize,
INT32 inwidth, INT32 inheight, INT32 inleftoffset, INT32 intopoffset,
pictureflags_t flags);
void *Picture_PatchConvert(
pictureformat_t informat, void *picture, pictureformat_t outformat,
size_t insize, size_t *outsize,
INT16 inwidth, INT16 inheight, INT16 inleftoffset, INT16 intopoffset,
pictureflags_t flags);
void *Picture_FlatConvert(
pictureformat_t informat, void *picture, pictureformat_t outformat,
size_t insize, size_t *outsize,
INT16 inwidth, INT16 inheight, INT16 inleftoffset, INT16 intopoffset,
pictureflags_t flags);
void *Picture_GetPatchPixel(
patch_t *patch, pictureformat_t informat,
INT32 x, INT32 y,
pictureflags_t flags);
2020-01-06 23:16:48 +00:00
void *Picture_TextureToFlat(size_t trickytex);
2020-01-06 21:22:23 +00:00
INT32 Picture_FormatBPP(pictureformat_t format);
boolean Picture_IsPatchFormat(pictureformat_t format);
boolean Picture_IsFlatFormat(pictureformat_t format);
2020-01-06 23:16:48 +00:00
boolean Picture_CheckIfPatch(patch_t *patch, size_t size);
2020-01-06 21:22:23 +00:00
2019-12-04 18:26:51 +00:00
// Structs
typedef enum
{
2019-12-04 18:26:51 +00:00
ROTAXIS_X, // Roll (the default)
ROTAXIS_Y, // Pitch
ROTAXIS_Z // Yaw
2019-11-13 15:47:30 +00:00
} rotaxis_t;
2019-10-28 18:28:42 +00:00
typedef struct
{
INT32 x, y;
2019-11-13 15:47:30 +00:00
rotaxis_t rotaxis;
2019-10-28 18:28:42 +00:00
} spriteframepivot_t;
typedef struct
{
spriteframepivot_t pivot[64];
boolean available;
} spriteinfo_t;
2019-12-04 18:26:51 +00:00
// Portable Network Graphics
2020-01-06 23:16:48 +00:00
boolean Picture_IsLumpPNG(const UINT8 *d, size_t s);
#define Picture_ThrowPNGError(lumpname, wadfilename) I_Error("W_Wad: Lump \"%s\" in file \"%s\" is a .png - please convert to either Doom or Flat (raw) image format.", lumpname, wadfilename); // Fears Of LJ Sonic
2019-12-04 18:26:51 +00:00
2019-10-28 18:28:42 +00:00
#ifndef NO_PNG_LUMPS
2020-01-06 23:16:48 +00:00
void *Picture_PNGConvert(
const UINT8 *png, pictureformat_t outformat,
INT32 *w, INT32 *h,
INT16 *topoffset, INT16 *leftoffset,
size_t insize, size_t *outsize,
pictureflags_t flags);
boolean Picture_PNGDimensions(UINT8 *png, INT16 *width, INT16 *height, size_t size);
2019-10-28 18:28:42 +00:00
#endif
#define PICTURE_PNG_USELOOKUP
2019-12-04 18:26:51 +00:00
// SpriteInfo
extern spriteinfo_t spriteinfo[NUMSPRITES];
2019-10-28 18:28:42 +00:00
void R_LoadSpriteInfoLumps(UINT16 wadnum, UINT16 numlumps);
void R_ParseSPRTINFOLump(UINT16 wadNum, UINT16 lumpNum);
2019-12-04 18:26:51 +00:00
// Sprite rotation
2019-10-28 18:28:42 +00:00
#ifdef ROTSPRITE
INT32 R_GetRollAngle(angle_t rollangle);
2019-10-28 18:28:42 +00:00
void R_CacheRotSprite(spritenum_t sprnum, UINT8 frame, spriteinfo_t *sprinfo, spriteframe_t *sprframe, INT32 rot, UINT8 flip);
2019-11-14 17:12:36 +00:00
void R_FreeSingleRotSprite(spritedef_t *spritedef);
void R_FreeSkinRotSprite(size_t skinnum);
extern fixed_t rollcosang[ROTANGLES];
extern fixed_t rollsinang[ROTANGLES];
2019-12-27 03:37:40 +00:00
void R_FreeAllRotSprite(void);
2019-10-28 18:28:42 +00:00
#endif
#endif // __R_PATCH__