1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28
|
delegate int Tdelegate_callback_OnDraw3d(IntPtr param);
delegate int Tdelegate_callback_OnCapture(IntPtr param, bool clicked,IntPtr v);
static Tdelegate_e3d_Init delegate_e3d_Init;
internal static int e3d_Init(byte[] vertexsource, byte[] fragmentsource, IntPtr param, Func<IntPtr,int> draw3d, Func<IntPtr,bool,pvect?,int> hint)
{
Tdelegate_callback_OnDraw3d ddraw3d = new Tdelegate_callback_OnDraw3d((o) =>
{
return draw3d(o); //appel toujours code manager
}
);
Tdelegate_callback_OnCapture dcapture = new Tdelegate_callback_OnCapture((o,a, b) =>
{
pvect? v = null;
if (b!=IntPtr.Zero)
v=(pvect)Marshal.PtrToStructure(b, typeof(pvect));
return hint(o,a, v); //appel toujours code manager
}
);
IntPtr ptrdraw3d = Marshal.GetFunctionPointerForDelegate(ddraw3d);
IntPtr ptrhint = Marshal.GetFunctionPointerForDelegate(dcapture);
return delegate_e3d_Init(vertexsource, fragmentsource, param, ptrdraw3d, ptrhint); //appel code non managé
} |
Partager