nuclear@0: #ifndef MIN3D_H_ nuclear@0: #define MIN3D_H_ nuclear@0: nuclear@0: #include "inttypes.h" nuclear@0: nuclear@0: /* state toggles */ nuclear@0: enum { nuclear@0: M3D_DEPTH_TEST, nuclear@0: M3D_CULL_FACE, nuclear@0: M3D_LIGHTING, nuclear@0: M3D_LIGHT0, nuclear@0: M3D_LIGHT1, nuclear@0: M3D_LIGHT2, nuclear@0: M3D_LIGHT3 nuclear@0: }; nuclear@0: nuclear@0: /* buffer bits */ nuclear@0: enum { nuclear@0: M3D_COLOR_BUFFER_BIT = 1, nuclear@0: M3D_DEPTH_BUFFER_BIT = 2 nuclear@0: }; nuclear@0: nuclear@0: /* primitives */ nuclear@0: enum { nuclear@0: M3D_POINTS = 1, nuclear@0: M3D_LINES = 2, nuclear@0: M3D_TRIANGLES = 3, nuclear@0: M3D_QUADS = 4 nuclear@0: }; nuclear@0: nuclear@0: /* matrix mode */ nuclear@0: enum { nuclear@0: M3D_MODELVIEW, nuclear@0: M3D_PROJECTION nuclear@0: }; nuclear@0: nuclear@0: struct m3d_image { nuclear@0: int xsz, ysz; nuclear@0: unsigned char *pixels; nuclear@0: }; nuclear@0: nuclear@0: #ifdef __cplusplus nuclear@0: extern "C" { nuclear@0: #endif nuclear@0: nuclear@0: void m3d_set_buffers(struct m3d_image *cbuf, uint16_t *zbuf); nuclear@0: void m3d_clear(unsigned int bmask); nuclear@0: nuclear@0: void m3d_enable(int bit); nuclear@0: void m3d_disable(int bit); nuclear@0: nuclear@0: /* matrix stack */ nuclear@0: void m3d_matrix_mode(int mode); nuclear@0: void m3d_load_identity(void); nuclear@0: void m3d_load_matrix(const float *m); nuclear@0: void m3d_mult_matrix(const float *m); nuclear@0: void m3d_translate(float x, float y, float z); nuclear@0: void m3d_rotate(float angle, float x, float y, float z); nuclear@0: void m3d_scale(float x, float y, float z); nuclear@0: void m3d_frustum(float left, float right, float bottom, float top, float nr, float fr); nuclear@0: void m3d_perspective(float vfov, float aspect, float znear, float zfar); nuclear@0: nuclear@0: /* drawing */ nuclear@0: void m3d_draw(int prim, const float *varr, int vcount); nuclear@0: void m3d_draw_indexed(int prim, const float *varr, const int *idxarr, int icount); nuclear@0: nuclear@0: /* TODO immediate mode */ nuclear@0: nuclear@0: #ifdef __cplusplus nuclear@0: } nuclear@0: #endif nuclear@0: nuclear@0: #endif /* MIN3D_H_ */