Subversion Repositories Kolibri OS

Rev

Blame | Last modification | View Log | Download | RSS feed

  1. #include "zgl.h"
  2. #include <stdio.h>
  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.  
  667.