v_video.h 12.7 KB
Newer Older
Alam Ed Arias committed
1 2 3 4
// SONIC ROBO BLAST 2
//-----------------------------------------------------------------------------
// Copyright (C) 1993-1996 by id Software, Inc.
// Copyright (C) 1998-2000 by DooM Legacy Team.
James R. committed
5
// Copyright (C) 1999-2020 by Sonic Team Junior.
Alam Ed Arias committed
6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29
//
// 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  v_video.h
/// \brief Gamma correction LUT

#ifndef __V_VIDEO__
#define __V_VIDEO__

#include "doomdef.h"
#include "doomtype.h"
#include "r_defs.h"

//
// VIDEO
//

// Screen 0 is the screen updated by I_Update screen.
// Screen 1 is an extra buffer.

extern UINT8 *screens[5];

30 31 32 33
extern consvar_t cv_ticrate, cv_constextsize,\
cv_globalgamma, cv_globalsaturation, \
cv_rhue, cv_yhue, cv_ghue, cv_chue, cv_bhue, cv_mhue,\
cv_rgamma, cv_ygamma, cv_ggamma, cv_cgamma, cv_bgamma, cv_mgamma, \
Marco Z committed
34 35
cv_rsaturation, cv_ysaturation, cv_gsaturation, cv_csaturation, cv_bsaturation, cv_msaturation,\
cv_allcaps;
Alam Ed Arias committed
36 37 38 39

// Allocates buffer screens, call before R_Init.
void V_Init(void);

40
// Color look-up table
Jaime Ita Passos committed
41 42 43 44 45 46
#define COLORBITS 6
#define SHIFTCOLORBITS (8-COLORBITS)
#define CLUTSIZE (1<<COLORBITS)

extern UINT8 colorlookup[CLUTSIZE][CLUTSIZE][CLUTSIZE];

47
void InitColorLUT(RGBA_t *palette);
Jaime Ita Passos committed
48

Alam Ed Arias committed
49 50 51 52 53 54 55 56 57
// Set the current RGB palette lookup to use for palettized graphics
void V_SetPalette(INT32 palettenum);

void V_SetPaletteLump(const char *pal);

const char *R_GetPalname(UINT16 num);
const char *GetPalette(void);

extern RGBA_t *pLocalPalette;
toaster committed
58
extern RGBA_t *pMasterPalette;
Alam Ed Arias committed
59

Jaime Ita Passos committed
60 61
void V_CubeApply(UINT8 *red, UINT8 *green, UINT8 *blue);

Alam Ed Arias committed
62 63
// Retrieve the ARGB value from a palette color index
#define V_GetColor(color) (pLocalPalette[color&0xFF])
64
#define V_GetMasterColor(color) (pMasterPalette[color&0xFF])
Alam Ed Arias committed
65 66 67 68 69 70

// Bottom 8 bits are used for parameter (screen or character)
#define V_PARAMMASK          0x000000FF

// flags hacked in scrn (not supported by all functions (see src))
// patch scaling uses bits 9 and 10
Alam Ed Arias committed
71
#define V_SCALEPATCHSHIFT    8
Alam Ed Arias committed
72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88
#define V_SCALEPATCHMASK     0x00000300
#define V_NOSCALEPATCH       0x00000100
#define V_SMALLSCALEPATCH    0x00000200
#define V_MEDSCALEPATCH      0x00000300

// string spacing uses bits 11 and 12
#define V_SPACINGMASK        0x00000C00
#define V_6WIDTHSPACE        0x00000400 // early 2.1 style spacing, variable widths, 6 character space
#define V_OLDSPACING         0x00000800 // Old style spacing, 8 per character 4 per space
#define V_MONOSPACE          0x00000C00 // Don't do width checks on characters, all characters 8 width

// use bits 13-16 for colors
// though we only have 7 colors now, perhaps we can introduce
// more as needed later
#define V_CHARCOLORSHIFT     12
#define V_CHARCOLORMASK      0x0000F000
// for simplicity's sake, shortcuts to specific colors
89
#define V_MAGENTAMAP         0x00001000
Alam Ed Arias committed
90 91 92 93 94 95
#define V_YELLOWMAP          0x00002000
#define V_GREENMAP           0x00003000
#define V_BLUEMAP            0x00004000
#define V_REDMAP             0x00005000
#define V_GRAYMAP            0x00006000
#define V_ORANGEMAP          0x00007000
96 97 98 99 100 101 102 103
#define V_SKYMAP             0x00008000
#define V_PURPLEMAP          0x00009000
#define V_AQUAMAP            0x0000A000
#define V_PERIDOTMAP         0x0000B000
#define V_AZUREMAP           0x0000C000
#define V_BROWNMAP           0x0000D000
#define V_ROSYMAP            0x0000E000
#define V_INVERTMAP          0x0000F000
Alam Ed Arias committed
104 105 106 107 108 109 110 111 112

