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