-}
-
-void Mod_OBJ_Load(dp_model_t *mod, void *buffer, void *bufferend)
-{
-#if 0
- const char *textbase = (char *)buffer, *text = textbase;
- char *s;
- char *argv[512];
- char line[1024];
- char materialname[MAX_QPATH];
- int j, index1, index2, index3, first, prev, index;
- int argc;
- int linelen;
- int numtriangles = 0;
- int maxtriangles = 32768;
- int *element3i = Mem_Alloc(tempmempool, maxtriangles * sizeof(int[3]));
- int *oldelement3i;
- int numsurfaces = 0;
- int maxsurfaces = 0;
- msurface_t *surfaces = NULL;
- int linenumber = 0;
- int hashindex;
- float *v, *vt, *vn;
- float *oldv, *oldvt, *oldvn;
- int maxv = 65536, numv = 1;
- int maxvt = 65536, numvt = 1;
- int maxvn = 65536, numvn = 1;
- int maxverthash = 65536, numverthash = 0;
- int numhashindex = 65536;
- struct objverthash_s
- {
- struct objverthash_s *next;
- int s;
- int v;
- int vt;
- int vn;
- }
- *hash, **verthash = Mem_Alloc(tempmempool, numhashindex * sizeof(*verthash)), *verthashdata = Mem_Alloc(tempmempool, maxverthash * sizeof(*verthashdata)), *oldverthashdata;
- skinfile_t *skinfiles;
-
- dpsnprintf(materialname, sizeof(materialname), "%s", loadmodel->name);
-
- skinfiles = Mod_LoadSkinFiles();
-
- loadmodel->modeldatatypestring = "OBJ";
-
- loadmodel->type = mod_alias;
- loadmodel->AnimateVertices = NULL;
- loadmodel->DrawSky = NULL;
- loadmodel->DrawAddWaterPlanes = NULL;
- loadmodel->Draw = R_Q1BSP_Draw;
- loadmodel->DrawDepth = R_Q1BSP_DrawDepth;
- loadmodel->DrawDebug = R_Q1BSP_DrawDebug;
- loadmodel->CompileShadowVolume = R_Q1BSP_CompileShadowVolume;
- loadmodel->DrawShadowVolume = R_Q1BSP_DrawShadowVolume;
- loadmodel->DrawLight = R_Q1BSP_DrawLight;
- loadmodel->TraceBox = Mod_MDLMD2MD3_TraceBox;
- loadmodel->PointSuperContents = NULL;
-
- // parse the OBJ text now
- for(;;)
- {
- if (!*text)
- break;
- linenumber++;
- linelen = 0;
- for (linelen = 0;text[linelen] && text[linelen] != '\r' && text[linelen] != '\n';linelen++)
- line[linelen] = text[linelen];
- line[linelen] = 0;
- for (argc = 0;argc < (int)(sizeof(argv)/sizeof(argv[0]));argc++)
- argv[argc] = "";
- argc = 0;
- s = line;
- while (*s == ' ' || *s == '\t')
- s++;
- while (*s)
- {
- argv[argc++] = s;
- while (*s > ' ')
- s++;
- if (!*s)
- break;
- *s++ = 0;
- while (*s == ' ' || *s == '\t')
- s++;
- }
- if (!argc)
- continue;
- if (argv[0][0] == '#')
- continue;
- if (!strcmp(argv[0], "v"))
- {
- if (maxv <= numv)
- {
- maxv *= 2;
- oldv = v;
- v = Mem_Alloc(tempmempool, maxv * sizeof(float[3]));
- if (oldv)
- {
- memcpy(v, oldv, numv * sizeof(float[3]));
- Mem_Free(oldv);
- }
- }
- v[numv*3+0] = atof(argv[1]);
- v[numv*3+1] = atof(argv[2]);
- v[numv*3+2] = atof(argv[3]);
- numv++;
- }
- else if (!strcmp(argv[0], "vt"))
- {
- if (maxvt <= numvt)
- {
- maxvt *= 2;
- oldvt = vt;
- vt = Mem_Alloc(tempmempool, maxvt * sizeof(float[2]));
- if (oldvt)
- {
- memcpy(vt, oldvt, numvt * sizeof(float[2]));
- Mem_Free(oldvt);
- }
- }
- vt[numvt*2+0] = atof(argv[1]);
- vt[numvt*2+1] = atof(argv[2]);
- numvt++;
- }
- else if (!strcmp(argv[0], "vn"))
- {
- if (maxvn <= numvn)
- {
- maxvn *= 2;
- oldvn = vn;
- vn = Mem_Alloc(tempmempool, maxvn * sizeof(float[3]));
- if (oldvn)
- {
- memcpy(vn, oldvn, numvn * sizeof(float[3]));
- Mem_Free(oldvn);
- }
- }
- vn[numvn*3+0] = atof(argv[1]);
- vn[numvn*3+1] = atof(argv[2]);
- vn[numvn*3+2] = atof(argv[3]);
- numvn++;
- }
- else if (!strcmp(argv[0], "f"))
- {
- if (!surface)
- {
- if (maxsurfaces <= numsurfaces)
- {
- maxsurfaces++;
- oldsurfaces = surfaces;
- surfaces = Mem_Alloc(tempmempool, maxsurfaces * sizeof(*surfaces));
- if (oldsurfaces)
- {
- memcpy(surfaces, oldsurfaces, numsurfaces * sizeof(*surfaces));
- Mem_Free(oldsurfaces);
- }
- }
- surface = surfaces + numsurfaces++;
- surface->
- }
- for (j = 1;j < argc;j++)
- {
- index1 = atoi(argv[j]);
- while(argv[j][0] && argv[j][0] != '/')
- argv[j]++;
- if (argv[j][0])
- argv[j]++;
- if (index1 < 0)
- index1 = numv + 1 - index1;
- index2 = atoi(argv[j]);
- if (index2 < 0)
- index2 = numvt + 1 - index2;
- while(argv[j][0] && argv[j][0] != '/')
- argv[j]++;
- if (argv[j][0])
- argv[j]++;
- index3 = atoi(argv[j]);
- if (index3 < 0)
- index3 = numvn + 1 - index3;
- hashindex = (index1 + index2 * 3571 + index3 * 42589) & (numhashindex - 1);
- for (hash = verthash[hashindex];hash;hash = hash->next)
- if (hash->surface == numsurfaces-1 && hash->v == index1 && hash->vt == index2 && hash->vn == index3)
- break;
- if (!hash)
- {
- if (maxverthash <= numverthash)
- {
- maxverthash *= 2;
- oldverthashdata = verthashdata;
- verthashdata = Mem_Alloc(tempmempool, maxverthash * sizeof(*verthashdata));
- if (oldverthashdata)
- {
- memcpy(verthashdata, oldverthashdata, numverthash * sizeof(*verthashdata));
- Mem_Free(oldverthashdata);
- }
- }
- hash = verthashdata + numverthash++;
- hash->next = verthash[hashindex];
- hash->s = numsurfaces;
- hash->v = index1;
- hash->vt = index2;
- hash->vn = index3;
- verthash[hashindex] = hash;
- }
- index = (int)((size_t)(hash - verthashdata));
- if (j == 1)
- first = index;
- else if (j >= 3)
- {
- if (maxtriangles <= numtriangles)
- {
- maxtriangles *= 2;
- oldelement3i = element3i;
- element3i = Mem_Alloc(tempmempool, numtriangles * sizeof(int[3]));
- if (oldelement3i)
- {
- memcpy(element3i, oldelement3i, numtriangles * sizeof(int[3]));
- Mem_Free(oldelement3i);
- }
- }
- element3i[numtriangles*3+0] = first;
- element3i[numtriangles*3+1] = prev;
- element3i[numtriangles*3+2] = index;
- numtriangles++;
- }
- prev = index;
- }
- }
- else if (!strcmp(argv[0], "o") || !strcmp(argv[0], "g"))
- surface = NULL;
- else if (!!strcmp(argv[0], "usemtl"))
- {
- surface = NULL;
- strlcpy(materialname, argv[1], sizeof(materialname);
- }
- text += linelen;
- if (*text == '\r')
- text++;
- if (*text == '\n')
- text++;
- }
-
- if (skinfiles)
- Mod_FreeSkinFiles(skinfiles);
-
- // now that we have the OBJ data loaded as-is, we can convert it
- loadmodel->numskins = LittleLong(pinmodel->num_skins);
- numxyz = LittleLong(pinmodel->num_xyz);
- numst = LittleLong(pinmodel->num_st);
- loadmodel->surfmesh.num_triangles = LittleLong(pinmodel->num_tris);
- loadmodel->numframes = LittleLong(pinmodel->num_frames);
- loadmodel->surfmesh.num_morphframes = loadmodel->numframes;
- loadmodel->num_poses = loadmodel->surfmesh.num_morphframes;
- skinwidth = LittleLong(pinmodel->skinwidth);
- skinheight = LittleLong(pinmodel->skinheight);
- iskinwidth = 1.0f / skinwidth;
- iskinheight = 1.0f / skinheight;