2009-05-25 12:28:16 +00:00
|
|
|
#ifndef GRAPHICS_TINYGL_ZBUFFER_H_
|
|
|
|
#define GRAPHICS_TINYGL_ZBUFFER_H_
|
2005-01-12 15:20:02 +00:00
|
|
|
|
2012-01-16 17:12:14 +01:00
|
|
|
#include "graphics/pixelbuffer.h"
|
|
|
|
|
2009-05-25 13:19:29 +00:00
|
|
|
namespace TinyGL {
|
|
|
|
|
2006-05-16 10:02:27 +00:00
|
|
|
// Z buffer
|
2005-01-12 15:20:02 +00:00
|
|
|
|
|
|
|
#define ZB_Z_BITS 16
|
|
|
|
|
|
|
|
#define ZB_POINT_Z_FRAC_BITS 14
|
|
|
|
|
2006-05-16 10:02:27 +00:00
|
|
|
#define ZB_POINT_S_MIN ( (1 << 13) )
|
|
|
|
#define ZB_POINT_S_MAX ( (1 << 22) - (1 << 13) )
|
|
|
|
#define ZB_POINT_T_MIN ( (1 << 21) )
|
|
|
|
#define ZB_POINT_T_MAX ( (1 << 30) - (1 << 21) )
|
2005-01-12 15:20:02 +00:00
|
|
|
|
2006-05-16 10:02:27 +00:00
|
|
|
#define ZB_POINT_RED_MIN ( (1 << 10) )
|
|
|
|
#define ZB_POINT_RED_MAX ( (1 << 16) - (1 << 10) )
|
|
|
|
#define ZB_POINT_GREEN_MIN ( (1 << 9) )
|
|
|
|
#define ZB_POINT_GREEN_MAX ( (1 << 16) - (1 << 9) )
|
|
|
|
#define ZB_POINT_BLUE_MIN ( (1 << 10) )
|
|
|
|
#define ZB_POINT_BLUE_MAX ( (1 << 16) - (1 << 10) )
|
2005-01-12 15:20:02 +00:00
|
|
|
|
2006-05-16 10:02:27 +00:00
|
|
|
// display modes
|
|
|
|
#define ZB_MODE_5R6G5B 1 // true color 16 bits
|
2005-01-12 15:20:02 +00:00
|
|
|
|
2012-01-16 17:12:14 +01:00
|
|
|
#define RGB_TO_PIXEL(r,g,b) zb->cmode.RGBToColor(r, g, b)
|
|
|
|
typedef byte PIXEL;
|
|
|
|
|
|
|
|
#define PSZSH 4
|
|
|
|
|
|
|
|
extern uint8 PSZB;
|
2005-01-12 15:20:02 +00:00
|
|
|
|
|
|
|
typedef struct {
|
2008-07-05 08:48:39 +00:00
|
|
|
int xsize, ysize;
|
2006-05-16 10:02:27 +00:00
|
|
|
int linesize; // line size, in bytes
|
2012-01-16 17:12:14 +01:00
|
|
|
Graphics::PixelFormat cmode;
|
|
|
|
int pixelbits;
|
|
|
|
int pixelbytes;
|
2006-05-16 10:02:27 +00:00
|
|
|
|
|
|
|
unsigned short *zbuf;
|
2008-07-18 21:36:40 +00:00
|
|
|
unsigned int *zbuf2;
|
2008-07-05 08:48:39 +00:00
|
|
|
unsigned char *shadow_mask_buf;
|
|
|
|
int shadow_color_r;
|
|
|
|
int shadow_color_g;
|
|
|
|
int shadow_color_b;
|
2012-01-16 17:12:14 +01:00
|
|
|
byte *pbuf;
|
|
|
|
Graphics::PixelBuffer buffer;
|
2006-05-16 10:02:27 +00:00
|
|
|
int frame_buffer_allocated;
|
|
|
|
|
|
|
|
unsigned char *dctable;
|
|
|
|
int *ctable;
|
2012-01-16 17:12:14 +01:00
|
|
|
Graphics::PixelBuffer current_texture;
|
2005-01-12 15:20:02 +00:00
|
|
|
} ZBuffer;
|
|
|
|
|
|
|
|
typedef struct {
|
2006-05-16 10:02:27 +00:00
|
|
|
int x,y,z; // integer coordinates in the zbuffer
|
|
|
|
int s,t; // coordinates for the mapping
|
|
|
|
int r,g,b; // color indexes
|
2012-01-16 17:12:14 +01:00
|
|
|
|
2006-05-16 10:02:27 +00:00
|
|
|
float sz,tz; // temporary coordinates for mapping
|
2005-01-12 15:20:02 +00:00
|
|
|
} ZBufferPoint;
|
|
|
|
|
2006-05-16 10:02:27 +00:00
|
|
|
// zbuffer.c
|
2005-01-12 15:20:02 +00:00
|
|
|
|
2012-01-16 17:12:14 +01:00
|
|
|
ZBuffer *ZB_open(int xsize, int ysize, const Graphics::PixelFormat &mode, void *frame_buffer);
|
2005-01-12 15:20:02 +00:00
|
|
|
void ZB_close(ZBuffer *zb);
|
2006-05-16 10:02:27 +00:00
|
|
|
void ZB_resize(ZBuffer *zb, void *frame_buffer, int xsize, int ysize);
|
|
|
|
void ZB_clear(ZBuffer *zb, int clear_z, int z, int clear_color, int r, int g, int b);
|
|
|
|
// linesize is in BYTES
|
|
|
|
void ZB_copyFrameBuffer(ZBuffer *zb, void *buf, int linesize);
|
2005-01-12 15:20:02 +00:00
|
|
|
|
2006-05-16 10:02:27 +00:00
|
|
|
// zline.c
|
2005-01-12 15:20:02 +00:00
|
|
|
|
|
|
|
void ZB_plot(ZBuffer *zb,ZBufferPoint *p);
|
|
|
|
void ZB_line(ZBuffer *zb,ZBufferPoint *p1,ZBufferPoint *p2);
|
|
|
|
void ZB_line_z(ZBuffer * zb, ZBufferPoint * p1, ZBufferPoint * p2);
|
|
|
|
|
2006-05-16 10:02:27 +00:00
|
|
|
// ztriangle.c */
|
2005-01-12 15:20:02 +00:00
|
|
|
|
2012-01-16 17:12:14 +01:00
|
|
|
void ZB_setTexture(ZBuffer *zb, const Graphics::PixelBuffer &texture);
|
|
|
|
void ZB_fillTriangleFlat(ZBuffer *zb, ZBufferPoint *p1,
|
2006-05-16 10:02:27 +00:00
|
|
|
ZBufferPoint *p2, ZBufferPoint *p3);
|
2012-01-16 17:12:14 +01:00
|
|
|
void ZB_fillTriangleFlatShadowMask(ZBuffer *zb, ZBufferPoint *p1,
|
2008-07-05 08:48:39 +00:00
|
|
|
ZBufferPoint *p2, ZBufferPoint *p3);
|
2012-01-16 17:12:14 +01:00
|
|
|
void ZB_fillTriangleFlatShadow(ZBuffer *zb, ZBufferPoint *p1,
|
2008-07-05 08:48:39 +00:00
|
|
|
ZBufferPoint *p2, ZBufferPoint *p3);
|
2006-05-16 10:02:27 +00:00
|
|
|
void ZB_fillTriangleSmooth(ZBuffer *zb, ZBufferPoint *p1,
|
|
|
|
ZBufferPoint *p2, ZBufferPoint *p3);
|
|
|
|
void ZB_fillTriangleMapping(ZBuffer *zb, ZBufferPoint *p1,
|
|
|
|
ZBufferPoint *p2, ZBufferPoint *p3);
|
|
|
|
void ZB_fillTriangleMappingPerspective(ZBuffer *zb, ZBufferPoint *p0,
|
|
|
|
ZBufferPoint *p1, ZBufferPoint *p2);
|
|
|
|
typedef void (*ZB_fillTriangleFunc)(ZBuffer *, ZBufferPoint *,
|
|
|
|
ZBufferPoint *, ZBufferPoint *);
|
|
|
|
|
|
|
|
// memory.c
|
2005-01-12 15:20:02 +00:00
|
|
|
void gl_free(void *p);
|
|
|
|
void *gl_malloc(int size);
|
|
|
|
void *gl_zalloc(int size);
|
|
|
|
|
2009-05-25 13:19:29 +00:00
|
|
|
} // end of namespace TinyGL
|
|
|
|
|
|
|
|
#endif
|