Hi,
Here is a method to hook OpenGL functions without patching memory ( using pointers ), and filter by texture file path/name:
PHP Code:// Medal of Honor Allied Assault
#define MOHAA_GLBINDTEXTURE 0x13E3EE4
#define MOHAA_GLDRAWELEMENTS 0x13E3D04
// Medal of Honor Spear Head
#define MOHSH_GLBINDTEXTURE 0x16DCED8
#define MOHSH_GLDRAWELEMENTS 0x16DCCF8
// Medal of Honor Break Trough
#define MOHBT_GLBINDTEXTURE 0x170D00C
#define MOHBT_GLDRAWELEMENTS 0x170CE38
PHP Code:char *g_pszTextureName;
typedef void ( WINAPI *GLBINDTEXTURE_TYPE )( GLenum iTarget, GLuint iTexture );
DWORD g_dwGlBindTexture = NULL;
void WINAPI glBindTextureHook( GLenum iTarget, GLuint iTexture )
{
_asm mov g_pszTextureName, esi;
CAST( GLBINDTEXTURE_TYPE, g_dwGlBindTexture )( iTarget, iTexture );
}
typedef void ( WINAPI *GLDRAWELEMENTS_TYPE )( GLenum iMode, GLsizei iCount, GLenum iType, const GLvoid *pvIndices );
DWORD g_dwGlDrawElements = NULL;
void WINAPI glDrawElementsHook( GLenum iMode, GLsizei iCount, GLenum iType, const GLvoid *pvIndices )
{
// Here you can filter any textures using g_pszTextureName
CAST( GLDRAWELEMENTS_TYPE, g_dwGlDrawElements )( iMode, iCount, iType, pvIndices );
}
Regards.PHP Code:g_dwGlBindTexture = *( DWORD * )MOHAA_GLBINDTEXTURE;
g_dwGlDrawElements = *( DWORD * )MOHAA_GLDRAWELEMENTS;
// Redirect
*( DWORD * )MOHAA_GLBINDTEXTURE = PtrToUlong( glBindTextureHook );
*( DWORD * )MOHAA_GLDRAWELEMENTS = PtrToUlong( glDrawElementsHook );
// Restore
*( DWORD * )MOHAA_GLBINDTEXTURE = g_dwGlBindTexture;
*( DWORD * )MOHAA_GLDRAWELEMENTS = g_dwGlDrawElements;


Reply With Quote





