mirror of
https://github.com/baldurk/renderdoc.git
synced 2026-05-12 13:00:32 +00:00
Set gl_CurChunk in entry points, forward aliases to real functions
This commit is contained in:
@@ -87,39 +87,60 @@ Threading::CriticalSection &GetGLLock()
|
||||
/*
|
||||
in bash:
|
||||
|
||||
function HookWrapper()
|
||||
function WrapperMacro()
|
||||
{
|
||||
N=$1;
|
||||
echo -n "#define HookWrapper$N(ret, function";
|
||||
NAME=$1;
|
||||
N=$2;
|
||||
ALIAS=$3;
|
||||
if [ $ALIAS -eq 1 ]; then
|
||||
echo -n "#define $NAME$N(ret, function, realfunc";
|
||||
else
|
||||
echo -n "#define $NAME$N(ret, function";
|
||||
fi
|
||||
for I in `seq 1 $N`; do echo -n ", t$I, p$I"; done;
|
||||
echo ") \\";
|
||||
|
||||
echo -en "\ttypedef ret (*CONCAT(function, _hooktype)) (";
|
||||
echo -en " typedef ret (*CONCAT(function, _hooktype))(";
|
||||
for I in `seq 1 $N`; do echo -n "t$I"; if [ $I -ne $N ]; then echo -n ", "; fi; done;
|
||||
echo "); \\";
|
||||
|
||||
echo -e "\textern \"C\" __attribute__ ((visibility (\"default\"))) \\";
|
||||
|
||||
echo -en "\tret function(";
|
||||
echo -en " extern \"C\" __attribute__((visibility (\"default\"))) ret function(";
|
||||
for I in `seq 1 $N`; do echo -n "t$I p$I"; if [ $I -ne $N ]; then echo -n ", "; fi;
|
||||
done;
|
||||
echo ") \\";
|
||||
|
||||
echo -en "\t{ SCOPED_LOCK(glLock); return m_GLDriver->function(";
|
||||
echo -e " { \\";
|
||||
echo -e " SCOPED_LOCK(glLock); \\";
|
||||
echo -e " gl_CurChunk = GLChunk::function; \\";
|
||||
if [ $ALIAS -eq 1 ]; then
|
||||
echo -n " return glhooks.GL.realfunc(";
|
||||
else
|
||||
echo -n " return glhooks.GL.function(";
|
||||
fi
|
||||
for I in `seq 1 $N`; do echo -n "p$I"; if [ $I -ne $N ]; then echo -n ", "; fi; done;
|
||||
echo "); } \\";
|
||||
echo -e "); \\";
|
||||
echo -e " } \\";
|
||||
|
||||
echo -en "\tret CONCAT(function,_renderdoc_hooked)(";
|
||||
echo -en " ret CONCAT(function,_renderdoc_hooked)(";
|
||||
for I in `seq 1 $N`; do echo -n "t$I p$I"; if [ $I -ne $N ]; then echo -n ", "; fi;
|
||||
done;
|
||||
echo ") \\";
|
||||
|
||||
echo -en "\t{ SCOPED_LOCK(glLock); return m_GLDriver->function(";
|
||||
echo -e " { \\";
|
||||
echo -e " SCOPED_LOCK(glLock); \\";
|
||||
echo -e " gl_CurChunk = GLChunk::function; \\";
|
||||
if [ $ALIAS -eq 1 ]; then
|
||||
echo -n " return m_GLDriver->realfunc(";
|
||||
else
|
||||
echo -n " return m_GLDriver->function(";
|
||||
fi
|
||||
for I in `seq 1 $N`; do echo -n "p$I"; if [ $I -ne $N ]; then echo -n ", "; fi; done;
|
||||
echo -n "); }";
|
||||
echo -e "); \\";
|
||||
echo -e " }";
|
||||
}
|
||||
|
||||
for I in `seq 0 15`; do HookWrapper $I; echo; done
|
||||
for I in `seq 0 15`; do WrapperMacro HookWrapper $I 0; echo; done
|
||||
for I in `seq 0 15`; do WrapperMacro HookAliasWrapper $I 1; echo; done
|
||||
|
||||
*/
|
||||
|
||||
@@ -143,112 +164,139 @@ Threading::CriticalSection &GetGLLock()
|
||||
extern "C" __attribute__((visibility("default"))) ret function() \
|
||||
{ \
|
||||
SCOPED_LOCK(glLock); \
|
||||
gl_CurChunk = GLChunk::function; \
|
||||
return m_GLDriver->function(); \
|
||||
} \
|
||||
ret CONCAT(function, _renderdoc_hooked)() \
|
||||
{ \
|
||||
SCOPED_LOCK(glLock); \
|
||||
gl_CurChunk = GLChunk::function; \
|
||||
return m_GLDriver->function(); \
|
||||
}
|
||||
|
||||
#define HookWrapper1(ret, function, t1, p1) \
|
||||
typedef ret (*CONCAT(function, _hooktype))(t1); \
|
||||
extern "C" __attribute__((visibility("default"))) ret function(t1 p1) \
|
||||
{ \
|
||||
SCOPED_LOCK(glLock); \
|
||||
gl_CurChunk = GLChunk::function; \
|
||||
return m_GLDriver->function(p1); \
|
||||
} \
|
||||
ret CONCAT(function, _renderdoc_hooked)(t1 p1) \
|
||||
{ \
|
||||
SCOPED_LOCK(glLock); \
|
||||
gl_CurChunk = GLChunk::function; \
|
||||
return m_GLDriver->function(p1); \
|
||||
}
|
||||
|
||||
#define HookWrapper2(ret, function, t1, p1, t2, p2) \
|
||||
typedef ret (*CONCAT(function, _hooktype))(t1, t2); \
|
||||
extern "C" __attribute__((visibility("default"))) ret function(t1 p1, t2 p2) \
|
||||
{ \
|
||||
SCOPED_LOCK(glLock); \
|
||||
gl_CurChunk = GLChunk::function; \
|
||||
return m_GLDriver->function(p1, p2); \
|
||||
} \
|
||||
ret CONCAT(function, _renderdoc_hooked)(t1 p1, t2 p2) \
|
||||
{ \
|
||||
SCOPED_LOCK(glLock); \
|
||||
gl_CurChunk = GLChunk::function; \
|
||||
return m_GLDriver->function(p1, p2); \
|
||||
}
|
||||
|
||||
#define HookWrapper3(ret, function, t1, p1, t2, p2, t3, p3) \
|
||||
typedef ret (*CONCAT(function, _hooktype))(t1, t2, t3); \
|
||||
extern "C" __attribute__((visibility("default"))) ret function(t1 p1, t2 p2, t3 p3) \
|
||||
{ \
|
||||
SCOPED_LOCK(glLock); \
|
||||
gl_CurChunk = GLChunk::function; \
|
||||
return m_GLDriver->function(p1, p2, p3); \
|
||||
} \
|
||||
ret CONCAT(function, _renderdoc_hooked)(t1 p1, t2 p2, t3 p3) \
|
||||
{ \
|
||||
SCOPED_LOCK(glLock); \
|
||||
gl_CurChunk = GLChunk::function; \
|
||||
return m_GLDriver->function(p1, p2, p3); \
|
||||
}
|
||||
|
||||
#define HookWrapper4(ret, function, t1, p1, t2, p2, t3, p3, t4, p4) \
|
||||
typedef ret (*CONCAT(function, _hooktype))(t1, t2, t3, t4); \
|
||||
extern "C" __attribute__((visibility("default"))) ret function(t1 p1, t2 p2, t3 p3, t4 p4) \
|
||||
{ \
|
||||
SCOPED_LOCK(glLock); \
|
||||
gl_CurChunk = GLChunk::function; \
|
||||
return m_GLDriver->function(p1, p2, p3, p4); \
|
||||
} \
|
||||
ret CONCAT(function, _renderdoc_hooked)(t1 p1, t2 p2, t3 p3, t4 p4) \
|
||||
{ \
|
||||
SCOPED_LOCK(glLock); \
|
||||
gl_CurChunk = GLChunk::function; \
|
||||
return m_GLDriver->function(p1, p2, p3, p4); \
|
||||
}
|
||||
|
||||
#define HookWrapper5(ret, function, t1, p1, t2, p2, t3, p3, t4, p4, t5, p5) \
|
||||
typedef ret (*CONCAT(function, _hooktype))(t1, t2, t3, t4, t5); \
|
||||
extern "C" __attribute__((visibility("default"))) ret function(t1 p1, t2 p2, t3 p3, t4 p4, t5 p5) \
|
||||
{ \
|
||||
SCOPED_LOCK(glLock); \
|
||||
gl_CurChunk = GLChunk::function; \
|
||||
return m_GLDriver->function(p1, p2, p3, p4, p5); \
|
||||
} \
|
||||
ret CONCAT(function, _renderdoc_hooked)(t1 p1, t2 p2, t3 p3, t4 p4, t5 p5) \
|
||||
{ \
|
||||
SCOPED_LOCK(glLock); \
|
||||
gl_CurChunk = GLChunk::function; \
|
||||
return m_GLDriver->function(p1, p2, p3, p4, p5); \
|
||||
}
|
||||
|
||||
#define HookWrapper6(ret, function, t1, p1, t2, p2, t3, p3, t4, p4, t5, p5, t6, p6) \
|
||||
typedef ret (*CONCAT(function, _hooktype))(t1, t2, t3, t4, t5, t6); \
|
||||
extern "C" __attribute__((visibility("default"))) ret function(t1 p1, t2 p2, t3 p3, t4 p4, \
|
||||
t5 p5, t6 p6) \
|
||||
{ \
|
||||
SCOPED_LOCK(glLock); \
|
||||
gl_CurChunk = GLChunk::function; \
|
||||
return m_GLDriver->function(p1, p2, p3, p4, p5, p6); \
|
||||
} \
|
||||
ret CONCAT(function, _renderdoc_hooked)(t1 p1, t2 p2, t3 p3, t4 p4, t5 p5, t6 p6) \
|
||||
{ \
|
||||
SCOPED_LOCK(glLock); \
|
||||
gl_CurChunk = GLChunk::function; \
|
||||
return m_GLDriver->function(p1, p2, p3, p4, p5, p6); \
|
||||
}
|
||||
|
||||
#define HookWrapper7(ret, function, t1, p1, t2, p2, t3, p3, t4, p4, t5, p5, t6, p6, t7, p7) \
|
||||
typedef ret (*CONCAT(function, _hooktype))(t1, t2, t3, t4, t5, t6, t7); \
|
||||
extern "C" __attribute__((visibility("default"))) ret function(t1 p1, t2 p2, t3 p3, t4 p4, \
|
||||
t5 p5, t6 p6, t7 p7) \
|
||||
{ \
|
||||
SCOPED_LOCK(glLock); \
|
||||
gl_CurChunk = GLChunk::function; \
|
||||
return m_GLDriver->function(p1, p2, p3, p4, p5, p6, p7); \
|
||||
} \
|
||||
ret CONCAT(function, _renderdoc_hooked)(t1 p1, t2 p2, t3 p3, t4 p4, t5 p5, t6 p6, t7 p7) \
|
||||
{ \
|
||||
SCOPED_LOCK(glLock); \
|
||||
gl_CurChunk = GLChunk::function; \
|
||||
return m_GLDriver->function(p1, p2, p3, p4, p5, p6, p7); \
|
||||
}
|
||||
|
||||
#define HookWrapper8(ret, function, t1, p1, t2, p2, t3, p3, t4, p4, t5, p5, t6, p6, t7, p7, t8, p8) \
|
||||
typedef ret (*CONCAT(function, _hooktype))(t1, t2, t3, t4, t5, t6, t7, t8); \
|
||||
extern "C" __attribute__((visibility("default"))) ret function(t1 p1, t2 p2, t3 p3, t4 p4, \
|
||||
t5 p5, t6 p6, t7 p7, t8 p8) \
|
||||
{ \
|
||||
SCOPED_LOCK(glLock); \
|
||||
gl_CurChunk = GLChunk::function; \
|
||||
return m_GLDriver->function(p1, p2, p3, p4, p5, p6, p7, p8); \
|
||||
} \
|
||||
ret CONCAT(function, _renderdoc_hooked)(t1 p1, t2 p2, t3 p3, t4 p4, t5 p5, t6 p6, t7 p7, t8 p8) \
|
||||
{ \
|
||||
SCOPED_LOCK(glLock); \
|
||||
gl_CurChunk = GLChunk::function; \
|
||||
return m_GLDriver->function(p1, p2, p3, p4, p5, p6, p7, p8); \
|
||||
}
|
||||
|
||||
#define HookWrapper9(ret, function, t1, p1, t2, p2, t3, p3, t4, p4, t5, p5, t6, p6, t7, p7, t8, \
|
||||
p8, t9, p9) \
|
||||
typedef ret (*CONCAT(function, _hooktype))(t1, t2, t3, t4, t5, t6, t7, t8, t9); \
|
||||
@@ -256,14 +304,17 @@ Threading::CriticalSection &GetGLLock()
|
||||
t1 p1, t2 p2, t3 p3, t4 p4, t5 p5, t6 p6, t7 p7, t8 p8, t9 p9) \
|
||||
{ \
|
||||
SCOPED_LOCK(glLock); \
|
||||
gl_CurChunk = GLChunk::function; \
|
||||
return m_GLDriver->function(p1, p2, p3, p4, p5, p6, p7, p8, p9); \
|
||||
} \
|
||||
ret CONCAT(function, _renderdoc_hooked)(t1 p1, t2 p2, t3 p3, t4 p4, t5 p5, t6 p6, t7 p7, t8 p8, \
|
||||
t9 p9) \
|
||||
{ \
|
||||
SCOPED_LOCK(glLock); \
|
||||
gl_CurChunk = GLChunk::function; \
|
||||
return m_GLDriver->function(p1, p2, p3, p4, p5, p6, p7, p8, p9); \
|
||||
}
|
||||
|
||||
#define HookWrapper10(ret, function, t1, p1, t2, p2, t3, p3, t4, p4, t5, p5, t6, p6, t7, p7, t8, \
|
||||
p8, t9, p9, t10, p10) \
|
||||
typedef ret (*CONCAT(function, _hooktype))(t1, t2, t3, t4, t5, t6, t7, t8, t9, t10); \
|
||||
@@ -271,14 +322,17 @@ Threading::CriticalSection &GetGLLock()
|
||||
t1 p1, t2 p2, t3 p3, t4 p4, t5 p5, t6 p6, t7 p7, t8 p8, t9 p9, t10 p10) \
|
||||
{ \
|
||||
SCOPED_LOCK(glLock); \
|
||||
gl_CurChunk = GLChunk::function; \
|
||||
return m_GLDriver->function(p1, p2, p3, p4, p5, p6, p7, p8, p9, p10); \
|
||||
} \
|
||||
ret CONCAT(function, _renderdoc_hooked)(t1 p1, t2 p2, t3 p3, t4 p4, t5 p5, t6 p6, t7 p7, t8 p8, \
|
||||
t9 p9, t10 p10) \
|
||||
{ \
|
||||
SCOPED_LOCK(glLock); \
|
||||
gl_CurChunk = GLChunk::function; \
|
||||
return m_GLDriver->function(p1, p2, p3, p4, p5, p6, p7, p8, p9, p10); \
|
||||
}
|
||||
|
||||
#define HookWrapper11(ret, function, t1, p1, t2, p2, t3, p3, t4, p4, t5, p5, t6, p6, t7, p7, t8, \
|
||||
p8, t9, p9, t10, p10, t11, p11) \
|
||||
typedef ret (*CONCAT(function, _hooktype))(t1, t2, t3, t4, t5, t6, t7, t8, t9, t10, t11); \
|
||||
@@ -286,14 +340,17 @@ Threading::CriticalSection &GetGLLock()
|
||||
t1 p1, t2 p2, t3 p3, t4 p4, t5 p5, t6 p6, t7 p7, t8 p8, t9 p9, t10 p10, t11 p11) \
|
||||
{ \
|
||||
SCOPED_LOCK(glLock); \
|
||||
gl_CurChunk = GLChunk::function; \
|
||||
return m_GLDriver->function(p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11); \
|
||||
} \
|
||||
ret CONCAT(function, _renderdoc_hooked)(t1 p1, t2 p2, t3 p3, t4 p4, t5 p5, t6 p6, t7 p7, t8 p8, \
|
||||
t9 p9, t10 p10, t11 p11) \
|
||||
{ \
|
||||
SCOPED_LOCK(glLock); \
|
||||
gl_CurChunk = GLChunk::function; \
|
||||
return m_GLDriver->function(p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11); \
|
||||
}
|
||||
|
||||
#define HookWrapper12(ret, function, t1, p1, t2, p2, t3, p3, t4, p4, t5, p5, t6, p6, t7, p7, t8, \
|
||||
p8, t9, p9, t10, p10, t11, p11, t12, p12) \
|
||||
typedef ret (*CONCAT(function, _hooktype))(t1, t2, t3, t4, t5, t6, t7, t8, t9, t10, t11, t12); \
|
||||
@@ -301,14 +358,17 @@ Threading::CriticalSection &GetGLLock()
|
||||
t1 p1, t2 p2, t3 p3, t4 p4, t5 p5, t6 p6, t7 p7, t8 p8, t9 p9, t10 p10, t11 p11, t12 p12) \
|
||||
{ \
|
||||
SCOPED_LOCK(glLock); \
|
||||
gl_CurChunk = GLChunk::function; \
|
||||
return m_GLDriver->function(p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12); \
|
||||
} \
|
||||
ret CONCAT(function, _renderdoc_hooked)(t1 p1, t2 p2, t3 p3, t4 p4, t5 p5, t6 p6, t7 p7, t8 p8, \
|
||||
t9 p9, t10 p10, t11 p11, t12 p12) \
|
||||
{ \
|
||||
SCOPED_LOCK(glLock); \
|
||||
gl_CurChunk = GLChunk::function; \
|
||||
return m_GLDriver->function(p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12); \
|
||||
}
|
||||
|
||||
#define HookWrapper13(ret, function, t1, p1, t2, p2, t3, p3, t4, p4, t5, p5, t6, p6, t7, p7, t8, \
|
||||
p8, t9, p9, t10, p10, t11, p11, t12, p12, t13, p13) \
|
||||
typedef ret (*CONCAT(function, _hooktype))(t1, t2, t3, t4, t5, t6, t7, t8, t9, t10, t11, t12, \
|
||||
@@ -318,14 +378,17 @@ Threading::CriticalSection &GetGLLock()
|
||||
t13 p13) \
|
||||
{ \
|
||||
SCOPED_LOCK(glLock); \
|
||||
gl_CurChunk = GLChunk::function; \
|
||||
return m_GLDriver->function(p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13); \
|
||||
} \
|
||||
ret CONCAT(function, _renderdoc_hooked)(t1 p1, t2 p2, t3 p3, t4 p4, t5 p5, t6 p6, t7 p7, t8 p8, \
|
||||
t9 p9, t10 p10, t11 p11, t12 p12, t13 p13) \
|
||||
{ \
|
||||
SCOPED_LOCK(glLock); \
|
||||
gl_CurChunk = GLChunk::function; \
|
||||
return m_GLDriver->function(p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13); \
|
||||
}
|
||||
|
||||
#define HookWrapper14(ret, function, t1, p1, t2, p2, t3, p3, t4, p4, t5, p5, t6, p6, t7, p7, t8, \
|
||||
p8, t9, p9, t10, p10, t11, p11, t12, p12, t13, p13, t14, p14) \
|
||||
typedef ret (*CONCAT(function, _hooktype))(t1, t2, t3, t4, t5, t6, t7, t8, t9, t10, t11, t12, \
|
||||
@@ -335,14 +398,17 @@ Threading::CriticalSection &GetGLLock()
|
||||
t13 p13, t14 p14) \
|
||||
{ \
|
||||
SCOPED_LOCK(glLock); \
|
||||
gl_CurChunk = GLChunk::function; \
|
||||
return m_GLDriver->function(p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14); \
|
||||
} \
|
||||
ret CONCAT(function, _renderdoc_hooked)(t1 p1, t2 p2, t3 p3, t4 p4, t5 p5, t6 p6, t7 p7, t8 p8, \
|
||||
t9 p9, t10 p10, t11 p11, t12 p12, t13 p13, t14 p14) \
|
||||
{ \
|
||||
SCOPED_LOCK(glLock); \
|
||||
gl_CurChunk = GLChunk::function; \
|
||||
return m_GLDriver->function(p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14); \
|
||||
}
|
||||
|
||||
#define HookWrapper15(ret, function, t1, p1, t2, p2, t3, p3, t4, p4, t5, p5, t6, p6, t7, p7, t8, \
|
||||
p8, t9, p9, t10, p10, t11, p11, t12, p12, t13, p13, t14, p14, t15, p15) \
|
||||
typedef ret (*CONCAT(function, _hooktype))(t1, t2, t3, t4, t5, t6, t7, t8, t9, t10, t11, t12, \
|
||||
@@ -352,6 +418,7 @@ Threading::CriticalSection &GetGLLock()
|
||||
t13 p13, t14 p14, t15 p15) \
|
||||
{ \
|
||||
SCOPED_LOCK(glLock); \
|
||||
gl_CurChunk = GLChunk::function; \
|
||||
return m_GLDriver->function(p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15); \
|
||||
} \
|
||||
ret CONCAT(function, _renderdoc_hooked)(t1 p1, t2 p2, t3 p3, t4 p4, t5 p5, t6 p6, t7 p7, t8 p8, \
|
||||
@@ -359,36 +426,284 @@ Threading::CriticalSection &GetGLLock()
|
||||
t15 p15) \
|
||||
{ \
|
||||
SCOPED_LOCK(glLock); \
|
||||
gl_CurChunk = GLChunk::function; \
|
||||
return m_GLDriver->function(p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15); \
|
||||
}
|
||||
|
||||
#define HookAliasWrapper0(ret, function, realfunc)
|
||||
#define HookAliasWrapper1(ret, function, realfunc, t1, p1)
|
||||
#define HookAliasWrapper2(ret, function, realfunc, t1, p1, t2, p2)
|
||||
#define HookAliasWrapper3(ret, function, realfunc, t1, p1, t2, p2, t3, p3)
|
||||
#define HookAliasWrapper4(ret, function, realfunc, t1, p1, t2, p2, t3, p3, t4, p4)
|
||||
#define HookAliasWrapper5(ret, function, realfunc, t1, p1, t2, p2, t3, p3, t4, p4, t5, p5)
|
||||
#define HookAliasWrapper6(ret, function, realfunc, t1, p1, t2, p2, t3, p3, t4, p4, t5, p5, t6, p6)
|
||||
#define HookAliasWrapper0(ret, function, realfunc) \
|
||||
typedef ret (*CONCAT(function, _hooktype))(); \
|
||||
extern "C" __attribute__((visibility("default"))) ret function() \
|
||||
{ \
|
||||
SCOPED_LOCK(glLock); \
|
||||
gl_CurChunk = GLChunk::function; \
|
||||
return m_GLDriver->realfunc(); \
|
||||
} \
|
||||
ret CONCAT(function, _renderdoc_hooked)() \
|
||||
{ \
|
||||
SCOPED_LOCK(glLock); \
|
||||
gl_CurChunk = GLChunk::function; \
|
||||
return m_GLDriver->realfunc(); \
|
||||
}
|
||||
|
||||
#define HookAliasWrapper1(ret, function, realfunc, t1, p1) \
|
||||
typedef ret (*CONCAT(function, _hooktype))(t1); \
|
||||
extern "C" __attribute__((visibility("default"))) ret function(t1 p1) \
|
||||
{ \
|
||||
SCOPED_LOCK(glLock); \
|
||||
gl_CurChunk = GLChunk::function; \
|
||||
return m_GLDriver->realfunc(p1); \
|
||||
} \
|
||||
ret CONCAT(function, _renderdoc_hooked)(t1 p1) \
|
||||
{ \
|
||||
SCOPED_LOCK(glLock); \
|
||||
gl_CurChunk = GLChunk::function; \
|
||||
return m_GLDriver->realfunc(p1); \
|
||||
}
|
||||
|
||||
#define HookAliasWrapper2(ret, function, realfunc, t1, p1, t2, p2) \
|
||||
typedef ret (*CONCAT(function, _hooktype))(t1, t2); \
|
||||
extern "C" __attribute__((visibility("default"))) ret function(t1 p1, t2 p2) \
|
||||
{ \
|
||||
SCOPED_LOCK(glLock); \
|
||||
gl_CurChunk = GLChunk::function; \
|
||||
return m_GLDriver->realfunc(p1, p2); \
|
||||
} \
|
||||
ret CONCAT(function, _renderdoc_hooked)(t1 p1, t2 p2) \
|
||||
{ \
|
||||
SCOPED_LOCK(glLock); \
|
||||
gl_CurChunk = GLChunk::function; \
|
||||
return m_GLDriver->realfunc(p1, p2); \
|
||||
}
|
||||
|
||||
#define HookAliasWrapper3(ret, function, realfunc, t1, p1, t2, p2, t3, p3) \
|
||||
typedef ret (*CONCAT(function, _hooktype))(t1, t2, t3); \
|
||||
extern "C" __attribute__((visibility("default"))) ret function(t1 p1, t2 p2, t3 p3) \
|
||||
{ \
|
||||
SCOPED_LOCK(glLock); \
|
||||
gl_CurChunk = GLChunk::function; \
|
||||
return m_GLDriver->realfunc(p1, p2, p3); \
|
||||
} \
|
||||
ret CONCAT(function, _renderdoc_hooked)(t1 p1, t2 p2, t3 p3) \
|
||||
{ \
|
||||
SCOPED_LOCK(glLock); \
|
||||
gl_CurChunk = GLChunk::function; \
|
||||
return m_GLDriver->realfunc(p1, p2, p3); \
|
||||
}
|
||||
|
||||
#define HookAliasWrapper4(ret, function, realfunc, t1, p1, t2, p2, t3, p3, t4, p4) \
|
||||
typedef ret (*CONCAT(function, _hooktype))(t1, t2, t3, t4); \
|
||||
extern "C" __attribute__((visibility("default"))) ret function(t1 p1, t2 p2, t3 p3, t4 p4) \
|
||||
{ \
|
||||
SCOPED_LOCK(glLock); \
|
||||
gl_CurChunk = GLChunk::function; \
|
||||
return m_GLDriver->realfunc(p1, p2, p3, p4); \
|
||||
} \
|
||||
ret CONCAT(function, _renderdoc_hooked)(t1 p1, t2 p2, t3 p3, t4 p4) \
|
||||
{ \
|
||||
SCOPED_LOCK(glLock); \
|
||||
gl_CurChunk = GLChunk::function; \
|
||||
return m_GLDriver->realfunc(p1, p2, p3, p4); \
|
||||
}
|
||||
|
||||
#define HookAliasWrapper5(ret, function, realfunc, t1, p1, t2, p2, t3, p3, t4, p4, t5, p5) \
|
||||
typedef ret (*CONCAT(function, _hooktype))(t1, t2, t3, t4, t5); \
|
||||
extern "C" __attribute__((visibility("default"))) ret function(t1 p1, t2 p2, t3 p3, t4 p4, t5 p5) \
|
||||
{ \
|
||||
SCOPED_LOCK(glLock); \
|
||||
gl_CurChunk = GLChunk::function; \
|
||||
return m_GLDriver->realfunc(p1, p2, p3, p4, p5); \
|
||||
} \
|
||||
ret CONCAT(function, _renderdoc_hooked)(t1 p1, t2 p2, t3 p3, t4 p4, t5 p5) \
|
||||
{ \
|
||||
SCOPED_LOCK(glLock); \
|
||||
gl_CurChunk = GLChunk::function; \
|
||||
return m_GLDriver->realfunc(p1, p2, p3, p4, p5); \
|
||||
}
|
||||
|
||||
#define HookAliasWrapper6(ret, function, realfunc, t1, p1, t2, p2, t3, p3, t4, p4, t5, p5, t6, p6) \
|
||||
typedef ret (*CONCAT(function, _hooktype))(t1, t2, t3, t4, t5, t6); \
|
||||
extern "C" __attribute__((visibility("default"))) ret function(t1 p1, t2 p2, t3 p3, t4 p4, \
|
||||
t5 p5, t6 p6) \
|
||||
{ \
|
||||
SCOPED_LOCK(glLock); \
|
||||
gl_CurChunk = GLChunk::function; \
|
||||
return m_GLDriver->realfunc(p1, p2, p3, p4, p5, p6); \
|
||||
} \
|
||||
ret CONCAT(function, _renderdoc_hooked)(t1 p1, t2 p2, t3 p3, t4 p4, t5 p5, t6 p6) \
|
||||
{ \
|
||||
SCOPED_LOCK(glLock); \
|
||||
gl_CurChunk = GLChunk::function; \
|
||||
return m_GLDriver->realfunc(p1, p2, p3, p4, p5, p6); \
|
||||
}
|
||||
|
||||
#define HookAliasWrapper7(ret, function, realfunc, t1, p1, t2, p2, t3, p3, t4, p4, t5, p5, t6, p6, \
|
||||
t7, p7)
|
||||
t7, p7) \
|
||||
typedef ret (*CONCAT(function, _hooktype))(t1, t2, t3, t4, t5, t6, t7); \
|
||||
extern "C" __attribute__((visibility("default"))) ret function(t1 p1, t2 p2, t3 p3, t4 p4, \
|
||||
t5 p5, t6 p6, t7 p7) \
|
||||
{ \
|
||||
SCOPED_LOCK(glLock); \
|
||||
gl_CurChunk = GLChunk::function; \
|
||||
return m_GLDriver->realfunc(p1, p2, p3, p4, p5, p6, p7); \
|
||||
} \
|
||||
ret CONCAT(function, _renderdoc_hooked)(t1 p1, t2 p2, t3 p3, t4 p4, t5 p5, t6 p6, t7 p7) \
|
||||
{ \
|
||||
SCOPED_LOCK(glLock); \
|
||||
gl_CurChunk = GLChunk::function; \
|
||||
return m_GLDriver->realfunc(p1, p2, p3, p4, p5, p6, p7); \
|
||||
}
|
||||
|
||||
#define HookAliasWrapper8(ret, function, realfunc, t1, p1, t2, p2, t3, p3, t4, p4, t5, p5, t6, p6, \
|
||||
t7, p7, t8, p8)
|
||||
t7, p7, t8, p8) \
|
||||
typedef ret (*CONCAT(function, _hooktype))(t1, t2, t3, t4, t5, t6, t7, t8); \
|
||||
extern "C" __attribute__((visibility("default"))) ret function(t1 p1, t2 p2, t3 p3, t4 p4, \
|
||||
t5 p5, t6 p6, t7 p7, t8 p8) \
|
||||
{ \
|
||||
SCOPED_LOCK(glLock); \
|
||||
gl_CurChunk = GLChunk::function; \
|
||||
return m_GLDriver->realfunc(p1, p2, p3, p4, p5, p6, p7, p8); \
|
||||
} \
|
||||
ret CONCAT(function, _renderdoc_hooked)(t1 p1, t2 p2, t3 p3, t4 p4, t5 p5, t6 p6, t7 p7, t8 p8) \
|
||||
{ \
|
||||
SCOPED_LOCK(glLock); \
|
||||
gl_CurChunk = GLChunk::function; \
|
||||
return m_GLDriver->realfunc(p1, p2, p3, p4, p5, p6, p7, p8); \
|
||||
}
|
||||
|
||||
#define HookAliasWrapper9(ret, function, realfunc, t1, p1, t2, p2, t3, p3, t4, p4, t5, p5, t6, p6, \
|
||||
t7, p7, t8, p8, t9, p9)
|
||||
#define HookAliasWrapper10(ret, function, realfunc, t1, p1, t2, p2, t3, p3, t4, p4, t5, p5, t6, \
|
||||
p6, t7, p7, t8, p8, t9, p9, t10, p10)
|
||||
#define HookAliasWrapper11(ret, function, realfunc, t1, p1, t2, p2, t3, p3, t4, p4, t5, p5, t6, \
|
||||
p6, t7, p7, t8, p8, t9, p9, t10, p10, t11, p11)
|
||||
#define HookAliasWrapper12(ret, function, realfunc, t1, p1, t2, p2, t3, p3, t4, p4, t5, p5, t6, \
|
||||
p6, t7, p7, t8, p8, t9, p9, t10, p10, t11, p11, t12, p12)
|
||||
#define HookAliasWrapper13(ret, function, realfunc, t1, p1, t2, p2, t3, p3, t4, p4, t5, p5, t6, \
|
||||
p6, t7, p7, t8, p8, t9, p9, t10, p10, t11, p11, t12, p12, t13, p13)
|
||||
#define HookAliasWrapper14(ret, function, realfunc, t1, p1, t2, p2, t3, p3, t4, p4, t5, p5, t6, \
|
||||
p6, t7, p7, t8, p8, t9, p9, t10, p10, t11, p11, t12, p12, t13, p13, \
|
||||
t14, p14)
|
||||
#define HookAliasWrapper15(ret, function, realfunc, t1, p1, t2, p2, t3, p3, t4, p4, t5, p5, t6, \
|
||||
p6, t7, p7, t8, p8, t9, p9, t10, p10, t11, p11, t12, p12, t13, p13, \
|
||||
t14, p14, t15, p15)
|
||||
t7, p7, t8, p8, t9, p9) \
|
||||
typedef ret (*CONCAT(function, _hooktype))(t1, t2, t3, t4, t5, t6, t7, t8, t9); \
|
||||
extern "C" __attribute__((visibility("default"))) ret function( \
|
||||
t1 p1, t2 p2, t3 p3, t4 p4, t5 p5, t6 p6, t7 p7, t8 p8, t9 p9) \
|
||||
{ \
|
||||
SCOPED_LOCK(glLock); \
|
||||
gl_CurChunk = GLChunk::function; \
|
||||
return m_GLDriver->realfunc(p1, p2, p3, p4, p5, p6, p7, p8, p9); \
|
||||
} \
|
||||
ret CONCAT(function, _renderdoc_hooked)(t1 p1, t2 p2, t3 p3, t4 p4, t5 p5, t6 p6, t7 p7, t8 p8, \
|
||||
t9 p9) \
|
||||
{ \
|
||||
SCOPED_LOCK(glLock); \
|
||||
gl_CurChunk = GLChunk::function; \
|
||||
return m_GLDriver->realfunc(p1, p2, p3, p4, p5, p6, p7, p8, p9); \
|
||||
}
|
||||
|
||||
#define HookAliasWrapper10(ret, function, realfunc, t1, p1, t2, p2, t3, p3, t4, p4, t5, p5, t6, \
|
||||
p6, t7, p7, t8, p8, t9, p9, t10, p10) \
|
||||
typedef ret (*CONCAT(function, _hooktype))(t1, t2, t3, t4, t5, t6, t7, t8, t9, t10); \
|
||||
extern "C" __attribute__((visibility("default"))) ret function( \
|
||||
t1 p1, t2 p2, t3 p3, t4 p4, t5 p5, t6 p6, t7 p7, t8 p8, t9 p9, t10 p10) \
|
||||
{ \
|
||||
SCOPED_LOCK(glLock); \
|
||||
gl_CurChunk = GLChunk::function; \
|
||||
return m_GLDriver->realfunc(p1, p2, p3, p4, p5, p6, p7, p8, p9, p10); \
|
||||
} \
|
||||
ret CONCAT(function, _renderdoc_hooked)(t1 p1, t2 p2, t3 p3, t4 p4, t5 p5, t6 p6, t7 p7, t8 p8, \
|
||||
t9 p9, t10 p10) \
|
||||
{ \
|
||||
SCOPED_LOCK(glLock); \
|
||||
gl_CurChunk = GLChunk::function; \
|
||||
return m_GLDriver->realfunc(p1, p2, p3, p4, p5, p6, p7, p8, p9, p10); \
|
||||
}
|
||||
|
||||
#define HookAliasWrapper11(ret, function, realfunc, t1, p1, t2, p2, t3, p3, t4, p4, t5, p5, t6, \
|
||||
p6, t7, p7, t8, p8, t9, p9, t10, p10, t11, p11) \
|
||||
typedef ret (*CONCAT(function, _hooktype))(t1, t2, t3, t4, t5, t6, t7, t8, t9, t10, t11); \
|
||||
extern "C" __attribute__((visibility("default"))) ret function( \
|
||||
t1 p1, t2 p2, t3 p3, t4 p4, t5 p5, t6 p6, t7 p7, t8 p8, t9 p9, t10 p10, t11 p11) \
|
||||
{ \
|
||||
SCOPED_LOCK(glLock); \
|
||||
gl_CurChunk = GLChunk::function; \
|
||||
return m_GLDriver->realfunc(p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11); \
|
||||
} \
|
||||
ret CONCAT(function, _renderdoc_hooked)(t1 p1, t2 p2, t3 p3, t4 p4, t5 p5, t6 p6, t7 p7, t8 p8, \
|
||||
t9 p9, t10 p10, t11 p11) \
|
||||
{ \
|
||||
SCOPED_LOCK(glLock); \
|
||||
gl_CurChunk = GLChunk::function; \
|
||||
return m_GLDriver->realfunc(p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11); \
|
||||
}
|
||||
|
||||
#define HookAliasWrapper12(ret, function, realfunc, t1, p1, t2, p2, t3, p3, t4, p4, t5, p5, t6, \
|
||||
p6, t7, p7, t8, p8, t9, p9, t10, p10, t11, p11, t12, p12) \
|
||||
typedef ret (*CONCAT(function, _hooktype))(t1, t2, t3, t4, t5, t6, t7, t8, t9, t10, t11, t12); \
|
||||
extern "C" __attribute__((visibility("default"))) ret function( \
|
||||
t1 p1, t2 p2, t3 p3, t4 p4, t5 p5, t6 p6, t7 p7, t8 p8, t9 p9, t10 p10, t11 p11, t12 p12) \
|
||||
{ \
|
||||
SCOPED_LOCK(glLock); \
|
||||
gl_CurChunk = GLChunk::function; \
|
||||
return m_GLDriver->realfunc(p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12); \
|
||||
} \
|
||||
ret CONCAT(function, _renderdoc_hooked)(t1 p1, t2 p2, t3 p3, t4 p4, t5 p5, t6 p6, t7 p7, t8 p8, \
|
||||
t9 p9, t10 p10, t11 p11, t12 p12) \
|
||||
{ \
|
||||
SCOPED_LOCK(glLock); \
|
||||
gl_CurChunk = GLChunk::function; \
|
||||
return m_GLDriver->realfunc(p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12); \
|
||||
}
|
||||
|
||||
#define HookAliasWrapper13(ret, function, realfunc, t1, p1, t2, p2, t3, p3, t4, p4, t5, p5, t6, \
|
||||
p6, t7, p7, t8, p8, t9, p9, t10, p10, t11, p11, t12, p12, t13, p13) \
|
||||
typedef ret (*CONCAT(function, _hooktype))(t1, t2, t3, t4, t5, t6, t7, t8, t9, t10, t11, t12, \
|
||||
t13); \
|
||||
extern "C" __attribute__((visibility("default"))) ret function( \
|
||||
t1 p1, t2 p2, t3 p3, t4 p4, t5 p5, t6 p6, t7 p7, t8 p8, t9 p9, t10 p10, t11 p11, t12 p12, \
|
||||
t13 p13) \
|
||||
{ \
|
||||
SCOPED_LOCK(glLock); \
|
||||
gl_CurChunk = GLChunk::function; \
|
||||
return m_GLDriver->realfunc(p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13); \
|
||||
} \
|
||||
ret CONCAT(function, _renderdoc_hooked)(t1 p1, t2 p2, t3 p3, t4 p4, t5 p5, t6 p6, t7 p7, t8 p8, \
|
||||
t9 p9, t10 p10, t11 p11, t12 p12, t13 p13) \
|
||||
{ \
|
||||
SCOPED_LOCK(glLock); \
|
||||
gl_CurChunk = GLChunk::function; \
|
||||
return m_GLDriver->realfunc(p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13); \
|
||||
}
|
||||
|
||||
#define HookAliasWrapper14(ret, function, realfunc, t1, p1, t2, p2, t3, p3, t4, p4, t5, p5, t6, \
|
||||
p6, t7, p7, t8, p8, t9, p9, t10, p10, t11, p11, t12, p12, t13, p13, \
|
||||
t14, p14) \
|
||||
typedef ret (*CONCAT(function, _hooktype))(t1, t2, t3, t4, t5, t6, t7, t8, t9, t10, t11, t12, \
|
||||
t13, t14); \
|
||||
extern "C" __attribute__((visibility("default"))) ret function( \
|
||||
t1 p1, t2 p2, t3 p3, t4 p4, t5 p5, t6 p6, t7 p7, t8 p8, t9 p9, t10 p10, t11 p11, t12 p12, \
|
||||
t13 p13, t14 p14) \
|
||||
{ \
|
||||
SCOPED_LOCK(glLock); \
|
||||
gl_CurChunk = GLChunk::function; \
|
||||
return m_GLDriver->realfunc(p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14); \
|
||||
} \
|
||||
ret CONCAT(function, _renderdoc_hooked)(t1 p1, t2 p2, t3 p3, t4 p4, t5 p5, t6 p6, t7 p7, t8 p8, \
|
||||
t9 p9, t10 p10, t11 p11, t12 p12, t13 p13, t14 p14) \
|
||||
{ \
|
||||
SCOPED_LOCK(glLock); \
|
||||
gl_CurChunk = GLChunk::function; \
|
||||
return m_GLDriver->realfunc(p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14); \
|
||||
}
|
||||
|
||||
#define HookAliasWrapper15(ret, function, realfunc, t1, p1, t2, p2, t3, p3, t4, p4, t5, p5, t6, \
|
||||
p6, t7, p7, t8, p8, t9, p9, t10, p10, t11, p11, t12, p12, t13, p13, \
|
||||
t14, p14, t15, p15) \
|
||||
typedef ret (*CONCAT(function, _hooktype))(t1, t2, t3, t4, t5, t6, t7, t8, t9, t10, t11, t12, \
|
||||
t13, t14, t15); \
|
||||
extern "C" __attribute__((visibility("default"))) ret function( \
|
||||
t1 p1, t2 p2, t3 p3, t4 p4, t5 p5, t6 p6, t7 p7, t8 p8, t9 p9, t10 p10, t11 p11, t12 p12, \
|
||||
t13 p13, t14 p14, t15 p15) \
|
||||
{ \
|
||||
SCOPED_LOCK(glLock); \
|
||||
gl_CurChunk = GLChunk::function; \
|
||||
return m_GLDriver->realfunc(p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15); \
|
||||
} \
|
||||
ret CONCAT(function, _renderdoc_hooked)(t1 p1, t2 p2, t3 p3, t4 p4, t5 p5, t6 p6, t7 p7, t8 p8, \
|
||||
t9 p9, t10 p10, t11 p11, t12 p12, t13 p13, t14 p14, \
|
||||
t15 p15) \
|
||||
{ \
|
||||
SCOPED_LOCK(glLock); \
|
||||
gl_CurChunk = GLChunk::function; \
|
||||
return m_GLDriver->realfunc(p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15); \
|
||||
}
|
||||
|
||||
DefineDLLExportHooks();
|
||||
DefineGLExtensionHooks();
|
||||
|
||||
@@ -189,6 +189,8 @@ __attribute__((visibility("default"))) ovrTextureSwapChain *vrapi_CreateTextureS
|
||||
vrapi_hooks.SetupHooks();
|
||||
}
|
||||
|
||||
gl_CurChunk = GLChunk::vrapi_CreateTextureSwapChain2;
|
||||
|
||||
ovrTextureSwapChain *texture_swapchain = vrapi_hooks.vrapi_CreateTextureSwapChain2_real(
|
||||
type, format, width, height, levels, bufferCount);
|
||||
|
||||
@@ -222,6 +224,8 @@ __attribute__((visibility("default"))) ovrTextureSwapChain *vrapi_CreateTextureS
|
||||
vrapi_hooks.SetupHooks();
|
||||
}
|
||||
|
||||
gl_CurChunk = GLChunk::vrapi_CreateTextureSwapChain;
|
||||
|
||||
ovrTextureSwapChain *texture_swapchain =
|
||||
vrapi_hooks.vrapi_CreateTextureSwapChain_real(type, format, width, height, levels, buffered);
|
||||
|
||||
|
||||
@@ -77,35 +77,55 @@
|
||||
/*
|
||||
in bash:
|
||||
|
||||
function HookWrapper()
|
||||
function WrapperMacro()
|
||||
{
|
||||
N=$1;
|
||||
echo -n "#define HookWrapper$N(ret, function";
|
||||
NAME=$1;
|
||||
N=$2;
|
||||
ALIAS=$3;
|
||||
if [ $ALIAS -eq 1 ]; then
|
||||
echo -n "#define $NAME$N(ret, function, realfunc";
|
||||
else
|
||||
echo -n "#define $NAME$N(ret, function";
|
||||
fi
|
||||
for I in `seq 1 $N`; do echo -n ", t$I, p$I"; done;
|
||||
echo ") \\";
|
||||
|
||||
echo -en "\tHook<ret (WINAPI *) (";
|
||||
echo -en " Hook<ret(WINAPI *)(";
|
||||
for I in `seq 1 $N`; do echo -n "t$I"; if [ $I -ne $N ]; then echo -n ", "; fi; done;
|
||||
echo ")> CONCAT(function, _hook); \\";
|
||||
|
||||
echo -en "\ttypedef ret (WINAPI *CONCAT(function, _hooktype)) (";
|
||||
echo -en " typedef ret(WINAPI *CONCAT(function, _hooktype)) (";
|
||||
for I in `seq 1 $N`; do echo -n "t$I"; if [ $I -ne $N ]; then echo -n ", "; fi; done;
|
||||
echo "); \\";
|
||||
|
||||
echo -en "\tstatic ret WINAPI CONCAT(function, _hooked)(";
|
||||
echo -en " static ret WINAPI CONCAT(function, _hooked)(";
|
||||
for I in `seq 1 $N`; do echo -n "t$I p$I"; if [ $I -ne $N ]; then echo -n ", "; fi;
|
||||
done;
|
||||
echo ") \\";
|
||||
|
||||
echo -en "\t{ SCOPED_LOCK(glLock);";
|
||||
echo -en "if(!glhooks.m_HaveContextCreation) return glhooks.GL.function(";
|
||||
echo -e " { \\";
|
||||
echo -e " SCOPED_LOCK(glLock); \\";
|
||||
echo -e ' if(!glhooks.m_HaveContextCreation) \\';
|
||||
if [ $ALIAS -eq 1 ]; then
|
||||
echo -n " return glhooks.GL.realfunc(";
|
||||
else
|
||||
echo -n " return glhooks.GL.function(";
|
||||
fi
|
||||
for I in `seq 1 $N`; do echo -n "p$I"; if [ $I -ne $N ]; then echo -n ", "; fi; done;
|
||||
echo -en "); return glhooks.GetDriver()->function(";
|
||||
echo -e "); \\";
|
||||
echo -e " gl_CurChunk = GLChunk::function; \\";
|
||||
if [ $ALIAS -eq 1 ]; then
|
||||
echo -n " return glhooks.GetDriver()->realfunc(";
|
||||
else
|
||||
echo -n " return glhooks.GetDriver()->function(";
|
||||
fi
|
||||
for I in `seq 1 $N`; do echo -n "p$I"; if [ $I -ne $N ]; then echo -n ", "; fi; done;
|
||||
echo -n "); }";
|
||||
echo -e "); \\";
|
||||
echo -e " }";
|
||||
}
|
||||
|
||||
for I in `seq 0 15`; do HookWrapper $I; echo; done
|
||||
for I in `seq 0 15`; do WrapperMacro HookWrapper $I 0; echo; done
|
||||
for I in `seq 0 15`; do WrapperMacro HookAliasWrapper $I 1; echo; done
|
||||
|
||||
*/
|
||||
|
||||
@@ -117,7 +137,6 @@
|
||||
#ifdef far
|
||||
#undef far
|
||||
#endif
|
||||
|
||||
#define HookWrapper0(ret, function) \
|
||||
Hook<ret(WINAPI *)()> CONCAT(function, _hook); \
|
||||
typedef ret(WINAPI *CONCAT(function, _hooktype))(); \
|
||||
@@ -126,8 +145,10 @@
|
||||
SCOPED_LOCK(glLock); \
|
||||
if(!glhooks.m_HaveContextCreation) \
|
||||
return glhooks.GL.function(); \
|
||||
gl_CurChunk = GLChunk::function; \
|
||||
return glhooks.GetDriver()->function(); \
|
||||
}
|
||||
|
||||
#define HookWrapper1(ret, function, t1, p1) \
|
||||
Hook<ret(WINAPI *)(t1)> CONCAT(function, _hook); \
|
||||
typedef ret(WINAPI *CONCAT(function, _hooktype))(t1); \
|
||||
@@ -136,8 +157,10 @@
|
||||
SCOPED_LOCK(glLock); \
|
||||
if(!glhooks.m_HaveContextCreation) \
|
||||
return glhooks.GL.function(p1); \
|
||||
gl_CurChunk = GLChunk::function; \
|
||||
return glhooks.GetDriver()->function(p1); \
|
||||
}
|
||||
|
||||
#define HookWrapper2(ret, function, t1, p1, t2, p2) \
|
||||
Hook<ret(WINAPI *)(t1, t2)> CONCAT(function, _hook); \
|
||||
typedef ret(WINAPI *CONCAT(function, _hooktype))(t1, t2); \
|
||||
@@ -146,8 +169,10 @@
|
||||
SCOPED_LOCK(glLock); \
|
||||
if(!glhooks.m_HaveContextCreation) \
|
||||
return glhooks.GL.function(p1, p2); \
|
||||
gl_CurChunk = GLChunk::function; \
|
||||
return glhooks.GetDriver()->function(p1, p2); \
|
||||
}
|
||||
|
||||
#define HookWrapper3(ret, function, t1, p1, t2, p2, t3, p3) \
|
||||
Hook<ret(WINAPI *)(t1, t2, t3)> CONCAT(function, _hook); \
|
||||
typedef ret(WINAPI *CONCAT(function, _hooktype))(t1, t2, t3); \
|
||||
@@ -156,8 +181,10 @@
|
||||
SCOPED_LOCK(glLock); \
|
||||
if(!glhooks.m_HaveContextCreation) \
|
||||
return glhooks.GL.function(p1, p2, p3); \
|
||||
gl_CurChunk = GLChunk::function; \
|
||||
return glhooks.GetDriver()->function(p1, p2, p3); \
|
||||
}
|
||||
|
||||
#define HookWrapper4(ret, function, t1, p1, t2, p2, t3, p3, t4, p4) \
|
||||
Hook<ret(WINAPI *)(t1, t2, t3, t4)> CONCAT(function, _hook); \
|
||||
typedef ret(WINAPI *CONCAT(function, _hooktype))(t1, t2, t3, t4); \
|
||||
@@ -166,8 +193,10 @@
|
||||
SCOPED_LOCK(glLock); \
|
||||
if(!glhooks.m_HaveContextCreation) \
|
||||
return glhooks.GL.function(p1, p2, p3, p4); \
|
||||
gl_CurChunk = GLChunk::function; \
|
||||
return glhooks.GetDriver()->function(p1, p2, p3, p4); \
|
||||
}
|
||||
|
||||
#define HookWrapper5(ret, function, t1, p1, t2, p2, t3, p3, t4, p4, t5, p5) \
|
||||
Hook<ret(WINAPI *)(t1, t2, t3, t4, t5)> CONCAT(function, _hook); \
|
||||
typedef ret(WINAPI *CONCAT(function, _hooktype))(t1, t2, t3, t4, t5); \
|
||||
@@ -176,8 +205,10 @@
|
||||
SCOPED_LOCK(glLock); \
|
||||
if(!glhooks.m_HaveContextCreation) \
|
||||
return glhooks.GL.function(p1, p2, p3, p4, p5); \
|
||||
gl_CurChunk = GLChunk::function; \
|
||||
return glhooks.GetDriver()->function(p1, p2, p3, p4, p5); \
|
||||
}
|
||||
|
||||
#define HookWrapper6(ret, function, t1, p1, t2, p2, t3, p3, t4, p4, t5, p5, t6, p6) \
|
||||
Hook<ret(WINAPI *)(t1, t2, t3, t4, t5, t6)> CONCAT(function, _hook); \
|
||||
typedef ret(WINAPI *CONCAT(function, _hooktype))(t1, t2, t3, t4, t5, t6); \
|
||||
@@ -186,8 +217,10 @@
|
||||
SCOPED_LOCK(glLock); \
|
||||
if(!glhooks.m_HaveContextCreation) \
|
||||
return glhooks.GL.function(p1, p2, p3, p4, p5, p6); \
|
||||
gl_CurChunk = GLChunk::function; \
|
||||
return glhooks.GetDriver()->function(p1, p2, p3, p4, p5, p6); \
|
||||
}
|
||||
|
||||
#define HookWrapper7(ret, function, t1, p1, t2, p2, t3, p3, t4, p4, t5, p5, t6, p6, t7, p7) \
|
||||
Hook<ret(WINAPI *)(t1, t2, t3, t4, t5, t6, t7)> CONCAT(function, _hook); \
|
||||
typedef ret(WINAPI *CONCAT(function, _hooktype))(t1, t2, t3, t4, t5, t6, t7); \
|
||||
@@ -196,8 +229,10 @@
|
||||
SCOPED_LOCK(glLock); \
|
||||
if(!glhooks.m_HaveContextCreation) \
|
||||
return glhooks.GL.function(p1, p2, p3, p4, p5, p6, p7); \
|
||||
gl_CurChunk = GLChunk::function; \
|
||||
return glhooks.GetDriver()->function(p1, p2, p3, p4, p5, p6, p7); \
|
||||
}
|
||||
|
||||
#define HookWrapper8(ret, function, t1, p1, t2, p2, t3, p3, t4, p4, t5, p5, t6, p6, t7, p7, t8, p8) \
|
||||
Hook<ret(WINAPI *)(t1, t2, t3, t4, t5, t6, t7, t8)> CONCAT(function, _hook); \
|
||||
typedef ret(WINAPI *CONCAT(function, _hooktype))(t1, t2, t3, t4, t5, t6, t7, t8); \
|
||||
@@ -206,8 +241,10 @@
|
||||
SCOPED_LOCK(glLock); \
|
||||
if(!glhooks.m_HaveContextCreation) \
|
||||
return glhooks.GL.function(p1, p2, p3, p4, p5, p6, p7, p8); \
|
||||
gl_CurChunk = GLChunk::function; \
|
||||
return glhooks.GetDriver()->function(p1, p2, p3, p4, p5, p6, p7, p8); \
|
||||
}
|
||||
|
||||
#define HookWrapper9(ret, function, t1, p1, t2, p2, t3, p3, t4, p4, t5, p5, t6, p6, t7, p7, t8, \
|
||||
p8, t9, p9) \
|
||||
Hook<ret(WINAPI *)(t1, t2, t3, t4, t5, t6, t7, t8, t9)> CONCAT(function, _hook); \
|
||||
@@ -218,8 +255,10 @@
|
||||
SCOPED_LOCK(glLock); \
|
||||
if(!glhooks.m_HaveContextCreation) \
|
||||
return glhooks.GL.function(p1, p2, p3, p4, p5, p6, p7, p8, p9); \
|
||||
gl_CurChunk = GLChunk::function; \
|
||||
return glhooks.GetDriver()->function(p1, p2, p3, p4, p5, p6, p7, p8, p9); \
|
||||
}
|
||||
|
||||
#define HookWrapper10(ret, function, t1, p1, t2, p2, t3, p3, t4, p4, t5, p5, t6, p6, t7, p7, t8, \
|
||||
p8, t9, p9, t10, p10) \
|
||||
Hook<ret(WINAPI *)(t1, t2, t3, t4, t5, t6, t7, t8, t9, t10)> CONCAT(function, _hook); \
|
||||
@@ -230,8 +269,10 @@
|
||||
SCOPED_LOCK(glLock); \
|
||||
if(!glhooks.m_HaveContextCreation) \
|
||||
return glhooks.GL.function(p1, p2, p3, p4, p5, p6, p7, p8, p9, p10); \
|
||||
gl_CurChunk = GLChunk::function; \
|
||||
return glhooks.GetDriver()->function(p1, p2, p3, p4, p5, p6, p7, p8, p9, p10); \
|
||||
}
|
||||
|
||||
#define HookWrapper11(ret, function, t1, p1, t2, p2, t3, p3, t4, p4, t5, p5, t6, p6, t7, p7, t8, \
|
||||
p8, t9, p9, t10, p10, t11, p11) \
|
||||
Hook<ret(WINAPI *)(t1, t2, t3, t4, t5, t6, t7, t8, t9, t10, t11)> CONCAT(function, _hook); \
|
||||
@@ -242,8 +283,10 @@
|
||||
SCOPED_LOCK(glLock); \
|
||||
if(!glhooks.m_HaveContextCreation) \
|
||||
return glhooks.GL.function(p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11); \
|
||||
gl_CurChunk = GLChunk::function; \
|
||||
return glhooks.GetDriver()->function(p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11); \
|
||||
}
|
||||
|
||||
#define HookWrapper12(ret, function, t1, p1, t2, p2, t3, p3, t4, p4, t5, p5, t6, p6, t7, p7, t8, \
|
||||
p8, t9, p9, t10, p10, t11, p11, t12, p12) \
|
||||
Hook<ret(WINAPI *)(t1, t2, t3, t4, t5, t6, t7, t8, t9, t10, t11, t12)> CONCAT(function, _hook); \
|
||||
@@ -255,8 +298,10 @@
|
||||
SCOPED_LOCK(glLock); \
|
||||
if(!glhooks.m_HaveContextCreation) \
|
||||
return glhooks.GL.function(p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12); \
|
||||
gl_CurChunk = GLChunk::function; \
|
||||
return glhooks.GetDriver()->function(p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12); \
|
||||
}
|
||||
|
||||
#define HookWrapper13(ret, function, t1, p1, t2, p2, t3, p3, t4, p4, t5, p5, t6, p6, t7, p7, t8, \
|
||||
p8, t9, p9, t10, p10, t11, p11, t12, p12, t13, p13) \
|
||||
Hook<ret(WINAPI *)(t1, t2, t3, t4, t5, t6, t7, t8, t9, t10, t11, t12, t13)> CONCAT(function, \
|
||||
@@ -269,8 +314,10 @@
|
||||
SCOPED_LOCK(glLock); \
|
||||
if(!glhooks.m_HaveContextCreation) \
|
||||
return glhooks.GL.function(p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13); \
|
||||
gl_CurChunk = GLChunk::function; \
|
||||
return glhooks.GetDriver()->function(p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13); \
|
||||
}
|
||||
|
||||
#define HookWrapper14(ret, function, t1, p1, t2, p2, t3, p3, t4, p4, t5, p5, t6, p6, t7, p7, t8, \
|
||||
p8, t9, p9, t10, p10, t11, p11, t12, p12, t13, p13, t14, p14) \
|
||||
Hook<ret(WINAPI *)(t1, t2, t3, t4, t5, t6, t7, t8, t9, t10, t11, t12, t13, t14)> CONCAT( \
|
||||
@@ -284,9 +331,11 @@
|
||||
SCOPED_LOCK(glLock); \
|
||||
if(!glhooks.m_HaveContextCreation) \
|
||||
return glhooks.GL.function(p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14); \
|
||||
gl_CurChunk = GLChunk::function; \
|
||||
return glhooks.GetDriver()->function(p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, \
|
||||
p14); \
|
||||
}
|
||||
|
||||
#define HookWrapper15(ret, function, t1, p1, t2, p2, t3, p3, t4, p4, t5, p5, t6, p6, t7, p7, t8, \
|
||||
p8, t9, p9, t10, p10, t11, p11, t12, p12, t13, p13, t14, p14, t15, p15) \
|
||||
Hook<ret(WINAPI *)(t1, t2, t3, t4, t5, t6, t7, t8, t9, t10, t11, t12, t13, t14, t15)> CONCAT( \
|
||||
@@ -300,37 +349,231 @@
|
||||
SCOPED_LOCK(glLock); \
|
||||
if(!glhooks.m_HaveContextCreation) \
|
||||
return glhooks.GL.function(p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15); \
|
||||
gl_CurChunk = GLChunk::function; \
|
||||
return glhooks.GetDriver()->function(p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, \
|
||||
p14, p15); \
|
||||
}
|
||||
|
||||
#define HookAliasWrapper0(ret, function, realfunc)
|
||||
#define HookAliasWrapper1(ret, function, realfunc, t1, p1)
|
||||
#define HookAliasWrapper2(ret, function, realfunc, t1, p1, t2, p2)
|
||||
#define HookAliasWrapper3(ret, function, realfunc, t1, p1, t2, p2, t3, p3)
|
||||
#define HookAliasWrapper4(ret, function, realfunc, t1, p1, t2, p2, t3, p3, t4, p4)
|
||||
#define HookAliasWrapper5(ret, function, realfunc, t1, p1, t2, p2, t3, p3, t4, p4, t5, p5)
|
||||
#define HookAliasWrapper6(ret, function, realfunc, t1, p1, t2, p2, t3, p3, t4, p4, t5, p5, t6, p6)
|
||||
#define HookAliasWrapper0(ret, function, realfunc) \
|
||||
Hook<ret(WINAPI *)()> CONCAT(function, _hook); \
|
||||
typedef ret(WINAPI *CONCAT(function, _hooktype))(); \
|
||||
static ret WINAPI CONCAT(function, _hooked)() \
|
||||
{ \
|
||||
SCOPED_LOCK(glLock); \
|
||||
if(!glhooks.m_HaveContextCreation) \
|
||||
return glhooks.GL.realfunc(); \
|
||||
gl_CurChunk = GLChunk::function; \
|
||||
return glhooks.GetDriver()->realfunc(); \
|
||||
}
|
||||
|
||||
#define HookAliasWrapper1(ret, function, realfunc, t1, p1) \
|
||||
Hook<ret(WINAPI *)(t1)> CONCAT(function, _hook); \
|
||||
typedef ret(WINAPI *CONCAT(function, _hooktype))(t1); \
|
||||
static ret WINAPI CONCAT(function, _hooked)(t1 p1) \
|
||||
{ \
|
||||
SCOPED_LOCK(glLock); \
|
||||
if(!glhooks.m_HaveContextCreation) \
|
||||
return glhooks.GL.realfunc(p1); \
|
||||
gl_CurChunk = GLChunk::function; \
|
||||
return glhooks.GetDriver()->realfunc(p1); \
|
||||
}
|
||||
|
||||
#define HookAliasWrapper2(ret, function, realfunc, t1, p1, t2, p2) \
|
||||
Hook<ret(WINAPI *)(t1, t2)> CONCAT(function, _hook); \
|
||||
typedef ret(WINAPI *CONCAT(function, _hooktype))(t1, t2); \
|
||||
static ret WINAPI CONCAT(function, _hooked)(t1 p1, t2 p2) \
|
||||
{ \
|
||||
SCOPED_LOCK(glLock); \
|
||||
if(!glhooks.m_HaveContextCreation) \
|
||||
return glhooks.GL.realfunc(p1, p2); \
|
||||
gl_CurChunk = GLChunk::function; \
|
||||
return glhooks.GetDriver()->realfunc(p1, p2); \
|
||||
}
|
||||
|
||||
#define HookAliasWrapper3(ret, function, realfunc, t1, p1, t2, p2, t3, p3) \
|
||||
Hook<ret(WINAPI *)(t1, t2, t3)> CONCAT(function, _hook); \
|
||||
typedef ret(WINAPI *CONCAT(function, _hooktype))(t1, t2, t3); \
|
||||
static ret WINAPI CONCAT(function, _hooked)(t1 p1, t2 p2, t3 p3) \
|
||||
{ \
|
||||
SCOPED_LOCK(glLock); \
|
||||
if(!glhooks.m_HaveContextCreation) \
|
||||
return glhooks.GL.realfunc(p1, p2, p3); \
|
||||
gl_CurChunk = GLChunk::function; \
|
||||
return glhooks.GetDriver()->realfunc(p1, p2, p3); \
|
||||
}
|
||||
|
||||
#define HookAliasWrapper4(ret, function, realfunc, t1, p1, t2, p2, t3, p3, t4, p4) \
|
||||
Hook<ret(WINAPI *)(t1, t2, t3, t4)> CONCAT(function, _hook); \
|
||||
typedef ret(WINAPI *CONCAT(function, _hooktype))(t1, t2, t3, t4); \
|
||||
static ret WINAPI CONCAT(function, _hooked)(t1 p1, t2 p2, t3 p3, t4 p4) \
|
||||
{ \
|
||||
SCOPED_LOCK(glLock); \
|
||||
if(!glhooks.m_HaveContextCreation) \
|
||||
return glhooks.GL.realfunc(p1, p2, p3, p4); \
|
||||
gl_CurChunk = GLChunk::function; \
|
||||
return glhooks.GetDriver()->realfunc(p1, p2, p3, p4); \
|
||||
}
|
||||
|
||||
#define HookAliasWrapper5(ret, function, realfunc, t1, p1, t2, p2, t3, p3, t4, p4, t5, p5) \
|
||||
Hook<ret(WINAPI *)(t1, t2, t3, t4, t5)> CONCAT(function, _hook); \
|
||||
typedef ret(WINAPI *CONCAT(function, _hooktype))(t1, t2, t3, t4, t5); \
|
||||
static ret WINAPI CONCAT(function, _hooked)(t1 p1, t2 p2, t3 p3, t4 p4, t5 p5) \
|
||||
{ \
|
||||
SCOPED_LOCK(glLock); \
|
||||
if(!glhooks.m_HaveContextCreation) \
|
||||
return glhooks.GL.realfunc(p1, p2, p3, p4, p5); \
|
||||
gl_CurChunk = GLChunk::function; \
|
||||
return glhooks.GetDriver()->realfunc(p1, p2, p3, p4, p5); \
|
||||
}
|
||||
|
||||
#define HookAliasWrapper6(ret, function, realfunc, t1, p1, t2, p2, t3, p3, t4, p4, t5, p5, t6, p6) \
|
||||
Hook<ret(WINAPI *)(t1, t2, t3, t4, t5, t6)> CONCAT(function, _hook); \
|
||||
typedef ret(WINAPI *CONCAT(function, _hooktype))(t1, t2, t3, t4, t5, t6); \
|
||||
static ret WINAPI CONCAT(function, _hooked)(t1 p1, t2 p2, t3 p3, t4 p4, t5 p5, t6 p6) \
|
||||
{ \
|
||||
SCOPED_LOCK(glLock); \
|
||||
if(!glhooks.m_HaveContextCreation) \
|
||||
return glhooks.GL.realfunc(p1, p2, p3, p4, p5, p6); \
|
||||
gl_CurChunk = GLChunk::function; \
|
||||
return glhooks.GetDriver()->realfunc(p1, p2, p3, p4, p5, p6); \
|
||||
}
|
||||
|
||||
#define HookAliasWrapper7(ret, function, realfunc, t1, p1, t2, p2, t3, p3, t4, p4, t5, p5, t6, p6, \
|
||||
t7, p7)
|
||||
#define HookAliasWrapper8(ret, function, realfunc, t1, p1, t2, p2, t3, p3, t4, p4, t5, p5, t6, p6, \
|
||||
t7, p7, t8, p8)
|
||||
t7, p7) \
|
||||
Hook<ret(WINAPI *)(t1, t2, t3, t4, t5, t6, t7)> CONCAT(function, _hook); \
|
||||
typedef ret(WINAPI *CONCAT(function, _hooktype))(t1, t2, t3, t4, t5, t6, t7); \
|
||||
static ret WINAPI CONCAT(function, _hooked)(t1 p1, t2 p2, t3 p3, t4 p4, t5 p5, t6 p6, t7 p7) \
|
||||
{ \
|
||||
SCOPED_LOCK(glLock); \
|
||||
if(!glhooks.m_HaveContextCreation) \
|
||||
return glhooks.GL.realfunc(p1, p2, p3, p4, p5, p6, p7); \
|
||||
gl_CurChunk = GLChunk::function; \
|
||||
return glhooks.GetDriver()->realfunc(p1, p2, p3, p4, p5, p6, p7); \
|
||||
}
|
||||
|
||||
#define HookAliasWrapper8(ret, function, realfunc, t1, p1, t2, p2, t3, p3, t4, p4, t5, p5, t6, p6, \
|
||||
t7, p7, t8, p8) \
|
||||
Hook<ret(WINAPI *)(t1, t2, t3, t4, t5, t6, t7, t8)> CONCAT(function, _hook); \
|
||||
typedef ret(WINAPI *CONCAT(function, _hooktype))(t1, t2, t3, t4, t5, t6, t7, t8); \
|
||||
static ret WINAPI CONCAT(function, _hooked)(t1 p1, t2 p2, t3 p3, t4 p4, t5 p5, t6 p6, t7 p7, t8 p8) \
|
||||
{ \
|
||||
SCOPED_LOCK(glLock); \
|
||||
if(!glhooks.m_HaveContextCreation) \
|
||||
return glhooks.GL.realfunc(p1, p2, p3, p4, p5, p6, p7, p8); \
|
||||
gl_CurChunk = GLChunk::function; \
|
||||
return glhooks.GetDriver()->realfunc(p1, p2, p3, p4, p5, p6, p7, p8); \
|
||||
}
|
||||
|
||||
#define HookAliasWrapper9(ret, function, realfunc, t1, p1, t2, p2, t3, p3, t4, p4, t5, p5, t6, p6, \
|
||||
t7, p7, t8, p8, t9, p9)
|
||||
t7, p7, t8, p8, t9, p9) \
|
||||
Hook<ret(WINAPI *)(t1, t2, t3, t4, t5, t6, t7, t8, t9)> CONCAT(function, _hook); \
|
||||
typedef ret(WINAPI *CONCAT(function, _hooktype))(t1, t2, t3, t4, t5, t6, t7, t8, t9); \
|
||||
static ret WINAPI CONCAT(function, _hooked)(t1 p1, t2 p2, t3 p3, t4 p4, t5 p5, t6 p6, t7 p7, \
|
||||
t8 p8, t9 p9) \
|
||||
{ \
|
||||
SCOPED_LOCK(glLock); \
|
||||
if(!glhooks.m_HaveContextCreation) \
|
||||
return glhooks.GL.realfunc(p1, p2, p3, p4, p5, p6, p7, p8, p9); \
|
||||
gl_CurChunk = GLChunk::function; \
|
||||
return glhooks.GetDriver()->realfunc(p1, p2, p3, p4, p5, p6, p7, p8, p9); \
|
||||
}
|
||||
|
||||
#define HookAliasWrapper10(ret, function, realfunc, t1, p1, t2, p2, t3, p3, t4, p4, t5, p5, t6, \
|
||||
p6, t7, p7, t8, p8, t9, p9, t10, p10)
|
||||
#define HookAliasWrapper11(ret, function, realfunc, t1, p1, t2, p2, t3, p3, t4, p4, t5, p5, t6, \
|
||||
p6, t7, p7, t8, p8, t9, p9, t10, p10, t11, p11)
|
||||
#define HookAliasWrapper12(ret, function, realfunc, t1, p1, t2, p2, t3, p3, t4, p4, t5, p5, t6, \
|
||||
p6, t7, p7, t8, p8, t9, p9, t10, p10, t11, p11, t12, p12)
|
||||
#define HookAliasWrapper13(ret, function, realfunc, t1, p1, t2, p2, t3, p3, t4, p4, t5, p5, t6, \
|
||||
p6, t7, p7, t8, p8, t9, p9, t10, p10, t11, p11, t12, p12, t13, p13)
|
||||
#define HookAliasWrapper14(ret, function, realfunc, t1, p1, t2, p2, t3, p3, t4, p4, t5, p5, t6, \
|
||||
p6, t7, p7, t8, p8, t9, p9, t10, p10, t11, p11, t12, p12, t13, p13, \
|
||||
t14, p14)
|
||||
#define HookAliasWrapper15(ret, function, realfunc, t1, p1, t2, p2, t3, p3, t4, p4, t5, p5, t6, \
|
||||
p6, t7, p7, t8, p8, t9, p9, t10, p10, t11, p11, t12, p12, t13, p13, \
|
||||
t14, p14, t15, p15)
|
||||
p6, t7, p7, t8, p8, t9, p9, t10, p10) \
|
||||
Hook<ret(WINAPI *)(t1, t2, t3, t4, t5, t6, t7, t8, t9, t10)> CONCAT(function, _hook); \
|
||||
typedef ret(WINAPI *CONCAT(function, _hooktype))(t1, t2, t3, t4, t5, t6, t7, t8, t9, t10); \
|
||||
static ret WINAPI CONCAT(function, _hooked)(t1 p1, t2 p2, t3 p3, t4 p4, t5 p5, t6 p6, t7 p7, \
|
||||
t8 p8, t9 p9, t10 p10) \
|
||||
{ \
|
||||
SCOPED_LOCK(glLock); \
|
||||
if(!glhooks.m_HaveContextCreation) \
|
||||
return glhooks.GL.realfunc(p1, p2, p3, p4, p5, p6, p7, p8, p9, p10); \
|
||||
gl_CurChunk = GLChunk::function; \
|
||||
return glhooks.GetDriver()->realfunc(p1, p2, p3, p4, p5, p6, p7, p8, p9, p10); \
|
||||
}
|
||||
|
||||
#define HookAliasWrapper11(ret, function, realfunc, t1, p1, t2, p2, t3, p3, t4, p4, t5, p5, t6, \
|
||||
p6, t7, p7, t8, p8, t9, p9, t10, p10, t11, p11) \
|
||||
Hook<ret(WINAPI *)(t1, t2, t3, t4, t5, t6, t7, t8, t9, t10, t11)> CONCAT(function, _hook); \
|
||||
typedef ret(WINAPI *CONCAT(function, _hooktype))(t1, t2, t3, t4, t5, t6, t7, t8, t9, t10, t11); \
|
||||
static ret WINAPI CONCAT(function, _hooked)(t1 p1, t2 p2, t3 p3, t4 p4, t5 p5, t6 p6, t7 p7, \
|
||||
t8 p8, t9 p9, t10 p10, t11 p11) \
|
||||
{ \
|
||||
SCOPED_LOCK(glLock); \
|
||||
if(!glhooks.m_HaveContextCreation) \
|
||||
return glhooks.GL.realfunc(p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11); \
|
||||
gl_CurChunk = GLChunk::function; \
|
||||
return glhooks.GetDriver()->realfunc(p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11); \
|
||||
}
|
||||
|
||||
#define HookAliasWrapper12(ret, function, realfunc, t1, p1, t2, p2, t3, p3, t4, p4, t5, p5, t6, \
|
||||
p6, t7, p7, t8, p8, t9, p9, t10, p10, t11, p11, t12, p12) \
|
||||
Hook<ret(WINAPI *)(t1, t2, t3, t4, t5, t6, t7, t8, t9, t10, t11, t12)> CONCAT(function, _hook); \
|
||||
typedef ret(WINAPI *CONCAT(function, _hooktype))(t1, t2, t3, t4, t5, t6, t7, t8, t9, t10, t11, \
|
||||
t12); \
|
||||
static ret WINAPI CONCAT(function, _hooked)(t1 p1, t2 p2, t3 p3, t4 p4, t5 p5, t6 p6, t7 p7, \
|
||||
t8 p8, t9 p9, t10 p10, t11 p11, t12 p12) \
|
||||
{ \
|
||||
SCOPED_LOCK(glLock); \
|
||||
if(!glhooks.m_HaveContextCreation) \
|
||||
return glhooks.GL.realfunc(p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12); \
|
||||
gl_CurChunk = GLChunk::function; \
|
||||
return glhooks.GetDriver()->realfunc(p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12); \
|
||||
}
|
||||
|
||||
#define HookAliasWrapper13(ret, function, realfunc, t1, p1, t2, p2, t3, p3, t4, p4, t5, p5, t6, \
|
||||
p6, t7, p7, t8, p8, t9, p9, t10, p10, t11, p11, t12, p12, t13, p13) \
|
||||
Hook<ret(WINAPI *)(t1, t2, t3, t4, t5, t6, t7, t8, t9, t10, t11, t12, t13)> CONCAT(function, \
|
||||
_hook); \
|
||||
typedef ret(WINAPI *CONCAT(function, _hooktype))(t1, t2, t3, t4, t5, t6, t7, t8, t9, t10, t11, \
|
||||
t12, t13); \
|
||||
static ret WINAPI CONCAT(function, _hooked)(t1 p1, t2 p2, t3 p3, t4 p4, t5 p5, t6 p6, t7 p7, \
|
||||
t8 p8, t9 p9, t10 p10, t11 p11, t12 p12, t13 p13) \
|
||||
{ \
|
||||
SCOPED_LOCK(glLock); \
|
||||
if(!glhooks.m_HaveContextCreation) \
|
||||
return glhooks.GL.realfunc(p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13); \
|
||||
gl_CurChunk = GLChunk::function; \
|
||||
return glhooks.GetDriver()->realfunc(p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13); \
|
||||
}
|
||||
|
||||
#define HookAliasWrapper14(ret, function, realfunc, t1, p1, t2, p2, t3, p3, t4, p4, t5, p5, t6, \
|
||||
p6, t7, p7, t8, p8, t9, p9, t10, p10, t11, p11, t12, p12, t13, p13, \
|
||||
t14, p14) \
|
||||
Hook<ret(WINAPI *)(t1, t2, t3, t4, t5, t6, t7, t8, t9, t10, t11, t12, t13, t14)> CONCAT( \
|
||||
function, _hook); \
|
||||
typedef ret(WINAPI *CONCAT(function, _hooktype))(t1, t2, t3, t4, t5, t6, t7, t8, t9, t10, t11, \
|
||||
t12, t13, t14); \
|
||||
static ret WINAPI CONCAT(function, _hooked)(t1 p1, t2 p2, t3 p3, t4 p4, t5 p5, t6 p6, t7 p7, \
|
||||
t8 p8, t9 p9, t10 p10, t11 p11, t12 p12, t13 p13, \
|
||||
t14 p14) \
|
||||
{ \
|
||||
SCOPED_LOCK(glLock); \
|
||||
if(!glhooks.m_HaveContextCreation) \
|
||||
return glhooks.GL.realfunc(p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14); \
|
||||
gl_CurChunk = GLChunk::function; \
|
||||
return glhooks.GetDriver()->realfunc(p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, \
|
||||
p14); \
|
||||
}
|
||||
|
||||
#define HookAliasWrapper15(ret, function, realfunc, t1, p1, t2, p2, t3, p3, t4, p4, t5, p5, t6, \
|
||||
p6, t7, p7, t8, p8, t9, p9, t10, p10, t11, p11, t12, p12, t13, p13, \
|
||||
t14, p14, t15, p15) \
|
||||
Hook<ret(WINAPI *)(t1, t2, t3, t4, t5, t6, t7, t8, t9, t10, t11, t12, t13, t14, t15)> CONCAT( \
|
||||
function, _hook); \
|
||||
typedef ret(WINAPI *CONCAT(function, _hooktype))(t1, t2, t3, t4, t5, t6, t7, t8, t9, t10, t11, \
|
||||
t12, t13, t14, t15); \
|
||||
static ret WINAPI CONCAT(function, _hooked)(t1 p1, t2 p2, t3 p3, t4 p4, t5 p5, t6 p6, t7 p7, \
|
||||
t8 p8, t9 p9, t10 p10, t11 p11, t12 p12, t13 p13, \
|
||||
t14 p14, t15 p15) \
|
||||
{ \
|
||||
SCOPED_LOCK(glLock); \
|
||||
if(!glhooks.m_HaveContextCreation) \
|
||||
return glhooks.GL.realfunc(p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15); \
|
||||
gl_CurChunk = GLChunk::function; \
|
||||
return glhooks.GetDriver()->realfunc(p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, \
|
||||
p14, p15); \
|
||||
}
|
||||
|
||||
Threading::CriticalSection glLock;
|
||||
|
||||
|
||||
Reference in New Issue
Block a user