public static IEnumerable <string> GetLogMessages(OpenGlVersion glVersion, IReport report) { yield return("OpenGL Version: " + glVersion.GlVersion + "\n"); yield return("OpenGL Vendor: " + glVersion.GlVendor + "\n"); yield return("OpenGL Renderer: " + glVersion.GlRenderer + "\n"); var version = glVersion.ToVersion(); if (version.HasValue) { if (!version.Value.IsSupported()) { var message = "Error: The required OpenGL version is " + MinimumVersion + ", your computer reports '" + glVersion.GlVersion + "'"; report.Error(message, ReportTo.Log); yield return(message); } } else { report.Warn("OpenGL parsing error: '" + glVersion.GlVersion + "'", ReportTo.Headquarters | ReportTo.Log); yield return("Warning: Failed to detect OpenGL version. The required version is " + MinimumVersion + ", your computer reports '" + glVersion.GlVersion + "'"); } }
public static Optional <Version> ToVersion(this OpenGlVersion version) { try { const string bol = "^"; const string optionalSpace = @"\s*"; const string firstAndSecondComponent = @"([0-9])+\.([0-9])+"; const string optionalThirdComponent = @"(\.([0-9])+)?"; const string optionalStringIfStartingWithSpace = @"(\s.*)?"; const string eol = "$"; var pattern = bol + optionalSpace + firstAndSecondComponent + optionalThirdComponent + optionalStringIfStartingWithSpace + eol; var regex = new Regex(pattern); var match = regex.Match(version.GlVersion); var major = int.Parse(match.Groups[1].Value); var minor = int.Parse(match.Groups[2].Value); return(new Version(major, minor)); } catch (Exception) { return(Optional.None()); } }
public static IBinaryMessage Compose(OpenGlVersion openGlVersion) { return(BinaryMessage.Compose(Type, writer => { writer.Write(openGlVersion.GlVersion); writer.Write(openGlVersion.GlVendor); writer.Write(openGlVersion.GlRenderer); })); }
/// <summary>Load some diagnostic properties in advance, such as OpenGL info, because they cant be queried if the game window crashes.</summary> public static void LoadDiagnosticProperties() { OpenGlVersion = GL.GetString(StringName.Version); OpenGlVendor = GL.GetString(StringName.Vendor); OpenGlGlsl = GL.GetString(StringName.ShadingLanguageVersion); OpenGlRenderer = GL.GetString(StringName.Renderer); OpenGlExtensions = new List <string>(GL.GetString(StringName.Extensions).Split(' ')); int major, minor; GL.GetInteger(GetPName.MajorVersion, out major); GL.GetInteger(GetPName.MinorVersion, out minor); if (major == 0) //this can happen on older comps / OpenGL versions (KNIGHT for example running OpenGL 2.1), so we need to parse the major/minor from the version string { var args = OpenGlVersion.Split('.'); if (args.Length < 2) { throw new Exception("Unable to determine OpenGL from version string: " + OpenGlVersion); } major = int.Parse(args[0]); minor = int.Parse(args[1]); } if (major <= REQUIRED_GL_VERSION_MAJOR && minor < REQUIRED_GL_VERSION_MINOR) { throw new Exception(string.Format("OpenGL version {0}.{1} is required. You are running OpenGL version {2}.{3} This probably means you are using an outdated video card driver.", REQUIRED_GL_VERSION_MAJOR, REQUIRED_GL_VERSION_MINOR, major, minor)); } if (!SupportsVertexBufferObjectExtension) { throw new Exception("Vertex Buffer Object (VBO) extension is not supported. This probably means you are using an outdated video card driver."); //its redundant to check for this if we require OpenGL 1.5, however leaving here in case we lower our required version } if (!SupportsTextureNonPowerOfTwoExtension) { throw new Exception("Texture Non Power Of Two (NPOT) extension is not supported. This probably means you are using an outdated video card driver."); //its redundant to check for this if we require OpenGL 2.0, however leaving here in case we lower our required version } Debug.WriteLineIf(Config.ViewDistance == ViewDistance.Extreme, "Warning: Using Extreme view distance"); //reminder for testing, performance can be greatly impacted }