2016-03-01 15:47:10 +00:00
|
|
|
// 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:
|
|
|
|
// System specific interface stuff.
|
|
|
|
//
|
|
|
|
//-----------------------------------------------------------------------------
|
|
|
|
|
|
|
|
|
|
|
|
#ifndef __R_MAIN_H__
|
|
|
|
#define __R_MAIN_H__
|
|
|
|
|
|
|
|
#include "r_utility.h"
|
|
|
|
#include "d_player.h"
|
|
|
|
#include "v_palette.h"
|
|
|
|
#include "r_data/colormaps.h"
|
|
|
|
|
|
|
|
|
|
|
|
typedef BYTE lighttable_t; // This could be wider for >8 bit display.
|
|
|
|
|
|
|
|
//
|
|
|
|
// POV related.
|
|
|
|
//
|
|
|
|
extern bool bRenderingToCanvas;
|
2016-04-14 17:40:14 +00:00
|
|
|
extern double ViewCos;
|
|
|
|
extern double ViewSin;
|
2016-03-01 15:47:10 +00:00
|
|
|
extern fixed_t viewingrangerecip;
|
2016-04-14 17:40:14 +00:00
|
|
|
extern double FocalLengthX, FocalLengthY;
|
|
|
|
extern double InvZtoScale;
|
2016-03-01 15:47:10 +00:00
|
|
|
|
2016-04-14 17:40:14 +00:00
|
|
|
extern double WallTMapScale2;
|
2016-03-01 15:47:10 +00:00
|
|
|
|
|
|
|
extern int viewwindowx;
|
|
|
|
extern int viewwindowy;
|
|
|
|
|
2016-04-14 17:40:14 +00:00
|
|
|
extern double CenterX;
|
|
|
|
extern double CenterY;
|
|
|
|
extern double YaspectMul;
|
|
|
|
extern double IYaspectMul;
|
2016-03-01 15:47:10 +00:00
|
|
|
|
|
|
|
extern FDynamicColormap*basecolormap; // [RH] Colormap for sector currently being drawn
|
|
|
|
|
|
|
|
extern int linecount;
|
|
|
|
extern int loopcount;
|
|
|
|
|
|
|
|
extern bool r_dontmaplines;
|
|
|
|
|
|
|
|
//
|
|
|
|
// Lighting.
|
|
|
|
//
|
|
|
|
// [RH] This has changed significantly from Doom, which used lookup
|
|
|
|
// tables based on 1/z for walls and z for flats and only recognized
|
|
|
|
// 16 discrete light levels. The terminology I use is borrowed from Build.
|
|
|
|
//
|
|
|
|
|
|
|
|
// The size of a single colormap, in bits
|
|
|
|
#define COLORMAPSHIFT 8
|
|
|
|
|
|
|
|
// Convert a light level into an unbounded colormap index (shade). Result is
|
|
|
|
// fixed point. Why the +12? I wish I knew, but experimentation indicates it
|
|
|
|
// is necessary in order to best reproduce Doom's original lighting.
|
|
|
|
#define LIGHT2SHADE(l) ((NUMCOLORMAPS*2*FRACUNIT)-(((l)+12)*(FRACUNIT*NUMCOLORMAPS/128)))
|
|
|
|
|
|
|
|
// MAXLIGHTSCALE from original DOOM, divided by 2.
|
2016-04-15 00:14:04 +00:00
|
|
|
#define MAXLIGHTVIS (24.0)
|
2016-03-01 15:47:10 +00:00
|
|
|
|
|
|
|
// Convert a shade and visibility to a clamped colormap index.
|
|
|
|
// Result is not fixed point.
|
|
|
|
// Change R_CalcTiltedLighting() when this changes.
|
2016-04-15 00:14:04 +00:00
|
|
|
#define GETPALOOKUP(vis,shade) (clamp<int> (((shade)-FLOAT2FIXED(MIN(MAXLIGHTVIS,double(vis))))>>FRACBITS, 0, NUMCOLORMAPS-1))
|
2016-03-01 15:47:10 +00:00
|
|
|
|
2016-06-02 12:49:03 +00:00
|
|
|
// Calculate the light multiplier for dc_light/ds_light
|
|
|
|
// This is used instead of GETPALOOKUP when ds_colormap/dc_colormap is set to the base colormap
|
|
|
|
// Returns a value between 0 and 1 in fixed point
|
|
|
|
#define LIGHTSCALE(vis,shade) FLOAT2FIXED(clamp((FIXED2DBL(shade) - (MIN(MAXLIGHTVIS,double(vis)))) / NUMCOLORMAPS, 0.0, (NUMCOLORMAPS-1)/(double)NUMCOLORMAPS))
|
|
|
|
|
|
|
|
// Converts fixedlightlev into a shade value
|
|
|
|
#define FIXEDLIGHT2SHADE(lightlev) (((lightlev) >> COLORMAPSHIFT) << FRACBITS)
|
2016-05-28 18:40:33 +00:00
|
|
|
|
|
|
|
// calculates the light constant passed to the shade_pal_index function
|
|
|
|
inline uint32_t calc_light_multiplier(dsfixed_t light)
|
|
|
|
{
|
2016-06-02 12:49:03 +00:00
|
|
|
return 256 - (light >> (FRACBITS - 8));
|
2016-05-28 18:40:33 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
// Calculates a ARGB8 color for the given palette index and light multiplier
|
|
|
|
inline uint32_t shade_pal_index(uint32_t index, uint32_t light)
|
|
|
|
{
|
|
|
|
const PalEntry &color = GPalette.BaseColors[index];
|
|
|
|
uint32_t red = color.r;
|
|
|
|
uint32_t green = color.g;
|
|
|
|
uint32_t blue = color.b;
|
|
|
|
red = red * light / 256;
|
|
|
|
green = green * light / 256;
|
|
|
|
blue = blue * light / 256;
|
|
|
|
return 0xff000000 | (red << 16) | (green << 8) | blue;
|
|
|
|
}
|
|
|
|
|
2016-05-31 07:36:18 +00:00
|
|
|
extern bool r_swtruecolor;
|
|
|
|
|
2016-04-14 22:18:17 +00:00
|
|
|
extern double GlobVis;
|
2016-03-01 15:47:10 +00:00
|
|
|
|
2016-04-14 22:18:17 +00:00
|
|
|
void R_SetVisibility(double visibility);
|
|
|
|
double R_GetVisibility();
|
2016-03-01 15:47:10 +00:00
|
|
|
|
2016-04-14 22:18:17 +00:00
|
|
|
extern double r_BaseVisibility;
|
|
|
|
extern double r_WallVisibility;
|
|
|
|
extern double r_FloorVisibility;
|
2016-03-01 15:47:10 +00:00
|
|
|
extern float r_TiltVisibility;
|
2016-04-14 22:18:17 +00:00
|
|
|
extern double r_SpriteVisibility;
|
2016-03-01 15:47:10 +00:00
|
|
|
|
|
|
|
extern int r_actualextralight;
|
|
|
|
extern bool foggy;
|
|
|
|
extern int fixedlightlev;
|
|
|
|
extern lighttable_t* fixedcolormap;
|
|
|
|
extern FSpecialColormap*realfixedcolormap;
|
|
|
|
|
|
|
|
|
|
|
|
//
|
|
|
|
// Function pointers to switch refresh/drawing functions.
|
|
|
|
// Used to select shadow mode etc.
|
|
|
|
//
|
|
|
|
extern void (*colfunc) (void);
|
|
|
|
extern void (*basecolfunc) (void);
|
|
|
|
extern void (*fuzzcolfunc) (void);
|
|
|
|
extern void (*transcolfunc) (void);
|
|
|
|
// No shadow effects on floors.
|
|
|
|
extern void (*spanfunc) (void);
|
|
|
|
|
|
|
|
// [RH] Function pointers for the horizontal column drawers.
|
|
|
|
extern void (*hcolfunc_pre) (void);
|
|
|
|
extern void (*hcolfunc_post1) (int hx, int sx, int yl, int yh);
|
|
|
|
extern void (*hcolfunc_post2) (int hx, int sx, int yl, int yh);
|
2016-04-11 08:46:30 +00:00
|
|
|
extern void (*hcolfunc_post4) (int sx, int yl, int yh);
|
2016-03-01 15:47:10 +00:00
|
|
|
|
|
|
|
|
|
|
|
void R_InitTextureMapping ();
|
|
|
|
|
|
|
|
|
|
|
|
//
|
|
|
|
// REFRESH - the actual rendering functions.
|
|
|
|
//
|
|
|
|
|
|
|
|
// Called by G_Drawer.
|
|
|
|
void R_RenderActorView (AActor *actor, bool dontmaplines = false);
|
|
|
|
void R_SetupBuffer ();
|
|
|
|
|
|
|
|
void R_RenderViewToCanvas (AActor *actor, DCanvas *canvas, int x, int y, int width, int height, bool dontmaplines = false);
|
|
|
|
|
|
|
|
// [RH] Initialize multires stuff for renderer
|
|
|
|
void R_MultiresInit (void);
|
|
|
|
|
|
|
|
|
|
|
|
extern int stacked_extralight;
|
2016-04-14 22:18:17 +00:00
|
|
|
extern double stacked_visibility;
|
2016-04-14 17:40:14 +00:00
|
|
|
extern DVector3 stacked_viewpos;
|
|
|
|
extern DAngle stacked_angle;
|
2016-03-01 15:47:10 +00:00
|
|
|
|
|
|
|
extern void R_CopyStackedViewParameters();
|
|
|
|
|
|
|
|
|
|
|
|
#endif // __R_MAIN_H__
|