aboutsummaryrefslogtreecommitdiff
path: root/src/r_draw.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/r_draw.h')
-rw-r--r--src/r_draw.h163
1 files changed, 163 insertions, 0 deletions
diff --git a/src/r_draw.h b/src/r_draw.h
new file mode 100644
index 0000000..1b9bc62
--- /dev/null
+++ b/src/r_draw.h
@@ -0,0 +1,163 @@
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 * System specific interface stuff.
31 *
32 *-----------------------------------------------------------------------------*/
33
34#ifndef __R_DRAW__
35#define __R_DRAW__
36
37#include "r_defs.h"
38
39#ifdef __GNUG__
40#pragma interface
41#endif
42
43enum column_pipeline_e {
44 RDC_PIPELINE_STANDARD,
45 RDC_PIPELINE_TRANSLUCENT,
46 RDC_PIPELINE_TRANSLATED,
47 RDC_PIPELINE_FUZZ,
48 RDC_PIPELINE_MAXPIPELINES,
49};
50
51// Used to specify what kind of filering you want
52enum draw_filter_type_e {
53 RDRAW_FILTER_NONE,
54 RDRAW_FILTER_POINT,
55 RDRAW_FILTER_LINEAR,
56 RDRAW_FILTER_ROUNDED,
57 RDRAW_FILTER_MAXFILTERS
58};
59
60// Used to specify what kind of column edge rendering to use on masked
61// columns. SQUARE = standard, SLOPED = slope the column edge up or down
62// based on neighboring columns
63enum sloped_edge_type_e {
64 RDRAW_MASKEDCOLUMNEDGE_SQUARE,
65 RDRAW_MASKEDCOLUMNEDGE_SLOPED
66};
67
68// Packaged into a struct - POPE
69typedef struct {
70 int x;
71 int yl;
72 int yh;
73 fixed_t z; // the current column z coord
74 fixed_t iscale;
75 fixed_t texturemid;
76 int texheight; // killough
77 fixed_t texu; // the current column u coord
78 const byte *source; // first pixel in a column
79 const byte *prevsource; // first pixel in previous column
80 const byte *nextsource; // first pixel in next column
81 const lighttable_t *colormap;
82 const lighttable_t *nextcolormap;
83 const byte *translation;
84 int edgeslope; // OR'ed RDRAW_EDGESLOPE_*
85 // 1 if R_DrawColumn* is currently drawing a masked column, otherwise 0
86 int drawingmasked;
87 enum sloped_edge_type_e edgetype;
88} draw_column_vars_t;
89
90void R_SetDefaultDrawColumnVars(draw_column_vars_t *dcvars);
91
92void R_VideoErase(int x, int y, int count);
93
94typedef struct {
95 int y;
96 int x1;
97 int x2;
98 fixed_t z; // the current span z coord
99 fixed_t xfrac;
100 fixed_t yfrac;
101 fixed_t xstep;
102 fixed_t ystep;
103 const byte *source; // start of a 64*64 tile image
104 const lighttable_t *colormap;
105 const lighttable_t *nextcolormap;
106} draw_span_vars_t;
107
108typedef struct {
109 byte *byte_topleft;
110 unsigned short *short_topleft;
111 unsigned int *int_topleft;
112 int byte_pitch;
113 int short_pitch;
114 int int_pitch;
115
116 enum draw_filter_type_e filterwall;
117 enum draw_filter_type_e filterfloor;
118 enum draw_filter_type_e filtersprite;
119 enum draw_filter_type_e filterz;
120 enum draw_filter_type_e filterpatch;
121
122 enum sloped_edge_type_e sprite_edges;
123 enum sloped_edge_type_e patch_edges;
124
125 // Used to specify an early-out magnification threshold for filtering.
126 // If a texture is being minified (dcvars.iscale > rdraw_magThresh), then it
127 // drops back to point filtering.
128 fixed_t mag_threshold;
129} draw_vars_t;
130
131extern draw_vars_t drawvars;
132
133extern byte playernumtotrans[MAXPLAYERS]; // CPhipps - what translation table for what player
134extern byte *translationtables;
135
136typedef void (*R_DrawColumn_f)(draw_column_vars_t *dcvars);
137R_DrawColumn_f R_GetDrawColumnFunc(enum column_pipeline_e type,
138 enum draw_filter_type_e filter,
139 enum draw_filter_type_e filterz);
140
141// Span blitting for rows, floor/ceiling. No Spectre effect needed.
142typedef void (*R_DrawSpan_f)(draw_span_vars_t *dsvars);
143R_DrawSpan_f R_GetDrawSpanFunc(enum draw_filter_type_e filter,
144 enum draw_filter_type_e filterz);
145void R_DrawSpan(draw_span_vars_t *dsvars);
146
147void R_InitBuffer(int width, int height);
148
149// Initialize color translation tables, for player rendering etc.
150void R_InitTranslationTables(void);
151
152// Rendering function.
153void R_FillBackScreen(void);
154
155// If the view size is not full screen, draws a border around it.
156void R_DrawViewBorder(void);
157
158// haleyjd 09/13/04: new function to call from main rendering loop
159// which gets rid of the unnecessary reset of various variables during
160// column drawing.
161void R_ResetColumnBuffer(void);
162
163#endif