(360/Xbox 1) Xbox 1 and 360 now use the same resource

ile - xdk_resources.cpp
This commit is contained in:
twinaphex 2012-07-16 01:58:15 +02:00
parent 14a998e3d1
commit 077d9a1f63
9 changed files with 461 additions and 254 deletions

View File

@ -1,163 +0,0 @@
/* RetroArch - A frontend for libretro.
* Copyright (C) 2010-2012 - Hans-Kristian Arntzen
* Copyright (C) 2011-2012 - Daniel De Matteis
*
* RetroArch is free software: you can redistribute it and/or modify it under the terms
* of the GNU General Public License as published by the Free Software Found-
* ation, either version 3 of the License, or (at your option) any later version.
*
* RetroArch is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
* without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
* PURPOSE. See the GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License along with RetroArch.
* If not, see <http://www.gnu.org/licenses/>.
*/
#include <xgraphics.h>
#include "xdk360_video_resources.h"
struct XPR_HEADER
{
unsigned long dwMagic;
unsigned long dwHeaderSize;
unsigned long dwDataSize;
};
#define XPR2_MAGIC_VALUE (0x58505232)
PackedResource::PackedResource()
{
m_pSysMemData = NULL;
m_dwSysMemDataSize = 0L;
m_pVidMemData = NULL;
m_dwVidMemDataSize = 0L;
m_pResourceTags = NULL;
m_dwNumResourceTags = 0L;
m_bInitialized = FALSE;
}
PackedResource::~PackedResource()
{
Destroy();
}
void * PackedResource::GetData( const char * strName ) const
{
if( m_pResourceTags == NULL || strName == NULL )
return NULL;
for( unsigned long i = 0; i < m_dwNumResourceTags; i++ )
{ if( !_stricmp( strName, m_pResourceTags[i].strName ) )
return &m_pSysMemData[m_pResourceTags[i].dwOffset];
}
return NULL;
}
HRESULT PackedResource::Create( const char * strFilename )
{
unsigned long dwNumBytesRead;
void * hFile = CreateFile( strFilename, GENERIC_READ, FILE_SHARE_READ, NULL,
OPEN_EXISTING, FILE_ATTRIBUTE_READONLY, NULL );
if( hFile == INVALID_HANDLE_VALUE )
{
RARCH_ERR( "File <%s> not found.\n", strFilename );
return E_FAIL;
}
// Read in and verify the XPR magic header
XPR_HEADER xprh;
if( !ReadFile( hFile, &xprh, sizeof( XPR_HEADER ), &dwNumBytesRead, NULL ) )
{
RARCH_ERR( "Error reading XPR header in file <%s>.\n", strFilename );
CloseHandle( hFile );
return E_FAIL;
}
if( xprh.dwMagic != XPR2_MAGIC_VALUE )
{
RARCH_ERR( "Invalid Xbox Packed Resource (.xpr) file: Magic = 0x%08lx.\n", xprh.dwMagic );
CloseHandle( hFile );
return E_FAIL;
}
// Compute memory requirements
m_dwSysMemDataSize = xprh.dwHeaderSize;
m_dwVidMemDataSize = xprh.dwDataSize;
// Allocate memory
m_pSysMemData = (unsigned char*)malloc(m_dwSysMemDataSize);
if( m_pSysMemData == NULL )
{
RARCH_ERR( "Could not allocate system memory.\n" );
m_dwSysMemDataSize = 0;
return E_FAIL;
}
m_pVidMemData = ( unsigned char* )XMemAlloc( m_dwVidMemDataSize, MAKE_XALLOC_ATTRIBUTES( 0, 0, 0, 0, eXALLOCAllocatorId_GameMax,
XALLOC_PHYSICAL_ALIGNMENT_4K, XALLOC_MEMPROTECT_WRITECOMBINE, 0, XALLOC_MEMTYPE_PHYSICAL ) );
if( m_pVidMemData == NULL )
{
RARCH_ERR( "Could not allocate physical memory.\n" );
m_dwSysMemDataSize = 0;
m_dwVidMemDataSize = 0;
free(m_pSysMemData);
m_pSysMemData = NULL;
return E_FAIL;
}
// Read in the data from the file
if( !ReadFile( hFile, m_pSysMemData, m_dwSysMemDataSize, &dwNumBytesRead, NULL ) ||
!ReadFile( hFile, m_pVidMemData, m_dwVidMemDataSize, &dwNumBytesRead, NULL ) )
{
RARCH_ERR( "Unable to read Xbox Packed Resource (.xpr) file.\n" );
CloseHandle( hFile );
return E_FAIL;
}
// Done with the file
CloseHandle( hFile );
// Extract resource table from the header data
m_dwNumResourceTags = *( unsigned long * )( m_pSysMemData + 0 );
m_pResourceTags = ( RESOURCE* )( m_pSysMemData + 4 );
// Patch up the resources
for( unsigned long i = 0; i < m_dwNumResourceTags; i++ )
{
m_pResourceTags[i].strName = ( char * )( m_pSysMemData + ( unsigned long )m_pResourceTags[i].strName );
// Fixup the texture memory
if( ( m_pResourceTags[i].dwType & 0xffff0000 ) == ( RESOURCETYPE_TEXTURE & 0xffff0000 ) )
{
D3DTexture* pTexture = ( D3DTexture* )&m_pSysMemData[m_pResourceTags[i].dwOffset];
// Adjust Base address according to where memory was allocated
XGOffsetBaseTextureAddress( pTexture, m_pVidMemData, m_pVidMemData );
}
}
m_bInitialized = TRUE;
return 0;
}
void PackedResource::Destroy()
{
free(m_pSysMemData);
m_pSysMemData = NULL;
m_dwSysMemDataSize = 0L;
if( m_pVidMemData != NULL )
XMemFree( m_pVidMemData, MAKE_XALLOC_ATTRIBUTES( 0, 0, 0, 0, eXALLOCAllocatorId_GameMax,
0, 0, 0, XALLOC_MEMTYPE_PHYSICAL ) );
m_pVidMemData = NULL;
m_dwVidMemDataSize = 0L;
m_pResourceTags = NULL;
m_dwNumResourceTags = 0L;
m_bInitialized = FALSE;
}

