1 /*
2 
3 Copyright (C) 2015-2018 Night Dive Studios, LLC.
4 
5 This program is free software: you can redistribute it and/or modify
6 it under the terms of the GNU General Public License as published by
7 the Free Software Foundation, either version 3 of the License, or
8 (at your option) any later version.
9 
10 This program is distributed in the hope that it will be useful,
11 but WITHOUT ANY WARRANTY; without even the implied warranty of
12 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
13 GNU General Public License for more details.
14 
15 You should have received a copy of the GNU General Public License
16 along with this program.  If not, see <http://www.gnu.org/licenses/>.
17 
18 */
19 /*
20  * $Source: r:/prj/lib/src/2d/RCS/fl8tf.h $
21  * $Revision: 1.14 $
22  * $Author: kevin $
23  * $Date: 1994/10/25 16:51:42 $
24  *
25  * Table functions.
26  * Flat8 canvas.
27  *
28  * This file is part of the 2d library.
29  *
30  */
31 
32 #include "pertyp.h"
33 #include "tmapint.h"
34 
35 /* pixel primitives */
36 extern void flat8_set_upixel(long color, short x, short y);
37 extern void flat8_clut_set_upixel(long color, short x, short y);
38 extern void flat8_xor_set_upixel(long color, short x, short y);
39 extern void flat8_blend_set_upixel(long color, short x, short y);
40 extern void flat8_solid_set_upixel(long color, short x, short y);
41 
42 /* blit primitives */
43 extern void flat8_flat8_ubitmap(grs_bitmap *bm, short x, short y);
44 
45 extern void flat8_tluc8_ubitmap(grs_bitmap *bm, short x, short y);
46 extern int gri_flat8_mask_bitmap(grs_bitmap *bm, short x, short y, grs_stencil *sten);
47 extern void gri_flat8_clut_ubitmap(grs_bitmap *bm, short x, short y, uchar *cl);
48 extern int gri_flat8_mask_fill_clut_bitmap(grs_bitmap *bm, short x, short y, grs_stencil *sten);
49 extern void gri_flat8_fill_clut_ubitmap(grs_bitmap *bm, short x, short y);
50 extern void gri_flat8_rsd8_ubitmap(grs_bitmap *bm, short x, short y);
51 extern int gri_flat8_rsd8_bitmap(grs_bitmap *bm, short x_left, short y_top);
52 
53 /* inner loop initializers */
54 /* normal fill: */
55 extern void gri_trans_blend_clut_lin_umap_init(grs_tmap_loop_info *ti);
56 extern void gri_opaque_true_lin_umap_init();
57 extern void gri_opaque_clut_true_lin_umap_init();
58 
59 extern void gri_opaque_lin_umap_init(grs_tmap_loop_info *tli);
60 extern void gri_trans_lin_umap_init(grs_tmap_loop_info *tli);
61 extern void gri_opaque_lit_lin_umap_init(grs_tmap_loop_info *tli);
62 extern void gri_trans_lit_lin_umap_init(grs_tmap_loop_info *tli);
63 extern void gri_opaque_clut_lin_umap_init(grs_tmap_loop_info *tli);
64 extern void gri_trans_clut_lin_umap_init(grs_tmap_loop_info *tli);
65 
66 extern void gri_opaque_floor_umap_init(grs_tmap_loop_info *tli);
67 extern void gri_trans_floor_umap_init(grs_tmap_loop_info *tli);
68 extern void gri_opaque_lit_floor_umap_init(grs_tmap_loop_info *tli);
69 extern void gri_trans_lit_floor_umap_init(grs_tmap_loop_info *tli);
70 extern void gri_opaque_clut_floor_umap_init(grs_tmap_loop_info *tli);
71 extern void gri_trans_clut_floor_umap_init(grs_tmap_loop_info *tli);
72 
73 extern void gri_opaque_wall_umap_init(grs_tmap_loop_info *tli);
74 extern void gri_trans_wall_umap_init(grs_tmap_loop_info *tli);
75 extern void gri_opaque_lit_wall_umap_init(grs_tmap_loop_info *tli);
76 extern void gri_trans_lit_wall_umap_init(grs_tmap_loop_info *tli);
77 extern void gri_opaque_clut_wall_umap_init(grs_tmap_loop_info *tli);
78 extern void gri_trans_clut_wall_umap_init(grs_tmap_loop_info *tli);
79 
80 extern void gri_opaque_wall1d_umap_init(grs_tmap_loop_info *tli);
81 extern void gri_trans_wall1d_umap_init(grs_tmap_loop_info *tli);
82 extern void gri_opaque_clut_wall1d_umap_init(grs_tmap_loop_info *tli);
83 extern void gri_trans_lit_wall1d_umap_init(grs_tmap_loop_info *tli);
84 extern void gri_opaque_lit_wall1d_umap_init(grs_tmap_loop_info *tli);
85 extern void gri_trans_clut_wall1d_umap_init(grs_tmap_loop_info *tli);
86 
87 extern void gri_opaque_per_umap_hscan_init(grs_bitmap *bm, grs_per_setup *ps);
88 extern void gri_trans_per_umap_hscan_init(grs_bitmap *bm, grs_per_setup *ps);
89 extern void gri_opaque_per_umap_vscan_init(grs_bitmap *bm, grs_per_setup *ps);
90 extern void gri_trans_per_umap_vscan_init(grs_bitmap *bm, grs_per_setup *ps);
91 extern void gri_opaque_lit_per_umap_hscan_init(grs_bitmap *bm, grs_per_setup *ps);
92 extern void gri_trans_lit_per_umap_hscan_init(grs_bitmap *bm, grs_per_setup *ps);
93 
94 extern void gri_opaque_lit_per_umap_vscan_init(grs_bitmap *bm, grs_per_setup *ps);
95 extern void gri_trans_lit_per_umap_vscan_init(grs_bitmap *bm, grs_per_setup *ps);
96 extern void gri_opaque_clut_per_umap_hscan_init(grs_bitmap *bm, grs_per_setup *ps);
97 extern void gri_trans_clut_per_umap_hscan_init(grs_bitmap *bm, grs_per_setup *ps);
98 extern void gri_opaque_clut_per_umap_vscan_init(grs_bitmap *bm, grs_per_setup *ps);
99 extern void gri_trans_clut_per_umap_vscan_init(grs_bitmap *bm, grs_per_setup *ps);
100 
101 extern int gri_opaque_scale_umap_init(grs_tmap_loop_info *tli);
102 extern int gri_trans_scale_umap_init(grs_tmap_loop_info *tli, grs_vertex **vert);
103 extern int gri_opaque_clut_scale_umap_init(grs_tmap_loop_info *tli);
104 extern int gri_trans_clut_scale_umap_init(grs_tmap_loop_info *tli);
105 
106 extern void gri_poly_init(grs_tmap_loop_info *ti);
107 extern void gri_spoly_init(grs_tmap_loop_info *ti);
108 extern void gri_cpoly_init(grs_tmap_loop_info *ti);
109 extern void gri_tpoly_init(grs_tmap_loop_info *ti);
110 extern void gri_stpoly_init(grs_tmap_loop_info *ti);
111 
112 /* clut fill: */
113 extern void gri_clut_poly_init(grs_tmap_loop_info *ti);
114 extern void gri_clut_spoly_init(grs_tmap_loop_info *ti);
115 extern void gri_clut_cpoly_init(grs_tmap_loop_info *ti);
116 extern void gri_clut_tpoly_init(grs_tmap_loop_info *ti);
117 extern void gri_clut_stpoly_init(grs_tmap_loop_info *ti);
118 
119 /* solid fill: */
120 extern void gri_solid_poly_init(grs_tmap_loop_info *ti);
121 extern void gri_trans_solid_lin_umap_init(grs_tmap_loop_info *ti);
122 extern void gri_trans_solid_floor_umap_init(grs_tmap_loop_info *ti);
123 extern void gri_trans_solid_wall_umap_init(grs_tmap_loop_info *ti);
124 extern void gri_trans_solid_per_umap_hscan_init(grs_bitmap *bm, grs_per_setup *ps);
125 extern void gri_trans_solid_per_umap_vscan_init(grs_bitmap *bm, grs_per_setup *ps);
126 extern int gri_opaque_solid_scale_umap_init(grs_tmap_loop_info *info, grs_vertex **vert);
127 extern int gri_trans_solid_scale_umap_init(grs_tmap_loop_info *tli, grs_vertex **vert);
128 
129 /* translucent bitmaps */
130 extern void gri_tluc8_opaque_lin_umap_init(grs_tmap_loop_info *tli);
131 extern void gri_tluc8_trans_lin_umap_init(grs_tmap_loop_info *tli);
132 extern void gri_tluc8_opaque_lit_lin_umap_init();
133 extern void gri_tluc8_trans_lit_lin_umap_init();
134 extern void gri_tluc8_opaque_clut_lin_umap_init(grs_tmap_loop_info *tli);
135 extern void gri_tluc8_trans_clut_lin_umap_init(grs_tmap_loop_info *tli);
136 
137 extern void gri_tluc8_opaque_scale_umap_init(grs_tmap_loop_info *tli);
138 extern void gri_tluc8_trans_scale_umap_init(grs_tmap_loop_info *tli);
139 extern void gri_tluc8_opaque_clut_scale_umap_init(grs_tmap_loop_info *tli);
140 extern void gri_tluc8_trans_clut_scale_umap_init(grs_tmap_loop_info *tli);
141