diff options
Diffstat (limited to 'src/v_video.h')
-rw-r--r-- | src/v_video.h | 207 |
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 | ||
55 | extern const byte *colrngs[]; | ||
56 | |||
57 | // symbolic indices into color translation table pointer array | ||
58 | typedef 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 | |||
77 | typedef 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 | ||
89 | extern screeninfo_t screens[NUM_SCREENS]; | ||
90 | extern 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 | ||
105 | extern unsigned short *V_Palette15; | ||
106 | extern unsigned short *V_Palette16; | ||
107 | extern 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 | ||
114 | typedef enum { | ||
115 | VID_MODE8, | ||
116 | VID_MODE15, | ||
117 | VID_MODE16, | ||
118 | VID_MODE32, | ||
119 | VID_MODEGL, | ||
120 | VID_MODEMAX | ||
121 | } video_mode_t; | ||
122 | |||
123 | extern const char *default_videomode; | ||
124 | |||
125 | void V_InitMode(video_mode_t mode); | ||
126 | |||
127 | // video mode query interface | ||
128 | video_mode_t V_GetMode(void); | ||
129 | int V_GetModePixelDepth(video_mode_t mode); | ||
130 | int V_GetNumPixelBits(void); | ||
131 | int V_GetPixelDepth(void); | ||
132 | |||
133 | //jff 4/24/98 loads color translation lumps | ||
134 | void V_InitColorTranslation(void); | ||
135 | |||
136 | // Allocates buffer screens, call before R_Init. | ||
137 | void V_Init (void); | ||
138 | |||
139 | // V_CopyRect | ||
140 | typedef 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); | ||
144 | extern V_CopyRect_f V_CopyRect; | ||
145 | |||
146 | // V_FillRect | ||
147 | typedef void (*V_FillRect_f)(int scrn, int x, int y, | ||
148 | int width, int height, byte colour); | ||
149 | extern 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 | ||
155 | typedef void (*V_DrawNumPatch_f)(int x, int y, int scrn, | ||
156 | int lump, int cm, | ||
157 | enum patch_translation_e flags); | ||
158 | extern 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 */ | ||
172 | typedef void (*V_DrawBackground_f)(const char* flatname, int scrn); | ||
173 | extern V_DrawBackground_f V_DrawBackground; | ||
174 | |||
175 | void V_DestroyUnusedTrueColorPalettes(void); | ||
176 | // CPhipps - function to set the palette to palette number pal. | ||
177 | void V_SetPalette(int pal); | ||
178 | |||
179 | // CPhipps - function to plot a pixel | ||
180 | |||
181 | // V_PlotPixel | ||
182 | typedef void (*V_PlotPixel_f)(int,int,int,byte); | ||
183 | extern V_PlotPixel_f V_PlotPixel; | ||
184 | |||
185 | typedef struct | ||
186 | { | ||
187 | int x, y; | ||
188 | } fpoint_t; | ||
189 | |||
190 | typedef struct | ||
191 | { | ||
192 | fpoint_t a, b; | ||
193 | } fline_t; | ||
194 | |||
195 | // V_DrawLine | ||
196 | typedef void (*V_DrawLine_f)(fline_t* fl, int color); | ||
197 | extern V_DrawLine_f V_DrawLine; | ||
198 | |||
199 | void V_AllocScreen(screeninfo_t *scrn); | ||
200 | void V_AllocScreens(); | ||
201 | void V_FreeScreen(screeninfo_t *scrn); | ||
202 | void V_FreeScreens(); | ||
203 | |||
204 | #ifdef GL_DOOM | ||
205 | #include "gl_struct.h" | ||
206 | #endif | ||
207 | #endif | ||