// use bits 17-20 for alpha transparency
#define V_ALPHASHIFT         16
#define V_ALPHAMASK          0x000F0000
// define specific translucencies
#define V_10TRANS            0x00010000
#define V_20TRANS            0x00020000
#define V_30TRANS            0x00030000
#define V_40TRANS            0x00040000
Alam Ed Arias committed
113
#define V_TRANSLUCENT        0x00050000 // TRANS50
Alam Ed Arias committed
114 115
#define V_60TRANS            0x00060000
#define V_70TRANS            0x00070000
Alam Ed Arias committed
116
#define V_80TRANS            0x00080000 // used to be V_8020TRANS
Alam Ed Arias committed
117
#define V_90TRANS            0x00090000
Alam Ed Arias committed
118 119 120
#define V_HUDTRANSHALF       0x000D0000
#define V_HUDTRANS           0x000E0000 // draw the hud translucent
#define V_HUDTRANSDOUBLE     0x000F0000
121 122 123 124
// Macros follow
#define V_USERHUDTRANSHALF   ((10-(cv_translucenthud.value/2))<<V_ALPHASHIFT)
#define V_USERHUDTRANS       ((10-cv_translucenthud.value)<<V_ALPHASHIFT)
#define V_USERHUDTRANSDOUBLE ((10-min(cv_translucenthud.value*2, 10))<<V_ALPHASHIFT)
Alam Ed Arias committed
125 126 127 128 129 130

#define V_AUTOFADEOUT        0x00100000 // used by CECHOs, automatic fade out when almost over
#define V_RETURN8            0x00200000 // 8 pixel return instead of 12
#define V_OFFSET             0x00400000 // account for offsets in patches
#define V_ALLOWLOWERCASE     0x00800000 // (strings only) allow fonts that have lowercase letters to use them
#define V_FLIP               0x00800000 // (patches only) Horizontal flip
Jaime Ita Passos committed
131
#define V_CENTERNAMETAG      0x00800000 // (nametag only) center nametag lines
Alam Ed Arias committed
132 133 134 135 136 137 138 139 140

#define V_SNAPTOTOP          0x01000000 // for centering
#define V_SNAPTOBOTTOM       0x02000000 // for centering
#define V_SNAPTOLEFT         0x04000000 // for centering
#define V_SNAPTORIGHT        0x08000000 // for centering

#define V_WRAPX              0x10000000 // Don't clamp texture on X (for HW mode)
#define V_WRAPY              0x20000000 // Don't clamp texture on Y (for HW mode)

141 142
#define V_NOSCALESTART       0x40000000 // don't scale x, y, start coords
#define V_PERPLAYER          0x80000000 // automatically adjust coordinates/scaling for splitscreen mode
Alam Ed Arias committed
143

Alam Ed Arias committed
144 145 146 147 148 149 150 151
// defines for old functions
#define V_DrawPatch(x,y,s,p) V_DrawFixedPatch((x)<<FRACBITS, (y)<<FRACBITS, FRACUNIT, s|V_NOSCALESTART|V_NOSCALEPATCH, p, NULL)
#define V_DrawTranslucentMappedPatch(x,y,s,p,c) V_DrawFixedPatch((x)<<FRACBITS, (y)<<FRACBITS, FRACUNIT, s, p, c)
#define V_DrawSmallTranslucentMappedPatch(x,y,s,p,c) V_DrawFixedPatch((x)<<FRACBITS, (y)<<FRACBITS, FRACUNIT/2, s, p, c)
#define V_DrawTinyTranslucentMappedPatch(x,y,s,p,c) V_DrawFixedPatch((x)<<FRACBITS, (y)<<FRACBITS, FRACUNIT/4, s, p, c)
#define V_DrawMappedPatch(x,y,s,p,c) V_DrawFixedPatch((x)<<FRACBITS, (y)<<FRACBITS, FRACUNIT, s, p, c)
#define V_DrawSmallMappedPatch(x,y,s,p,c) V_DrawFixedPatch((x)<<FRACBITS, (y)<<FRACBITS, FRACUNIT/2, s, p, c)
#define V_DrawTinyMappedPatch(x,y,s,p,c) V_DrawFixedPatch((x)<<FRACBITS, (y)<<FRACBITS, FRACUNIT/4, s, p, c)
152
#define V_DrawScaledPatch(x,y,s,p) V_DrawFixedPatch((x)*FRACUNIT, (y)<<FRACBITS, FRACUNIT, s, p, NULL)
Alam Ed Arias committed
153 154 155 156 157 158
#define V_DrawSmallScaledPatch(x,y,s,p) V_DrawFixedPatch((x)<<FRACBITS, (y)<<FRACBITS, FRACUNIT/2, s, p, NULL)
#define V_DrawTinyScaledPatch(x,y,s,p) V_DrawFixedPatch((x)<<FRACBITS, (y)<<FRACBITS, FRACUNIT/4, s, p, NULL)
#define V_DrawTranslucentPatch(x,y,s,p) V_DrawFixedPatch((x)<<FRACBITS, (y)<<FRACBITS, FRACUNIT, s, p, NULL)
#define V_DrawSmallTranslucentPatch(x,y,s,p) V_DrawFixedPatch((x)<<FRACBITS, (y)<<FRACBITS, FRACUNIT/2, s, p, NULL)
#define V_DrawTinyTranslucentPatch(x,y,s,p) V_DrawFixedPatch((x)<<FRACBITS, (y)<<FRACBITS, FRACUNIT/4, s, p, NULL)
#define V_DrawSciencePatch(x,y,s,p,sc) V_DrawFixedPatch(x,y,sc,s,p,NULL)
toaster committed
159 160
#define V_DrawFixedPatch(x,y,sc,s,p,c) V_DrawStretchyFixedPatch(x,y,sc,sc,s,p,c)
void V_DrawStretchyFixedPatch(fixed_t x, fixed_t y, fixed_t pscale, fixed_t vscale, INT32 scrn, patch_t *patch, const UINT8 *colormap);
Alam Ed Arias committed
161
void V_DrawCroppedPatch(fixed_t x, fixed_t y, fixed_t pscale, INT32 scrn, patch_t *patch, fixed_t sx, fixed_t sy, fixed_t w, fixed_t h);
Alam Ed Arias committed
162 163 164 165 166 167 168 169 170 171 172

