private static IntPtr Create(uint width, uint height, TextureRenderCallback callback, object user) { int callbackId = CallbackId++; _callbacks[callbackId] = callback; IntPtr userPtr = Noesis.Extend.GetInstanceHandle(user).Handle; return(DynamicTextureSource_Create(width, height, callbackId, _removeCallback, _renderCallback, userPtr)); }
private static IntPtr OnTextureRender(int callbackId, IntPtr devicePtr, IntPtr userPtr) { try { if (Noesis.Extend.Initialized) { TextureRenderCallback callback = _callbacks[callbackId]; RenderDevice device = (RenderDevice)Noesis.Extend.GetProxy(devicePtr, false); object user = Noesis.Extend.GetProxy(userPtr, false); Texture texture = callback(device, user); return(Noesis.Extend.GetInstanceHandle(texture).Handle); } } catch (Exception e) { Error.UnhandledException(e); } return(IntPtr.Zero); }
public DynamicTextureSource(uint width, uint height, TextureRenderCallback callback, object user) : base(Create(width, height, callback, user), true) { }