View File

@ -1,86 +0,0 @@
/* RetroArch - A frontend for libretro.
* Copyright (C) 2010-2012 - Hans-Kristian Arntzen
* Copyright (C) 2011-2012 - Daniel De Matteis
*
* RetroArch is free software: you can redistribute it and/or modify it under the terms
* of the GNU General Public License as published by the Free Software Found-
* ation, either version 3 of the License, or (at your option) any later version.
*
* RetroArch is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
* without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
* PURPOSE. See the GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License along with RetroArch.
* If not, see <http://www.gnu.org/licenses/>.
*/
#ifndef RARCH_360_RESOURCES_H
#define RARCH_360_RESOURCES_H
struct RESOURCE
{
unsigned long dwType;
unsigned long dwOffset;
unsigned long dwSize;
char * strName;
};
// Resource types
enum
{
RESOURCETYPE_USERDATA = ( ( 'U' << 24 ) | ( 'S' << 16 ) | ( 'E' << 8 ) | ( 'R' ) ),
RESOURCETYPE_TEXTURE = ( ( 'T' << 24 ) | ( 'X' << 16 ) | ( '2' << 8 ) | ( 'D' ) ),
RESOURCETYPE_CUBEMAP = ( ( 'T' << 24 ) | ( 'X' << 16 ) | ( 'C' << 8 ) | ( 'M' ) ),
RESOURCETYPE_VOLUMETEXTURE = ( ( 'T' << 24 ) | ( 'X' << 16 ) | ( '3' << 8 ) | ( 'D' ) ),
RESOURCETYPE_VERTEXBUFFER = ( ( 'V' << 24 ) | ( 'B' << 16 ) | ( 'U' << 8 ) | ( 'F' ) ),
RESOURCETYPE_INDEXBUFFER = ( ( 'I' << 24 ) | ( 'B' << 16 ) | ( 'U' << 8 ) | ( 'F' ) ),
RESOURCETYPE_EOF = 0xffffffff
};
class PackedResource
{
protected:
unsigned char * m_pSysMemData; // Alloc'ed memory for resource headers etc.
unsigned char * m_pVidMemData; // Alloc'ed memory for resource data, etc.
unsigned long m_dwSysMemDataSize;
unsigned long m_dwVidMemDataSize;
unsigned long m_dwNumResourceTags; // Number of resource tags
RESOURCE* m_pResourceTags; // Tags to associate names with the resources
public:
int m_bInitialized; // Resource is fully initialized
HRESULT Create( const char * strFilename );
void Destroy();
void * GetData( unsigned long dwOffset ) const
{
return &m_pSysMemData[dwOffset];
}
D3DResource* GetResource( unsigned long dwOffset ) const
{
return (( D3DResource* )GetData( dwOffset ) );
}
D3DTexture* GetTexture( unsigned long dwOffset ) const
{
return ( D3DTexture* )GetResource( dwOffset );
}
void * GetData( const char * strName ) const;
D3DResource* GetResource( const char * strName ) const
{
return ( ( D3DResource* )GetData( strName ) );
}
D3DTexture* GetTexture( const char * strName ) const
{
return ( D3DTexture* )GetResource( strName );
}
PackedResource();
~PackedResource();
};
#endif

