more mozilla mompatibility
[glugin.git] / core.cpp
blob963c6b945099a787afeac2002eb673d15aa3e819
2 #include "glugin.h"
3 #include <GL/gl.h>
4 #include <GL/glu.h>
5 #include <unistd.h>
7 void guest_read_host_requests(pluginData* pd)
9 int cmd;
10 NPStream* s;
11 if(fread(&cmd,sizeof(int),1,pd->pr)<=0) return; //no data
12 switch(cmd) {
13 case gln_new_stream:
14 fread(&s,sizeof(s),1,pd->pr);
15 pd->handle_newstream(pd,s);
16 break;
17 case gln_destroy_stream:
18 fread(&s,sizeof(s),1,pd->pr);
19 pd->handle_destroystream(pd,s);
20 break;
21 case gln_stream_data:
23 int32 off,len;
24 void*data;
25 fread(&s,sizeof(s),1,pd->pr);
26 fread(&off,sizeof(off),1,pd->pr);
27 fread(&len,sizeof(len),1,pd->pr);
28 if(len>0) {
29 data=malloc(len);
30 fread(data,len,1,pd->pr);
31 pd->handle_write(pd,s,off,len,data);
32 free(data);
33 } else Log("w: zero len!");
35 break;
36 default: Log("Unhandled request to guest: %d",cmd);
40 void guest_newstream(pluginData*pd, NPStream*s)
42 Log("guest has NEWSTREAM: %p",s);
45 void guest_destroystream(pluginData*pd, NPStream*s)
47 Log("guest has DESTROYSTREAM: %p",s);
50 void guest_write(pluginData*pd,NPStream*s,int32 off,int32 len,void*data)
52 Log("guest has WRITE: %p %d %d, data followz:",s,off,len);
53 for(int i=0;i<len;++i)Log("%8X: %c",i,((char*)data)[i]);
56 void glugin_proc(pluginData*pd)
58 float rot=0;
59 float r=pd->r/255.0,g=pd->g/255.0,b=pd->b/255.0;
61 float br=pd->br/255.0,bg=pd->bg/255.0,bb=pd->bb/255.0;
63 pd->handle_newstream=guest_newstream;
64 pd->handle_destroystream=guest_destroystream;
65 pd->handle_write=guest_write;
68 glClearColor(br,bg,bb,0);
69 glDisable(GL_DEPTH_TEST);
70 glDepthFunc(GL_LEQUAL);
71 glShadeModel(GL_SMOOTH);
73 glMatrixMode(GL_PROJECTION);
74 glLoadIdentity();
75 gluPerspective(80,1.3333,0.1,100);
76 glMatrixMode(GL_MODELVIEW);
77 glLoadIdentity();
78 while(!(pd->exit_request)) {
79 guest_read_host_requests(pd);
80 usleep(1000);
81 glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);
82 glLoadIdentity();
83 glTranslatef(0,0,-2);
84 glRotatef(rot,0,0,1);
85 {float ri,rj,gi,gj,bi,bj;
86 ri=r;
87 gi=g;
88 bi=b;
89 rj=(br-r)/10;
90 gj=(bg-g)/10;
91 bj=(bb-b)/10;
92 for(int i=0;i<10;++i) {
93 glBegin(GL_TRIANGLES);
94 glColor3f(ri,gi,bi);
95 glVertex2f(0,0.3);
96 glVertex2f(0.1,1);
97 glVertex2f(-0.1,1);
98 glEnd();
99 ri+=rj;
100 gi+=gj;
101 bi+=bj;
102 glRotatef(-20,0,0,1);
104 pd->swapbuffers(pd);
106 rot+=0.5;
108 pd->exit_ack=1;