mirror of
https://github.com/celisej567/source-engine.git
synced 2026-01-04 18:09:53 +03:00
1
This commit is contained in:
168
common/dx_proxy/dx_proxy.h
Normal file
168
common/dx_proxy/dx_proxy.h
Normal file
@@ -0,0 +1,168 @@
|
||||
//========= Copyright Valve Corporation, All rights reserved. ============//
|
||||
//
|
||||
// Purpose: Make dynamic loading of dx_proxy.dll and methods acquisition easier.
|
||||
//
|
||||
// $NoKeywords: $
|
||||
//
|
||||
//=============================================================================//
|
||||
|
||||
#ifndef DX_PROXY_H
|
||||
#define DX_PROXY_H
|
||||
|
||||
#ifdef _WIN32
|
||||
#pragma once
|
||||
#endif
|
||||
|
||||
|
||||
/*
|
||||
|
||||
class DxProxyModule
|
||||
|
||||
Uses a lazy-load technique to load the dx_proxy.dll module and acquire the
|
||||
function pointers.
|
||||
|
||||
The dx_proxy.dll module is automatically unloaded during desctruction.
|
||||
|
||||
*/
|
||||
class DxProxyModule
|
||||
{
|
||||
public:
|
||||
/// Construction
|
||||
DxProxyModule( void );
|
||||
/// Destruction
|
||||
~DxProxyModule( void );
|
||||
|
||||
private: // Prevent copying via copy constructor or assignment
|
||||
DxProxyModule( const DxProxyModule & );
|
||||
DxProxyModule & operator = ( const DxProxyModule & );
|
||||
|
||||
public:
|
||||
/// Loads the module and acquires function pointers, returns if the module was
|
||||
/// loaded successfully.
|
||||
/// If the module was already loaded the call has no effect and returns TRUE.
|
||||
BOOL Load( void );
|
||||
/// Frees the loaded module.
|
||||
void Free( void );
|
||||
|
||||
private:
|
||||
enum Func {
|
||||
fnD3DXCompileShaderFromFile = 0,
|
||||
fnTotal
|
||||
};
|
||||
HMODULE m_hModule; //!< The handle of the loaded dx_proxy.dll
|
||||
FARPROC m_arrFuncs[fnTotal]; //!< The array of loaded function pointers
|
||||
|
||||
|
||||
///
|
||||
/// Interface functions calling into DirectX proxy
|
||||
///
|
||||
public:
|
||||
HRESULT D3DXCompileShaderFromFile(
|
||||
LPCSTR pSrcFile,
|
||||
CONST D3DXMACRO* pDefines,
|
||||
LPD3DXINCLUDE pInclude,
|
||||
LPCSTR pFunctionName,
|
||||
LPCSTR pProfile,
|
||||
DWORD Flags,
|
||||
LPD3DXBUFFER* ppShader,
|
||||
LPD3DXBUFFER* ppErrorMsgs,
|
||||
LPD3DXCONSTANTTABLE* ppConstantTable );
|
||||
};
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
//////////////////////////////////////////////////////////////////////////
|
||||
//////////////////////////////////////////////////////////////////////////
|
||||
//
|
||||
// IMPLEMENTATION
|
||||
//
|
||||
//////////////////////////////////////////////////////////////////////////
|
||||
//////////////////////////////////////////////////////////////////////////
|
||||
|
||||
|
||||
inline DxProxyModule::DxProxyModule( void )
|
||||
{
|
||||
m_hModule = NULL;
|
||||
ZeroMemory( m_arrFuncs, sizeof( m_arrFuncs ) );
|
||||
}
|
||||
|
||||
inline DxProxyModule::~DxProxyModule( void )
|
||||
{
|
||||
Free();
|
||||
}
|
||||
|
||||
inline BOOL DxProxyModule::Load( void )
|
||||
{
|
||||
if ( (m_hModule == NULL) &&
|
||||
( m_hModule = ::LoadLibrary( "dx_proxy.dll" ) ) != NULL )
|
||||
{
|
||||
// Requested function names array
|
||||
LPCSTR const arrFuncNames[fnTotal] = {
|
||||
"Proxy_D3DXCompileShaderFromFile"
|
||||
};
|
||||
|
||||
// Acquire the functions
|
||||
for ( int k = 0; k < fnTotal; ++ k )
|
||||
{
|
||||
m_arrFuncs[k] = ::GetProcAddress( m_hModule, arrFuncNames[k] );
|
||||
}
|
||||
}
|
||||
|
||||
return !!m_hModule;
|
||||
}
|
||||
|
||||
inline void DxProxyModule::Free( void )
|
||||
{
|
||||
if ( m_hModule )
|
||||
{
|
||||
::FreeLibrary( m_hModule );
|
||||
m_hModule = NULL;
|
||||
ZeroMemory( m_arrFuncs, sizeof( m_arrFuncs ) );
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
//////////////////////////////////////////////////////////////////////////
|
||||
//////////////////////////////////////////////////////////////////////////
|
||||
//
|
||||
// INTERFACE FUNCTIONS IMPLEMENTATION
|
||||
//
|
||||
//////////////////////////////////////////////////////////////////////////
|
||||
//////////////////////////////////////////////////////////////////////////
|
||||
|
||||
|
||||
|
||||
inline HRESULT DxProxyModule::D3DXCompileShaderFromFile(
|
||||
LPCSTR pSrcFile,
|
||||
CONST D3DXMACRO* pDefines,
|
||||
LPD3DXINCLUDE pInclude,
|
||||
LPCSTR pFunctionName,
|
||||
LPCSTR pProfile,
|
||||
DWORD Flags,
|
||||
LPD3DXBUFFER* ppShader,
|
||||
LPD3DXBUFFER* ppErrorMsgs,
|
||||
LPD3DXCONSTANTTABLE* ppConstantTable )
|
||||
{
|
||||
if ( !Load() )
|
||||
return MAKE_HRESULT( SEVERITY_ERROR, FACILITY_ITF, 1 );
|
||||
if ( !m_arrFuncs[fnD3DXCompileShaderFromFile] )
|
||||
return MAKE_HRESULT( SEVERITY_ERROR, FACILITY_ITF, 2 );
|
||||
|
||||
return
|
||||
( *
|
||||
( HRESULT (WINAPI *)
|
||||
( LPCSTR, CONST D3DXMACRO*, LPD3DXINCLUDE,
|
||||
LPCSTR, LPCSTR, DWORD, LPD3DXBUFFER*,
|
||||
LPD3DXBUFFER*, LPD3DXCONSTANTTABLE* )
|
||||
)
|
||||
m_arrFuncs[fnD3DXCompileShaderFromFile]
|
||||
)
|
||||
( pSrcFile, pDefines, pInclude, pFunctionName, pProfile, Flags, ppShader, ppErrorMsgs, ppConstantTable );
|
||||
}
|
||||
|
||||
|
||||
#endif // #ifndef DX_PROXY_H
|
||||
Reference in New Issue
Block a user