void V_DrawContinueIcon(INT32 x, INT32 y, INT32 flags, INT32 skinnum, UINT8 skincolor);

// Draw a linear block of pixels into the view buffer.
void V_DrawBlock(INT32 x, INT32 y, INT32 scrn, INT32 width, INT32 height, const UINT8 *src);

// draw a pic_t, SCALED
void V_DrawScaledPic (INT32 px1, INT32 py1, INT32 scrn, INT32 lumpnum);

// fill a box with a single color
void V_DrawFill(INT32 x, INT32 y, INT32 w, INT32 h, INT32 c);
Latapostrophe committed
173
void V_DrawFillConsoleMap(INT32 x, INT32 y, INT32 w, INT32 h, INT32 c);
Alam Ed Arias committed
174 175 176 177
// fill a box with a flat as a pattern
void V_DrawFlatFill(INT32 x, INT32 y, INT32 w, INT32 h, lumpnum_t flatnum);

// fade down the screen buffer before drawing the menu over
178
void V_DrawFadeScreen(UINT16 color, UINT8 strength);
179 180
// available to lua over my dead body, which will probably happen in this heat
void V_DrawFadeFill(INT32 x, INT32 y, INT32 w, INT32 h, INT32 c, UINT16 color, UINT8 strength);
Alam Ed Arias committed
181

182
void V_DrawFadeConsBack(INT32 plines);
183
void V_DrawPromptBack(INT32 boxheight, INT32 color);
Alam Ed Arias committed
184 185 186

// draw a single character
void V_DrawCharacter(INT32 x, INT32 y, INT32 c, boolean lowercaseallowed);
Latapostrophe committed
187 188
// draw a single character, but for the chat
void V_DrawChatCharacter(INT32 x, INT32 y, INT32 c, boolean lowercaseallowed, UINT8 *colormap);
Alam Ed Arias committed
189

190 191
UINT8 *V_GetStringColormap(INT32 colorflags);

Alam Ed Arias committed
192 193 194 195
void V_DrawLevelTitle(INT32 x, INT32 y, INT32 option, const char *string);

// wordwrap a string using the hu_font
char *V_WordWrap(INT32 x, INT32 w, INT32 option, const char *string);
196
UINT8 *V_GetStringColormap(INT32 colorflags);
Alam Ed Arias committed
197 198 199 200 201 202

// draw a string using the hu_font
void V_DrawString(INT32 x, INT32 y, INT32 option, const char *string);
void V_DrawCenteredString(INT32 x, INT32 y, INT32 option, const char *string);
void V_DrawRightAlignedString(INT32 x, INT32 y, INT32 option, const char *string);

Alam Ed Arias committed
203
// draw a string using the hu_font, 0.5x scale
Alam Ed Arias committed
204
void V_DrawSmallString(INT32 x, INT32 y, INT32 option, const char *string);
205
void V_DrawCenteredSmallString(INT32 x, INT32 y, INT32 option, const char *string);
Alam Ed Arias committed
206
void V_DrawRightAlignedSmallString(INT32 x, INT32 y, INT32 option, const char *string);
Alam Ed Arias committed
207

