rev |
line source |
nuclear@0
|
1 /*
|
nuclear@0
|
2 256-color 3D graphics hack for real-mode DOS.
|
nuclear@0
|
3 Copyright (C) 2011 John Tsiombikas <nuclear@member.fsf.org>
|
nuclear@0
|
4
|
nuclear@0
|
5 This program is free software: you can redistribute it and/or modify
|
nuclear@0
|
6 it under the terms of the GNU General Public License as published by
|
nuclear@0
|
7 the Free Software Foundation, either version 3 of the License, or
|
nuclear@0
|
8 (at your option) any later version.
|
nuclear@0
|
9
|
nuclear@0
|
10 This program is distributed in the hope that it will be useful,
|
nuclear@0
|
11 but WITHOUT ANY WARRANTY; without even the implied warranty of
|
nuclear@0
|
12 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
nuclear@0
|
13 GNU General Public License for more details.
|
nuclear@0
|
14
|
nuclear@0
|
15 You should have received a copy of the GNU General Public License
|
nuclear@0
|
16 along with this program. If not, see <http://www.gnu.org/licenses/>.
|
nuclear@0
|
17 */
|
nuclear@0
|
18 #ifndef MGL_IMPL_H_
|
nuclear@0
|
19 #define MGL_IMPL_H_
|
nuclear@0
|
20
|
nuclear@0
|
21 #define MATRIX_STACK_SIZE 8
|
nuclear@0
|
22 #define MAX_LIGHTS 4
|
nuclear@0
|
23
|
nuclear@9
|
24 #define ZTILE_SIZE 16384
|
nuclear@9
|
25 #define ZTILE_SHIFT 14
|
nuclear@9
|
26 #define ZTILE_MASK 0x3fff
|
nuclear@9
|
27
|
nuclear@9
|
28 #define ZTILE(x) (((x) & ~ZTILE_MASK) >> ZTILE_SHIFT)
|
nuclear@9
|
29 #define ZTILE_OFFS(x) ((x) & ZTILE_MASK)
|
nuclear@9
|
30
|
nuclear@0
|
31 #define ROUND(x) ((x) >= 0.0 ? (x) + 0.5 : (x) - 0.5)
|
nuclear@0
|
32
|
nuclear@0
|
33 typedef struct {
|
nuclear@0
|
34 float x, y, z, w;
|
nuclear@0
|
35 } vec4_t;
|
nuclear@0
|
36
|
nuclear@0
|
37 typedef struct {
|
nuclear@0
|
38 float x, y, z;
|
nuclear@0
|
39 } vec3_t;
|
nuclear@0
|
40
|
nuclear@0
|
41 typedef struct {
|
nuclear@0
|
42 float x, y;
|
nuclear@0
|
43 } vec2_t;
|
nuclear@0
|
44
|
nuclear@0
|
45 typedef float mat4_t[16];
|
nuclear@0
|
46
|
nuclear@0
|
47 struct vertex {
|
nuclear@0
|
48 vec4_t pos;
|
nuclear@0
|
49 vec3_t norm;
|
nuclear@0
|
50 vec2_t tc;
|
nuclear@0
|
51 float energy;
|
nuclear@0
|
52 int cidx;
|
nuclear@0
|
53 };
|
nuclear@0
|
54
|
nuclear@3
|
55 struct texture {
|
nuclear@3
|
56 int width, height;
|
nuclear@3
|
57 int xshift, yshift;
|
nuclear@3
|
58 unsigned int xmask, ymask;
|
nuclear@3
|
59 unsigned char *pixels;
|
nuclear@3
|
60 };
|
nuclear@3
|
61
|
nuclear@0
|
62 struct state {
|
nuclear@0
|
63 unsigned int flags;
|
nuclear@0
|
64 int ord, frontface, cullface;
|
nuclear@0
|
65 int mmode, mtop[2];
|
nuclear@0
|
66 mat4_t matrix[2][MATRIX_STACK_SIZE];
|
nuclear@0
|
67 int prim;
|
nuclear@0
|
68 struct vertex curv, v[4];
|
nuclear@0
|
69 int vidx;
|
nuclear@0
|
70 int vp[4]; /* viewport */
|
nuclear@0
|
71 int col_range; /* color interpolation range */
|
nuclear@0
|
72 vec3_t ldir[MAX_LIGHTS];
|
nuclear@0
|
73 float lint[MAX_LIGHTS];
|
nuclear@3
|
74
|
nuclear@3
|
75 struct texture tex;
|
nuclear@0
|
76 };
|
nuclear@0
|
77
|
nuclear@0
|
78 struct framebuffer {
|
nuclear@0
|
79 int width, height;
|
nuclear@0
|
80 unsigned char *pixels;
|
nuclear@9
|
81 unsigned short **zbuf; /* zbuffer broken in ZTILE_SIZE tiles */
|
nuclear@9
|
82 int num_ztiles;
|
nuclear@0
|
83 };
|
nuclear@0
|
84
|
nuclear@3
|
85
|
nuclear@0
|
86 int mgl_rast_init(struct state *state, struct framebuffer *fbuf);
|
nuclear@0
|
87 void mgl_rast_cleanup(void);
|
nuclear@0
|
88 void mgl_rast_prepare(void);
|
nuclear@0
|
89 void mgl_draw_point(struct vertex *v);
|
nuclear@0
|
90 void mgl_draw_line(struct vertex *v0, struct vertex *v1);
|
nuclear@0
|
91 void mgl_draw_poly(struct vertex *v, int numv);
|
nuclear@0
|
92
|
nuclear@0
|
93 #endif /* MGL_IMPL_H_ */
|