SRB2/src/r_plane.h

132 lines
3.4 KiB
C
Raw Normal View History

2014-03-15 09:59:03 -07:00
// SONIC ROBO BLAST 2
//-----------------------------------------------------------------------------
// Copyright (C) 1993-1996 by id Software, Inc.
// Copyright (C) 1998-2000 by DooM Legacy Team.
2019-12-06 10:49:42 -08:00
// Copyright (C) 1999-2019 by Sonic Team Junior.
2014-03-15 09:59:03 -07: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.
//-----------------------------------------------------------------------------
/// \file r_plane.h
/// \brief Refresh, visplane stuff (floor, ceilings)
#ifndef __R_PLANE__
#define __R_PLANE__
#include "screen.h" // needs MAXVIDWIDTH/MAXVIDHEIGHT
#include "r_data.h"
#include "p_polyobj.h"
#define MAXVISPLANES 512
2014-03-15 09:59:03 -07:00
//
// Now what is a visplane, anyway?
// Simple: kinda floor/ceiling polygon optimised for SRB2 rendering.
//
typedef struct visplane_s
{
struct visplane_s *next;
fixed_t height;
fixed_t viewx, viewy, viewz;
2014-03-15 09:59:03 -07:00
angle_t viewangle;
angle_t plangle;
INT32 picnum;
INT32 lightlevel;
INT32 minx, maxx;
// colormaps per sector
extracolormap_t *extra_colormap;
2018-12-14 10:49:32 -08:00
// leave pads for [minx-1]/[maxx+1]
UINT16 padtopstart, top[MAXVIDWIDTH], padtopend;
UINT16 padbottomstart, bottom[MAXVIDWIDTH], padbottomend;
2014-03-15 09:59:03 -07:00
INT32 high, low; // R_PlaneBounds should set these.
fixed_t xoffs, yoffs; // Scrolling flats.
struct ffloor_s *ffloor;
#ifdef POLYOBJECTS_PLANES
2014-11-11 16:55:07 -08:00
polyobj_t *polyobj;
2014-03-15 09:59:03 -07:00
#endif
2015-04-20 00:10:14 -07:00
#ifdef ESLOPE
pslope_t *slope;
#endif
2014-03-15 09:59:03 -07:00
} visplane_t;
extern visplane_t *visplanes[MAXVISPLANES];
2014-03-15 09:59:03 -07:00
extern visplane_t *floorplane;
extern visplane_t *ceilingplane;
// Visplane related.
extern INT16 *lastopening, *openings;
extern size_t maxopenings;
extern INT16 floorclip[MAXVIDWIDTH], ceilingclip[MAXVIDWIDTH];
2018-12-14 09:08:25 -08:00
extern fixed_t frontscale[MAXVIDWIDTH], yslopetab[MAXVIDHEIGHT*16];
2014-03-15 09:59:03 -07:00
extern fixed_t cachedheight[MAXVIDHEIGHT];
extern fixed_t cacheddistance[MAXVIDHEIGHT];
extern fixed_t cachedxstep[MAXVIDHEIGHT];
extern fixed_t cachedystep[MAXVIDHEIGHT];
extern fixed_t basexscale, baseyscale;
extern fixed_t *yslope;
2018-12-14 09:08:25 -08:00
extern lighttable_t **planezlight;
2014-03-15 09:59:03 -07:00
void R_InitPlanes(void);
2014-03-15 09:59:03 -07:00
void R_ClearPlanes(void);
void R_ClearFFloorClips (void);
2014-03-15 09:59:03 -07:00
void R_MapPlane(INT32 y, INT32 x1, INT32 x2);
void R_MakeSpans(INT32 x, INT32 t1, INT32 b1, INT32 t2, INT32 b2);
void R_DrawPlanes(void);
visplane_t *R_FindPlane(fixed_t height, INT32 picnum, INT32 lightlevel, fixed_t xoff, fixed_t yoff, angle_t plangle,
2015-04-20 00:10:14 -07:00
extracolormap_t *planecolormap, ffloor_t *ffloor
#ifdef POLYOBJECTS_PLANES
, polyobj_t *polyobj
#endif
2015-04-20 00:10:14 -07:00
#ifdef ESLOPE
, pslope_t *slope
#endif
);
2014-03-15 09:59:03 -07:00
visplane_t *R_CheckPlane(visplane_t *pl, INT32 start, INT32 stop);
void R_ExpandPlane(visplane_t *pl, INT32 start, INT32 stop);
void R_PlaneBounds(visplane_t *plane);
// Draws a single visplane.
void R_DrawSinglePlane(visplane_t *pl);
2019-05-21 11:24:26 -07:00
void R_CheckFlatLength(size_t size);
boolean R_CheckPowersOfTwo(void);
2014-03-15 09:59:03 -07:00
typedef struct planemgr_s
{
visplane_t *plane;
fixed_t height;
fixed_t f_pos; // F for Front sector
fixed_t b_pos; // B for Back sector
fixed_t f_frac, f_step;
fixed_t b_frac, b_step;
INT16 f_clip[MAXVIDWIDTH];
INT16 c_clip[MAXVIDWIDTH];
2015-05-16 20:32:12 -07:00
#ifdef ESLOPE
// For slope rendering; the height at the other end
fixed_t f_pos_slope;
fixed_t b_pos_slope;
struct pslope_s *slope;
#endif
2014-03-15 09:59:03 -07:00
struct ffloor_s *ffloor;
#ifdef POLYOBJECTS_PLANES
polyobj_t *polyobj;
#endif
2018-12-14 09:08:25 -08:00
} visffloor_t;
2014-03-15 09:59:03 -07:00
2018-12-14 09:08:25 -08:00
extern visffloor_t ffloor[MAXFFLOORS];
2014-03-15 09:59:03 -07:00
extern INT32 numffloors;
void Portal_AddSkyboxPortals (void);
2014-03-15 09:59:03 -07:00
#endif