4 * This program is in the public domain
8 * Conversion to GLUT by Mark J. Kilgard
10 * Conversion to UGL/Mesa by Stephane Raimbault
18 #include <ugl/uglevent.h>
19 #include <ugl/uglinput.h>
21 #include <GL/uglmesa.h>
23 #define COS(X) cos( (X) * 3.14159/180.0 )
24 #define SIN(X) sin( (X) * 3.14159/180.0 )
30 UGL_LOCAL UGL_EVENT_SERVICE_ID eventServiceId
;
31 UGL_LOCAL UGL_EVENT_Q_ID qId
;
32 UGL_LOCAL UGL_MESA_CONTEXT umc
;
34 UGL_LOCAL GLuint Ball
;
35 UGL_LOCAL GLfloat Zrot
, Zstep
;
36 UGL_LOCAL GLfloat Xpos
, Ypos
;
37 UGL_LOCAL GLfloat Xvel
, Yvel
;
38 UGL_LOCAL GLfloat Xmin
, Xmax
;
39 UGL_LOCAL GLfloat Ymin
;
40 /* UGL_LOCAL GLfloat Ymax = 4.0; */
43 UGL_LOCAL GLuint
make_ball(void)
47 GLfloat da
= 18.0, db
= 18.0;
54 glNewList(list
, GL_COMPILE
);
57 for (a
= -90.0; a
+ da
<= 90.0; a
+= da
)
59 glBegin(GL_QUAD_STRIP
);
60 for (b
= 0.0; b
<= 360.0; b
+= db
)
73 x
= radius
* COS(b
) * COS(a
);
74 y
= radius
* SIN(b
) * COS(a
);
78 x
= radius
* COS(b
) * COS(a
+ da
);
79 y
= radius
* SIN(b
) * COS(a
+ da
);
80 z
= radius
* SIN(a
+ da
);
94 UGL_LOCAL
void initGL(GLsizei width
, GLsizei height
)
96 float aspect
= (float) width
/ (float) height
;
97 glViewport(0, 0, (GLint
) width
, (GLint
) height
);
99 uglMesaSetColor(RED
, 1.0, 0.0, 0.0);
100 uglMesaSetColor(WHITE
, 1.0, 1.0, 1.0);
101 uglMesaSetColor(CYAN
, 0.0, 1.0, 1.0);
103 glMatrixMode(GL_PROJECTION
);
105 glOrtho(-6.0 * aspect
, 6.0 * aspect
, -6.0, 6.0, -6.0, 6.0);
106 glMatrixMode(GL_MODELVIEW
);
110 UGL_LOCAL
void drawGL(void)
113 static float vel0
= -100.0;
115 glClear(GL_COLOR_BUFFER_BIT
);
120 for (i
= -5; i
<= 5; i
++)
125 for (i
= -5; i
<= 5; i
++)
130 for (i
= -5; i
<= 5; i
++)
133 glVertex2f(i
* 1.15, -5.9);
135 glVertex2f(-5.3, -5.35);
136 glVertex2f(5.3, -5.35);
137 glVertex2f(-5.75, -5.9);
138 glVertex2f(5.75, -5.9);
142 glTranslatef(Xpos
, Ypos
, 0.0);
143 glScalef(2.0, 2.0, 2.0);
144 glRotatef(8.0, 0.0, 0.0, 1.0);
145 glRotatef(90.0, 1.0, 0.0, 0.0);
146 glRotatef(Zrot
, 0.0, 0.0, 1.0);
154 uglMesaSwapBuffers();
182 UGL_LOCAL
int getEvent(void)
188 status
= uglEventGet (qId
, &event
, sizeof (event
), UGL_NO_WAIT
);
190 while (status
!= UGL_STATUS_Q_EMPTY
)
192 UGL_INPUT_EVENT
* pInputEvent
= (UGL_INPUT_EVENT
*)&event
;
194 if (pInputEvent
->modifiers
& UGL_KEYBOARD_KEYDOWN
)
197 status
= uglEventGet (qId
, &event
, sizeof (event
), UGL_NO_WAIT
);
203 void windMLBounce (UGL_BOOL windMLMode
);
205 void uglbounce (void)
207 taskSpawn("tBounce", 210, VX_FP_TASK
, 100000, (FUNCPTR
)windMLBounce
,
208 UGL_FALSE
,1,2,3,4,5,6,7,8,9);
211 void windMLBounce(UGL_BOOL windMLMode
)
213 GLsizei width
, height
;
214 UGL_INPUT_DEVICE_ID keyboardDevId
;
229 uglDriverFind (UGL_KEYBOARD_TYPE
, 0, (UGL_UINT32
*)&keyboardDevId
);
231 uglDriverFind (UGL_EVENT_SERVICE_TYPE
, 0, (UGL_UINT32
*)&eventServiceId
);
233 qId
= uglEventQCreate (eventServiceId
, 100);
236 umc
= uglMesaCreateNewContext(UGL_MESA_DOUBLE
237 | UGL_MESA_WINDML_EXCLUSIVE
, NULL
);
239 umc
= uglMesaCreateNewContext(UGL_MESA_DOUBLE
, NULL
);
249 uglMesaMakeCurrentContext(umc
, 0, 0, UGL_MESA_FULLSCREEN_WIDTH
,
250 UGL_MESA_FULLSCREEN_HEIGHT
);
254 glEnable(GL_CULL_FACE
);
255 glDisable(GL_DITHER
);
256 glShadeModel(GL_FLAT
);
258 uglMesaGetIntegerv(UGL_MESA_WIDTH
, &width
);
259 uglMesaGetIntegerv(UGL_MESA_HEIGHT
, &height
);
261 initGL(width
, height
);
266 uglEventQDestroy (eventServiceId
, qId
);
268 uglMesaDestroyContext();