//----------------------------------------------------------------------------- // File: XBResource.cpp // // Desc: Loads resources from an XPR (Xbox Packed Resource) file. // // Hist: 03.12.01 - New for April XDK release // // Copyright (c) Microsoft Corporation. All rights reserved. //----------------------------------------------------------------------------- #include #include #include #include "XBUtil.h" #include "XBResource.h" //----------------------------------------------------------------------------- // Name: XBResource_SizeOf() // Desc: Determines the byte size of a D3DResource //----------------------------------------------------------------------------- DWORD XBResource_SizeOf( LPDIRECT3DRESOURCE8 pResource ) { switch( pResource->GetType() ) { case D3DRTYPE_TEXTURE: return sizeof(D3DTexture); case D3DRTYPE_VOLUMETEXTURE: return sizeof(D3DVolumeTexture); case D3DRTYPE_CUBETEXTURE: return sizeof(D3DCubeTexture); case D3DRTYPE_VERTEXBUFFER: return sizeof(D3DVertexBuffer); case D3DRTYPE_INDEXBUFFER: return sizeof(D3DIndexBuffer); case D3DRTYPE_PALETTE: return sizeof(D3DPalette); } return 0; } //----------------------------------------------------------------------------- // Name: CXBPackedResource() // Desc: Constructor //----------------------------------------------------------------------------- CXBPackedResource::CXBPackedResource() { m_pSysMemData = NULL; m_pVidMemData = NULL; m_dwNumResources = 0L; m_pResourceTags = NULL; } //----------------------------------------------------------------------------- // Name: ~CXBPackedResource() // Desc: Destructor //----------------------------------------------------------------------------- CXBPackedResource::~CXBPackedResource() { Destroy(); } //----------------------------------------------------------------------------- // Name: GetData() // Desc: Loads all the texture resources from the given XPR. //----------------------------------------------------------------------------- VOID* CXBPackedResource::GetData( const CHAR* strName ) const { if( NULL==m_pResourceTags || NULL==strName ) return NULL; for( DWORD i=0; iRegister( m_pVidMemData ); // Advance the pointer pData += XBResource_SizeOf( pResource ); } } // Finally, store number of resources and the resource tags m_dwNumResources = dwNumResources; m_pResourceTags = pResourceTags; return S_OK; } //----------------------------------------------------------------------------- // Name: Destroy() // Desc: Tears down the packed resource data //----------------------------------------------------------------------------- VOID CXBPackedResource::Destroy() { if( m_pSysMemData != NULL ) { delete[] m_pSysMemData; m_pSysMemData = NULL; } if( m_pVidMemData != NULL ) { D3D_FreeContiguousMemory( m_pVidMemData ); m_pVidMemData = NULL; } m_dwNumResources = 0L; m_pResourceTags = NULL; }