+ int i, num, nfaces;
+
+ if(!(gscn = goat3d_create()) || goat3d_load(gscn, "data/track1.g3d")) {
+ return -1;
+ }
+
+ dlist = glGenLists(1);
+ glNewList(dlist, GL_COMPILE);
+ num = goat3d_get_node_count(gscn);
+ for(i=0; i<num; i++) {
+ struct goat3d_node *node = goat3d_get_node(gscn, i);
+ if(goat3d_get_node_type(node) == GOAT3D_NODE_MESH) {
+ struct goat3d_mesh *mesh = goat3d_get_node_object(node);
+
+ glEnableClientState(GL_VERTEX_ARRAY);
+ glVertexPointer(3, GL_FLOAT, 0, goat3d_get_mesh_attribs(mesh, GOAT3D_MESH_ATTR_VERTEX));
+
+ nfaces = goat3d_get_mesh_face_count(mesh) / 3;
+ glDrawElements(GL_TRIANGLES, nfaces * 3, GL_UNSIGNED_INT, goat3d_get_mesh_faces(mesh));
+
+ glDisableClientState(GL_VERTEX_ARRAY);
+
+ }
+ }
+ glEndList();
+