	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();