View File

@ -38,7 +38,7 @@
#include "../gfx/fonts/xdk360_fonts.h"
#endif
#include "xdk360_video_resources.h"
#include "xdk_resources.h"
extern video_console_t video_console;
extern xdk360_video_font_t m_Font;

301
360/xdk_resources.cpp Normal file
View File

@ -0,0 +1,301 @@
#include <xgraphics.h>
#include "xdk_resources.h"
#ifdef _XBOX360
struct XPR_HEADER
{
DWORD dwMagic;
DWORD dwHeaderSize;
DWORD dwDataSize;
};
#endif
#define XPR0_MAGIC_VALUE 0x30525058
#define XPR1_MAGIC_VALUE 0x31525058
#define XPR2_MAGIC_VALUE 0x58505232
const DWORD eXALLOCAllocatorId_AtgResource = eXALLOCAllocatorId_GameMax;
PackedResource::PackedResource()
{
m_pSysMemData = NULL;
m_dwSysMemDataSize = 0L;
m_pVidMemData = NULL;
m_dwVidMemDataSize = 0L;
m_pResourceTags = NULL;
m_dwNumResourceTags = 0L;
m_bInitialized = FALSE;
}
PackedResource::~PackedResource()
{
Destroy();
}
void *PackedResource::GetData( const CHAR* strName ) const
{
if( NULL == m_pResourceTags || NULL == strName )
return NULL;
#if defined(_XBOX1)
for( DWORD i=0; m_pResourceTags[i].strName; i++ )
#elif defined(_XBOX360)
for( DWORD i = 0; i < m_dwNumResourceTags; i++ )
#endif
{
if( !_stricmp( strName, m_pResourceTags[i].strName ) )
{
return &m_pSysMemData[m_pResourceTags[i].dwOffset];
}
}
return NULL;
}
static __forceinline void* AllocateContiguousMemory( DWORD Size, DWORD Alignment,
DWORD Protection = XALLOC_MEMPROTECT_WRITECOMBINE )
{
#if defined(_XBOX1)
return D3D_AllocContiguousMemory(Size, Alignment);
#elif defined(_XBOX360)
return XMemAlloc( Size, MAKE_XALLOC_ATTRIBUTES( 0, 0, 0, 0, eXALLOCAllocatorId_AtgResource,
Alignment, Protection, 0,
XALLOC_MEMTYPE_PHYSICAL ) );
#endif
}
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
}
#ifdef _XBOX1
char g_strMediaPath[512] = "D:\\Media\\";
static HRESULT FindMediaFile( char *strPath, const char *strFilename )
{
// Check for valid arguments
if( strFilename == NULL || strPath == NULL )
{
RARCH_ERR("Util_FindMediaFile(): Invalid arguments\n" );
return E_INVALIDARG;
}
// Default path is the filename itself as a fully qualified path
strcpy( strPath, strFilename );
// Check for the ':' character to see if the filename is a fully
// qualified path. If not, pre-pend the media directory
if( strFilename[1] != ':' )
sprintf( strPath, "%s%s", g_strMediaPath, strFilename );
// Try to open the file
HANDLE hFile = CreateFile( strPath, GENERIC_READ, FILE_SHARE_READ, NULL,
OPEN_EXISTING, 0, NULL );
if( hFile == INVALID_HANDLE_VALUE )
{
// Return error
CHAR strBuffer[80];
sprintf( strBuffer, "FindMediaFile(): Could not find file [%s]\n",
strFilename );
RARCH_ERR( strBuffer );
return 0x82000004;
}
// Found the file. Close the file and return
CloseHandle( hFile );
return S_OK;
}
#endif
#if defined(_XBOX1)
HRESULT PackedResource::Create( const char *strFilename,
DWORD dwNumResourceTags, XBRESOURCE* pResourceTags)
#elif defined(_XBOX360)
HRESULT PackedResource::Create( const char *strFilename )
#endif
{
#ifdef _XBOX1
BOOL bHasResourceOffsetsTable = FALSE;
// Find the media file
CHAR strResourcePath[512];
if( FAILED( FindMediaFile( strResourcePath, strFilename ) ) )
return E_FAIL;
else
strFilename = strResourcePath;
#endif
// Open the file
HANDLE hFile;
DWORD dwNumBytesRead;
hFile = CreateFile( strFilename, GENERIC_READ, FILE_SHARE_READ, NULL,
OPEN_EXISTING, FILE_ATTRIBUTE_READONLY, NULL );
if( hFile == INVALID_HANDLE_VALUE )
{
RARCH_ERR( "PackedResource::Create(): File <%s> not found.\n", strFilename );
return E_FAIL;
}
// Read in and verify the XPR magic header
XPR_HEADER xprh;
bool retval = ReadFile( hFile, &xprh, sizeof( XPR_HEADER ), &dwNumBytesRead, NULL );
#if defined(_XBOX1)
if( xprh.dwMagic == XPR0_MAGIC_VALUE )
{
bHasResourceOffsetsTable = FALSE;
}
else if( xprh.dwMagic == XPR1_MAGIC_VALUE )
{
bHasResourceOffsetsTable = TRUE;
}
else
#elif defined(_XBOX360)
if(!retval)
{
RARCH_ERR("Error reading XPR header in file %s.\n", strFilename );
CloseHandle( hFile );
return E_FAIL;
}
if( xprh.dwMagic != XPR2_MAGIC_VALUE )
#endif
{
RARCH_ERR( "Invalid Xbox Packed Resource (.xpr) file: Magic = 0x%08lx\n", xprh.dwMagic );
CloseHandle( hFile );
return E_FAIL;
}
// Compute memory requirements
#if defined(_XBOX1)
m_dwSysMemDataSize = xprh.dwHeaderSize - sizeof(XPR_HEADER);
m_dwVidMemDataSize = xprh.dwTotalSize - xprh.dwHeaderSize;
#elif defined(_XBOX360)
m_dwSysMemDataSize = xprh.dwHeaderSize;
m_dwVidMemDataSize = xprh.dwDataSize;
#endif
// Allocate memory
m_pSysMemData = (BYTE*)malloc(m_dwSysMemDataSize);
if( m_pSysMemData == NULL )
{
RARCH_ERR( "Could not allocate system memory.\n" );
m_dwSysMemDataSize = 0;
return E_FAIL;
}
m_pVidMemData = ( BYTE* )AllocateContiguousMemory( m_dwVidMemDataSize,
#if defined(_XBOX1)
D3DTEXTURE_ALIGNMENT
#elif defined(_XBOX360)
XALLOC_PHYSICAL_ALIGNMENT_4K
#endif
);
if( m_pVidMemData == NULL )
{
RARCH_ERR( "Could not allocate physical memory.\n" );
m_dwSysMemDataSize = 0;
m_dwVidMemDataSize = 0;
free(m_pSysMemData);
m_pSysMemData = NULL;
return E_FAIL;
}
// Read in the data from the file
if( !ReadFile( hFile, m_pSysMemData, m_dwSysMemDataSize, &dwNumBytesRead, NULL ) ||
!ReadFile( hFile, m_pVidMemData, m_dwVidMemDataSize, &dwNumBytesRead, NULL ) )
{
RARCH_ERR( "Unable to read Xbox Packed Resource (.xpr) file\n" );
CloseHandle( hFile );
return E_FAIL;
}
// Done with the file
CloseHandle( hFile );
#ifdef _XBOX1
if (bHasResourceOffsetsTable)
{
#endif
// Extract resource table from the header data
m_dwNumResourceTags = *( DWORD* )( m_pSysMemData + 0 );
m_pResourceTags = ( XBRESOURCE* )( m_pSysMemData + 4 );
// Patch up the resources
for( DWORD i = 0; i < m_dwNumResourceTags; i++ )
{
m_pResourceTags[i].strName = ( CHAR* )( m_pSysMemData + ( DWORD )m_pResourceTags[i].strName );
#ifdef _XBOX360
// Fixup the texture memory
if( ( m_pResourceTags[i].dwType & 0xffff0000 ) == ( RESOURCETYPE_TEXTURE & 0xffff0000 ) )
{
D3DTexture* pTexture = ( D3DTexture* )&m_pSysMemData[m_pResourceTags[i].dwOffset];
// Adjust Base address according to where memory was allocated
XGOffsetBaseTextureAddress( pTexture, m_pVidMemData, m_pVidMemData );
}
#endif
}
#ifdef _XBOX1
}
#endif
#ifdef _XBOX1
// Use user-supplied number of resources and the resource tags
if( dwNumResourceTags != 0 || pResourceTags != NULL )
{
m_pResourceTags = pResourceTags;
m_dwNumResourceTags = dwNumResourceTags;
}
#endif
m_bInitialized = TRUE;
return S_OK;
}
#ifdef _XBOX360
void PackedResource::GetResourceTags( DWORD* pdwNumResourceTags,
XBRESOURCE** ppResourceTags )
{
if( pdwNumResourceTags )
( *pdwNumResourceTags ) = m_dwNumResourceTags;
if( ppResourceTags )
( *ppResourceTags ) = m_pResourceTags;
}
#endif
void PackedResource::Destroy()
{
free(m_pSysMemData);
m_pSysMemData = NULL;
m_dwSysMemDataSize = 0L;
if( m_pVidMemData != NULL )
FreeContiguousMemory( m_pVidMemData );
m_pVidMemData = NULL;
m_dwVidMemDataSize = 0L;
m_pResourceTags = NULL;
m_dwNumResourceTags = 0L;
m_bInitialized = FALSE;
}
BOOL PackedResource::Initialized() const
{
return m_bInitialized;
}

