ReadClump(mdl->clp, dff->start*DIRBLOCKSIZE, img[arnum]); mdl->texturefiles = NULL; GetTextures(mdl->clp, &mdl->texturefiles); i = 0; while (mdl->texturefiles[i] != NULL) { i++; mdl->texturecount = i; mdl->textures = (GLuint *) malloc(mdl->texturecount * sizeof(GLuint)); if (UseTextures) { if (!generictxd) mdl->txdcount = TxdToOglTex(txd->start*DIRBLOCKSIZE, img[arnum], &mdl->texlist); else mdl->txdcount = TxdToOglTex(0, generic, &mdl->texlist); LoadTextures(mdl); objscount++; return mdl; void DestroyModel(Model *mdl) int i; DestroyClump(mdl->clp); free(mdl->clp); for (i = 0; i < mdl->texturecount; i++) free(mdl->texturefiles[i]); free(mdl->texturefiles); glDeleteTextures(mdl->texturecount, mdl->textures); DestroyTxd(mdl->texlist, mdl->txdcount); free(mdl->textures); void DestroyObjs(Objs *objs) DestroyModel(objs->mdl); free(objs->mdl); void exitprog(int sig) int i; for (i = 0; i < objscount; i++) { DestroyObjs(objs[i]); free(objs[i]); free(objs); DestroyObjs(objs); free(objs); printf("\nExit\n"); exit(0); void InitOGL(int argc, char *argv[]) GLint tu; int w, h; w = 800; h = 600; glutInit(&argc, argv); glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGB | GLUT_DEPTH | GLUT_ALPHA); glutInitWindowSize(800, 600); glutCreateWindow("DFF viewer"); glutReshapeFunc(ChangeSize); glutSpecialFunc(&SpecialKeyPressed); glutKeyboardFunc(&KeyPressed); glutDisplayFunc(RenderScene); glutIdleFunc(RenderScene); /* glutFullScreen(); */ /* printf("%s\n", glGetString(GL_EXTENSIONS)); */ glGetIntegerv(GL_MAX_TEXTURE_UNITS, &tu); printf("%d texture units are available 4 are needed\n", tu); if (tu < 4) { printf("Too few texture units\n"); exit(3); start = clock(); glClearColor(0.6f, 0.6f, 0.6f, 1.0f ); glClearDepth(1.0); glDepthFunc(GL_LESS); glEnable(GL_DEPTH_TEST); glEnable(GL_ALPHA_TEST); glEnable(GL_NORMALIZE); // glEnable(GL_CULL_FACE); glPolygonMode(GL_FRONT_AND_BACK, GL_FILL); // glPolygonMode(GL_BACK, GL_LINE); glShadeModel(GL_SMOOTH); glHint(GL_PERSPECTIVE_CORRECTION_HINT, GL_NICEST); glMatrixMode(GL_PROJECTION); glLoadIdentity(); gluPerspective(45.0f, (GLfloat) w/(GLfloat)h, 0.1f, 100.0f); glMatrixMode(GL_MODELVIEW); glEnable(GL_LIGHTING); glLightfv(GL_LIGHT0, GL_AMBIENT, LightAmbient); glLightfv(GL_LIGHT0, GL_DIFFUSE, LightDiffuse); glEnable(GL_LIGHT0); glutMainLoop();