public OpenTKWindow(UInt16 width, UInt16 height, GameWindowFlags window, DisplayDevice display, Renderer.RenderAPI render) : this(width, height, window, display, render, 3, 3) { if (render.Equals(Renderer.RenderAPI.OpenGL)) { Console.WriteLine("OpenGL renderer chosen but no version providen, assuming version 3.3."); //NOTE: DX10, programmable pipeline, might look into fixed since that seems fun as well this.Load += Renderer.Initialize_OpenGL; } Renderer.Initialize(this, render); }
public OpenTKWindow(UInt16 width, UInt16 height, GameWindowFlags window, DisplayDevice display, Renderer.RenderAPI render, UInt16 major, UInt16 minor) : base(width, height, GraphicsMode.Default, "Engine", window, display, major, minor, GraphicsContextFlags.ForwardCompatible) { if (!render.Equals(Renderer.RenderAPI.OpenGL)) { throw new Exception("Failure while requesting renderer."); } else if (major < 3 || (major == 3 && minor < 3)) { throw new Exception("Requested version of OpenGL is not supported, minimum is 3.3."); //We don't deal with legacy for now } else { this.Load += Renderer.Initialize_OpenGL; Renderer.Initialize(this, Renderer.RenderAPI.OpenGL); } }
//TODO: Separate? public static void ParseArguments(String[] args, out Resolution res, out Renderer.RenderAPI renderer, out Byte major, out Byte minor) { //Defaults renderer = Renderer.RenderAPI.Software; major = 0; minor = 0; res.Width = 640; res.Height = 480; res.Depth = 16; res.RefreshRate = 60; ushort currentArg = 0; foreach (string arg in args) { if (currentArg + 1 == args.Length) { break; } String nextArg = args[currentArg + 1]; if (arg[0].Equals('-')) { switch (arg.TrimStart('-')) { case "game": gameModule = ModuleLoader.LoadModuleAndExtractClass(nextArg, "Main"); break; case "render": /*switch (nextArg) * { * case var i when i.StartsWith("opengl"): * break; * }*/ //hack: maybe change to switch? if (nextArg.StartsWith("opengl")) { renderer = Renderer.RenderAPI.OpenGL; String version = nextArg.Substring(6); major = Byte.Parse(version[0].ToString()); minor = Byte.Parse(version[1].ToString()); } else if (nextArg.StartsWith("vulkan")) { renderer = Renderer.RenderAPI.Vulkan; } else if (nextArg.StartsWith("dx")) { renderer = Renderer.RenderAPI.DirectX; String version = nextArg.Substring(2); major = Byte.Parse(version); } else if (nextArg.StartsWith("soft")) { renderer = Renderer.RenderAPI.Software; } else { throw new Exception("Invalid renderer."); } break; case "res": String[] resString = nextArg.Split(new Char[2] { 'x', '@' }); if (resString.Length != 4) { break; } bool validResolution = false; Resolution requestedResolution = new Resolution { Width = ushort.Parse(resString[0]), Height = ushort.Parse(resString[1]), Depth = ushort.Parse(resString[2]), RefreshRate = ushort.Parse(resString[3]) }; foreach (DisplayResolution testedResolution in displayDevice.AvailableResolutions) { /*bool w = false; * bool h = false; * bool d = false; * bool r = false; * bool rf = false; * UInt16 re = (UInt16)testedResolution.RefreshRate;*/ if (requestedResolution.Width.Equals(Convert.ToUInt16(testedResolution.Width)) || requestedResolution.Height.Equals(Convert.ToUInt16(testedResolution.Height)) || requestedResolution.Depth.Equals(Convert.ToUInt16(testedResolution.BitsPerPixel)) || requestedResolution.RefreshRate.Equals(Convert.ToUInt16(testedResolution.RefreshRate))) //if (requestedResolution.width.Equals(testedResolution.Width) && requestedResolution.height.Equals(testedResolution.Height) && requestedResolution.depth.Equals(testedResolution.BitsPerPixel) && requestedResolution.refresh.Equals((UInt16)testedResolution.RefreshRate)) { validResolution = true; res.Width = requestedResolution.Width; res.Height = requestedResolution.Height; res.Depth = requestedResolution.Depth; res.RefreshRate = requestedResolution.RefreshRate; } if (validResolution) { break; } } if (!validResolution) { throw new Exception("Invalid resolution."); } break; default: break; } } currentArg++; } }