draw3.c
0000/**************************************
0001 draw3.c IPC GL-functions
0002**************************************/
0003#include <stdio.h>
0004#include <stdlib.h>
0005#include <math.h>
0006#include <sys/types.h>
0007#include <sys/ipc.h>
0008#include <sys/shm.h>
0009#include <sys/sem.h>
0010#include "draw2.h"
0011#include <string.h>
0012
0013extern int semid; /* semaphore identifier */
0014extern struct sembuf sb;
0015extern void *shmx;
0016
0017extern char *outbuf; // output buffer in shared memory
0018extern int outptr; // current pointer in outbuf
0019extern int outmax; // buffer capacity
0020
0021
0022int sendMsg()
0023{
0024 sb.sem_num=5; /* call from a function program */
0025 sb.sem_op=1;
0026 semop(semid,&sb,1);
0027 sb.sem_num=4; /* wake up f006 */
0028 sb.sem_op=1;
0029 semop(semid,&sb,1);
0030 sb.sem_num=6; /* wait */
0031 sb.sem_op=-1;
0032 sb.sem_flg=0;
0033 semop(semid,&sb,1);
0034 sb.sem_num=7; /* test if error */
0035 sb.sem_op=0;
0036 sb.sem_flg=IPC_NOWAIT;
0037 if(semop(semid,&sb,1)!=0){
0038 sb.sem_num=7;
0039 sb.sem_op=-1;
0040 sb.sem_flg=0;
0041 semop(semid,&sb,1); /* wait */
0042 return 1;
0043 }
0044 return 0;
0045}
0046
0047int glFrustum(double l,double r,double b,double t,double n,double f)
0048{
0049 *(double *)((int*)shmx+1)=l;
0050 *((double *)((int*)shmx+1)+1)=r;
0051 *((double *)((int*)shmx+1)+2)=b;
0052 *((double *)((int*)shmx+1)+3)=t;
0053 *((double *)((int*)shmx+1)+4)=n;
0054 *((double *)((int*)shmx+1)+5)=f;
0055 *(int*)shmx=0;
0056 sendMsg();
0057}
0058
0059int glTranslatef(double x,double y,double z)
0060{
0061 *(double *)((int*)shmx+1)=x;
0062 *((double *)((int*)shmx+1)+1)=y;
0063 *((double *)((int*)shmx+1)+2)=z;
0064 *(int*)shmx=1;
0065 sendMsg();
0066}
0067
0068int glRotatef(double ang,double x,double y,double z)
0069{
0070 *(double *)((int*)shmx+1)=ang;
0071 *((double *)((int*)shmx+1)+1)=x;
0072 *((double *)((int*)shmx+1)+2)=y;
0073 *((double *)((int*)shmx+1)+3)=z;
0074 *(int*)shmx=2;
0075 sendMsg();
0076}
0077
0078int glViewport(int x0, int y0, int wid, int hei)
0079{
0080 *((int*)shmx +1)=x0;
0081 *((int*)shmx +2)=y0;
0082 *((int*)shmx +3)=wid;
0083 *((int*)shmx +4)=hei;
0084 *(int*)shmx=3;
0085 sendMsg();
0086}
0087
0088int glBegin(int p)
0089{
0090 *((int*)shmx +1)=p; // primitives
0091 *(int*)shmx=4;
0092 sendMsg();
0093}
0094
0095int glColor3f(double r, double g, double b)
0096{
0097 *(double *)((int*)shmx+1)=r;
0098 *((double *)((int*)shmx+1)+1)=g;
0099 *((double *)((int*)shmx+1)+2)=b;
0100 *(int*)shmx=5;
0101 sendMsg();
0102}
0103
0104int glVertex3f(double x,double y,double z)
0105{
0106 *(double *)((int*)shmx+1)=x;
0107 *((double *)((int*)shmx+1)+1)=y;
0108 *((double *)((int*)shmx+1)+2)=z;
0109 *(int*)shmx=6;
0110 sendMsg();
0111}
0112
0113int glEnd()
0114{
0115 *(int*)shmx=7;
0116 sendMsg();
0117}
0118
0119int glVertex2d(double x,double y)
0120{
0121 *(double *)((int*)shmx+1)=x;
0122 *((double *)((int*)shmx+1)+1)=y;
0123 *(int*)shmx=8;
0124 sendMsg();
0125}
0126
0127int glVertex3d(double x,double y,double z)
0128{
0129 *(double *)((int*)shmx+1)=x;
0130 *((double *)((int*)shmx+1)+1)=y;
0131 *((double *)((int*)shmx+1)+2)=z;
0132 *(int*)shmx=9;
0133 sendMsg();
0134}
0135
0136int glVertex4d(double x,double y,double z,double w)
0137{
0138 *(double *)((int*)shmx+1)=x;
0139 *((double *)((int*)shmx+1)+1)=y;
0140 *((double *)((int*)shmx+1)+2)=z;
0141 *((double *)((int*)shmx+1)+3)=w;
0142 *(int*)shmx=10;
0143 sendMsg();
0144}
0145
0146int glRectd(double x1,double y1,double x2,double y2)
0147{
0148 *(double *)((int*)shmx+1)=x1;
0149 *((double *)((int*)shmx+1)+1)=y1;
0150 *((double *)((int*)shmx+1)+2)=x2;
0151 *((double *)((int*)shmx+1)+3)=y2;
0152 *(int*)shmx=11;
0153 sendMsg();
0154}
0155
0156int glEdgeFlag(int flg)
0157{
0158 *((int*)shmx+1)=flg;
0159 *(int*)shmx=12;
0160 sendMsg();
0161}
0162
0163int glRotated(double ang,double x,double y,double z)
0164{
0165 *(double *)((int*)shmx+1)=ang;
0166 *((double *)((int*)shmx+1)+1)=x;
0167 *((double *)((int*)shmx+1)+2)=y;
0168 *((double *)((int*)shmx+1)+3)=z;
0169 *(int*)shmx=13;
0170 sendMsg();
0171}
0172
0173int glTranslated(double x,double y,double z)
0174{
0175 *(double *)((int*)shmx+1)=x;
0176 *((double *)((int*)shmx+1)+1)=y;
0177 *((double *)((int*)shmx+1)+2)=z;
0178 *(int*)shmx=14;
0179 sendMsg();
0180}
0181
0182int glScaled(double x,double y,double z)
0183{
0184 *(double *)((int*)shmx+1)=x;
0185 *((double *)((int*)shmx+1)+1)=y;
0186 *((double *)((int*)shmx+1)+2)=z;
0187 *(int*)shmx=15;
0188 sendMsg();
0189}
0190
0191/* 16 glMultMatrixd(double *m) */
0192
0193int glOrtho(double l,double r,double b,double t,double n,double f)
0194{
0195 *(double *)((int*)shmx+1)=l;
0196 *((double *)((int*)shmx+1)+1)=r;
0197 *((double *)((int*)shmx+1)+2)=b;
0198 *((double *)((int*)shmx+1)+3)=t;
0199 *((double *)((int*)shmx+1)+4)=n;
0200 *((double *)((int*)shmx+1)+5)=f;
0201 *(int*)shmx=17;
0202 sendMsg();
0203}
0204
0205/* 18 glLoadMatrixd(double *m) */
0206
0207int glLoadIdentity()
0208{
0209 *(int*)shmx=19;
0210 sendMsg();
0211}
0212
0213int glMatrixMode(int m)
0214{
0215 *((int*)shmx +1)=m;
0216 *(int*)shmx=20;
0217 sendMsg();
0218}
0219
0220int glPushMatrix()
0221{
0222 *(int*)shmx=21;
0223 sendMsg();
0224}
0225
0226int glPopMatrix()
0227{
0228 *(int*)shmx=22;
0229 sendMsg();
0230}
0231
0232/* 23 glDepthRange(double near,double far) */
0233
0234int glColor4f(double r,double g,double b,double a)
0235{
0236 *(double *)((int*)shmx+1)=r;
0237 *((double *)((int*)shmx+1)+1)=g;
0238 *((double *)((int*)shmx+1)+2)=b;
0239 *((double *)((int*)shmx+1)+3)=a;
0240 *(int*)shmx=24;
0241 sendMsg();
0242}
0243
0244int glNormal3d(double x,double y,double z)
0245{
0246 *(double *)((int*)shmx+1)=x;
0247 *((double *)((int*)shmx+1)+1)=y;
0248 *((double *)((int*)shmx+1)+2)=z;
0249 *(int*)shmx=25;
0250 sendMsg();
0251}
0252
0253int glLightfv(int light,int pname,double *param)
0254{
0255 int i,j;
0256 *((int *)shmx+1)=light;
0257 *((int *)shmx+2)=pname;
0258 switch(pname){
0259 case 0x1200: // GL_AMBIENT
0260 case 0x1201: // GL_DIFFUSE
0261 case 0x1202: // GL_SPECULAR
0262 case 0x1203: // GL_POSITION
0263 j=4;
0264 break;
0265 case 0x1204: // GL_SPOT_DIRECTION
0266 j=3;
0267 break;
0268 default:
0269 j=1;
0270 break;
0271 }
0272 for(i=0;i<j;i++) *((float *)((int *)shmx+3)+i)=param[i];
0273 *(int*)shmx=26;
0274 sendMsg();
0275}
0276
0277int glMaterialfv(int face,int pname,double *param)
0278{
0279 int i,j;
0280 *((int *)shmx+1)=face;
0281 *((int *)shmx+2)=pname;
0282 switch(pname){
0283 case 0x1200: // GL_AMBIENT
0284 case 0x1201: // GL_DIFFUSE
0285 case 0x1202: // GL_SPECULAR
0286 case 0x1600: // GL_EMISSION
0287 case 0x1602: // GL_AMBIENT_AND_DIFFUSE
0288 j=4;
0289 break;
0290 case 0x1603: // GL_COLOR_INDEXES
0291 j=3;
0292 break;
0293 default:
0294 j=1;
0295 break;
0296 }
0297 for(i=0;i<j;i++) *((float *)((int *)shmx+3)+i)=param[i];
0298 *(int*)shmx=27;
0299 sendMsg();
0300}
0301
0302/* 28 glLightModelf(int pname,double param) */
0303
0304int glShadeModel(int m)
0305{
0306 *((int*)shmx +1)=m;
0307 *(int*)shmx=29;
0308 sendMsg();
0309}
0310
0311int glFrontFace(int dir)
0312{
0313 *((int*)shmx +1)=dir;
0314 *(int*)shmx=30;
0315 sendMsg();
0316}
0317
0318int glColorMaterial(int face,int mode)
0319{
0320 *((int*)shmx +1)=face;
0321 *((int*)shmx +2)=mode;
0322 *(int*)shmx=31;
0323 sendMsg();
0324}
0325
0326/* 32 glGetLightfv(int light,int pname,double *params) */
0327/* 33 glGetMaterialfv(int face,int pname,double *params) */
0328
0329int glClipPlane(int plane,double *equation)
0330{
0331 int i;
0332 *((int*)shmx +1)=plane;
0333 for(i=0;i<4;i++) ((double *)((char *)shmx+8))[i]=equation[i];
0334 *(int*)shmx=34;
0335 sendMsg();
0336}
0337
0338/* 35 glGetClipPlane(int plane,double *equation) */
0339
0340int glRasterPos2d(double x,double y)
0341{
0342 *(double *)((int*)shmx +1)=x;
0343 *(double *)((int*)shmx +3)=y;
0344 *(int*)shmx=36;
0345 sendMsg();
0346}
0347
0348
0349/* 37 glRasterPos3d(double x,double y,double z) */
0350/* 38 glRasterPos4d(double x,double y,double z,double w) */
0351
0352int glBitmap(int width,int height,double xorig,double yorig,double xmove,double ymove,int *bitmap)
0353{
0354 int n,i;
0355 *((int*)shmx +1)=width;
0356 *((int*)shmx +2)=height;
0357 *(double *)((int*)shmx +3)=xorig;
0358 *(double *)((int*)shmx +5)=yorig;
0359 *(double *)((int*)shmx +7)=xmove;
0360 *(double *)((int*)shmx +9)=ymove;
0361 n=(width%8)? width/8+1 : width/8;
0362 n*=height;
0363 for(i=0;i<n;i++) ((unsigned char *)((int *)shmx+11))[i]=bitmap[i];
0364 *(int*)shmx=39;
0365 sendMsg();
0366}
0367
0368/* 40 glPointSize(double size) */
0369int glLineWidth(double width)
0370{
0371 *(double *)((int *)shmx+1)=width;
0372 *(int*)shmx=41;
0373 sendMsg();
0374}
0375
0376int glLineStipple(int factor,int pattern)
0377{
0378 *((int*)shmx +1)=factor;
0379 *((int*)shmx +2)=pattern;
0380 *(int*)shmx=42;
0381 sendMsg();
0382}
0383
0384int glPolygonStipple(int n,char *mask)
0385{
0386 int i;
0387 *(int*)shmx=43;
0388 for(i=0;i<n;i++) *((char *)shmx+4+i)=mask[i];
0389 sendMsg();
0390}
0391/* 44 glGetPolygonStipple(char *mask) */
0392
0393int glCullFace(int mode)
0394{
0395 *(int *)((int *)shmx+1)=mode;
0396 *(int*)shmx=45;
0397 sendMsg();
0398}
0399
0400/* 46 glPolygonMode(int face,int mode) */
0401/* 47 glReadBuffer(int mode) */
0402/* 48 glReadPixels(int x,int y,int width,int height,int format,int type,char *pixels) */
0403/* 49 glDrawPixels(int width,int height,int format,int type,char *pixels) */
0404int glDrawPixels(int width,int height,int format,int type,char *pixels)
0405{
0406 *((int*)shmx +1)=width;
0407 *((int*)shmx +2)=height;
0408 *((int*)shmx +3)=format;
0409 *((int*)shmx +4)=type;
0410 strcpy((char *)((int*)shmx +5),pixels);
0411 *(int*)shmx=49;
0412 sendMsg();
0413}
0414
0415int glCopyPixels(int x,int y,int width,int height,int type)
0416{
0417 *((int*)shmx +1)=x;
0418 *((int*)shmx +2)=y;
0419 *((int*)shmx +3)=width;
0420 *((int*)shmx +4)=height;
0421 *((int*)shmx +5)=type;
0422 *(int*)shmx=50;
0423 sendMsg();
0424}
0425
0426int glPixelStorei(int pname,int param)
0427{
0428 *((int*)shmx +1)=pname;
0429 *((int*)shmx +2)=param;
0430 *(int*)shmx=51;
0431 sendMsg();
0432}
0433
0434/* 52 glPixelTransfer{if} (GLenum pname, TYPE param)*/
0435/* 53 glPixelMap{f usui}v (GLenum map, GLint mapsize, const TYPE *values)*/
0436/* 54 glGetPixelMap{f usui}v (GLenum map, TYPE *values)*/
0437/* 55 glPixelZoom (GLfloat xfactor, GLfloat yfactor)*/
0438int glPixelZoom (double xfactor,double yfactor)
0439{
0440 *(float *)((int*)shmx +1)=xfactor;
0441 *(float *)((int*)shmx +2)=yfactor;
0442 *(int*)shmx=55;
0443 sendMsg();
0444}
0445int glTexParameteri(int target,int pname,int param)
0446{
0447 *((int*)shmx +1)=target;
0448 *((int*)shmx +2)=pname;
0449 *((int*)shmx +3)=param;
0450 *(int*)shmx=56;
0451 sendMsg();
0452}
0453
0454int glTexEnvf(int target,int pname,double param)
0455{
0456 *((int*)shmx +1)=target;
0457 *((int*)shmx +2)=pname;
0458 *(float *)((int*)shmx +3)=param;
0459 *(int*)shmx=57;
0460 sendMsg();
0461}
0462
0463/* 58 glTexCoord1{sifd}{v} (TYPE s)*/
0464
0465int glTexCoord2d(double s,double t)
0466{
0467 *(double *)((int*)shmx +1)=s;
0468 *(double *)((int*)shmx +3)=t;
0469 *(int*)shmx=59;
0470 sendMsg();
0471}
0472
0473/* 60 glTexCoord3{sifd}{v} (TYPE s, TYPE t, TYPE r)*/
0474/* 61 glTexCoord4{sifd}{v} (TYPE s, TYPE t, TYPE r, TYPE q)*/
0475/* 62 glTexGen{ifd}{v} (GLenum coord, GLenum pname, TYPE param)*/
0476int glTexGendv(int coord,int pname,double * param)
0477{
0478 int i;
0479 *((int*)shmx +1)=coord;
0480 *((int*)shmx +2)=pname;
0481 for(i=0;i<4;i++) ((double *)((int *)shmx+3))[i]=param[i];
0482 *(int*)shmx=62;
0483 sendMsg();
0484}
0485
0486/* 63 glTexImage1D (GLenum target, GLint level, GLint components, GLsizei width, GLint border, GLenum format, GLenum type, const GLvoid *pixels)*/
0487int glTexImage1D(int target,int level,int components,int width,int border,int format,int type,char *pixels)
0488{
0489 *((int*)shmx +1)=target;
0490 *((int*)shmx +2)=level;
0491 *((int*)shmx +3)=components;
0492 *((int*)shmx +4)=width;
0493 *((int*)shmx +5)=border;
0494 *((int*)shmx +6)=format;
0495 *((int*)shmx +7)=type;
0496 strcpy((char *)((int*)shmx +8),pixels);
0497 *(int*)shmx=63;
0498 sendMsg();
0499 strcpy(pixels,(char *)((int*)shmx +8));
0500}
0501/* 64 glTexImage2D (GLenum target, GLint level, GLint components, GLsizei width, GLsizei height, GLint border, GLenum format, GLenum type, const GLvoid *pixels)*/
0502int glTexImage2D(int target,int level,int components,int width,int height,int border,int format,int type,char *pixels)
0503{
0504 *((int*)shmx +1)=target;
0505 *((int*)shmx +2)=level;
0506 *((int*)shmx +3)=components;
0507 *((int*)shmx +4)=width;
0508 *((int*)shmx +5)=height;
0509 *((int*)shmx +6)=border;
0510 *((int*)shmx +7)=format;
0511 *((int*)shmx +8)=type;
0512 strcpy((char *)((int*)shmx +9),pixels);
0513 *(int*)shmx=64;
0514 sendMsg();
0515 strcpy(pixels,(char *)((int*)shmx +9));
0516}
0517
0518/* 65 glGetTexEnv{if}v (GLenum target, GLenum pname, TYPE *params)*/
0519/* 66 glGetTexGen{ifd}v (GLenum coord, GLenum pname, TYPE *params)*/
0520/* 67 glGetTexImage (GLenum target, GLint level, GLenum format, GLenum type, GLvoid *pixels)*/
0521/* 68 glGetTexLevelParameter{if}v (GLenum target, GLint level, GLenum pname, TYPE *params)*/
0522/* 69 glGetTexParameter{if}v (GLenum target, GLenum pname, TYPE *params)*/
0523
0524int glFogi(int pname,int param)
0525{
0526 *((int*)shmx +1)=pname;
0527 *((int*)shmx +2)=param;
0528 *(int*)shmx=70;
0529 sendMsg();
0530}
0531
0532/* 71 glScissor (GLint x, GLint y, GLsizei width, GLsizei height)*/
0533/* 72 glAlphaFunc (GLenum func, GLclampf ref)*/
0534/* 73 glStencilFunc (GLenum func, GLint ref, GLuint mask)*/
0535/* 74 glStencilOp (GLenum fail, GLenum pass, GLenum zpass)*/
0536/* 75 glDepthFunc (GLenum func)*/
0537int glBlendFunc (int sfactor,int dfactor)
0538{
0539 *((int*)shmx +1)=sfactor;
0540 *((int*)shmx +2)=dfactor;
0541 *(int*)shmx=76;
0542 sendMsg();
0543}
0544
0545/* 77 glLogicOp (GLenum opcode)*/
0546
0547int glClear(int m)
0548{
0549 *((int*)shmx +1)=m;
0550 *(int*)shmx=78;
0551 sendMsg();
0552}
0553/* 79 glClearAccum (GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha)*/
0554
0555int glClearColor(double r, double g, double b,double a)
0556{
0557 *(double *)((int*)shmx+1)=r;
0558 *((double *)((int*)shmx+1)+1)=g;
0559 *((double *)((int*)shmx+1)+2)=b;
0560 *((double *)((int*)shmx+1)+3)=a;
0561 *(int*)shmx=80;
0562 sendMsg();
0563}
0564/* 81 glClearDepth (GLclampd depth)*/
0565/* 82 glClearIndex (GLfloat c)*/
0566/* 83 glClearStencil (GLint s)*/
0567/* 84 glDrawBuffer (GLenum mode)*/
0568/* 85 glIndexMask (GLuint mask)*/
0569/* 86 glColorMask (GLboolean red, GLboolean green, GLboolean blue, GLboolean alpha)*/
0570
0571int glDepthMask(int flag)
0572{
0573 *((int*)shmx +1)=flag;
0574 *(int*)shmx=87;
0575 sendMsg();
0576}
0577
0578/* 88 glStencilMask (GLuint mask)*/
0579/* 89 glAccum (GLenum op, GLfloat value)*/
0580/* 90 glMap1{fd} (GLenum target, TYPE u1, TYPE u2, GLint stride, GLint order, const TYPE *points)*/
0581/* 91 glMap2{fd} (GLenum target, TYPE u1, TYPE u2, GLint ustride, GLint uorder, TYPE v1, TYPE v2, GLint vstride,GLint vorder, const TYPE *points)*/
0582int glMap2d(int target,double u1,double u2,int ustride,int uorder,double v1,double v2,int vstride,int vorder,double *points)
0583{
0584 int i,n;
0585 n=uorder*vorder;
0586 switch(target){
0587 case 0x0DB4: // GL_MAP2_TEXTURE_COORD_2
0588 n*=2;
0589 break;
0590 case 0x0DB7: // GL_MAP2_VERTEX_3
0591 n*=3;
0592 break;
0593 default:
0594 n*=3;
0595 break;
0596 }
0597 for(i=0;i<n;i++) *((double *)outbuf+i)=points[i];
0598 *((int*)shmx +1)=target;
0599 *(double *)((int *)shmx+2)=u1;
0600 *(double *)((int *)shmx+4)=u2;
0601 *((int *)shmx+6)=ustride;
0602 *((int *)shmx+7)=uorder;
0603 *(double *)((int *)shmx+8)=v1;
0604 *(double *)((int *)shmx+10)=v2;
0605 *((int *)shmx+12)=vstride;
0606 *((int *)shmx+13)=vorder;
0607 *(int*)shmx=91;
0608 sendMsg();
0609}
0610/* 92 glMapGrid1{fd} (GLint n, TYPE u1, TYPE u2)*/
0611/* 93 glMapGrid2{fd} (GLint un, TYPE u1, TYPE u2, GLint vn, TYPE v1, TYPE v2)*/
0612int glMapGrid2d(int un,double u1,double u2,int vn,double v1,double v2){
0613 *((int*)shmx +1)=un;
0614 *(double *)((int *)shmx+2)=u1;
0615 *(double *)((int *)shmx+4)=u2;
0616 *((int*)shmx +6)=vn;
0617 *(double *)((int *)shmx+7)=v1;
0618 *(double *)((int *)shmx+9)=v2;
0619 *(int*)shmx=93;
0620 sendMsg();
0621}
0622
0623/* 94 glEvalMesh1 (GLenum mode, GLint i1, GLint i2)*/
0624/* 95 glEvalMesh2 (GLenum mode, GLint i1, GLint i2, GLint j1, GLint j2)*/
0625int glEvalMesh2(int mode,int i1,int i2,int j1,int j2)
0626{
0627 *((int*)shmx +1)=mode;
0628 *((int*)shmx +2)=i1;
0629 *((int*)shmx +3)=i2;
0630 *((int*)shmx +4)=j1;
0631 *((int*)shmx +5)=j2;
0632 *(int*)shmx=95;
0633 sendMsg();
0634}
0635
0636/* 96 glEvalPoint1 (GLint i)*/
0637/* 97 glEvalPoint2 (GLint i, GLint j)*/
0638/* 98 glEvalCoord1{fd}{v} (TYPE u)*/
0639/* 99 glEvalCoord2{fd}{v} (TYPE u, TYPE v)*/
0640/* 100 glGetMap{idf}v (GLenum target, GLenum query, TYPE *v)*/
0641/* 101 GLint glRenderMode (GLenum mode)*/
0642/* 102 glSelectBuffer (GLsizei size, GLuint *buffer)*/
0643/* 103 glFeedbackBuffer (GLsizei size, GLenum type, GLfloat *buffer)*/
0644/* 104 glPassThrough (GLfloat token)*/
0645/* 105 glInitNames (void)*/
0646/* 106 glLoadName (GLuint name)*/
0647/* 107 glPushName (GLuint name)*/
0648/* 108 glPopName (void)*/
0649
0650int glNewList (int list,int mode)
0651{
0652 *((int*)shmx +1)=list;
0653 *((int*)shmx +2)=mode;
0654 *(int*)shmx=109;
0655 sendMsg();
0656}
0657
0658int glEndList (void)
0659{
0660 *(int*)shmx=110;
0661 sendMsg();
0662}
0663/* 111 glDeleteLists (GLuint list, GLsizei range)*/
0664int glCallList(int list)
0665{
0666 *((int*)shmx +1)=list;
0667 *(int*)shmx=112;
0668 sendMsg();
0669}
0670
0671/* 113 glCallLists (GLsizei n, GLenum type, const GLvoid *lists)*/
0672int glCallLists (int n,int type,int *lists)
0673{
0674 int i;
0675 if(type!=0x1400) return -1;
0676 *((int*)shmx+1)=n;
0677 *((int*)shmx+2)=type;
0678 for(i=0;i<n;i++) ((unsigned char *)shmx+12)[i]=lists[i];
0679 *(int*)shmx=113;
0680 sendMsg();
0681 return 0;
0682}
0683
0684int glGenLists(int range)
0685{
0686 *((int*)shmx +1)=range;
0687 *(int*)shmx=114;
0688 sendMsg();
0689 return *((int*)shmx+1);
0690}
0691
0692/* 115 GLboolean glIsList (GLuint list)*/
0693
0694int glListBase(int base)
0695{
0696 *((int*)shmx +1)=base;
0697 *(int*)shmx=116;
0698 sendMsg();
0699}
0700
0701int glEnable (int cap)
0702{
0703 *((int*)shmx +1)=cap;
0704 *(int*)shmx=117;
0705 sendMsg();
0706}
0707
0708int glDisable (int cap)
0709{
0710 *((int*)shmx +1)=cap;
0711 *(int*)shmx=118;
0712 sendMsg();
0713}
0714/* 119 GLboolean glIsEnabled (GLenum cap)*/
0715/* 120 glFinish (void)*/
0716/* 121 glFlush (void)*/
0717
0718int glHint (int target,int mode)
0719{
0720 *((int*)shmx +1)=target;
0721 *((int*)shmx +2)=mode;
0722 *(int*)shmx=122;
0723 sendMsg();
0724}
0725
0726/* 123 GLenum glGetError (void)*/
0727/* 124 const GLubyte * glGetString (GLenum name)*/
0728/* 125 glGetBooleanv (GLenum pname, GLboolean *params)*/
0729/* 126 glGetDoublev (GLenum pname, GLdouble *params)*/
0730int glGetDoublev (int pname,int n,double *params)
0731{
0732 int i;
0733 *((int *)shmx+1)=pname;
0734 *(int*)shmx=122;
0735 sendMsg();
0736 for(i=0;i<n;i++) params[i]=*((double *)shmx+1+i);
0737}
0738
0739/* 127 glGetIntegerv (GLenum pname, GLint *params)*/
0740/* 128 glPushAttrib (GLbitfield mask)*/
0741int glPushAttrib (int mask)
0742{
0743 *((int*)shmx +1)=mask;
0744 *(int*)shmx=128;
0745 sendMsg();
0746}
0747
0748/* 129 glPopAttrib (void)*/
0749int glPopAttrib (void)
0750{
0751 *(int*)shmx=129;
0752 sendMsg();
0753}
0754/* 130 int gluScaleImage (GLenum format, GLint widthin, GLint heightin,GLenum typein, const void *datain, GLint widthout, GLint heightout, GLenum typeout, void *dataout)*/
0755/* 131 int gluBuild1DMipmaps (GLenum target, GLint components, GLint width, GLenum format, GLenum type, void *data)*/
0756/* 132 int gluBuild2DMipmaps (GLenum target, GLint components, GLint width, GLint height, GLenum format, GLenum type, void *data)*/
0757
0758int gluOrtho2D(double left,double right,double bottom,double top)
0759{
0760 *(double *)((int*)shmx+1)=left;
0761 *((double *)((int*)shmx+1)+1)=right;
0762 *((double *)((int*)shmx+1)+2)=bottom;
0763 *((double *)((int*)shmx+1)+3)=top;
0764 *(int*)shmx=133;
0765 sendMsg();
0766}
0767
0768int gluPerspective(double fovy,double aspect,double zNear,double zFar)
0769{
0770 *(double *)((int*)shmx+1)=fovy;
0771 *((double *)((int*)shmx+1)+1)=aspect;
0772 *((double *)((int*)shmx+1)+2)=zNear;
0773 *((double *)((int*)shmx+1)+3)=zFar;
0774 *(int*)shmx=134;
0775 sendMsg();
0776}
0777
0778int gluLookAt(double eyex,double eyey,double eyez,double centerx,double centery,double centerz,double upx,double upy,double upz)
0779{
0780 *(double *)((int*)shmx+1)=eyex;
0781 *((double *)((int*)shmx+1)+1)=eyey;
0782 *((double *)((int*)shmx+1)+2)=eyez;
0783 *((double *)((int*)shmx+1)+3)=centerx;
0784 *((double *)((int*)shmx+1)+4)=centery;
0785 *((double *)((int*)shmx+1)+5)=centerz;
0786 *((double *)((int*)shmx+1)+6)=upx;
0787 *((double *)((int*)shmx+1)+7)=upy;
0788 *((double *)((int*)shmx+1)+8)=upz;
0789 *(int*)shmx=136;
0790 sendMsg();
0791}
0792/* 139 GLUtriangulatorObj* gluNewTess (void)*/
0793/* 140 gluTessCallback (GLUtriangulatorObj *tobj, GLenum which, void (*fn)())*/
0794/* 141 gluDeleteTess (GLUtriangulatorObj *tobj)*/
0795/* 142 gluBeginPolygon (GLUtriangulatorObj *tobj)*/
0796/* 143 gluEndPolygon (GLUtriangulatorObj *tobj)*/
0797/* 144 gluNextContour (GLUtriangulatorObj *tobj, GLenum type)*/
0798/* 145 gluTessVertex (GLUtriangulatorObj *tobj, GLdouble v[3], void *data)*/
0799/* 146 GLUquadricObj* gluNewQuadric (void)*/
0800/* 147 gluDeleteQuadric (GLUquadricObj *state)*/
0801/* 148 gluQuadricCallback (GLUquadricObj *qobj, GLenum which, void (*fn)())*/
0802/* 149 gluQuadricNormals (GLUquadricObj *quadObject, GLenum normals)*/
0803/* 150 gluQuadricTexture (GLUquadricObj *quadObject, GLboolean textureCoords)*/
0804/* 151 gluQuadricOrientation (GLUquadricObj *quadObject, GLenum orientation)*/
0805/* 152 gluQuadricDrawStyle (GLUquadricObj *quadObject, GLenum drawStyle)*/
0806/* 153 gluCylinder (GLUquadricObj *qobj, GLdouble baseRadius,GLdouble topRadius, GLdouble height, GLint slices, GLint stacks)*/
0807/* 154 gluDisk (GLUquadricObj *qobj, GLdouble innerRadius,GLdouble outerRadius, GLint slices, GLint loops)*/
0808/* 155 gluPartialDisk (GLUquadricObj *qobj, GLdouble innerRadius,GLdouble outerRadius, GLint slices, GLint loops,GLdouble startAngle, GLdouble sweepAngle)*/
0809/* 156 gluSphere (GLUquadricObj *qobj, GLdouble radius, GLint slices,GLint stacks)*/
0810/* 157 GLUnurbsObj* gluNewNurbsRenderer (void)*/
0811/* 158 gluDeleteNurbsRenderer (GLUnurbsObj *nobj)*/
0812/* 159 gluNurbsCallback (GLUnurbsObj *nobj, GLenum which, void (*fn)())*/
0813/* 160 gluBeginCurve (GLUnurbsObj *nobj)*/
0814/* 161 gluEndCurve (GLUnurbsObj *nobj)*/
0815/* 162 gluNurbsCurve (GLUnurbsObj *nobj, GLint nknots, GLfloat *knot, GLint stride, GLfloat *ctlarray, GLint order, GLenum type)*/
0816/* 163 gluBeginSurface (GLUnurbsObj *nobj);void gluEndSurface (GLUnurbsObj *nobj)*/
0817/* 164 gluBeginSurface (GLUnurbsObj *nobj);void gluEndSurface (GLUnurbsObj *nobj)*/
0818/* 165 gluNurbsSurface (GLUnurbsObj *nobj, GLint uknot_count, GLfloat *uknot, GLint vknot_count, GLfloat *vknot, GLint u_stride, GLint v_stride, GLfloat *ctlarray, GLint sorder, GLint torder, GLenum type)*/
0819/* 166 gluBeginTrim (GLUnurbsObj *nobj)*/
0820/* 167 gluEndTrim (GLUnurbsObj *nobj)*/
0821/* 168 gluPwlCurve (GLUnurbsObj *nobj, GLint count, GLfloat *array, GLint stride, GLenum type)*/
0822/* 169 gluLoadSamplingMatrices (GLUnurbsObj *nobj, const GLfloat modelMatrix[16], const GLfloat projMatrix[16], const GLint viewport[4])*/
0823/* 170 gluNurbsProperty (GLUnurbsObj *nobj, GLenum property, GLfloat value)*/
0824/* 171 gluGetNurbsProperty (GLUnurbsObj *nobj, GLenum property,GLfloat *value)*/
0825/* 172 const GLubyte* gluErrorString (GLenum errorCode)*/
0826
0827int glFogf(int pname,double param)
0828{
0829 *((int*)shmx +1)=pname;
0830 *((float *)((int*)shmx +2))=param;
0831 *(int*)shmx=174;
0832 sendMsg();
0833}
0834
0835int glFogfv(int pname,int n,double *param)
0836{
0837 int i;
0838 *((int*)shmx +1)=pname;
0839 for(i=0;i<n;i++) ((float *)((int*)shmx +2))[i]=param[i];
0840 *(int*)shmx=175;
0841 sendMsg();
0842}
0843
0844int glEnableClientState(int cap)
0845{
0846 *((int*)shmx +1)=cap;
0847 *(int*)shmx=176;
0848 sendMsg();
0849}
0850
0851int glDisableClientState(int cap)
0852{
0853 *((int*)shmx +1)=cap;
0854 *(int*)shmx=177;
0855 sendMsg();
0856}
0857
0858int glVertexPointer(int size,int type,int stride,int n,double *ptr)
0859{
0860 int i,j;
0861 float *fp;
0862 *((int*)shmx +1)=size;
0863 *((int*)shmx +2)=type;
0864 *((int*)shmx +3)=stride;
0865 *((int*)shmx +4)=n;
0866 fp=(float *)outbuf;
0867 j=size*n;
0868 for(i=0;i<j;i++) fp[i]=ptr[i];
0869 *(int*)shmx=178;
0870 sendMsg();
0871}
0872
0873int glColorPointer(int size,int type,int stride,int n,double *ptr )
0874{
0875 int i,j;
0876 float *fp;
0877 *((int*)shmx +1)=size;
0878 *((int*)shmx +2)=type;
0879 *((int*)shmx +3)=stride;
0880 *((int*)shmx +4)=n;
0881 fp=(float *)outbuf;
0882 j=size*n;
0883 for(i=0;i<j;i++) fp[i]=ptr[i];
0884 *(int*)shmx=179;
0885 sendMsg();
0886}
0887
0888glDrawElements(int mode,int count,int type,int *indices)
0889{
0890 int i;
0891 unsigned char *ucp;
0892 *((int*)shmx +1)=mode;
0893 *((int*)shmx +2)=count;
0894 *((int*)shmx +3)=type;
0895 ucp=(unsigned char *)((int *)shmx+4);
0896 for(i=0;i<count;i++) ucp[i]=indices[i];
0897 *(int*)shmx=180;
0898 sendMsg();
0899}
0900
0901glGenTextures(int n,int *textures)
0902{
0903 int i;
0904 *((int *)shmx+1)=n;
0905 *(int *)shmx=181;
0906 sendMsg();
0907 for(i=0;i<n;i++) textures[i]=((int *)shmx+2)[i];
0908}
0909
0910glBindTexture(int target,int texture)
0911{
0912 *((int *)shmx+1)=target;
0913 *((int *)shmx+2)=texture;
0914 *(int *)shmx=182;
0915 sendMsg();
0916}
0917
0918glRasterPos2i(int x,int y)
0919{
0920 *((int *)shmx+1)=x;
0921 *((int *)shmx+2)=y;
0922 *(int *)shmx=183;
0923 sendMsg();
0924}
0925
0926int glTexGeni(int coord,int pname,int param)
0927{
0928 *((int*)shmx +1)=coord;
0929 *((int*)shmx +2)=pname;
0930 *((int*)shmx +3)=param;
0931 *(int*)shmx=184;
0932 sendMsg();
0933}
0934