#ifndef ST2_H #define ST2_H typedef struct { int initialized; int rows, cols; unsigned char *data; } fb; #define NUM_FRAMEBUFFERS 20 extern fb frameBuffer[NUM_FRAMEBUFFERS]; typedef struct { unsigned char r,g,b,a; } Color; void st2_error(const char *, ...); void *st2_malloc(int); void colorSet(Color *, unsigned char, unsigned char, unsigned char); void colorSetA(Color *, unsigned char, unsigned char, unsigned char, unsigned char); void colorGray(Color *, Color *); #define R(c) (c)->r #define G(c) (c)->g #define B(c) (c)->b #define A(c) (c)->a int fbInit(int, int); int fbIsInitialized(int); int fbRows(int); int fbCols(int); void fbFree(int); void fbPutColor(int, int, int, Color*); void fbGetColor(int, int, int, Color*); void fbWrite(int, char *); int fbRead(char *); typedef void *DSO; DSO dsoOpen(char *); void *dsoGetSymbol(DSO, char *); void dsoClose(DSO); typedef int st2Enum; /* Shading Modes */ #define ST2_FLAT 0 #define ST2_GOURAUD 1 #define ST2_PHONG 2 #define ST2_PROCEDURAL 3 /* Matrix Stacks */ #define ST2_PROJECTION 4 #define ST2_MODELVIEW 5 #define ST2_TEXTURE 6 /* Things that can be enabled / disabled */ #define ST2_ZBUFFER 7 #define ST2_LIGHTING 8 /* #define ST2_TEXTURE NOTHING -- reused from the matrix stack definition */ #define ST2_LIGHT0 9 #define ST2_LIGHT1 10 #define ST2_LIGHT2 11 #define ST2_LIGHT3 12 #define ST2_LIGHT4 13 #define ST2_LIGHT5 14 #define ST2_LIGHT6 15 #define ST2_LIGHT7 16 #define ST2_LIGHT8 17 #define ST2_LIGHT9 18 #define ST2_BACKFACE_CULLING 19 #define ST2_ALPHA_BLENDING 20 #define ST2_FOG 21 #define ST2_SHADOWS 22 /* Fog paramaters */ #define ST2_FOG_LINEAR 23 #define ST2_FOG_EXPONENTIAL 24 #define ST2_FOG_EXPONENTIAL2 25 /* Texture mapping mode */ #define ST2_DECAL 26 #define ST2_MODULATE 27 /* Texture repeat mode */ #define ST2_CLAMP 28 #define ST2_REPEAT 29 /* Light paramaters */ #define ST2_LIGHT_AMBIENT 30 #define ST2_LIGHT_DIFFUSE 31 #define ST2_LIGHT_SPECULAR 32 #define ST2_LIGHT_POSITION 33 #define ST2_LIGHT_DIRECTION 34 #define ST2_SPOT_DIRECTION 35 #define ST2_SPOT_EXPONENT 36 #define ST2_SPOT_CUTOFF 37 #define ST2_CONSTANT_ATTENUATION 38 #define ST2_LINEAR_ATTENUATION 39 #define ST2_QUADRATIC_ATTENUATION 40 /* enums for st2GetState */ #define ST2_ENABLED 41 #define ST2_DISABLED 42 #define ST2_CUR_COLOR 43 #define ST2_CUR_CLEAR_COLOR 44 #define ST2_ANTIALIAS_QUALITY 45 #define ST2_SHADE_MODE 46 #define ST2_CUR_FRAMEBUFFER 47 #define ST2_CUR_MATRIX_STACK 48 #define ST2_CUR_TEXTURE_BUFFER 49 #define ST2_CUR_TEXTURE_COORDINATE 50 #define ST2_TEXTURE_MODE 51 #define ST2_TEXTURE_REPEAT_MODE 52 #define ST2_CUR_NORMAL 53 #define ST2_CUR_AMBIENT_COLOR 54 #define ST2_CUR_MATERIAL 55 void st2Initialize(void); int st2GetState(st2Enum request, void *data); void st2Color(Color *c); void st2ClearColor(Color *c); void st2AntiAliasQuality(int quality); void st2ShadeMode(st2Enum mode); void st2FrameBuffer(int fbHandle); void st2ClearFrameBuffer(void); void st2Vertex2D(double x, double y); void st2MatrixStack(st2Enum stack); void st2Enable(st2Enum code); void st2Disable(st2Enum code); void st2TextureImage(int fbHandle); void st2TextureCoord(float s, float t); void st2TextureMode(st2Enum mode); void st2TextureRepeatMode(st2Enum mode); void st2LoadIdentity(void); void st2PushMatrix(void); void st2PopMatrix(void); void st2Translate(double x, double y, double z); void st2Rotate(double angle, double x, double y, double z); void st2Scale(double x, double y, double z); void st2MultMatrix(double **m); void st2Vertex3D(double x, double y, double z); void st2Perspective(double fov, double aspect, double near, double far); void st2LookAt(double eyex, double eyey, double eyez, double lookatx, double lookaty, double lookatz, double upx, double upy, double upz); void st2Ortho(double minx, double maxx, double miny, double maxy, double minz, double maxz); void st2Normal(double x, double y, double z); void st2AmbientColor(Color *c); void st2Material(Color *ambient, Color *diffuse, Color *specular, Color *emission, double shininess); void st2Light(st2Enum light, st2Enum param_name, void *value); void st2Fog(st2Enum mode, double density, double start, double end, Color *c); void st2Sphere(double radius, double x, double y, double z, int divisions); void st2ProceduralShader(char *name); #endif /* ST2_H */