// Emacs style mode select -*- C++ -*- //----------------------------------------------------------------------------- // // $Id:$ // // Copyright (C) 1993-1996 by id Software, Inc. // // This source is available for distribution and/or modification // only under the terms of the DOOM Source Code License as // published by id Software. All rights reserved. // // The source is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // FITNESS FOR A PARTICULAR PURPOSE. See the DOOM Source Code License // for more details. // // DESCRIPTION: // Refresh, visplane stuff (floor, ceilings). // //----------------------------------------------------------------------------- #ifndef __R_PLANE_H__ #define __R_PLANE_H__ #include class ASkyViewpoint; namespace swrenderer { // // The infamous visplane // struct visplane_s { struct visplane_s *next; // Next visplane in hash chain -- killough FDynamicColormap *colormap; // [RH] Support multiple colormaps FSectorPortal *portal; // [RH] Support sky boxes FTransform xform; secplane_t height; FTextureID picnum; int lightlevel; int left, right; int sky; // [RH] This set of variables copies information from the time when the // visplane is created. They are only used by stacks so that you can // have stacked sectors inside a skybox. If the visplane is not for a // stack, then they are unused. int extralight; double visibility; DVector3 viewpos; DAngle viewangle; fixed_t Alpha; bool Additive; // kg3D - keep track of mirror and skybox owner int CurrentSkybox; int CurrentPortalUniq; // mirror counter, counts all of them int MirrorFlags; // this is not related to CurrentMirror unsigned short *bottom; // [RH] bottom and top arrays are dynamically unsigned short pad; // allocated immediately after the unsigned short top[]; // visplane. }; typedef struct visplane_s visplane_t; // Visplane related. extern ptrdiff_t lastopening; // type short typedef void (*planefunction_t) (int top, int bottom); extern planefunction_t floorfunc; extern planefunction_t ceilingfunc_t; extern short floorclip[MAXWIDTH]; extern short ceilingclip[MAXWIDTH]; extern float yslope[MAXHEIGHT]; void R_InitPlanes (); void R_DeinitPlanes (); void R_ClearPlanes (bool fullclear); int R_DrawPlanes (); void R_DrawPortals (); void R_DrawSkyPlane (visplane_t *pl); void R_DrawNormalPlane (visplane_t *pl, double xscale, double yscale, fixed_t alpha, bool additive, bool masked); void R_DrawTiltedPlane (visplane_t *pl, double xscale, double yscale, fixed_t alpha, bool additive, bool masked); void R_MapVisPlane (visplane_t *pl, void (*mapfunc)(int y, int x1)); visplane_t *R_FindPlane ( const secplane_t &height, FTextureID picnum, int lightlevel, double alpha, bool additive, const FTransform &xform, int sky, FSectorPortal *portal); visplane_t *R_CheckPlane (visplane_t *pl, int start, int stop); // [RH] Added for multires support bool R_PlaneInitData (void); extern visplane_t* floorplane; extern visplane_t* ceilingplane; } #endif // __R_PLANE_H__