Subversion Repositories Kolibri OS

Rev

Details | Last modification | View Log | RSS feed

Rev Author Line No. Line
5098 clevermous 1
#include "zgl.h"
2
#include 
3
/* glVertex */
4
 
5
void 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
 
18
void glVertex2f(float x,float y)
19
{
20
  glVertex4f(x,y,0,1);
21
}
22
 
23
void glVertex3f(float x,float y,float z)
24
{
25
  glVertex4f(x,y,z,1);
26
}
27
 
28
void glVertex3fv(float *v)
29
{
30
  glVertex4f(v[0],v[1],v[2],1);
31
}
32
 
33
/* glNormal */
34
 
35
void 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
 
47
void glNormal3fv(float *v)
48
{
49
  glNormal3f(v[0],v[1],v[2]);
50
}
51
 
52
/* glColor */
53
 
54
void 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=b;
60
  p[2].f=g;
61
  p[3].f=r;
62
  p[4].f=a;
63
  /* direct convertion to integer to go faster if no shading */
64
  RGBFtoRGBI(r,g,b,p[7].ui,p[6].ui,p[5].ui);
65
  gl_add_op(p);
66
}
67
 
68
void glColor4fv(float *v)
69
{
70
  GLParam p[8];
71
 
72
  p[0].op=OP_Color;
73
  p[1].f=v[2];
74
  p[2].f=v[1];
75
  p[3].f=v[0];
76
  p[4].f=v[3];
77
  /* direct convertion to integer to go faster if no shading */
78
  p[5].ui = (unsigned int) (v[2] * (ZB_POINT_RED_MAX - ZB_POINT_RED_MIN) +
79
                            ZB_POINT_RED_MIN);
80
  p[6].ui = (unsigned int) (v[1] * (ZB_POINT_GREEN_MAX - ZB_POINT_GREEN_MIN) +
81
                            ZB_POINT_GREEN_MIN);
82
  p[7].ui = (unsigned int) (v[0] * (ZB_POINT_BLUE_MAX - ZB_POINT_BLUE_MIN) +
83
                            ZB_POINT_BLUE_MIN);
84
  gl_add_op(p);
85
}
86
 
87
void glColor3f(float x,float y,float z)
88
{
89
  glColor4f(x,y,z,1);
90
}
91
 
92
void glColor3fv(float *v)
93
{
94
  glColor4f(v[0],v[1],v[2],1);
95
}
96
 
97
 
98
/* TexCoord */
99
 
100
void glTexCoord4f(float s,float t,float r,float q)
101
{
102
  GLParam p[5];
103
 
104
  p[0].op=OP_TexCoord;
105
  p[1].f=s;
106
  p[2].f=t;
107
  p[3].f=r;
108
  p[4].f=q;
109
 
110
  gl_add_op(p);
111
}
112
 
113
void glTexCoord2f(float s,float t)
114
{
115
  glTexCoord4f(s,t,0,1);
116
}
117
 
118
void glTexCoord2fv(float *v)
119
{
120
  glTexCoord4f(v[0],v[1],0,1);
121
}
122
 
123
void glEdgeFlag(int flag)
124
{
125
  GLParam p[2];
126
 
127
  p[0].op=OP_EdgeFlag;
128
  p[1].i=flag;
129
 
130
  gl_add_op(p);
131
}
132
 
133
/* misc */
134
 
135
void glShadeModel(int mode)
136
{
137
  GLParam p[2];
138
 
139
  assert(mode == GL_FLAT || mode == GL_SMOOTH);
140
 
141
  p[0].op=OP_ShadeModel;
142
  p[1].i=mode;
143
 
144
  gl_add_op(p);
145
}
146
 
147
void glCullFace(int mode)
148
{
149
  GLParam p[2];
150
 
151
  assert(mode == GL_BACK ||
152
         mode == GL_FRONT ||
153
         mode == GL_FRONT_AND_BACK);
154
 
155
  p[0].op=OP_CullFace;
156
  p[1].i=mode;
157
 
158
  gl_add_op(p);
159
}
160
 
161
void glFrontFace(int mode)
162
{
163
  GLParam p[2];
164
 
165
  assert(mode == GL_CCW || mode == GL_CW);
166
 
167
  mode = (mode != GL_CCW);
168
 
169
  p[0].op=OP_FrontFace;
170
  p[1].i=mode;
171
 
172
  gl_add_op(p);
173
}
174
 
175
void glPolygonMode(int face,int mode)
176
{
177
  GLParam p[3];
178
 
179
  assert(face == GL_BACK ||
180
         face == GL_FRONT ||
181
         face == GL_FRONT_AND_BACK);
182
  assert(mode == GL_POINT || mode == GL_LINE || mode==GL_FILL);
183
 
184
  p[0].op=OP_PolygonMode;
185
  p[1].i=face;
186
  p[2].i=mode;
187
 
188
  gl_add_op(p);
189
}
190
 
