Ejemplo n.º 1
0
//-----------------------------------------------------------------------------
// 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;
}
Ejemplo n.º 2
0
//-----------------------------------------------------------------------------
// 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;
}