/* $Id: rail.c,v 1.98 2008/04/06 22:59:38 pb Exp $ */ #include #include #define GL_GLEXT_PROTOTYPES #include #include #include #include #include #include #include #include static int screen_width, screen_height; unsigned int tsin = 2; float v[] = { 0,0,0, 1,1,1, 2,2,2, 3,3,3 }; unsigned short i[] = { 0, 1, 2, 1, 2, 3 }; GLsizei tsci[2] = { 3, 3 }; unsigned short *tsfi[2]; static void drawfunc(void) { tsfi[0] = &i[0]; tsfi[1] = &i[3]; glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); glEnableClientState(GL_VERTEX_ARRAY); glInterleavedArrays(GL_V3F, 0, v); glMultiDrawElements(GL_TRIANGLE_STRIP, tsci, GL_UNSIGNED_SHORT, (void *)tsfi, tsin); glutSwapBuffers(); } static void idle_visible() { glutPostRedisplay(); } /* new window size or exposure */ static void reshape(int width, int height) { screen_width = width; screen_height = height; glViewport(0, 0, (GLint) width, (GLint) height); glMatrixMode(GL_PROJECTION); glLoadIdentity(); glMatrixMode(GL_MODELVIEW); glLoadIdentity(); } static void init() { glClearColor(.5, .5, .9, 1.0); } void visible(int vis) { glutIdleFunc(idle_visible); } int main(int argc, char *argv[]) { glutInit(&argc, argv); glutInitDisplayMode(GLUT_RGB|GLUT_DEPTH|GLUT_DOUBLE); glutInitWindowPosition(0, 0); glutInitWindowSize(200, 200); glutCreateWindow("Test glMultiDrawElements"); glutDisplayFunc(drawfunc); glutReshapeFunc(reshape); glutVisibilityFunc(visible); printf("Vendor: %s\n", glGetString(GL_VENDOR)); printf("Renderer: %s\n", glGetString(GL_RENDERER)); printf("Version: %s\n", glGetString(GL_VERSION)); printf("Extensions: %s\n", glGetString(GL_EXTENSIONS)); printf("GLU Version: %s\n", gluGetString(GLU_VERSION)); printf("GLU Extensions: %s\n", gluGetString(GLU_EXTENSIONS)); fflush(stdout); init(); glutMainLoop(); return 0; }