152
360/xdk_resources.h Normal file
View File

@ -0,0 +1,152 @@
#ifndef RARCH_XDK_RESOURCE_H
#define RARCH_XDK_RESOURCE_H
#if defined(_XBOX1)
#define LPDIRECT3DRESOURCE LPDIRECT3DRESOURCE8
#define LPDIRECT3DTEXTURE LPDIRECT3DTEXTURE8
#define LPDIRECT3DCUBETEXTURE LPDIRECT3DCUBETEXTURE8
#define LPDIRECT3DVOLUMETEXTURE LPDIRECT3DVOLUMETEXTURE8
#define LPDIRECT3DVERTEXBUFFER LPDIRECT3DVERTEXBUFFER8
#define LPDIRECT3DRESOURCE LPDIRECT3DRESOURCE8
#elif defined(_XBOX360)
#define LPDIRECT3DRESOURCE LPDIRECT3DRESOURCE9
#define LPDIRECT3DTEXTURE LPDIRECT3DTEXTURE9
#define LPDIRECT3DCUBETEXTURE LPDIRECT3DCUBETEXTURE9
#define LPDIRECT3DVOLUMETEXTURE LPDIRECT3DVOLUMETEXTURE9
#define LPDIRECT3DVERTEXBUFFER LPDIRECT3DVERTEXBUFFER9
#define LPDIRECT3DRESOURCE LPDIRECT3DRESOURCE9
#endif
DWORD XBResource_SizeOf( LPDIRECT3DRESOURCE pResource );
//structure member offsets matter
struct XBRESOURCE
{
#if defined(_XBOX1)
CHAR* strName;
DWORD dwOffset;
#elif defined(_XBOX360)
DWORD dwType;
DWORD dwOffset;
DWORD dwSize;
CHAR* strName;
#endif
};
// Resource types
enum
{
RESOURCETYPE_USERDATA = ( ( 'U' << 24 ) | ( 'S' << 16 ) | ( 'E' << 8 ) | ( 'R' ) ),
RESOURCETYPE_TEXTURE = ( ( 'T' << 24 ) | ( 'X' << 16 ) | ( '2' << 8 ) | ( 'D' ) ),
RESOURCETYPE_CUBEMAP = ( ( 'T' << 24 ) | ( 'X' << 16 ) | ( 'C' << 8 ) | ( 'M' ) ),
RESOURCETYPE_VOLUMETEXTURE = ( ( 'T' << 24 ) | ( 'X' << 16 ) | ( '3' << 8 ) | ( 'D' ) ),
RESOURCETYPE_VERTEXBUFFER = ( ( 'V' << 24 ) | ( 'B' << 16 ) | ( 'U' << 8 ) | ( 'F' ) ),
RESOURCETYPE_INDEXBUFFER = ( ( 'I' << 24 ) | ( 'B' << 16 ) | ( 'U' << 8 ) | ( 'F' ) ),
RESOURCETYPE_EOF = 0xffffffff
};
class PackedResource
{
protected:
BYTE* m_pSysMemData; // Alloc'ed memory for resource headers etc.
DWORD m_dwSysMemDataSize;
BYTE* m_pVidMemData; // Alloc'ed memory for resource data, etc.
DWORD m_dwVidMemDataSize;
XBRESOURCE* m_pResourceTags; // Tags to associate names with the resources
DWORD m_dwNumResourceTags; // Number of resource tags
BOOL m_bInitialized; // Resource is fully initialized
public:
// Loads the resources out of the specified bundle
#if defined(_XBOX1)
HRESULT Create( const char *strFilename, DWORD dwNumResourceTags = 0L,
XBRESOURCE* pResourceTags = NULL );
#elif defined(_XBOX360)
HRESULT Create( const char * strFilename );
#endif
void Destroy();
BOOL Initialized() const;
#ifdef _XBOX360
// Retrieves the resource tags
void GetResourceTags( DWORD* pdwNumResourceTags, XBRESOURCE** ppResourceTags );
#endif
// Helper function to make sure a resource is registered
LPDIRECT3DRESOURCE RegisterResource( LPDIRECT3DRESOURCE pResource ) const
{
#ifdef _XBOX1
// Register the resource, if it has not yet been registered. We mark
// a resource as registered by upping it's reference count.
if( pResource && ( pResource->Common & D3DCOMMON_REFCOUNT_MASK ) == 1 )
{
// Special case CPU-copy push buffers (which live in system memory)
if( ( pResource->Common & D3DCOMMON_TYPE_PUSHBUFFER ) &&
( pResource->Common & D3DPUSHBUFFER_RUN_USING_CPU_COPY ) )
pResource->Data += (DWORD)m_pSysMemData;
else
pResource->Register( m_pVidMemData );
pResource->AddRef();
}
#endif
return pResource;
}
// Functions to retrieve resources by their offset
void *GetData( DWORD dwOffset ) const
{ return &m_pSysMemData[dwOffset]; }
LPDIRECT3DRESOURCE GetResource( DWORD dwOffset ) const
{ return RegisterResource( (LPDIRECT3DRESOURCE)GetData(dwOffset) ); }
LPDIRECT3DTEXTURE GetTexture( DWORD dwOffset ) const
{ return (LPDIRECT3DTEXTURE)GetResource( dwOffset ); }
LPDIRECT3DCUBETEXTURE GetCubemap( DWORD dwOffset ) const
{ return (LPDIRECT3DCUBETEXTURE)GetResource( dwOffset ); }
LPDIRECT3DVOLUMETEXTURE GetVolumeTexture( DWORD dwOffset ) const
{ return (LPDIRECT3DVOLUMETEXTURE)GetResource( dwOffset ); }
LPDIRECT3DVERTEXBUFFER GetVertexBuffer( DWORD dwOffset ) const
{ return (LPDIRECT3DVERTEXBUFFER)GetResource( dwOffset ); }
#ifdef _XBOX1
LPDIRECT3DPUSHBUFFER8 GetPushBuffer( DWORD dwOffset ) const
{ return (LPDIRECT3DPUSHBUFFER8)GetResource( dwOffset ); }
#endif
// Functions to retrieve resources by their name
void *GetData( const CHAR* strName ) const;
LPDIRECT3DRESOURCE GetResource( const CHAR* strName ) const
{ return RegisterResource( (LPDIRECT3DRESOURCE)GetData( strName ) ); }
LPDIRECT3DTEXTURE GetTexture( const CHAR* strName ) const
{ return (LPDIRECT3DTEXTURE)GetResource( strName ); }
LPDIRECT3DCUBETEXTURE GetCubemap( const CHAR* strName ) const
{ return (LPDIRECT3DCUBETEXTURE)GetResource( strName ); }
LPDIRECT3DVOLUMETEXTURE GetVolumeTexture( const CHAR* strName ) const
{ return (LPDIRECT3DVOLUMETEXTURE)GetResource( strName ); }
LPDIRECT3DVERTEXBUFFER GetVertexBuffer( const CHAR* strName ) const
{ return (LPDIRECT3DVERTEXBUFFER)GetResource( strName ); }
#ifdef _XBOX1
LPDIRECT3DPUSHBUFFER8 GetPushBuffer( const CHAR* strName ) const
{ return (LPDIRECT3DPUSHBUFFER8)GetResource( strName ); }
#endif
// Constructor/destructor
PackedResource();
~PackedResource();
};
#endif RARCH_XDK_RESOURCE_H

