1 /* uglcube.c - WindML/Mesa example program */
3 /* Copyright (C) 2001 by Wind River Systems, Inc */
6 * Mesa 3-D graphics library
10 * Permission is hereby granted, free of charge, to any person obtaining a
11 * copy of this software and associated documentation files (the "Software"),
12 * to deal in the Software without restriction, including without limitation
13 * the rights to use, copy, modify, merge, publish, distribute, sublicense,
14 * and/or sell copies of the Software, and to permit persons to whom the
15 * Software is furnished to do so, subject to the following conditions:
17 * The above copyright notice and this permission notice shall be included
18 * in all copies or substantial portions of the Software.
20 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
21 * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
22 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
23 * THE AUTHORS OR COPYRIGHT BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
24 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
25 * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
26 * DEALINGS IN THE SOFTWARE.
37 #include <ugl/uglevent.h>
38 #include <ugl/uglinput.h>
40 #include <GL/uglmesa.h>
43 UGL_LOCAL UGL_EVENT_SERVICE_ID eventServiceId
;
44 UGL_LOCAL UGL_EVENT_Q_ID qId
;
45 UGL_LOCAL UGL_MESA_CONTEXT umc
;
46 UGL_LOCAL GLfloat rotx
;
47 UGL_LOCAL GLfloat roty
;
48 UGL_LOCAL GLuint theCube
;
55 glColor3f(0.0f
, 0.0f
, 1.0f
);
56 glVertex3f(-1.0f
, 1.0f
, 1.0f
);
57 glColor3f(0.0f
, 1.0f
, 0.0f
);
58 glVertex3f(1.0f
, 1.0f
, 1.0f
);
59 glColor3f(1.0f
, 0.0f
, 0.0f
);
60 glVertex3f(1.0f
, -1.0f
, 1.0f
);
61 glColor3f(1.0f
, 1.0f
, 0.0f
);
62 glVertex3f(-1.0f
, -1.0f
, 1.0f
);
68 glColor3f(0.0f
, 0.0f
, 1.0f
);
69 glVertex3f(-1.0f
, 1.0f
, -1.0f
);
70 glColor3f(0.0f
, 1.0f
, 0.0f
);
71 glVertex3f(1.0f
, 1.0f
, -1.0f
);
72 glColor3f(1.0f
, 0.0f
, 0.0f
);
73 glVertex3f(1.0f
, -1.0f
, -1.0f
);
74 glColor3f(1.0f
, 1.0f
, 0.0f
);
75 glVertex3f(-1.0f
, -1.0f
, -1.0f
);
81 glColor3f(0.0f
, 1.0f
, 0.0f
);
82 glVertex3f(1.0f
, 1.0f
, 1.0f
);
83 glColor3f(0.0f
, 1.0f
, 0.0f
);
84 glVertex3f(1.0f
, 1.0f
, -1.0f
);
85 glColor3f(1.0f
, 0.0f
, 0.0f
);
86 glVertex3f(1.0f
, -1.0f
, -1.0f
);
87 glColor3f(1.0f
, 0.0f
, 0.0f
);
88 glVertex3f(1.0f
, -1.0f
, 1.0f
);
93 glColor3f(0.0f
, 0.0f
, 1.0f
);
94 glVertex3f(-1.0f
, 1.0f
, 1.0f
);
95 glColor3f(0.0f
, 0.0f
, 1.0f
);
96 glVertex3f(-1.0f
, 1.0f
, -1.0f
);
97 glColor3f(1.0f
, 1.0f
, 0.0f
);
98 glVertex3f(-1.0f
, -1.0f
, -1.0f
);
99 glColor3f(1.0f
, 1.0f
, 0.0f
);
100 glVertex3f(-1.0f
, -1.0f
, 1.0f
);
105 glColor3f(0.0f
, 0.0f
, 1.0f
);
106 glVertex3f(-1.0f
, 1.0f
, -1.0f
);
107 glColor3f(0.0f
, 1.0f
, 0.0f
);
108 glVertex3f(1.0f
, 1.0f
, -1.0f
);
109 glColor3f(0.0f
, 1.0f
, 0.0f
);
110 glVertex3f(1.0f
, 1.0f
, 1.0f
);
111 glColor3f(0.0f
, 0.0f
, 1.0f
);
112 glVertex3f(-1.0f
, 1.0f
, 1.0f
);
118 glColor3f(1.0f
, 1.0f
, 0.0f
);
119 glVertex3f(-1.0f
, -1.0f
, -1.0f
);
120 glColor3f(1.0f
, 0.0f
, 0.0f
);
121 glVertex3f(1.0f
, -1.0f
, -1.0f
);
122 glColor3f(1.0f
, 0.0f
, 0.0f
);
123 glVertex3f(1.0f
, -1.0f
, 1.0f
);
124 glColor3f(1.0f
, 1.0f
, 0.0f
);
125 glVertex3f(-1.0f
, -1.0f
, 1.0f
);
129 UGL_LOCAL
void initGL
135 glClearColor(0.0f
, 0.0f
, 0.0f
, 0.0f
);
136 glDepthFunc(GL_LESS
);
137 glEnable(GL_DEPTH_TEST
);
138 glShadeModel(GL_SMOOTH
);
140 theCube
= glGenLists(1);
141 glNewList(theCube
, GL_COMPILE
);
145 glMatrixMode(GL_PROJECTION
);
147 gluPerspective(45.0f
, (GLfloat
) Width
/ (GLfloat
) Height
, 0.1f
, 100.0f
);
148 glMatrixMode(GL_MODELVIEW
);
150 glTranslatef(0.0f
, 0.0f
, -6.0f
);
154 /* The main drawing function. */
156 UGL_LOCAL
void drawGL()
159 /* Clear The Screen And The Depth Buffer */
161 glClear(GL_COLOR_BUFFER_BIT
| GL_DEPTH_BUFFER_BIT
);
163 /* Rotate the cube */
165 glRotatef(rotx
, 1.0f
, 0.0f
, 0.0f
);
166 glRotatef(roty
, 0.0f
, 1.0f
, 0.0f
);
172 uglMesaSwapBuffers();
176 /* The function called whenever a key is pressed. */
178 UGL_LOCAL
int getEvent(void)
184 status
= uglEventGet (qId
, &event
, sizeof (event
), UGL_NO_WAIT
);
186 while (status
!= UGL_STATUS_Q_EMPTY
)
188 UGL_INPUT_EVENT
* pInputEvent
= (UGL_INPUT_EVENT
*)&event
;
190 if (pInputEvent
->modifiers
& UGL_KEYBOARD_KEYDOWN
)
193 status
= uglEventGet (qId
, &event
, sizeof (event
), UGL_NO_WAIT
);
199 void windMLCube (UGL_BOOL windMLMode
);
203 taskSpawn("tCube", 210, VX_FP_TASK
, 100000, (FUNCPTR
)windMLCube
,
204 UGL_FALSE
,1,2,3,4,5,6,7,8,9);
207 void windMLCube (UGL_BOOL windMLMode
)
209 GLsizei width
, height
;
210 UGL_INPUT_DEVICE_ID keyboardDevId
;
217 uglDriverFind (UGL_KEYBOARD_TYPE
, 0, (UGL_UINT32
*)&keyboardDevId
);
219 if (uglDriverFind (UGL_EVENT_SERVICE_TYPE
, 0,
220 (UGL_UINT32
*)&eventServiceId
) == UGL_STATUS_OK
)
222 qId
= uglEventQCreate (eventServiceId
, 100);
226 eventServiceId
= UGL_NULL
;
230 umc
= uglMesaCreateNewContext(UGL_MESA_DOUBLE
231 | UGL_MESA_WINDML_EXCLUSIVE
, NULL
);
233 umc
= uglMesaCreateNewContext(UGL_MESA_DOUBLE
, NULL
);
237 uglMesaMakeCurrentContext(umc
, 0, 0, UGL_MESA_FULLSCREEN_WIDTH
,
238 UGL_MESA_FULLSCREEN_HEIGHT
);
240 uglMesaGetIntegerv(UGL_MESA_WIDTH
, &width
);
241 uglMesaGetIntegerv(UGL_MESA_HEIGHT
, &height
);
243 /* Initialize our window. */
245 initGL(width
, height
);
250 if (eventServiceId
!= UGL_NULL
)
251 uglEventQDestroy (eventServiceId
, qId
);
253 uglMesaDestroyContext();