191
 
192
/* glEnable / glDisable */
193
 
194
void glEnable(int cap)
195
{
196
  GLParam p[3];
197
 
198
  p[0].op=OP_EnableDisable;
199
  p[1].i=cap;
200
  p[2].i=1;
201
 
202
  gl_add_op(p);
203
}
204
 
205
void glDisable(int cap)
206
{
207
  GLParam p[3];
208
 
209
  p[0].op=OP_EnableDisable;
210
  p[1].i=cap;
211
  p[2].i=0;
212
 
213
  gl_add_op(p);
214
}
215
 
216
/* glBegin / glEnd */
217
 
218
void glBegin(int mode)
219
{
220
  GLParam p[2];
221
 
222
  p[0].op=OP_Begin;
223
  p[1].i=mode;
224
 
225
  gl_add_op(p);
226
}
227
 
228
void glEnd(void)
229
{
230
  GLParam p[1];
231
 
232
  p[0].op=OP_End;
233
 
234
  gl_add_op(p);
235
}
236
 
237
/* matrix */
238
 
239
void glMatrixMode(int mode)
240
{
241
  GLParam p[2];
242
 
243
  p[0].op=OP_MatrixMode;
244
  p[1].i=mode;
245
 
246
  gl_add_op(p);
247
}
248
 
249
void glLoadMatrixf(const float *m)
250
{
251
  GLParam p[17];
252
  int i;
253
 
254
  p[0].op=OP_LoadMatrix;
255
  for(i=0;i<16;i++) p[i+1].f=m[i];
256
 
257
  gl_add_op(p);
258
}
259
 
260
void glLoadIdentity(void)
261
{
262
  GLParam p[1];
263
 
264
  p[0].op=OP_LoadIdentity;
265
 
266
  gl_add_op(p);
267
}
268
 
269
void glMultMatrixf(const float *m)
270
{
271
  GLParam p[17];
272
  int i;
273
 
274
  p[0].op=OP_MultMatrix;
275
  for(i=0;i<16;i++) p[i+1].f=m[i];
276
 
277
  gl_add_op(p);
278
}
279
 
280
void glPushMatrix(void)
281
{
282
  GLParam p[1];
283
 
284
  p[0].op=OP_PushMatrix;
285
 
286
  gl_add_op(p);
287
}
288
 
289
void glPopMatrix(void)
290
{
291
  GLParam p[1];
292
 
293
  p[0].op=OP_PopMatrix;
294
 
295
  gl_add_op(p);
296
}
297
 
298
void glRotatef(float angle,float x,float y,float z)
299
{
300
  GLParam p[5];
301
 
302
  p[0].op=OP_Rotate;
303
  p[1].f=angle;
304
  p[2].f=x;
305
  p[3].f=y;
306
  p[4].f=z;
307
 
308
  gl_add_op(p);
309
}
310
 
311
void glTranslatef(float x,float y,float z)
312
{
313
  GLParam p[4];
314
 
315
  p[0].op=OP_Translate;
316
  p[1].f=x;
317
  p[2].f=y;
318
  p[3].f=z;
319
 
320
  gl_add_op(p);
321
}
322
 
323
void glScalef(float x,float y,float z)
324
{
325
  GLParam p[4];
326
 
327
  p[0].op=OP_Scale;
328
  p[1].f=x;
329
  p[2].f=y;
330
  p[3].f=z;
331
 
332
  gl_add_op(p);
333
}
334
 
335
 
336
void glViewport(int x,int y,int width,int height)
337
{
338
  GLParam p[5];
339
 
340
  p[0].op=OP_Viewport;
341
  p[1].i=x;
342
  p[2].i=y;
343
  p[3].i=width;
344
  p[4].i=height;
345
 
346
  gl_add_op(p);
347
}
348
 
349
void glFrustum(double left,double right,double bottom,double top,
350
               double near,double farv)
351
{
352
  GLParam p[7];
353
 
354
  p[0].op=OP_Frustum;
355
  p[1].f=left;
356
  p[2].f=right;
357
  p[3].f=bottom;
358
  p[4].f=top;
359
  p[5].f=near;
360
  p[6].f=farv;
361
 
362
  gl_add_op(p);
363
}
364
 
365
/* lightening */
366
 
367
void glMaterialfv(int mode,int type,float *v)
368
{
369
  GLParam p[7];
370
  int i,n;
371
 
372
  assert(mode == GL_FRONT  || mode == GL_BACK || mode==GL_FRONT_AND_BACK);
373
 
374
  p[0].op=OP_Material;
375
  p[1].i=mode;
376
  p[2].i=type;
377
  n=4;
378
  if (type == GL_SHININESS) n=1;
379
 
380
  p[3].f=v[2];
381
  p[4].f=v[1];
382
  p[5].f=v[0];
383
  p[6].f=v[3];
384
 
385
  for(i=n;i<4;i++) p[3+i].f=0;
386
 
387
  gl_add_op(p);
388
}
389
 
