source: trunk/sys/TinyGL/src/api.c @ 351

Last change on this file since 351 was 1, checked in by alain, 8 years ago

First import

File size: 8.9 KB
Line 
1#include "zgl.h"
2#include <stdio.h>
3/* glVertex */
4
5void glVertex4f(float x,float y,float z,float w)
6{
7  GLParam p[5];
8
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;
14
15  gl_add_op(p);
16}
17
18void glVertex2f(float x,float y) 
19{
20  glVertex4f(x,y,0,1);
21}
22
23void glVertex3f(float x,float y,float z) 
24{
25  glVertex4f(x,y,z,1);
26}
27
28void glVertex3fv(float *v) 
29{
30  glVertex4f(v[0],v[1],v[2],1);
31}
32
33/* glNormal */
34
35void glNormal3f(float x,float y,float z)
36{
37  GLParam p[4];
38
39  p[0].op=OP_Normal;
40  p[1].f=x;
41  p[2].f=y;
42  p[3].f=z;
43
44  gl_add_op(p);
45}
46
47void glNormal3fv(float *v) 
48{
49  glNormal3f(v[0],v[1],v[2]);
50}
51
52/* glColor */
53
54void glColor4f(float r,float g,float b,float a)
55{
56  GLParam p[8];
57
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);
71}
72
73void glColor4fv(float *v)
74{
75  GLParam p[8];
76
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);
90}
91
92void glColor3f(float x,float y,float z) 
93{
94  glColor4f(x,y,z,1);
95}
96
97void glColor3fv(float *v) 
98{
99  glColor4f(v[0],v[1],v[2],1);
100}
101
102
103/* TexCoord */
104
105void glTexCoord4f(float s,float t,float r,float q)
106{
107  GLParam p[5];
108
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;
114
115  gl_add_op(p);
116}
117
118void glTexCoord2f(float s,float t)
119{
120  glTexCoord4f(s,t,0,1);
121}
122
123void glTexCoord2fv(float *v)
124{
125  glTexCoord4f(v[0],v[1],0,1);
126}
127
128void glEdgeFlag(int flag)
129{
130  GLParam p[2];
131
132  p[0].op=OP_EdgeFlag;
133  p[1].i=flag;
134
135  gl_add_op(p);
136}
137
138/* misc */
139
140void glShadeModel(int mode)
141{
142  GLParam p[2];
143
144  assert(mode == GL_FLAT || mode == GL_SMOOTH);
145
146  p[0].op=OP_ShadeModel;
147  p[1].i=mode;
148
149  gl_add_op(p);
150}
151
152void glCullFace(int mode)
153{
154  GLParam p[2];
155
156  assert(mode == GL_BACK || 
157         mode == GL_FRONT || 
158         mode == GL_FRONT_AND_BACK);
159
160  p[0].op=OP_CullFace;
161  p[1].i=mode;
162
163  gl_add_op(p);
164}
165
166void glFrontFace(int mode)
167{
168  GLParam p[2];
169
170  assert(mode == GL_CCW || mode == GL_CW);
171
172  mode = (mode != GL_CCW);
173
174  p[0].op=OP_FrontFace;
175  p[1].i=mode;
176
177  gl_add_op(p);
178}
179
180void glPolygonMode(int face,int mode)
181{
182  GLParam p[3];
183
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);
188
189  p[0].op=OP_PolygonMode;
190  p[1].i=face;
191  p[2].i=mode;
192
193  gl_add_op(p);
194}
195
196
197/* glEnable / glDisable */
198
199void glEnable(int cap)
200{
201  GLParam p[3];
202
203  p[0].op=OP_EnableDisable;
204  p[1].i=cap;
205  p[2].i=1;
206
207  gl_add_op(p);
208}
209
210void glDisable(int cap)
211{
212  GLParam p[3];
213
214  p[0].op=OP_EnableDisable;
215  p[1].i=cap;
216  p[2].i=0;
217
218  gl_add_op(p);
219}
220
221/* glBegin / glEnd */
222
223void glBegin(int mode)
224{
225  GLParam p[2];
226
227  p[0].op=OP_Begin;
228  p[1].i=mode;
229
230  gl_add_op(p);
231}
232
233void glEnd(void)
234{
235  GLParam p[1];
236
237  p[0].op=OP_End;
238
239  gl_add_op(p);
240}
241
242/* matrix */
243
244void glMatrixMode(int mode)
245{
246  GLParam p[2];
247
248  p[0].op=OP_MatrixMode;
249  p[1].i=mode;
250
251  gl_add_op(p);
252}
253
254void glLoadMatrixf(const float *m)
255{
256  GLParam p[17];
257  int i;
258
259  p[0].op=OP_LoadMatrix;
260  for(i=0;i<16;i++) p[i+1].f=m[i];
261
262  gl_add_op(p);
263}
264
265void glLoadIdentity(void)
266{
267  GLParam p[1];
268
269  p[0].op=OP_LoadIdentity;
270
271  gl_add_op(p);
272}
273
274void glMultMatrixf(const float *m)
275{
276  GLParam p[17];
277  int i;
278
279  p[0].op=OP_MultMatrix;
280  for(i=0;i<16;i++) p[i+1].f=m[i];
281
282  gl_add_op(p);
283}
284
285void glPushMatrix(void)
286{
287  GLParam p[1];
288
289  p[0].op=OP_PushMatrix;
290
291  gl_add_op(p);
292}
293
294void glPopMatrix(void)
295{
296  GLParam p[1];
297
298  p[0].op=OP_PopMatrix;
299
300  gl_add_op(p);
301}
302
303void glRotatef(float angle,float x,float y,float z)
304{
305  GLParam p[5];
306
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;
312
313  gl_add_op(p);
314}
315
316void glTranslatef(float x,float y,float z)
317{
318  GLParam p[4];
319
320  p[0].op=OP_Translate;
321  p[1].f=x;
322  p[2].f=y;
323  p[3].f=z;
324
325  gl_add_op(p);
326}
327
328void glScalef(float x,float y,float z)
329{
330  GLParam p[4];
331
332  p[0].op=OP_Scale;
333  p[1].f=x;
334  p[2].f=y;
335  p[3].f=z;
336
337  gl_add_op(p);
338}
339
340
341void glViewport(int x,int y,int width,int height)
342{
343  GLParam p[5];
344
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;
350
351  gl_add_op(p);
352}
353
354void glFrustum(double left,double right,double bottom,double top,
355               double near,double farv)
356{
357  GLParam p[7];
358
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;
366
367  gl_add_op(p);
368}
369
370/* lightening */
371
372void glMaterialfv(int mode,int type,float *v)
373{
374  GLParam p[7];
375  int i,n;
376
377  assert(mode == GL_FRONT  || mode == GL_BACK || mode==GL_FRONT_AND_BACK);
378
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;
386
387  gl_add_op(p);
388}
389
390void glMaterialf(int mode,int type,float v)
391{
392  GLParam p[7];
393  int i;
394
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;
400
401  gl_add_op(p);
402}
403
404void glColorMaterial(int mode,int type)
405{
406  GLParam p[3];
407
408  p[0].op=OP_ColorMaterial;
409  p[1].i=mode;
410  p[2].i=type;
411
412  gl_add_op(p);
413}
414
415void glLightfv(int light,int type,float *v)
416{
417  GLParam p[7];
418  int i;
419
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];
425
426  gl_add_op(p);
427}
428
429
430void glLightf(int light,int type,float v)
431{
432  GLParam p[7];
433  int i;
434
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;
440
441  gl_add_op(p);
442}
443
444void glLightModeli(int pname,int param)
445{
446  GLParam p[7];
447  int i;
448
449  p[0].op=OP_LightModel;
450  p[1].i=pname;
451  p[2].f=(float)param;
452 
453  for(i=0;i<4;i++) 
454    p[3+i].f=0;
455
456  gl_add_op(p);
457}
458
459void glLightModelfv(int pname,float *param)
460{
461  GLParam p[6];
462  int i;
463
464  p[0].op=OP_LightModel;
465  p[1].i=pname;
466  for(i=0;i<4;i++) p[2+i].f=param[i];
467
468  gl_add_op(p);
469}
470
471/* clear */
472
473void glClear(int mask)
474{
475  GLParam p[2];
476
477  p[0].op=OP_Clear;
478  p[1].i=mask;
479
480  gl_add_op(p);
481}
482
483void glClearColor(float r,float g,float b,float a)
484{
485  GLParam p[5];
486
487  p[0].op=OP_ClearColor;
488  p[1].f=r;
489  p[2].f=g;
490  p[3].f=b;
491  p[4].f=a;
492
493  gl_add_op(p);
494}
495
496void glClearDepth(double depth)
497{
498  GLParam p[2];
499
500  p[0].op=OP_ClearDepth;
501  p[1].f=depth;
502
503  gl_add_op(p);
504}
505
506
507/* textures */
508
509void glTexImage2D( int target, int level, int components,
510                   int width, int height, int border,
511                   int format, int type, void *pixels)
512{
513  GLParam p[10];
514
515  p[0].op=OP_TexImage2D;
516  p[1].i=target;
517  p[2].i=level;
518  p[3].i=components;
519  p[4].i=width;
520  p[5].i=height;
521  p[6].i=border;
522  p[7].i=format;
523  p[8].i=type;
524  p[9].p=pixels;
525
526  gl_add_op(p);
527}
528
529
530void glBindTexture(int target,int texture)
531{
532  GLParam p[3];
533
534  p[0].op=OP_BindTexture;
535  p[1].i=target;
536  p[2].i=texture;
537
538  gl_add_op(p);
539}
540
541void glTexEnvi(int target,int pname,int param)
542{
543  GLParam p[8];
544 
545  p[0].op=OP_TexEnv;
546  p[1].i=target;
547  p[2].i=pname;
548  p[3].i=param;
549  p[4].f=0;
550  p[5].f=0;
551  p[6].f=0;
552  p[7].f=0;
553
554  gl_add_op(p);
555}
556
557void glTexParameteri(int target,int pname,int param)
558{
559  GLParam p[8];
560 
561  p[0].op=OP_TexParameter;
562  p[1].i=target;
563  p[2].i=pname;
564  p[3].i=param;
565  p[4].f=0;
566  p[5].f=0;
567  p[6].f=0;
568  p[7].f=0;
569
570  gl_add_op(p);
571}
572
573void glPixelStorei(int pname,int param)
574{
575  GLParam p[3];
576
577  p[0].op=OP_PixelStore;
578  p[1].i=pname;
579  p[2].i=param;
580
581  gl_add_op(p);
582}
583
584/* selection */
585
586void glInitNames(void)
587{
588  GLParam p[1];
589
590  p[0].op=OP_InitNames;
591
592  gl_add_op(p);
593}
594
595void glPushName(unsigned int name)
596{
597  GLParam p[2];
598
599  p[0].op=OP_PushName;
600  p[1].i=name;
601
602  gl_add_op(p);
603}
604
605void glPopName(void)
606{
607  GLParam p[1];
608
609  p[0].op=OP_PopName;
610
611  gl_add_op(p);
612}
613
614void glLoadName(unsigned int name)
615{
616  GLParam p[2];
617
618  p[0].op=OP_LoadName;
619  p[1].i=name;
620
621  gl_add_op(p);
622}
623
624void 
625glPolygonOffset(GLfloat factor, GLfloat units)
626{
627  GLParam p[3];
628  p[0].op = OP_PolygonOffset;
629  p[1].f = factor;
630  p[2].f = units;
631}
632
633/* Special Functions */
634
635void glCallList(unsigned int list)
636{
637  GLParam p[2];
638
639  p[0].op=OP_CallList;
640  p[1].i=list;
641
642  gl_add_op(p);
643}
644
645void glFlush(void)
646{
647  /* nothing to do */
648}
649
650void glHint(int target,int mode)
651{
652  GLParam p[3];
653
654  p[0].op=OP_Hint;
655  p[1].i=target;
656  p[2].i=mode;
657
658  gl_add_op(p);
659}
660
661/* Non standard functions */
662
663void glDebug(int mode)
664{
665  GLContext *c=gl_get_context();
666  c->print_flag=mode;
667}
668
Note: See TracBrowser for help on using the repository browser.