X-Git-Url: https://harrygodden.com/git/?p=convexer.git;a=blobdiff_plain;f=cxr%2Fcxr.h;fp=cxr%2Fcxr.h;h=644c8ed83e39381e88ceb5c3beeb4772e29f3be3;hp=2a4267f0a152ffa3e0b34fd3eb4c5f4fd8a36db0;hb=0d0b6bf37c8a9c4494071973103a89b4aa82574a;hpb=dbd379f76bcb2139fdb5740232511fa789018e10 diff --git a/cxr/cxr.h b/cxr/cxr.h index 2a4267f..644c8ed 100644 --- a/cxr/cxr.h +++ b/cxr/cxr.h @@ -3510,143 +3510,5 @@ CXR_API int cxr_lightpatch_bsp( const char *path ) return 1; } -#ifdef CXR_VALVE_BIN - -CXR_API cxr_tri_mesh *cxr_load_mdl( const char *mdlname ) -{ - char path[1024]; - strcpy( path, mdlname ); - cxr_stripext( path ); - strcat( path, ".dx90.vtx" ); - VTXFileHeader_t *pVtxHdr = (VTXFileHeader_t *)cxr_fs_get( path ); - - if( !pVtxHdr ) - return NULL; - - /* .VVD */ - strcpy( path, mdlname ); - cxr_stripext( path ); - strcat( path, ".vvd" ); - vertexFileHeader_t *pVvdHdr = (vertexFileHeader_t *)cxr_fs_get( path ); - - if( !pVvdHdr ) - { - free( pVtxHdr ); - return 0; - } - - /* .MDL */ - strcpy( path, mdlname ); - cxr_stripext( path ); - strcat( path, ".mdl" ); - studiohdr_t *pMdl = (studiohdr_t *)cxr_fs_get( path ); - - if( !pMdl ) - { - free( pVtxHdr ); - free( pVvdHdr ); - return 0; - } - - cxr_tri_mesh *mesh = malloc( sizeof(cxr_tri_mesh) ); - mesh->colours = NULL; - - mesh->indices_count = vtx_count_indices( pVtxHdr, pMdl ); - mesh->indices = malloc( mesh->indices_count * sizeof( u32 ) ); - - mesh->vertex_count = pVvdHdr->numLodVertexes[0]; - mesh->vertices = malloc( mesh->vertex_count * sizeof(v3f) ); - mesh->uvs = malloc( mesh->vertex_count * sizeof(v2f) ); - mesh->normals = malloc( mesh->vertex_count * sizeof(v3f) ); - -#if 0 - mesh->bounds[0][0] = pMdl->hull_min[0]; - mesh->bounds[0][1] = pMdl->hull_min[1]; - mesh->bounds[0][2] = pMdl->hull_min[2]; - mesh->bounds[0][0] = pMdl->hull_max[0]; - mesh->bounds[0][1] = pMdl->hull_max[1]; - mesh->bounds[0][2] = pMdl->hull_max[2]; -#endif - - mesh->indices_count = 0; - - for( int bodyID = 0; bodyID < pVtxHdr->numBodyParts; ++bodyID ) - { - /* Body parts */ - VTXBodyPartHeader_t* pVtxBodyPart = pBodyPartVTX( pVtxHdr, bodyID ); - mstudiobodyparts_t *pBodyPart = studiohdr_pBodypart( pMdl, bodyID ); - - for( int modelID = 0; modelID < pBodyPart->nummodels; ++modelID ) - { - /* models */ - VTXModelHeader_t* pVtxModel = pModelVTX( pVtxBodyPart, modelID ); - mstudiomodel_t *pStudioModel = - mstudiobodyparts_pModel( pBodyPart, modelID ); - - int nLod = 0; - VTXModelLODHeader_t *pVtxLOD = pLODVTX( pVtxModel, nLod ); - - for( int nMesh = 0; nMesh < pStudioModel->nummeshes; ++nMesh ) - { - /* meshes */ - VTXMeshHeader_t* pVtxMesh = pMeshVTX( pVtxLOD, nMesh ); - mstudiomesh_t* pMesh = studiomodel_pMesh( pStudioModel, nMesh ); - - for ( int nGroup = 0; nGroup < pVtxMesh->numStripGroups; ++nGroup ) - { - /* groups */ - VTXStripGroupHeader_t* pStripGroup = - pStripGroupVTX( pVtxMesh, nGroup ); - - for ( int nStrip = 0; nStrip < pStripGroup->numStrips; nStrip++ ) - { - /* strips */ - VTXStripHeader_t *pStrip = pStripVTX( pStripGroup, nStrip ); - - if ( pStrip->flags & STRIP_IS_TRILIST ) - { - /* indices */ - for ( int i = 0; i < pStrip->numIndices; i ++ ) - { - u16 i1 = *pIndexVTX( pStripGroup, - pStrip->indexOffset + i ); - - mesh->indices[ mesh->indices_count ++ ] = - pVertexVTX( pStripGroup, i1 )->origMeshVertID + - pMesh->vertexoffset; - } - } - } - } - } - } - } - - mstudiovertex_t *vertexData = GetVertexData( pVvdHdr ); - - for( int i = 0; i < mesh->vertex_count; i ++ ) - { - mstudiovertex_t *vert = vertexData + i; - - mesh->vertices[i][0] = vert->pos[0]; - mesh->vertices[i][1] = vert->pos[1]; - mesh->vertices[i][2] = vert->pos[2]; - - mesh->normals[i][0] = vert->norm[0]; - mesh->normals[i][1] = vert->norm[1]; - mesh->normals[i][2] = vert->norm[2]; - - mesh->uvs[i][0] = vert->uv[0]; - mesh->uvs[i][1] = vert->uv[1]; - } - - free( pVtxHdr ); - free( pVvdHdr ); - free( pMdl ); - - return mesh; -} -#endif /* CXR_VALVE_BIN */ - #endif /* CXR_VALVE_MAP_FILE */ #endif /* CXR_IMPLEMENTATION */