Merge branch 'master' of ssh://repo.or.cz/srv/git/tgl
[tgl.git] / src / api.c
blob6e5323b2e3322c6f4976d679b3f427455ab98342
1 #include "zgl.h"
2 #include <stdio.h>
3 /* glVertex */
5 void glVertex4f(float x,float y,float z,float w)
7 GLParam p[5];
9 p[0].op=OP_Vertex;
10 p[1].f=x;
11 p[2].f=y;
12 p[3].f=z;
13 p[4].f=w;
15 gl_add_op(p);
18 void glVertex2f(float x,float y)
20 glVertex4f(x,y,0,1);
23 void glVertex3f(float x,float y,float z)
25 glVertex4f(x,y,z,1);
28 void glVertex3fv(float *v)
30 glVertex4f(v[0],v[1],v[2],1);
33 /* glNormal */
35 void glNormal3f(float x,float y,float z)
37 GLParam p[4];
39 p[0].op=OP_Normal;
40 p[1].f=x;
41 p[2].f=y;
42 p[3].f=z;
44 gl_add_op(p);
47 void glNormal3fv(float *v)
49 glNormal3f(v[0],v[1],v[2]);
52 /* glColor */
54 void glColor4f(float r,float g,float b,float a)
56 GLParam p[8];
58 p[0].op=OP_Color;
59 p[1].f=r;
60 p[2].f=g;
61 p[3].f=b;
62 p[4].f=a;
63 /* direct convertion to integer to go faster if no shading */
64 p[5].ui = (unsigned int) (r * (ZB_POINT_RED_MAX - ZB_POINT_RED_MIN) +
65 ZB_POINT_RED_MIN);
66 p[6].ui = (unsigned int) (g * (ZB_POINT_GREEN_MAX - ZB_POINT_GREEN_MIN) +
67 ZB_POINT_GREEN_MIN);
68 p[7].ui = (unsigned int) (b * (ZB_POINT_BLUE_MAX - ZB_POINT_BLUE_MIN) +
69 ZB_POINT_BLUE_MIN);
70 gl_add_op(p);
73 void glColor4fv(float *v)
75 GLParam p[8];
77 p[0].op=OP_Color;
78 p[1].f=v[0];
79 p[2].f=v[1];
80 p[3].f=v[2];
81 p[4].f=v[3];
82 /* direct convertion to integer to go faster if no shading */
83 p[5].ui = (unsigned int) (v[0] * (ZB_POINT_RED_MAX - ZB_POINT_RED_MIN) +
84 ZB_POINT_RED_MIN);
85 p[6].ui = (unsigned int) (v[1] * (ZB_POINT_GREEN_MAX - ZB_POINT_GREEN_MIN) +
86 ZB_POINT_GREEN_MIN);
87 p[7].ui = (unsigned int) (v[2] * (ZB_POINT_BLUE_MAX - ZB_POINT_BLUE_MIN) +
88 ZB_POINT_BLUE_MIN);
89 gl_add_op(p);
92 void glColor3f(float x,float y,float z)
94 glColor4f(x,y,z,1);
97 void glColor3fv(float *v)
99 glColor4f(v[0],v[1],v[2],1);
103 /* TexCoord */
105 void glTexCoord4f(float s,float t,float r,float q)
107 GLParam p[5];
109 p[0].op=OP_TexCoord;
110 p[1].f=s;
111 p[2].f=t;
112 p[3].f=r;
113 p[4].f=q;
115 gl_add_op(p);
118 void glTexCoord2f(float s,float t)
120 glTexCoord4f(s,t,0,1);
123 void glTexCoord2fv(float *v)
125 glTexCoord4f(v[0],v[1],0,1);
128 void glEdgeFlag(int flag)
130 GLParam p[2];
132 p[0].op=OP_EdgeFlag;
133 p[1].i=flag;
135 gl_add_op(p);
138 /* misc */
140 void glShadeModel(int mode)
142 GLParam p[2];
144 assert(mode == GL_FLAT || mode == GL_SMOOTH);
146 p[0].op=OP_ShadeModel;
147 p[1].i=mode;
149 gl_add_op(p);
152 void glCullFace(int mode)
154 GLParam p[2];
156 assert(mode == GL_BACK ||
157 mode == GL_FRONT ||
158 mode == GL_FRONT_AND_BACK);
160 p[0].op=OP_CullFace;
161 p[1].i=mode;
163 gl_add_op(p);
166 void glFrontFace(int mode)
168 GLParam p[2];
170 assert(mode == GL_CCW || mode == GL_CW);
172 mode = (mode != GL_CCW);
174 p[0].op=OP_FrontFace;
175 p[1].i=mode;
177 gl_add_op(p);
180 void glPolygonMode(int face,int mode)
182 GLParam p[3];
184 assert(face == GL_BACK ||
185 face == GL_FRONT ||
186 face == GL_FRONT_AND_BACK);
187 assert(mode == GL_POINT || mode == GL_LINE || mode==GL_FILL);
189 p[0].op=OP_PolygonMode;
190 p[1].i=face;
191 p[2].i=mode;
193 gl_add_op(p);
197 /* glEnable / glDisable */
199 void glEnable(int cap)
201 GLParam p[3];
203 p[0].op=OP_EnableDisable;
204 p[1].i=cap;
205 p[2].i=1;
207 gl_add_op(p);
210 void glDisable(int cap)
212 GLParam p[3];
214 p[0].op=OP_EnableDisable;
215 p[1].i=cap;
216 p[2].i=0;
218 gl_add_op(p);
221 /* glBegin / glEnd */
223 void glBegin(int mode)
225 GLParam p[2];
227 p[0].op=OP_Begin;
228 p[1].i=mode;
230 gl_add_op(p);
233 void glEnd(void)
235 GLParam p[1];
237 p[0].op=OP_End;
239 gl_add_op(p);
242 /* matrix */
244 void glMatrixMode(int mode)
246 GLParam p[2];
248 p[0].op=OP_MatrixMode;
249 p[1].i=mode;
251 gl_add_op(p);
254 void glLoadMatrixf(const float *m)
256 GLParam p[17];
257 int i;
259 p[0].op=OP_LoadMatrix;
260 for(i=0;i<16;i++) p[i+1].f=m[i];
262 gl_add_op(p);
265 void glLoadIdentity(void)
267 GLParam p[1];
269 p[0].op=OP_LoadIdentity;
271 gl_add_op(p);
274 void glMultMatrixf(const float *m)
276 GLParam p[17];
277 int i;
279 p[0].op=OP_MultMatrix;
280 for(i=0;i<16;i++) p[i+1].f=m[i];
282 gl_add_op(p);
285 void glPushMatrix(void)
287 GLParam p[1];
289 p[0].op=OP_PushMatrix;
291 gl_add_op(p);
294 void glPopMatrix(void)
296 GLParam p[1];
298 p[0].op=OP_PopMatrix;
300 gl_add_op(p);
303 void glRotatef(float angle,float x,float y,float z)
305 GLParam p[5];
307 p[0].op=OP_Rotate;
308 p[1].f=angle;
309 p[2].f=x;
310 p[3].f=y;
311 p[4].f=z;
313 gl_add_op(p);
316 void glTranslatef(float x,float y,float z)
318 GLParam p[4];
320 p[0].op=OP_Translate;
321 p[1].f=x;
322 p[2].f=y;
323 p[3].f=z;
325 gl_add_op(p);
328 void glScalef(float x,float y,float z)
330 GLParam p[4];
332 p[0].op=OP_Scale;
333 p[1].f=x;
334 p[2].f=y;
335 p[3].f=z;
337 gl_add_op(p);
341 void glViewport(int x,int y,int width,int height)
343 GLParam p[5];
345 p[0].op=OP_Viewport;
346 p[1].i=x;
347 p[2].i=y;
348 p[3].i=width;
349 p[4].i=height;
351 gl_add_op(p);
354 void glFrustum(double left,double right,double bottom,double top,
355 double near,double farv)
357 GLParam p[7];
359 p[0].op=OP_Frustum;
360 p[1].f=left;
361 p[2].f=right;
362 p[3].f=bottom;
363 p[4].f=top;
364 p[5].f=near;
365 p[6].f=farv;
367 gl_add_op(p);
370 /* lightening */
372 void glMaterialfv(int mode,int type,float *v)
374 GLParam p[7];
375 int i,n;
377 assert(mode == GL_FRONT || mode == GL_BACK || mode==GL_FRONT_AND_BACK);
379 p[0].op=OP_Material;
380 p[1].i=mode;
381 p[2].i=type;
382 n=4;
383 if (type == GL_SHININESS) n=1;
384 for(i=0;i<4;i++) p[3+i].f=v[i];
385 for(i=n;i<4;i++) p[3+i].f=0;
387 gl_add_op(p);
390 void glMaterialf(int mode,int type,float v)
392 GLParam p[7];
393 int i;
395 p[0].op=OP_Material;
396 p[1].i=mode;
397 p[2].i=type;
398 p[3].f=v;
399 for(i=0;i<3;i++) p[4+i].f=0;
401 gl_add_op(p);
404 void glColorMaterial(int mode,int type)
406 GLParam p[3];
408 p[0].op=OP_ColorMaterial;
409 p[1].i=mode;
410 p[2].i=type;
412 gl_add_op(p);
415 void glLightfv(int light,int type,float *v)
417 GLParam p[7];
418 int i;
420 p[0].op=OP_Light;
421 p[1].i=light;
422 p[2].i=type;
423 /* TODO: 3 composants ? */
424 for(i=0;i<4;i++) p[3+i].f=v[i];
426 gl_add_op(p);
430 void glLightf(int light,int type,float v)
432 GLParam p[7];
433 int i;
435 p[0].op=OP_Light;
436 p[1].i=light;
437 p[2].i=type;
438 p[3].f=v;
439 for(i=0;i<3;i++) p[4+i].f=0;
441 gl_add_op(p);
444 void glLightModeli(int pname,int param)
446 GLParam p[6];
447 int i;
449 p[0].op=OP_LightModel;
450 p[1].i=pname;
451 p[2].f=(float)param;
452 for(i=0;i<4;i++) p[3+i].f=0;
454 gl_add_op(p);
457 void glLightModelfv(int pname,float *param)
459 GLParam p[6];
460 int i;
462 p[0].op=OP_LightModel;
463 p[1].i=pname;
464 for(i=0;i<4;i++) p[2+i].f=param[i];
466 gl_add_op(p);
469 /* clear */
471 void glClear(int mask)
473 GLParam p[2];
475 p[0].op=OP_Clear;
476 p[1].i=mask;
478 gl_add_op(p);
481 void glClearColor(float r,float g,float b,float a)
483 GLParam p[5];
485 p[0].op=OP_ClearColor;
486 p[1].f=r;
487 p[2].f=g;
488 p[3].f=b;
489 p[4].f=a;
491 gl_add_op(p);
494 void glClearDepth(double depth)
496 GLParam p[2];
498 p[0].op=OP_ClearDepth;
499 p[1].f=depth;
501 gl_add_op(p);
505 /* textures */
507 void glTexImage2D( int target, int level, int components,
508 int width, int height, int border,
509 int format, int type, void *pixels)
511 GLParam p[10];
513 p[0].op=OP_TexImage2D;
514 p[1].i=target;
515 p[2].i=level;
516 p[3].i=components;
517 p[4].i=width;
518 p[5].i=height;
519 p[6].i=border;
520 p[7].i=format;
521 p[8].i=type;
522 p[9].p=pixels;
524 gl_add_op(p);
528 void glBindTexture(int target,int texture)
530 GLParam p[3];
532 p[0].op=OP_BindTexture;
533 p[1].i=target;
534 p[2].i=texture;
536 gl_add_op(p);
539 void glTexEnvi(int target,int pname,int param)
541 GLParam p[8];
543 p[0].op=OP_TexEnv;
544 p[1].i=target;
545 p[2].i=pname;
546 p[3].i=param;
547 p[4].f=0;
548 p[5].f=0;
549 p[6].f=0;
550 p[7].f=0;
552 gl_add_op(p);
555 void glTexParameteri(int target,int pname,int param)
557 GLParam p[8];
559 p[0].op=OP_TexParameter;
560 p[1].i=target;
561 p[2].i=pname;
562 p[3].i=param;
563 p[4].f=0;
564 p[5].f=0;
565 p[6].f=0;
566 p[7].f=0;
568 gl_add_op(p);
571 void glPixelStorei(int pname,int param)
573 GLParam p[3];
575 p[0].op=OP_PixelStore;
576 p[1].i=pname;
577 p[2].i=param;
579 gl_add_op(p);
582 /* selection */
584 void glInitNames(void)
586 GLParam p[1];
588 p[0].op=OP_InitNames;
590 gl_add_op(p);
593 void glPushName(unsigned int name)
595 GLParam p[2];
597 p[0].op=OP_PushName;
598 p[1].i=name;
600 gl_add_op(p);
603 void glPopName(void)
605 GLParam p[1];
607 p[0].op=OP_PopName;
609 gl_add_op(p);
612 void glLoadName(unsigned int name)
614 GLParam p[2];
616 p[0].op=OP_LoadName;
617 p[1].i=name;
619 gl_add_op(p);
622 void
623 glPolygonOffset(GLfloat factor, GLfloat units)
625 GLParam p[3];
626 p[0].op = OP_PolygonOffset;
627 p[1].f = factor;
628 p[2].f = units;
631 /* Special Functions */
633 void glCallList(unsigned int list)
635 GLParam p[2];
637 p[0].op=OP_CallList;
638 p[1].i=list;
640 gl_add_op(p);
643 void glFlush(void)
645 /* nothing to do */
648 void glHint(int target,int mode)
650 GLParam p[3];
652 p[0].op=OP_Hint;
653 p[1].i=target;
654 p[2].i=mode;
656 gl_add_op(p);
659 /* Non standard functions */
661 void glDebug(int mode)
663 GLContext *c=gl_get_context();
664 c->print_flag=mode;