Multi-platform .NET bindings to the Ultralight project.
at master 2.6 kB view raw
1using System; 2using System.Diagnostics; 3using Silk.NET.OpenGLES; 4using Silk.NET.OpenGLES.Extensions.KHR; 5 6partial class Program { 7 8 private static KhrDebug? _dbg; 9 10 public static unsafe void EnableDebugExtension() { 11 if (!_gl.TryGetExtension(out KhrDebug dbg)) { 12 Console.Error.WriteLine("Can't enable GL_KHR_debug extension not present."); 13 Console.Error.Flush(); 14 return; 15 } 16 17 _gl.Enable(EnableCap.DebugOutput); 18 _gl.Enable(EnableCap.DebugOutputSynchronous); 19 20 Console.WriteLine("GL_KHR_debug extension enabled."); 21 22 dbg.DebugMessageCallback(DebugMessageHandler, default); 23 _dbg = dbg; 24 } 25 26 //private static unsafe void DebugMessageHandler(KHR source, KHR type, int id, KHR severity, int length, IntPtr message, IntPtr param) { 27 private static unsafe void DebugMessageHandler(KHR source, KHR type, int id, KHR severity, int length, IntPtr message, IntPtr param) { 28 var msg = new string((sbyte*) message, 0, length); 29 var fi = 2; 30 var cause = new StackFrame(fi, true); 31 while (cause.GetFileName() == null) 32 cause = new StackFrame(++fi, true); 33 34 var est = new StackTrace(cause); 35 36 var level = (DebugSeverity) severity; 37 var prefixedMsg = $"{level}: {type} ({id}): {msg}\n{est}"; 38 39 // ReSharper disable once SwitchStatementHandlesSomeKnownEnumValuesWithDefault 40 switch ((DebugType) type) { 41 case DebugType.DebugTypeUndefinedBehavior: 42 case DebugType.DebugTypeDeprecatedBehavior: 43 case DebugType.DebugTypeError: { 44 Console.Error.WriteLine(prefixedMsg); 45 Console.Error.Flush(); 46 //Debugger.Break(); 47 break; 48 } 49 default: { 50 // ReSharper disable once SwitchStatementMissingSomeEnumCasesNoDefault 51 switch (level) { 52 case DebugSeverity.DebugSeverityNotification: 53 Console.WriteLine(prefixedMsg); 54 break; 55 case DebugSeverity.DebugSeverityLow: 56 Console.WriteLine(prefixedMsg); 57 break; 58 case DebugSeverity.DebugSeverityMedium: 59 Console.Error.WriteLine(prefixedMsg); 60 Console.Error.Flush(); 61 break; 62 case DebugSeverity.DebugSeverityHigh: 63 Console.Error.WriteLine(prefixedMsg); 64 Console.Error.Flush(); 65 break; 66 default: 67 Console.Error.WriteLine(prefixedMsg); 68 break; 69 } 70 71 break; 72 } 73 case DebugType.DebugTypeMarker: 74 case DebugType.DebugTypePushGroup: 75 case DebugType.DebugTypePopGroup: { 76 Console.WriteLine(prefixedMsg); 77 break; 78 } 79 } 80 } 81 82}