390
void 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
 
404
void 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
 
415
void 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
 
430
void 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
 
444
void glLightModeli(int pname,int param)
445
{
446
  GLParam p[6];
447
  int i;
448
 
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;
453
 
454
  gl_add_op(p);
455
}
456
 
457
void glLightModelfv(int pname,float *param)
458
{
459
  GLParam p[6];
460
  int i;
461
 
462
  p[0].op=OP_LightModel;
463
  p[1].i=pname;
464
  for(i=0;i<4;i++) p[2+i].f=param[i];
465
 
466
  gl_add_op(p);
467
}
468
 
469
/* clear */
470
 
471
void glClear(int mask)
472
{
473
  GLParam p[2];
474
 
475
  p[0].op=OP_Clear;
476
  p[1].i=mask;
477
 
478
  gl_add_op(p);
479
}
480
 
481
void glClearColor(float r,float g,float b,float a)
482
{
483
  GLParam p[5];
484
 
485
  p[0].op=OP_ClearColor;
486
  p[1].f=b;
487
  p[2].f=g;
488
  p[3].f=r;
489
  p[4].f=a;
490
 
491
  gl_add_op(p);
492
}
493
 
494
void glClearDepth(double depth)
495
{
496
  GLParam p[2];
497
 
498
  p[0].op=OP_ClearDepth;
499
  p[1].f=depth;
500
 
501
  gl_add_op(p);
502
}
503
 
504
 
505
/* textures */
506
 
507
void glTexImage2D( int target, int level, int components,
508
                   int width, int height, int border,
509
                   int format, int type, void *pixels)
510
{
511
  GLParam p[10];
512
 
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;
523
 
524
  gl_add_op(p);
525
}
526
 
527
 
528
void glBindTexture(int target,int texture)
529
{
530
  GLParam p[3];
531
 
532
  p[0].op=OP_BindTexture;
533
  p[1].i=target;
534
  p[2].i=texture;
535
 
536
  gl_add_op(p);
537
}
538
 
539
void glTexEnvi(int target,int pname,int param)
540
{
541
  GLParam p[8];
542
 
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;
551
 
552
  gl_add_op(p);
553
}
554
 
555
void glTexParameteri(int target,int pname,int param)
556
{
557
  GLParam p[8];
558
 
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;
567
 
568
  gl_add_op(p);
569
}
570
 
571
void glPixelStorei(int pname,int param)
572
{
573
  GLParam p[3];
574
 
575
  p[0].op=OP_PixelStore;
576
  p[1].i=pname;
577
  p[2].i=param;
578
 
579
  gl_add_op(p);
580
}
581
 
582
/* selection */
583
 
584
void glInitNames(void)
585
{
586
  GLParam p[1];
587
 
588
  p[0].op=OP_InitNames;
589
 
590
  gl_add_op(p);
591
}
592
 
593
void glPushName(unsigned int name)
594
{
595
  GLParam p[2];
596
 
597
  p[0].op=OP_PushName;
598
  p[1].i=name;
599
 
600
  gl_add_op(p);
601
}
602
 
603
void glPopName(void)
604
{
605
  GLParam p[1];
606
 
607
  p[0].op=OP_PopName;
608
 
609
  gl_add_op(p);
610
}
611
 
612
void glLoadName(unsigned int name)
613
{
614
  GLParam p[2];
615
 
616
  p[0].op=OP_LoadName;
617
  p[1].i=name;
618
 
619
  gl_add_op(p);
620
}
621
 
622
void
623
glPolygonOffset(GLfloat factor, GLfloat units)
624
{
625
  GLParam p[3];
626
  p[0].op = OP_PolygonOffset;
627
  p[1].f = factor;
628
  p[2].f = units;
629
}
630
 
631
/* Special Functions */
632
 
633
void glCallList(unsigned int list)
634
{
635
  GLParam p[2];
636
 
637
  p[0].op=OP_CallList;
638
  p[1].i=list;
639
 
640
  gl_add_op(p);
641
}
642
 
643
void glFlush(void)
644
{
645
  /* nothing to do */
646
}
647
 
648
void glHint(int target,int mode)
649
{
650
  GLParam p[3];
651
 
652
  p[0].op=OP_Hint;
653
  p[1].i=target;
654
  p[2].i=mode;
655
 
656
  gl_add_op(p);
657
}
658
 
659
/* Non standard functions */
660
 
661
void glDebug(int mode)
662
{
663
  GLContext *c=gl_get_context();
664
  c->print_flag=mode;
665
}
666