deepstone

annotate src/mglimpl.h @ 9:bce78aaafc68

foo
author John Tsiombikas <nuclear@member.fsf.org>
date Sat, 26 Nov 2011 03:59:48 +0200
parents 0e781cc43178
children 0909996838ff
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_ */