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 */