private static void DebugCallbackThunk(UInt32 source, UInt32 type, UInt32 id, UInt32 severity, Int32 length, IntPtr message, IntPtr userParam)
        {
            var messageString = Marshal.PtrToStringAnsi(message, length);
            var messageLevel  = DebugLevels.Info;

            switch (severity)
            {
            case gl.DEBUG_SEVERITY_MEDIUM:
                messageLevel = DebugLevels.Warning;
                break;

            case gl.DEBUG_SEVERITY_HIGH:
                messageLevel = DebugLevels.Error;
                break;
            }

            var uv = UltravioletContext.RequestCurrent();

            if (uv == null)
            {
                return;
            }

            var gfx = uv.GetGraphics() as OpenGLUltravioletGraphics;

            if (gfx == null)
            {
                return;
            }

            gfx.debugCallback?.Invoke(uv, messageLevel, messageString);
        }
Esempio n. 2
0
 protected UltravioletContext Foo(Func <UltravioletContext> uv)
 {
     try
     {
         return(uv());
     }
     catch
     {
         var current = UltravioletContext.RequestCurrent();
         if (current != null)
         {
             current.Dispose();
         }
         throw;
     }
 }
Esempio n. 3
0
        /// <summary>
        /// Initializes the singleton resource.
        /// </summary>
        private void InitializeResource()
        {
            var uv = UltravioletContext.RequestCurrent();

            if (uv == null)
            {
                return;
            }

            if (resource == null || resource.Ultraviolet != uv)
            {
                if (ShouldInitializeResource(uv))
                {
                    resource = initializer(uv);
                }
            }
        }
Esempio n. 4
0
        /// <summary>
        /// Initializes a new instance of the <see cref="UltravioletSingleton{T}"/> class.
        /// </summary>
        /// <param name="flags">A set of flags which modify the singleton's behavior.</param>
        /// <param name="initializer">A function which initializes a new instance of the bound resource.</param>
        public UltravioletSingleton(UltravioletSingletonFlags flags, Func <UltravioletContext, T> initializer)
        {
            Contract.Require(initializer, nameof(initializer));

            this.flags       = flags;
            this.initializer = initializer;

            var uv = UltravioletContext.RequestCurrent();

            if (uv != null && uv.IsInitialized && ShouldInitializeResource(uv))
            {
                resource = initializer(uv);
            }

            UltravioletContext.ContextInitialized += UltravioletContext_ContextInitialized;
            UltravioletContext.ContextInvalidated += UltravioletContext_ContextInvalidated;
        }