summaryrefslogtreecommitdiff
path: root/utils/dx_proxy/dxincludeimpl.h
diff options
context:
space:
mode:
Diffstat (limited to 'utils/dx_proxy/dxincludeimpl.h')
-rw-r--r--utils/dx_proxy/dxincludeimpl.h52
1 files changed, 52 insertions, 0 deletions
diff --git a/utils/dx_proxy/dxincludeimpl.h b/utils/dx_proxy/dxincludeimpl.h
new file mode 100644
index 0000000..1c67c62
--- /dev/null
+++ b/utils/dx_proxy/dxincludeimpl.h
@@ -0,0 +1,52 @@
+//========= 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