14 unsigned char *color_indexes,
31#ifdef TGL_FEATURE_8_BITS
36#ifdef TGL_FEATURE_32_BITS
39#ifdef TGL_FEATURE_24_BITS
49 size = zb->
xsize * zb->
ysize *
sizeof(
unsigned short);
55 if (frame_buffer == NULL) {
57 if (zb->
pbuf == NULL) {
64 zb->
pbuf = frame_buffer;
77#ifdef TGL_FEATURE_8_BITS
100 size = zb->
xsize * zb->
ysize *
sizeof(
unsigned short);
108 if (frame_buffer == NULL) {
112 zb->
pbuf = frame_buffer;
117static void ZB_copyBuffer(
ZBuffer * zb,
128 for (y = 0; y < zb->
ysize; y++) {
135#if TGL_FEATURE_RENDER_BITS == 16
139#ifdef TGL_FEATURE_32_BITS
141#define RGB16_TO_RGB32(p0,p1,v)\
143 unsigned int g,b,gb;\
144 g = (v & 0x07E007E0) << 5;\
145 b = (v & 0x001F001F) << 3;\
147 p0 = (gb & 0x0000FFFF) | ((v & 0x0000F800) << 8);\
148 p1 = (gb >> 16) | ((v & 0xF8000000) >> 8);\
151static void ZB_copyFrameBufferRGB32(
ZBuffer * zb,
156 unsigned int *p, *p1, v, w0, w1;
160 p1 = (
unsigned int *) buf;
162 for (y = 0; y < zb->
ysize; y++) {
166 v = *(
unsigned int *) q;
167#if BYTE_ORDER == BIG_ENDIAN
175 v = *(
unsigned int *) (q + 2);
176#if BYTE_ORDER == BIG_ENDIAN
188 p1 = (
unsigned int *)((
char *)p1 + linesize);
196#ifdef TGL_FEATURE_24_BITS
203#if BYTE_ORDER == BIG_ENDIAN
205#define RGB16_TO_RGB24(p0,p1,p2,v1,v2)\
207 unsigned int r1,g1,b1,gb1,g2,b2,gb2;\
208 v1 = (v1 << 16) | (v1 >> 16);\
209 v2 = (v2 << 16) | (v2 >> 16);\
210 r1 = (v1 & 0xF800F800);\
211 g1 = (v1 & 0x07E007E0) << 5;\
212 b1 = (v1 & 0x001F001F) << 3;\
214 p0 = ((gb1 & 0x0000FFFF) << 8) | (r1 << 16) | (r1 >> 24);\
215 g2 = (v2 & 0x07E007E0) << 5;\
216 b2 = (v2 & 0x001F001F) << 3;\
218 p1 = (gb1 & 0xFFFF0000) | (v2 & 0xF800) | ((gb2 >> 8) & 0xff);\
219 p2 = (gb2 << 24) | ((v2 & 0xF8000000) >> 8) | (gb2 >> 16);\
224#define RGB16_TO_RGB24(p0,p1,p2,v1,v2)\
226 unsigned int r1,g1,b1,gb1,g2,b2,gb2;\
227 r1 = (v1 & 0xF800F800);\
228 g1 = (v1 & 0x07E007E0) << 5;\
229 b1 = (v1 & 0x001F001F) << 3;\
231 p0 = ((gb1 & 0x0000FFFF) << 8) | (r1 << 16) | (r1 >> 24);\
232 g2 = (v2 & 0x07E007E0) << 5;\
233 b2 = (v2 & 0x001F001F) << 3;\
235 p1 = (gb1 & 0xFFFF0000) | (v2 & 0xF800) | ((gb2 >> 8) & 0xff);\
236 p2 = (gb2 << 24) | ((v2 & 0xF8000000) >> 8) | (gb2 >> 16);\
241static void ZB_copyFrameBufferRGB24(
ZBuffer * zb,
246 unsigned int *p, *p1, w0, w1, w2, v0, v1;
250 p1 = (
unsigned int *) buf;
251 linesize = linesize * 3;
253 for (y = 0; y < zb->
ysize; y++) {
257 v0 = *(
unsigned int *) q;
258 v1 = *(
unsigned int *) (q + 2);
268 p1 = (
unsigned int *)((
char *)p1 + linesize);
278#ifdef TGL_FEATURE_8_BITS
283#ifdef TGL_FEATURE_16_BITS
285 ZB_copyBuffer(zb, buf, linesize);
288#ifdef TGL_FEATURE_32_BITS
290 ZB_copyFrameBufferRGB32(zb, buf, linesize);
293#ifdef TGL_FEATURE_24_BITS
295 ZB_copyFrameBufferRGB24(zb, buf, linesize);
305#if TGL_FEATURE_RENDER_BITS == 24
307#define RGB24_TO_RGB16(r, g, b) \
308 ((((r) >> 3) << 11) | (((g) >> 2) << 5) | ((b) >> 3))
311static void ZB_copyFrameBuffer5R6G5B(
ZBuffer * zb,
312 void *buf,
int linesize)
315 unsigned short *p, *p1;
319 p1 = (
unsigned short *) buf;
321 for (y = 0; y < zb->
ysize; y++) {
325 p[0] = RGB24_TO_RGB16(q[0], q[1], q[2]);
326 p[1] = RGB24_TO_RGB16(q[3], q[4], q[5]);
327 p[2] = RGB24_TO_RGB16(q[6], q[7], q[8]);
328 p[3] = RGB24_TO_RGB16(q[9], q[10], q[11]);
332 p1 = (
unsigned short *)((
char *)p1 + linesize);
340#ifdef TGL_FEATURE_16_BITS
342 ZB_copyFrameBuffer5R6G5B(zb, buf, linesize);
345#ifdef TGL_FEATURE_24_BITS
347 ZB_copyBuffer(zb, buf, linesize);
357#if TGL_FEATURE_RENDER_BITS == 32
359#define RGB32_TO_RGB16(v) \
360 (((v >> 8) & 0xf800) | (((v) >> 5) & 0x07e0) | (((v) & 0xff) >> 3))
363static void ZB_copyFrameBuffer5R6G5B(
ZBuffer * zb,
364 void *buf,
int linesize)
367 unsigned short *p, *p1;
371 p1 = (
unsigned short *) buf;
373 for (y = 0; y < zb->
ysize; y++) {
377 p[0] = RGB32_TO_RGB16(q[0]);
378 p[1] = RGB32_TO_RGB16(q[1]);
379 p[2] = RGB32_TO_RGB16(q[2]);
380 p[3] = RGB32_TO_RGB16(q[3]);
384 p1 = (
unsigned short *)((
char *)p1 + linesize);
392#ifdef TGL_FEATURE_16_BITS
394 ZB_copyFrameBuffer5R6G5B(zb, buf, linesize);
397#ifdef TGL_FEATURE_32_BITS
399 ZB_copyBuffer(zb, buf, linesize);
420 v = val | (val << 16);
423 for (i = 0; i < n; i++) {
431 q = (
unsigned short *) p;
433 for (i = 0; i < n; i++)
445 for (i = 0; i < n; i++) {
454 for (i = 0; i < n; i++)
462 register long v1,v2,v3,*pt=(
long *)(adr);
463 unsigned char *p,R=(
unsigned char)r,V=(
unsigned char)v,B=(
unsigned char)b;
465 p=(
unsigned char *)adr;
490 int clear_color,
int r,
int g,
int b)
492#if TGL_FEATURE_RENDER_BITS != 24
503 for (y = 0; y < zb->
ysize; y++) {
504#if TGL_FEATURE_RENDER_BITS == 15 || TGL_FEATURE_RENDER_BITS == 16
507#elif TGL_FEATURE_RENDER_BITS == 32
510#elif TGL_FEATURE_RENDER_BITS == 24
void * gl_malloc(int size)
int frame_buffer_allocated
void memset_l(void *adr, int val, int count)
#define RGB16_TO_RGB32(p0, p1, v)
void ZB_close(ZBuffer *zb)
void ZB_clear(ZBuffer *zb, int clear_z, int z, int clear_color, int r, int g, int b)
void memset_s(void *adr, int val, int count)
void ZB_copyFrameBuffer(ZBuffer *zb, void *buf, int linesize)
#define RGB16_TO_RGB24(p0, p1, p2, v1, v2)
void memset_RGB24(void *adr, int r, int v, int b, long count)
void ZB_resize(ZBuffer *zb, void *frame_buffer, int xsize, int ysize)
ZBuffer * ZB_open(int xsize, int ysize, int mode, int nb_colors, unsigned char *color_indexes, int *color_table, void *frame_buffer)
#define RGB_TO_PIXEL(r, g, b)
void ZB_ditherFrameBuffer(ZBuffer *zb, unsigned char *dest, int linesize)
void ZB_initDither(ZBuffer *zb, int nb_colors, unsigned char *color_indexes, int *color_table)
void ZB_closeDither(ZBuffer *zb)