Code:
void worker_func(void)
{
static int rotation = 0;
float height;
GLfloat rtri;
// Create window for OpenGL output
if (!SDL_SetVideoMode(640, 480, 32, SDL_OPENGL)) {
printf ("Failed to create window\n");
kiosk_vtable.disable_plugin (&kiosk_vtable);
return;
}
glViewport(0,0,640,480);
glMatrixMode(GL_PROJECTION);
gluPerspective(45, 640/480, 1, 10);
glMatrixMode(GL_MODELVIEW);
glLoadIdentity(); // Reset The View
glTranslatef(-0.0f,0.0f,-6.0f); // Move Left And Into The Screen
while (thread_control == GO) {
// Get the bass amplitude
SDL_mutexP(mutex);
height = shared_freq_data[0][0] / 1024.0;
SDL_mutexV(mutex);
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); // Clear The Screen And The Depth Buffer
glRotatef(0.2f,0.0f,1.0f,0.0f); // Rotate The Pyramid On It's Y Axis
// Draw pyramid
glBegin(GL_TRIANGLES);
glColor3f(1.0f,0.0f,0.0f); // Red
glVertex3f( 0.0f, 1.0f, 0.0f); // Top Of Triangle (Front)
glColor3f(0.0f,1.0f,0.0f); // Green
glVertex3f(-1.0f,-1.0f, 1.0f); // Left Of Triangle (Front)
glColor3f(0.0f,0.0f,1.0f); // Blue
glVertex3f( 1.0f,-1.0f, 1.0f); // Right Of Triangle (Front)
glColor3f(1.0f,0.0f,0.0f); // Red
glVertex3f( 0.0f, 1.0f, 0.0f); // Top Of Triangle (Right)
glColor3f(0.0f,0.0f,1.0f); // Blue
glVertex3f( 1.0f,-1.0f, 1.0f); // Left Of Triangle (Right)
glColor3f(0.0f,1.0f,0.0f); // Green
glVertex3f( 1.0f,-1.0f, -1.0f); // Right Of Triangle (Right)
glColor3f(1.0f,0.0f,0.0f); // Red
glVertex3f( 0.0f, 1.0f, 0.0f); // Top Of Triangle (Back)
glColor3f(0.0f,1.0f,0.0f); // Green
glVertex3f( 1.0f,-1.0f, -1.0f); // Left Of Triangle (Back)
glColor3f(0.0f,0.0f,1.0f); // Blue
glVertex3f(-1.0f,-1.0f, -1.0f); // Right Of Triangle (Back)
glColor3f(1.0f,0.0f,0.0f); // Red
glVertex3f( 0.0f, 1.0f, 0.0f); // Top Of Triangle (Left)
// glColor3f(0.0f,0.0f,1.0f); // Blue
glVertex3f(-1.0f,-1.0f,-1.0f); // Left Of Triangle (Left)
// glColor3f(0.0f,1.0f,0.0f); // Green
glVertex3f(-1.0f,-1.0f, 1.0f); // Right Of Triangle (Left)
glEnd(); // Done Drawing The Pyramid // Done Drawing The Quad
glFinish();
SDL_GL_SwapBuffers();
xmms_usleep(1000000 / 70);
}
printf("Worker thread: Exiting\n");
}
Wie man vielleicht im Code sieht, ist das ganze Teil eines xmms-plugins, aber das dürfte OpenGL ja nicht stören...
Lesezeichen