private unsafe void DestroyDebugReportCallback()
 {
     _debugCallbackFunction = null;
     if (_debugCallbackHandle != VkDebugReportCallbackEXT.Null)
     {
         var destroyFunctionPtr = VulkanNative.vkGetInstanceProcAddr(
             _handle,
             new FixedUtf8String("vkDestroyDebugReportCallbackEXT")
             );
         var destroyDelegate = Marshal.GetDelegateForFunctionPointer <vkDestroyDebugReportCallbackEXT_d>(
             destroyFunctionPtr
             );
         destroyDelegate(
             _handle,
             _debugCallbackHandle,
             null
             );
         _debugCallbackHandle = VkDebugReportCallbackEXT.Null;
     }
 }
Esempio n. 2
0
        //IntPtr ptrCallback;
        private void InitDebugCallback(VkInstance instance)
        {
            var delDebugCallback = new PFN_vkDebugReportCallbackEXT(DebugCallback);
            //var info = new VkDebugReportCallbackCreateInfoEXT { sType = VkStructureType.DebugReportCallbackCreateInfoEXT };
            VkDebugReportCallbackCreateInfoEXT info;

            info.sType = VkStructureType.DebugReportCallbackCreateInfoEXT;
            info.flags = VkDebugReportFlagBitsEXT.DebugEXT | VkDebugReportFlagBitsEXT.ErrorEXT
                         | VkDebugReportFlagBitsEXT.PerformanceWarningEXT | VkDebugReportFlagBitsEXT.WarningEXT
                         | VkDebugReportFlagBitsEXT.InformationEXT;
            var ptrCallback = Marshal.GetFunctionPointerForDelegate(delDebugCallback);

            info.pfnCallback = ptrCallback;

            VkDebugReportCallbackEXT callback;

            vkAPI.CreateDebugReportCallbackEXT(instance, &info, null, &callback).Check();
            // or: instance.CreateDebugReportCallbackEXT(&info, null, &callback).Check();
            this.debugReportcallback = callback;
        }
        internal DebugReportCallbackExt(VkInstance parent, VkDebugReportFlagsEXT flags,
                                        Func <DebugReportCallbackInfo, bool> callback, IntPtr userData = default(IntPtr))
        {
            Parent = parent;

            Func <DebugReportCallbackInfo, bool> createInfoCallback = callback;
            IntPtr callbackHandle = IntPtr.Zero;

            if (createInfoCallback != null)
            {
                _callback = (flags, objectType, @object, location, messageCode, layerPrefix, message, userData)
                            => createInfoCallback(new DebugReportCallbackInfo
                {
                    Flags       = flags,
                    ObjectType  = objectType,
                    Object      = @object,
                    Location    = location,
                    MessageCode = messageCode,
                    LayerPrefix = Utilities.FromPointer(layerPrefix),
                    Message     = Utilities.FromPointer(message),
                    UserData    = userData
                });
                callbackHandle = Marshal.GetFunctionPointerForDelegate(_callback);
            }

            var nativeCreateInfo = new VkDebugReportCallbackCreateInfoEXT
            {
                sType       = VkStructureType.DebugReportCallbackCreateInfoEXT,
                flags       = flags,
                pfnCallback = callbackHandle,
                pUserData   = (void *)userData
            };

            long     handle;
            VkResult result = vkCreateDebugReportCallbackEXT(Parent)(Parent.Handle, &nativeCreateInfo, null, &handle);

            this.handle = (ulong)handle;
        }
Esempio n. 4
0
 public static extern void DestroyDebugReportCallbackEXT(
     VkInstance instance,
     VkDebugReportCallbackEXT callback,
     IntPtr pAllocator
     );
Esempio n. 5
0
 public static extern VkResult CreateDebugReportCallbackEXT(
     VkInstance instance,
     ref VkDebugReportCallbackCreateInfoEXT pCreateInfo,
     IntPtr pAllocator,
     out VkDebugReportCallbackEXT pCallback
     );
Esempio n. 6
0
 public void DestroyDebugReportCallback(VkDebugReportCallbackEXT callback)
 {
     m_ReportCallbacks.Remove(callback);
 }
Esempio n. 7
0
 public VkResult CreateDebugReportCallback(VkDebugReportCallbackCreateInfoEXT pCreateInfo, out VkDebugReportCallbackEXT pCallback)
 {
     pCallback = new VkDebugReportCallbackEXT(this, pCreateInfo);
     m_ReportCallbacks.Add(pCallback);
     return(VkResult.VK_SUCCESS);
 }