- remapvertices = (int *)Mem_Alloc(loadmodel->mempool, pheader->numverts * sizeof(int));
- mesh->num_vertices = Mod_BuildVertexRemapTableFromElements(mesh->num_triangles * 3, mesh->data_element3i, pheader->numverts, remapvertices);
- for (j = 0;j < mesh->num_triangles * 3;j++)
- mesh->data_element3i[j] = remapvertices[mesh->data_element3i[j]];
- mesh->data_texcoordtexture2f = (float *)Mem_Alloc(loadmodel->mempool, mesh->num_vertices * sizeof(float[2]));
- for (j = 0;j < pheader->numverts;j++)
- {
- if (remapvertices[j] >= 0)
- {
- mesh->data_texcoordtexture2f[remapvertices[j]*2+0] = outtexcoord2f[j*2+0];
- mesh->data_texcoordtexture2f[remapvertices[j]*2+1] = outtexcoord2f[j*2+1];
- }
- }
- mesh->num_vertexboneweights = 0;
- for (j = 0;j < pheader->numverts;j++)
- if (remapvertices[j] >= 0)
- mesh->num_vertexboneweights += vertbonecounts[remapvertices[j]];
- mesh->data_vertexboneweights = (surfmeshvertexboneweight_t *)Mem_Alloc(loadmodel->mempool, mesh->num_vertexboneweights * sizeof(surfmeshvertexboneweight_t));
- mesh->num_vertexboneweights = 0;
- // note this vertexboneweight ordering requires that the remapvertices array is sequential numbers (separated by -1 values for omitted vertices)
- l = 0;
- for (j = 0;j < pheader->numverts;j++)
- {
- if (remapvertices[j] < 0)
- {
- l += vertbonecounts[j];
- continue;
- }
- for (k = 0;k < vertbonecounts[j];k++)
- {
- // this format really should have had a per vertexweight weight value...
- mesh->data_vertexboneweights[mesh->num_vertexboneweights].vertexindex = remapvertices[j];
- mesh->data_vertexboneweights[mesh->num_vertexboneweights].boneindex = verts[l].bonenum;
- mesh->data_vertexboneweights[mesh->num_vertexboneweights].origin[3] = 1.0f / vertbonecounts[j];
- mesh->data_vertexboneweights[mesh->num_vertexboneweights].origin[0] = verts[l].origin[0] * mesh->data_vertexboneweights[mesh->num_vertexboneweights].origin[3];
- mesh->data_vertexboneweights[mesh->num_vertexboneweights].origin[1] = verts[l].origin[1] * mesh->data_vertexboneweights[mesh->num_vertexboneweights].origin[3];
- mesh->data_vertexboneweights[mesh->num_vertexboneweights].origin[2] = verts[l].origin[2] * mesh->data_vertexboneweights[mesh->num_vertexboneweights].origin[3];
- mesh->num_vertexboneweights++;
- l++;
- }
- }
- shadername = (char *) (pheader->lump_shaders.start + pbase) + i * 32;