Details | Last modification | View Log | RSS feed
Rev | Author | Line No. | Line |
---|---|---|---|
5098 | clevermous | 1 | #ifndef _tgl_zbuffer_h_ |
2 | #define _tgl_zbuffer_h_ |
||
3 | |||
4 | /* |
||
5 | * Z buffer |
||
6 | */ |
||
7 | |||
8 | #include "zfeatures.h" |
||
9 | |||
10 | #define ZB_Z_BITS 16 |
||
11 | |||
12 | #define ZB_POINT_Z_FRAC_BITS 14 |
||
13 | |||
14 | #define ZB_POINT_S_MIN ( (1<<13) ) |
||
15 | #define ZB_POINT_S_MAX ( (1<<22)-(1<<13) ) |
||
16 | #define ZB_POINT_T_MIN ( (1<<21) ) |
||
17 | #define ZB_POINT_T_MAX ( (1<<30)-(1<<21) ) |
||
18 | |||
19 | #define ZB_POINT_RED_MIN ( (1<<10) ) |
||
20 | #define ZB_POINT_RED_MAX ( (1<<16)-(1<<10) ) |
||
21 | #define ZB_POINT_GREEN_MIN ( (1<<9) ) |
||
22 | #define ZB_POINT_GREEN_MAX ( (1<<16)-(1<<9) ) |
||
23 | #define ZB_POINT_BLUE_MIN ( (1<<10) ) |
||
24 | #define ZB_POINT_BLUE_MAX ( (1<<16)-(1<<10) ) |
||
25 | |||
26 | /* display modes */ |
||
27 | #define ZB_MODE_5R6G5B 1 /* true color 16 bits */ |
||
28 | #define ZB_MODE_INDEX 2 /* color index 8 bits */ |
||
29 | #define ZB_MODE_RGBA 3 /* 32 bit rgba mode */ |
||
30 | #define ZB_MODE_RGB24 4 /* 24 bit rgb mode */ |
||
31 | #define ZB_NB_COLORS 225 /* number of colors for 8 bit display */ |
||
32 | |||
33 | #if TGL_FEATURE_RENDER_BITS == 15 |
||
34 | |||
35 | #define RGB_TO_PIXEL(r,g,b) \ |
||
36 | ((((r) >> 1) & 0x7c00) | (((g) >> 6) & 0x03e0) | ((b) >> 11)) |
||
37 | typedef unsigned short PIXEL; |
||
38 | /* bytes per pixel */ |
||
39 | #define PSZB 2 |
||
40 | /* bits per pixel = (1 << PSZH) */ |
||
41 | #define PSZSH 4 |
||
42 | |||
43 | #elif TGL_FEATURE_RENDER_BITS == 16 |
||
44 | |||
45 | /* 16 bit mode */ |
||
46 | #define RGB_TO_PIXEL(r,g,b) \ |
||
47 | (((r) & 0xF800) | (((g) >> 5) & 0x07E0) | ((b) >> 11)) |
||
48 | typedef unsigned short PIXEL; |
||
49 | #define PSZB 2 |
||
50 | #define PSZSH 4 |
||
51 | |||
52 | #elif TGL_FEATURE_RENDER_BITS == 24 |
||
53 | |||
54 | #define RGB_TO_PIXEL(r,g,b) \ |
||
55 | ((((r) << 8) & 0xff0000) | ((g) & 0xff00) | ((b) >> 8)) |
||
56 | typedef unsigned char PIXEL; |
||
57 | #define PSZB 3 |
||
58 | #define PSZSH 5 |
||
59 | |||
60 | #elif TGL_FEATURE_RENDER_BITS == 32 |
||
61 | |||
62 | #define RGB_TO_PIXEL(r,g,b) \ |
||
63 | ((((r) << 8) & 0xff0000) | ((g) & 0xff00) | ((b) >> 8)) |
||
64 | typedef unsigned int PIXEL; |
||
65 | #define PSZB 4 |
||
66 | #define PSZSH 5 |
||
67 | |||
68 | #else |
||
69 | |||
70 | #error Incorrect number of bits per pixel |
||
71 | |||
72 | #endif |
||
73 | |||
74 | typedef struct { |
||
75 | int xsize,ysize; |
||
76 | int linesize; /* line size, in bytes */ |
||
77 | int mode; |
||
78 | |||
79 | unsigned short *zbuf; |
||
80 | PIXEL *pbuf; |
||
81 | int frame_buffer_allocated; |
||
82 | |||
83 | int nb_colors; |
||
84 | unsigned char *dctable; |
||
85 | int *ctable; |
||
86 | PIXEL *current_texture; |
||
87 | } ZBuffer; |
||
88 | |||
89 | typedef struct { |
||
90 | int x,y,z; /* integer coordinates in the zbuffer */ |
||
91 | int s,t; /* coordinates for the mapping */ |
||
92 | int r,g,b; /* color indexes */ |
||
93 | |||
94 | float sz,tz; /* temporary coordinates for mapping */ |
||
95 | } ZBufferPoint; |
||
96 | |||
97 | /* zbuffer.c */ |
||
98 | |||
99 | ZBuffer *ZB_open(int xsize,int ysize,int mode, |
||
100 | int nb_colors, |
||
101 | unsigned char *color_indexes, |
||
102 | int *color_table, |
||
103 | void *frame_buffer); |
||
104 | |||
105 | |||
106 | void ZB_close(ZBuffer *zb); |
||
107 | |||
108 | void ZB_resize(ZBuffer *zb,void *frame_buffer,int xsize,int ysize); |
||
109 | void ZB_clear(ZBuffer *zb,int clear_z,int z, |
||
110 | int clear_color,int r,int g,int b); |
||
111 | /* linesize is in BYTES */ |
||
112 | void ZB_copyFrameBuffer(ZBuffer *zb,void *buf,int linesize); |
||
113 | |||
114 | /* zdither.c */ |
||
115 | |||
116 | void ZB_initDither(ZBuffer *zb,int nb_colors, |
||
117 | unsigned char *color_indexes,int *color_table); |
||
118 | void ZB_closeDither(ZBuffer *zb); |
||
119 | void ZB_ditherFrameBuffer(ZBuffer *zb,unsigned char *dest, |
||
120 | int linesize); |
||
121 | |||
122 | /* zline.c */ |
||
123 | |||
124 | void ZB_plot(ZBuffer *zb,ZBufferPoint *p); |
||
125 | void ZB_line(ZBuffer *zb,ZBufferPoint *p1,ZBufferPoint *p2); |
||
126 | void ZB_line_z(ZBuffer * zb, ZBufferPoint * p1, ZBufferPoint * p2); |
||
127 | |||
128 | /* ztriangle.c */ |
||
129 | |||
130 | void ZB_setTexture(ZBuffer *zb, PIXEL *texture); |
||
131 | |||
132 | void ZB_fillTriangleFlat(ZBuffer *zb, |
||
133 | ZBufferPoint *p1,ZBufferPoint *p2,ZBufferPoint *p3); |
||
134 | |||
135 | void ZB_fillTriangleSmooth(ZBuffer *zb, |
||
136 | ZBufferPoint *p1,ZBufferPoint *p2,ZBufferPoint *p3); |
||
137 | |||
138 | void ZB_fillTriangleMapping(ZBuffer *zb, |
||
139 | ZBufferPoint *p1,ZBufferPoint *p2,ZBufferPoint *p3); |
||
140 | |||
141 | void ZB_fillTriangleMappingPerspective(ZBuffer *zb, |
||
142 | ZBufferPoint *p0,ZBufferPoint *p1,ZBufferPoint *p2); |
||
143 | |||
144 | |||
145 | typedef void (*ZB_fillTriangleFunc)(ZBuffer *, |
||
146 | ZBufferPoint *,ZBufferPoint *,ZBufferPoint *); |
||
147 | |||
148 | /* |
||
149 | * Memory allocator for TinyGL |
||
150 | */ |
||
151 | |||
152 | /* modify these functions so that they suit your needs */ |
||
153 | |||
154 | static inline void gl_free(void *p) |
||
155 | { |
||
156 | free(p); |
||
157 | } |
||
158 | |||
159 | static inline void *gl_malloc(int size) |
||
160 | { |
||
161 | return malloc(size); |
||
162 | } |
||
163 | |||
164 | static inline void *gl_zalloc(int size) |
||
165 | { |
||
166 | return calloc(1, size); |
||
167 | } |
||
168 | |||
169 | #endif /* _tgl_zbuffer_h_ */><>><>><>10)><10)>16)-(1<<10)><16)-(1<<10)>10)><10)>9)><9)>16)-(1<<9)><16)-(1<<9)>9)><9)>10)><10)>16)-(1<<10)><16)-(1<<10)>10)><10)>21)><21)>30)-(1<<21)><30)-(1<<21)>21)><21)>13)><13)>22)-(1<<13)><22)-(1<<13)>13)><13)> |