aboutsummaryrefslogtreecommitdiff
path: root/src/v_video.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/v_video.h')
-rw-r--r--src/v_video.h207
1 files changed, 207 insertions, 0 deletions
diff --git a/src/v_video.h b/src/v_video.h
new file mode 100644
index 0000000..76cfaa2
--- /dev/null
+++ b/src/v_video.h
@@ -0,0 +1,207 @@
1/* Emacs style mode select -*- C++ -*-
2 *-----------------------------------------------------------------------------
3 *
4 *
5 * PrBoom: a Doom port merged with LxDoom and LSDLDoom
6 * based on BOOM, a modified and improved DOOM engine
7 * Copyright (C) 1999 by
8 * id Software, Chi Hoang, Lee Killough, Jim Flynn, Rand Phares, Ty Halderman
9 * Copyright (C) 1999-2000 by
10 * Jess Haas, Nicolas Kalkhof, Colin Phipps, Florian Schulze
11 * Copyright 2005, 2006 by
12 * Florian Schulze, Colin Phipps, Neil Stevens, Andrey Budko
13 *
14 * This program is free software; you can redistribute it and/or
15 * modify it under the terms of the GNU General Public License
16 * as published by the Free Software Foundation; either version 2
17 * of the License, or (at your option) any later version.
18 *
19 * This program is distributed in the hope that it will be useful,
20 * but WITHOUT ANY WARRANTY; without even the implied warranty of
21 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
22 * GNU General Public License for more details.
23 *
24 * You should have received a copy of the GNU General Public License
25 * along with this program; if not, write to the Free Software
26 * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
27 * 02111-1307, USA.
28 *
29 * DESCRIPTION:
30 * Gamma correction LUT.
31 * Color range translation support
32 * Functions to draw patches (by post) directly to screen.
33 * Functions to blit a block to the screen.
34 *
35 *-----------------------------------------------------------------------------*/
36
37#ifndef __V_VIDEO__
38#define __V_VIDEO__
39
40#include "doomtype.h"
41#include "doomdef.h"
42// Needed because we are refering to patches.
43#include "r_data.h"
44
45//
46// VIDEO
47//
48
49#define CENTERY (SCREENHEIGHT/2)
50
51// Screen 0 is the screen updated by I_Update screen.
52// Screen 1 is an extra buffer.
53
54// array of pointers to color translation tables
55extern const byte *colrngs[];
56
57// symbolic indices into color translation table pointer array
58typedef enum
59{
60 CR_BRICK, //0
61 CR_TAN, //1
62 CR_GRAY, //2
63 CR_GREEN, //3
64 CR_BROWN, //4
65 CR_GOLD, //5
66 CR_RED, //6
67 CR_BLUE, //7
68 CR_ORANGE, //8
69 CR_YELLOW, //9
70 CR_BLUE2, //10 // proff
71 CR_LIMIT //11 //jff 2/27/98 added for range check
72} crange_idx_e;
73//jff 1/16/98 end palette color range additions
74
75#define CR_DEFAULT CR_RED /* default value for out of range colors */
76
77typedef struct {
78 byte *data; // pointer to the screen content
79 boolean not_on_heap; // if set, no malloc or free is preformed and
80 // data never set to NULL. Used i.e. with SDL doublebuffer.
81 int width; // the width of the surface
82 int height; // the height of the surface, used when mallocing
83 int byte_pitch; // tha actual width of one line, used when mallocing
84 int short_pitch; // tha actual width of one line, used when mallocing
85 int int_pitch; // tha actual width of one line, used when mallocing
86} screeninfo_t;
87
88#define NUM_SCREENS 6
89extern screeninfo_t screens[NUM_SCREENS];
90extern int usegamma;
91
92// Varying bit-depth support -POPE
93//
94// For bilinear filtering, each palette color is pre-weighted and put in a
95// table for fast blending operations. These macros decide how many weights
96// to create for each color. The lower the number, the lower the blend
97// accuracy, which can produce very bad artifacts in texture filtering.
98#define VID_NUMCOLORWEIGHTS 64
99#define VID_COLORWEIGHTMASK (VID_NUMCOLORWEIGHTS-1)
100#define VID_COLORWEIGHTBITS 6
101
102// Palettes for converting from 8 bit color to 16 and 32 bit. Also
103// contains the weighted versions of each palette color for filtering
104// operations
105extern unsigned short *V_Palette15;
106extern unsigned short *V_Palette16;
107extern unsigned int *V_Palette32;
108
109#define VID_PAL15(color, weight) V_Palette15[ (color)*VID_NUMCOLORWEIGHTS + (weight) ]
110#define VID_PAL16(color, weight) V_Palette16[ (color)*VID_NUMCOLORWEIGHTS + (weight) ]
111#define VID_PAL32(color, weight) V_Palette32[ (color)*VID_NUMCOLORWEIGHTS + (weight) ]
112
113// The available bit-depth modes
114typedef enum {
115 VID_MODE8,
116 VID_MODE15,
117 VID_MODE16,
118 VID_MODE32,
119 VID_MODEGL,
120 VID_MODEMAX
121} video_mode_t;
122
123extern const char *default_videomode;
124
125void V_InitMode(video_mode_t mode);
126
127// video mode query interface
128video_mode_t V_GetMode(void);
129int V_GetModePixelDepth(video_mode_t mode);
130int V_GetNumPixelBits(void);
131int V_GetPixelDepth(void);
132
133//jff 4/24/98 loads color translation lumps
134void V_InitColorTranslation(void);
135
136// Allocates buffer screens, call before R_Init.
137void V_Init (void);
138
139// V_CopyRect
140typedef void (*V_CopyRect_f)(int srcx, int srcy, int srcscrn,
141 int width, int height,
142 int destx, int desty, int destscrn,
143 enum patch_translation_e flags);
144extern V_CopyRect_f V_CopyRect;
145
146// V_FillRect
147typedef void (*V_FillRect_f)(int scrn, int x, int y,
148 int width, int height, byte colour);
149extern V_FillRect_f V_FillRect;
150
151// CPhipps - patch drawing
152// Consolidated into the 3 really useful functions:
153
154// V_DrawNumPatch - Draws the patch from lump num
155typedef void (*V_DrawNumPatch_f)(int x, int y, int scrn,
156 int lump, int cm,
157 enum patch_translation_e flags);
158extern V_DrawNumPatch_f V_DrawNumPatch;
159
160// V_DrawNamePatch - Draws the patch from lump "name"
161#define V_DrawNamePatch(x,y,s,n,t,f) V_DrawNumPatch(x,y,s,W_GetNumForName(n),t,f)
162
163/* cph -
164 * Functions to return width & height of a patch.
165 * Doesn't really belong here, but is often used in conjunction with
166 * this code.
167 */
168#define V_NamePatchWidth(name) R_NumPatchWidth(W_GetNumForName(name))
169#define V_NamePatchHeight(name) R_NumPatchHeight(W_GetNumForName(name))
170
171/* cphipps 10/99: function to tile a flat over the screen */
172typedef void (*V_DrawBackground_f)(const char* flatname, int scrn);
173extern V_DrawBackground_f V_DrawBackground;
174
175void V_DestroyUnusedTrueColorPalettes(void);
176// CPhipps - function to set the palette to palette number pal.
177void V_SetPalette(int pal);
178
179// CPhipps - function to plot a pixel
180
181// V_PlotPixel
182typedef void (*V_PlotPixel_f)(int,int,int,byte);
183extern V_PlotPixel_f V_PlotPixel;
184
185typedef struct
186{
187 int x, y;
188} fpoint_t;
189
190typedef struct
191{
192 fpoint_t a, b;
193} fline_t;
194
195// V_DrawLine
196typedef void (*V_DrawLine_f)(fline_t* fl, int color);
197extern V_DrawLine_f V_DrawLine;
198
199void V_AllocScreen(screeninfo_t *scrn);
200void V_AllocScreens();
201void V_FreeScreen(screeninfo_t *scrn);
202void V_FreeScreens();
203
204#ifdef GL_DOOM
205#include "gl_struct.h"
206#endif
207#endif