Exemple #1
0
        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 + "'");
            }
        }
Exemple #2
0
 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());
     }
 }
Exemple #3
0
 public static IBinaryMessage Compose(OpenGlVersion openGlVersion)
 {
     return(BinaryMessage.Compose(Type, writer =>
     {
         writer.Write(openGlVersion.GlVersion);
         writer.Write(openGlVersion.GlVendor);
         writer.Write(openGlVersion.GlRenderer);
     }));
 }
Exemple #4
0
        /// <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
        }