//========= Copyright Valve Corporation, All rights reserved. ============// // // Purpose: // // $NoKeywords: $ // //=============================================================================// #ifndef DXINCLUDEIMPL_H #define DXINCLUDEIMPL_H #ifdef _WIN32 #pragma once #endif FileCache s_incFileCache; struct DxIncludeImpl : public ID3DXInclude { STDMETHOD(Open)(THIS_ D3DXINCLUDE_TYPE IncludeType, LPCSTR pFileName, LPCVOID pParentData, LPCVOID *ppData, UINT *pBytes) { CachedFileData *pFileData = s_incFileCache.Get( pFileName ); if ( !pFileData || !pFileData->IsValid() ) return E_FAIL; *ppData = pFileData->GetDataPtr(); *pBytes = pFileData->GetDataLen(); pFileData->UpdateRefCount( +1 ); return S_OK; } STDMETHOD(Open)(THIS_ D3DXINCLUDE_TYPE IncludeType, LPCSTR pFileName, LPCVOID pParentData, LPCVOID *ppData, UINT *pBytes, /* OUT */ LPSTR pFullPath, DWORD cbFullPath) { if ( pFullPath && cbFullPath ) strncpy( pFullPath, pFileName, cbFullPath ); return Open( IncludeType, pFileName, pParentData, ppData, pBytes ); } STDMETHOD(Close)(THIS_ LPCVOID pData) { if ( CachedFileData *pFileData = CachedFileData::GetByDataPtr( pData ) ) pFileData->UpdateRefCount( -1 ); return S_OK; } }; DxIncludeImpl s_incDxImpl; #endif // #ifndef DXINCLUDEIMPL_H