forked from bibendovsky/bstone
-
Notifications
You must be signed in to change notification settings - Fork 0
/
SCALE.C
72 lines (55 loc) · 1.36 KB
/
SCALE.C
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
//
// Former SCALE.ASM
//
#include "3d_def.h"
#include "id_vl.h"
extern longword dc_iscale;
extern longword dc_frac;
extern unsigned dc_source;
extern unsigned dc_seg;
extern unsigned dc_length;
extern unsigned dc_dest;
extern byte far* shadingtable;
typedef enum {
DRAW_DEFAULT,
DRAW_LIGHTED,
} DrawMode;
static void generic_draw_column(DrawMode draw_mode)
{
unsigned i;
byte pixel;
long fraction = dc_frac;
byte far* source = MK_FP(dc_seg, dc_source);
unsigned screen_offset = dc_dest;
byte far* screen = MK_FP(0xA000, 0);
for (i = 0; i < dc_length; ++i) {
byte pixel_index = source[fraction >> 16];
if (draw_mode == DRAW_LIGHTED)
pixel = shadingtable[pixel_index];
else
pixel = pixel_index;
screen[screen_offset] = pixel;
screen_offset += SCREENWIDTH;
fraction += dc_iscale;
}
}
void R_DrawColumn()
{
generic_draw_column(DRAW_DEFAULT);
}
void R_DrawSLSColumn()
{
unsigned i;
unsigned screen_offset = dc_dest;
byte far* screen = MK_FP(0xA000, 0);
for (i = 0; i < dc_length; ++i) {
byte pixel_index = screen[screen_offset];
byte pixel = shadingtable[0x1000 | pixel_index];
screen[screen_offset] = pixel;
screen_offset += SCREENWIDTH;
}
}
void R_DrawLSColumn()
{
generic_draw_column(DRAW_LIGHTED);
}