Alam Ed Arias committed
208
// draw a string using the tny_font
Alam Ed Arias committed
209
void V_DrawThinString(INT32 x, INT32 y, INT32 option, const char *string);
210
void V_DrawCenteredThinString(INT32 x, INT32 y, INT32 option, const char *string);
Alam Ed Arias committed
211 212
void V_DrawRightAlignedThinString(INT32 x, INT32 y, INT32 option, const char *string);

213 214
// draw a string using the tny_font, 0.5x scale
void V_DrawSmallThinString(INT32 x, INT32 y, INT32 option, const char *string);
215
void V_DrawCenteredSmallThinString(INT32 x, INT32 y, INT32 option, const char *string);
216
void V_DrawRightAlignedSmallThinString(INT32 x, INT32 y, INT32 option, const char *string);
217

218
// draw a string using the hu_font at fixed_t coordinates
Alam Ed Arias committed
219
void V_DrawStringAtFixed(fixed_t x, fixed_t y, INT32 option, const char *string);
220
void V_DrawCenteredStringAtFixed(fixed_t x, fixed_t y, INT32 option, const char *string);
221
void V_DrawRightAlignedStringAtFixed(fixed_t x, fixed_t y, INT32 option, const char *string);
222

223
// draw a string using the hu_font at fixed_t coordinates, 0.5x scale
224
void V_DrawSmallStringAtFixed(fixed_t x, fixed_t y, INT32 option, const char *string);
225
void V_DrawCenteredSmallStringAtFixed(fixed_t x, fixed_t y, INT32 option, const char *string);
226
void V_DrawRightAlignedSmallStringAtFixed(fixed_t x, fixed_t y, INT32 option, const char *string);
227 228

// draw a string using the tny_font at fixed_t coordinates
229
void V_DrawThinStringAtFixed(fixed_t x, fixed_t y, INT32 option, const char *string);
230
void V_DrawCenteredThinStringAtFixed(fixed_t x, fixed_t y, INT32 option, const char *string);
231
void V_DrawRightAlignedThinStringAtFixed(fixed_t x, fixed_t y, INT32 option, const char *string);
Alam Ed Arias committed
232

233
// draw a string using the tny_font at fixed_t coordinates, 0.5x scale
234
void V_DrawSmallThinStringAtFixed(fixed_t x, fixed_t y, INT32 option, const char *string);
235 236
void V_DrawCenteredSmallThinStringAtFixed(fixed_t x, fixed_t y, INT32 option, const char *string);
void V_DrawRightAlignedSmallThinStringAtFixed(fixed_t x, fixed_t y, INT32 option, const char *string);
Alam Ed Arias committed
237 238 239 240

// Draw tall nums, used for menu, HUD, intermission
void V_DrawTallNum(INT32 x, INT32 y, INT32 flags, INT32 num);
void V_DrawPaddedTallNum(INT32 x, INT32 y, INT32 flags, INT32 num, INT32 digits);
241
void V_DrawLevelActNum(INT32 x, INT32 y, INT32 flags, UINT8 num);
Alam Ed Arias committed
242 243 244 245

// Find string width from lt_font chars
INT32 V_LevelNameWidth(const char *string);
INT32 V_LevelNameHeight(const char *string);
246
INT16 V_LevelActNumWidth(UINT8 num); // act number width
Alam Ed Arias committed
247 248 249 250

void V_DrawCreditString(fixed_t x, fixed_t y, INT32 option, const char *string);
INT32 V_CreditStringWidth(const char *string);

SteelT committed
251
// Draw a string using the nt_font
Jaime Ita Passos committed
252 253 254
void V_DrawNameTag(INT32 x, INT32 y, INT32 option, fixed_t scale, UINT8 *basecolormap, UINT8 *outlinecolormap, const char *string);
INT32 V_CountNameTagLines(const char *string);
INT32 V_NameTagWidth(const char *string);
Alam Ed Arias committed
255 256 257

// Find string width from hu_font chars
INT32 V_StringWidth(const char *string, INT32 option);
Alam Ed Arias committed
258 259
// Find string width from hu_font chars, 0.5x scale
INT32 V_SmallStringWidth(const char *string, INT32 option);
Alam Ed Arias committed
260 261
// Find string width from tny_font chars
INT32 V_ThinStringWidth(const char *string, INT32 option);
262 263
// Find string width from tny_font chars, 0.5x scale
INT32 V_SmallThinStringWidth(const char *string, INT32 option);
Alam Ed Arias committed
264 265 266 267 268 269 270 271 272

void V_DoPostProcessor(INT32 view, postimg_t type, INT32 param);

void V_DrawPatchFill(patch_t *pat);

void VID_BlitLinearScreen(const UINT8 *srcptr, UINT8 *destptr, INT32 width, INT32 height, size_t srcrowbytes,
	size_t destrowbytes);

#endif