static __forceinline void FreeContiguousMemory( void* pData ) { #if defined(_XBOX1) return D3D_FreeContiguousMemory(pData); #elif defined(_XBOX360) return XMemFree( pData, MAKE_XALLOC_ATTRIBUTES( 0, 0, 0, 0, eXALLOCAllocatorId_AtgResource, 0, 0, 0, XALLOC_MEMTYPE_PHYSICAL ) ); #endif }
//----------------------------------------------------------------------------- // 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; }
void CRGBRenderer::Delete444PTexture() { CSingleLock lock(g_graphicsContext); if (m_444PTexture[FIELD_FULL]) { D3DLOCKED_RECT lr; m_444PTexture[FIELD_FULL]->LockRect(0, &lr, NULL, 0); PVOID data = lr.pBits; m_444PTexture[FIELD_FULL]->UnlockRect(0); for(int f=0;f<MAX_FIELDS;f++) { m_444PTexture[f]->BlockUntilNotBusy(); SAFE_DELETE(m_444PTexture[f]); } D3D_FreeContiguousMemory(data); CLog::Log(LOGDEBUG, "Deleted 444P video texture"); } }
//----------------------------------------------------------------------------- // Name: LoadPackedResource() // Desc: Loads all the texture resources from the given XPR. //----------------------------------------------------------------------------- HRESULT RenderingManagerC::LoadPackedResource() { // Open the file to read the XPR headers FILE* file = fopen( "D:\\Media\\Resource.xpr", "rb" ); if( NULL == file ) return E_FAIL; // Read in and verify the XPR magic header XPR_HEADER xprh; if( fread( &xprh, sizeof(XPR_HEADER), 1, file ) != 1 ) { fclose(file); return E_FAIL; } if( xprh.dwMagic != XPR_MAGIC_VALUE ) { OutputDebugStringA( "ERROR: Invalid Xbox Packed Resource (.xpr) file" ); fclose( file ); return E_INVALIDARG; } // Compute memory requirements DWORD dwSysMemDataSize = xprh.dwHeaderSize - sizeof(XPR_HEADER); DWORD dwVidMemDataSize = xprh.dwTotalSize - xprh.dwHeaderSize; // Allocate memory g_pResourceSysMemData = new BYTE[dwSysMemDataSize]; g_pResourceVidMemData = (BYTE*)D3D_AllocContiguousMemory( dwVidMemDataSize, D3DTEXTURE_ALIGNMENT ); // Read in the data from the file if( fread( g_pResourceSysMemData, dwSysMemDataSize, 1, file ) != 1 || fread( g_pResourceVidMemData, dwVidMemDataSize, 1, file ) != 1 ) { delete[] g_pResourceSysMemData; D3D_FreeContiguousMemory( g_pResourceVidMemData ); fclose( file ); return E_FAIL; } // Done with the file fclose( file ); // Loop over resources, calling Register() BYTE* pData = g_pResourceSysMemData; for( DWORD i = 0; i < resource_NUM_RESOURCES; i++ ) { // Get the resource LPDIRECT3DRESOURCE8 pResource = (LPDIRECT3DRESOURCE8)pData; // Register the resource pResource->Register( g_pResourceVidMemData ); // Advance the pointer switch( pResource->GetType() ) { case D3DRTYPE_TEXTURE: pData += sizeof(D3DTexture); break; case D3DRTYPE_VOLUMETEXTURE: pData += sizeof(D3DVolumeTexture); break; case D3DRTYPE_CUBETEXTURE: pData += sizeof(D3DCubeTexture); break; case D3DRTYPE_VERTEXBUFFER: pData += sizeof(D3DVertexBuffer); break; case D3DRTYPE_INDEXBUFFER: pData += sizeof(D3DIndexBuffer); break; case D3DRTYPE_PALETTE: pData += sizeof(D3DPalette); break; default: return E_FAIL; } } return S_OK; }