#include "zgl.h" #include /* glVertex */ void glVertex4f(float x,float y,float z,float w) { GLParam p[5]; p[0].op=OP_Vertex; p[1].f=x; p[2].f=y; p[3].f=z; p[4].f=w; gl_add_op(p); } void glVertex2f(float x,float y) { glVertex4f(x,y,0,1); } void glVertex3f(float x,float y,float z) { glVertex4f(x,y,z,1); } void glVertex3fv(float *v) { glVertex4f(v[0],v[1],v[2],1); } /* glNormal */ void glNormal3f(float x,float y,float z) { GLParam p[4]; p[0].op=OP_Normal; p[1].f=x; p[2].f=y; p[3].f=z; gl_add_op(p); } void glNormal3fv(float *v) { glNormal3f(v[0],v[1],v[2]); } /* glColor */ void glColor4f(float r,float g,float b,float a) { GLParam p[8]; p[0].op=OP_Color; p[1].f=r; p[2].f=g; p[3].f=b; p[4].f=a; /* direct convertion to integer to go faster if no shading */ p[5].ui = (unsigned int) (r * (ZB_POINT_RED_MAX - ZB_POINT_RED_MIN) + ZB_POINT_RED_MIN); p[6].ui = (unsigned int) (g * (ZB_POINT_GREEN_MAX - ZB_POINT_GREEN_MIN) + ZB_POINT_GREEN_MIN); p[7].ui = (unsigned int) (b * (ZB_POINT_BLUE_MAX - ZB_POINT_BLUE_MIN) + ZB_POINT_BLUE_MIN); gl_add_op(p); } void glColor4fv(float *v) { GLParam p[8]; p[0].op=OP_Color; p[1].f=v[0]; p[2].f=v[1]; p[3].f=v[2]; p[4].f=v[3]; /* direct convertion to integer to go faster if no shading */ p[5].ui = (unsigned int) (v[0] * (ZB_POINT_RED_MAX - ZB_POINT_RED_MIN) + ZB_POINT_RED_MIN); p[6].ui = (unsigned int) (v[1] * (ZB_POINT_GREEN_MAX - ZB_POINT_GREEN_MIN) + ZB_POINT_GREEN_MIN); p[7].ui = (unsigned int) (v[2] * (ZB_POINT_BLUE_MAX - ZB_POINT_BLUE_MIN) + ZB_POINT_BLUE_MIN); gl_add_op(p); } void glColor3f(float x,float y,float z) { glColor4f(x,y,z,1); } void glColor3fv(float *v) { glColor4f(v[0],v[1],v[2],1); } /* TexCoord */ void glTexCoord4f(float s,float t,float r,float q) { GLParam p[5]; p[0].op=OP_TexCoord; p[1].f=s; p[2].f=t; p[3].f=r; p[4].f=q; gl_add_op(p); } void glTexCoord2f(float s,float t) { glTexCoord4f(s,t,0,1); } void glTexCoord2fv(float *v) { glTexCoord4f(v[0],v[1],0,1); } void glEdgeFlag(int flag) { GLParam p[2]; p[0].op=OP_EdgeFlag; p[1].i=flag; gl_add_op(p); } /* misc */ void glShadeModel(int mode) { GLParam p[2]; assert(mode == GL_FLAT || mode == GL_SMOOTH); p[0].op=OP_ShadeModel; p[1].i=mode; gl_add_op(p); } void glCullFace(int mode) { GLParam p[2]; assert(mode == GL_BACK || mode == GL_FRONT || mode == GL_FRONT_AND_BACK); p[0].op=OP_CullFace; p[1].i=mode; gl_add_op(p); } void glFrontFace(int mode) { GLParam p[2]; assert(mode == GL_CCW || mode == GL_CW); mode = (mode != GL_CCW); p[0].op=OP_FrontFace; p[1].i=mode; gl_add_op(p); } void glPolygonMode(int face,int mode) { GLParam p[3]; assert(face == GL_BACK || face == GL_FRONT || face == GL_FRONT_AND_BACK); assert(mode == GL_POINT || mode == GL_LINE || mode==GL_FILL); p[0].op=OP_PolygonMode; p[1].i=face; p[2].i=mode; gl_add_op(p); } /* glEnable / glDisable */ void glEnable(int cap) { GLParam p[3]; p[0].op=OP_EnableDisable; p[1].i=cap; p[2].i=1; gl_add_op(p); } void glDisable(int cap) { GLParam p[3]; p[0].op=OP_EnableDisable; p[1].i=cap; p[2].i=0; gl_add_op(p); } /* glBegin / glEnd */ void glBegin(int mode) { GLParam p[2]; p[0].op=OP_Begin; p[1].i=mode; gl_add_op(p); } void glEnd(void) { GLParam p[1]; p[0].op=OP_End; gl_add_op(p); } /* matrix */ void glMatrixMode(int mode) { GLParam p[2]; p[0].op=OP_MatrixMode; p[1].i=mode; gl_add_op(p); } void glLoadMatrixf(const float *m) { GLParam p[17]; int i; p[0].op=OP_LoadMatrix; for(i=0;i<16;i++) p[i+1].f=m[i]; gl_add_op(p); } void glLoadIdentity(void) { GLParam p[1]; p[0].op=OP_LoadIdentity; gl_add_op(p); } void glMultMatrixf(const float *m) { GLParam p[17]; int i; p[0].op=OP_MultMatrix; for(i=0;i<16;i++) p[i+1].f=m[i]; gl_add_op(p); } void glPushMatrix(void) { GLParam p[1]; p[0].op=OP_PushMatrix; gl_add_op(p); } void glPopMatrix(void) { GLParam p[1]; p[0].op=OP_PopMatrix; gl_add_op(p); } void glRotatef(float angle,float x,float y,float z) { GLParam p[5]; p[0].op=OP_Rotate; p[1].f=angle; p[2].f=x; p[3].f=y; p[4].f=z; gl_add_op(p); } void glTranslatef(float x,float y,float z) { GLParam p[4]; p[0].op=OP_Translate; p[1].f=x; p[2].f=y; p[3].f=z; gl_add_op(p); } void glScalef(float x,float y,float z) { GLParam p[4]; p[0].op=OP_Scale; p[1].f=x; p[2].f=y; p[3].f=z; gl_add_op(p); } void glViewport(int x,int y,int width,int height) { GLParam p[5]; p[0].op=OP_Viewport; p[1].i=x; p[2].i=y; p[3].i=width; p[4].i=height; gl_add_op(p); } void glFrustum(double left,double right,double bottom,double top, double near,double farv) { GLParam p[7]; p[0].op=OP_Frustum; p[1].f=left; p[2].f=right; p[3].f=bottom; p[4].f=top; p[5].f=near; p[6].f=farv; gl_add_op(p); } /* lightening */ void glMaterialfv(int mode,int type,float *v) { GLParam p[7]; int i,n; assert(mode == GL_FRONT || mode == GL_BACK || mode==GL_FRONT_AND_BACK); p[0].op=OP_Material; p[1].i=mode; p[2].i=type; n=4; if (type == GL_SHININESS) n=1; for(i=0;i<4;i++) p[3+i].f=v[i]; for(i=n;i<4;i++) p[3+i].f=0; gl_add_op(p); } void glMaterialf(int mode,int type,float v) { GLParam p[7]; int i; p[0].op=OP_Material; p[1].i=mode; p[2].i=type; p[3].f=v; for(i=0;i<3;i++) p[4+i].f=0; gl_add_op(p); } void glColorMaterial(int mode,int type) { GLParam p[3]; p[0].op=OP_ColorMaterial; p[1].i=mode; p[2].i=type; gl_add_op(p); } void glLightfv(int light,int type,float *v) { GLParam p[7]; int i; p[0].op=OP_Light; p[1].i=light; p[2].i=type; /* TODO: 3 composants ? */ for(i=0;i<4;i++) p[3+i].f=v[i]; gl_add_op(p); } void glLightf(int light,int type,float v) { GLParam p[7]; int i; p[0].op=OP_Light; p[1].i=light; p[2].i=type; p[3].f=v; for(i=0;i<3;i++) p[4+i].f=0; gl_add_op(p); } void glLightModeli(int pname,int param) { GLParam p[7]; int i; p[0].op=OP_LightModel; p[1].i=pname; p[2].f=(float)param; for(i=0;i<4;i++) p[3+i].f=0; gl_add_op(p); } void glLightModelfv(int pname,float *param) { GLParam p[6]; int i; p[0].op=OP_LightModel; p[1].i=pname; for(i=0;i<4;i++) p[2+i].f=param[i]; gl_add_op(p); } /* clear */ void glClear(int mask) { GLParam p[2]; p[0].op=OP_Clear; p[1].i=mask; gl_add_op(p); } void glClearColor(float r,float g,float b,float a) { GLParam p[5]; p[0].op=OP_ClearColor; p[1].f=r; p[2].f=g; p[3].f=b; p[4].f=a; gl_add_op(p); } void glClearDepth(double depth) { GLParam p[2]; p[0].op=OP_ClearDepth; p[1].f=depth; gl_add_op(p); } /* textures */ void glTexImage2D( int target, int level, int components, int width, int height, int border, int format, int type, void *pixels) { GLParam p[10]; p[0].op=OP_TexImage2D; p[1].i=target; p[2].i=level; p[3].i=components; p[4].i=width; p[5].i=height; p[6].i=border; p[7].i=format; p[8].i=type; p[9].p=pixels; gl_add_op(p); } void glBindTexture(int target,int texture) { GLParam p[3]; p[0].op=OP_BindTexture; p[1].i=target; p[2].i=texture; gl_add_op(p); } void glTexEnvi(int target,int pname,int param) { GLParam p[8]; p[0].op=OP_TexEnv; p[1].i=target; p[2].i=pname; p[3].i=param; p[4].f=0; p[5].f=0; p[6].f=0; p[7].f=0; gl_add_op(p); } void glTexParameteri(int target,int pname,int param) { GLParam p[8]; p[0].op=OP_TexParameter; p[1].i=target; p[2].i=pname; p[3].i=param; p[4].f=0; p[5].f=0; p[6].f=0; p[7].f=0; gl_add_op(p); } void glPixelStorei(int pname,int param) { GLParam p[3]; p[0].op=OP_PixelStore; p[1].i=pname; p[2].i=param; gl_add_op(p); } /* selection */ void glInitNames(void) { GLParam p[1]; p[0].op=OP_InitNames; gl_add_op(p); } void glPushName(unsigned int name) { GLParam p[2]; p[0].op=OP_PushName; p[1].i=name; gl_add_op(p); } void glPopName(void) { GLParam p[1]; p[0].op=OP_PopName; gl_add_op(p); } void glLoadName(unsigned int name) { GLParam p[2]; p[0].op=OP_LoadName; p[1].i=name; gl_add_op(p); } void glPolygonOffset(GLfloat factor, GLfloat units) { GLParam p[3]; p[0].op = OP_PolygonOffset; p[1].f = factor; p[2].f = units; } /* Special Functions */ void glCallList(unsigned int list) { GLParam p[2]; p[0].op=OP_CallList; p[1].i=list; gl_add_op(p); } void glFlush(void) { /* nothing to do */ } void glHint(int target,int mode) { GLParam p[3]; p[0].op=OP_Hint; p[1].i=target; p[2].i=mode; gl_add_op(p); } /* Non standard functions */ void glDebug(int mode) { GLContext *c=gl_get_context(); c->print_flag=mode; }