-
Notifications
You must be signed in to change notification settings - Fork 48
/
r_draw.h
146 lines (126 loc) · 4.95 KB
/
r_draw.h
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
/* Emacs style mode select -*- C++ -*-
*-----------------------------------------------------------------------------
*
*
* PrBoom: a Doom port merged with LxDoom and LSDLDoom
* based on BOOM, a modified and improved DOOM engine
* Copyright (C) 1999 by
* id Software, Chi Hoang, Lee Killough, Jim Flynn, Rand Phares, Ty Halderman
* Copyright (C) 1999-2000 by
* Jess Haas, Nicolas Kalkhof, Colin Phipps, Florian Schulze
* Copyright 2005, 2006 by
* Florian Schulze, Colin Phipps, Neil Stevens, Andrey Budko
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License
* as published by the Free Software Foundation; either version 2
* of the License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
* 02111-1307, USA.
*
* DESCRIPTION:
* System specific interface stuff.
*
*-----------------------------------------------------------------------------*/
#ifndef __R_DRAW__
#define __R_DRAW__
#include "r_defs.h"
enum column_pipeline_e {
RDC_PIPELINE_STANDARD,
RDC_PIPELINE_TRANSLATED,
RDC_PIPELINE_FUZZ,
RDC_PIPELINE_MAXPIPELINES,
};
// Used to specify what kind of filering you want
enum draw_filter_type_e {
RDRAW_FILTER_NONE,
RDRAW_FILTER_POINT,
RDRAW_FILTER_LINEAR,
RDRAW_FILTER_ROUNDED,
RDRAW_FILTER_MAXFILTERS
};
// Used to specify what kind of column edge rendering to use on masked
// columns. SQUARE = standard, SLOPED = slope the column edge up or down
// based on neighboring columns
enum sloped_edge_type_e {
RDRAW_MASKEDCOLUMNEDGE_SQUARE,
RDRAW_MASKEDCOLUMNEDGE_SLOPED
};
// Packaged into a struct - POPE
typedef struct {
int x;
int yl;
int yh;
fixed_t z; // the current column z coord
fixed_t iscale;
fixed_t texturemid;
int texheight; // killough
fixed_t texu; // the current column u coord
const byte *source; // first pixel in a column
const byte *prevsource; // first pixel in previous column
const byte *nextsource; // first pixel in next column
const lighttable_t *colormap;
const lighttable_t *nextcolormap;
const byte *translation;
int edgeslope; // OR'ed RDRAW_EDGESLOPE_*
// 1 if R_DrawColumn* is currently drawing a masked column, otherwise 0
int drawingmasked;
enum sloped_edge_type_e edgetype;
} draw_column_vars_t;
void R_SetDefaultDrawColumnVars(draw_column_vars_t *dcvars);
typedef struct {
int y;
int x1;
int x2;
fixed_t z; // the current span z coord
fixed_t xfrac;
fixed_t yfrac;
fixed_t xstep;
fixed_t ystep;
const byte *source; // start of a 64*64 tile image
const lighttable_t *colormap;
const lighttable_t *nextcolormap;
} draw_span_vars_t;
typedef struct {
unsigned short *short_topleft;
unsigned int *int_topleft;
enum draw_filter_type_e filterwall;
enum draw_filter_type_e filterfloor;
enum draw_filter_type_e filtersprite;
enum draw_filter_type_e filterz;
enum draw_filter_type_e filterpatch;
enum sloped_edge_type_e sprite_edges;
enum sloped_edge_type_e patch_edges;
// Used to specify an early-out magnification threshold for filtering.
// If a texture is being minified (dcvars.iscale > rdraw_magThresh), then it
// drops back to point filtering.
fixed_t mag_threshold;
} draw_vars_t;
extern draw_vars_t drawvars;
extern byte playernumtotrans[MAXPLAYERS]; // CPhipps - what translation table for what player
extern byte *translationtables;
typedef void (*R_DrawColumn_f)(draw_column_vars_t *dcvars);
R_DrawColumn_f R_GetDrawColumnFunc(enum column_pipeline_e type,
enum draw_filter_type_e filter,
enum draw_filter_type_e filterz);
// Span blitting for rows, floor/ceiling. No Spectre effect needed.
typedef void (*R_DrawSpan_f)(draw_span_vars_t *dsvars);
R_DrawSpan_f R_GetDrawSpanFunc(enum draw_filter_type_e filter,
enum draw_filter_type_e filterz);
void R_DrawSpan(draw_span_vars_t *dsvars);
void R_InitBuffer(int width, int height);
// Initialize color translation tables, for player rendering etc.
void R_InitTranslationTables(void);
// haleyjd 09/13/04: new function to call from main rendering loop
// which gets rid of the unnecessary reset of various variables during
// column drawing.
void R_ResetColumnBuffer(void);
#endif