View File

@ -92,8 +92,6 @@ VIDEO DRIVER
#include "../../gfx/gl.c"
#elif defined(HAVE_OPENGLES20)
#include "../../gfx/gles.c"
#elif defined(_XBOX360)
#include "../../360/xdk360_video_resources.cpp"
#elif defined(GEKKO)
#include "../../wii/video.c"
#endif
@ -101,6 +99,7 @@ VIDEO DRIVER
#include "../../gfx/gfx_common.c"
#ifdef _XBOX
#include "../../360/xdk_resources.cpp"
#if defined(HAVE_D3D9)
#include "../../360/xdk_d3d9.cpp"
#elif defined(HAVE_D3D8)

View File

@ -366,7 +366,7 @@ void d3d9_deinit_font(void)
s_FontLocals.m_pFontVertexShader = NULL;
if( ( s_FontLocals.m_pFontVertexDecl != NULL ) && ( s_FontLocals.m_pFontVertexDecl->Release() == 0 ) )
s_FontLocals.m_pFontVertexDecl = NULL;
if( m_xprResource.m_bInitialized)
if( m_xprResource.Initialized())
m_xprResource.Destroy();
}

View File

@ -17,7 +17,7 @@
#ifndef RARCH_360_FONTS_H
#define RARCH_360_FONTS_H
#include "xdk360_video_resources.h"
#include "../../360/xdk_resources.h"
#define PAGE_UP (255)
#define PAGE_DOWN (-255)

View File

@ -26,7 +26,11 @@
static int gettimeofday(struct timeval *val, void *dummy)
{
(void)dummy;
#ifdef _XBOX360
DWORD msec = GetTickCount();
#else
DWORD msec = timeGetTime();
#endif
uint64_t usec = msec * 1000;
val->tv_sec = usec / 1000000;
val->tv_usec = usec % 1000000;