diff --git a/OpenTK.sln b/OpenTK.sln index aee7aa30..37733420 100644 --- a/OpenTK.sln +++ b/OpenTK.sln @@ -1,7 +1,7 @@  Microsoft Visual Studio Solution File, Format Version 12.00 -# Visual Studio 14 -VisualStudioVersion = 14.0.25123.0 +# Visual Studio 15 +VisualStudioVersion = 15.0.27703.2000 MinimumVisualStudioVersion = 10.0.40219.1 Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Generator.Bind", "src\Generator.Bind\Generator.Bind.csproj", "{31D19132-0000-0000-0000-000000000000}" EndProject @@ -29,10 +29,10 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = ".paket", ".paket", "{F1A570 EndProject Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "project", "project", "{5EEEC96B-BD2F-45B0-935D-19E9E6D7D969}" ProjectSection(SolutionItems) = preProject + .gitignore = .gitignore build.fsx = build.fsx README.md = README.md RELEASE_NOTES.md = RELEASE_NOTES.md - .gitignore = .gitignore EndProjectSection EndProject Project("{F2A71F9B-5D33-465A-A702-920D77279786}") = "OpenTK.Tests", "tests\OpenTK.Tests\OpenTK.Tests.fsproj", "{6801C263-ADDA-4A7B-979D-649BCB5A1DF7}" @@ -43,6 +43,8 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "OpenTK.Tests.Math", "tests\ EndProject Project("{F2A71F9B-5D33-465A-A702-920D77279786}") = "OpenTK.Tests.Generators", "tests\OpenTK.Tests.Generators\OpenTK.Tests.Generators.fsproj", "{2B11AAEB-D8AC-4356-938F-532D720E0C30}" EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "OpenTK.Standard", "src\OpenTK\OpenTK.Standard.csproj", "{67F02FD3-8F7F-4D89-8551-359993271CA3}" +EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU @@ -97,6 +99,10 @@ Global {2B11AAEB-D8AC-4356-938F-532D720E0C30}.Debug|Any CPU.Build.0 = Debug|Any CPU {2B11AAEB-D8AC-4356-938F-532D720E0C30}.Release|Any CPU.ActiveCfg = Release|Any CPU {2B11AAEB-D8AC-4356-938F-532D720E0C30}.Release|Any CPU.Build.0 = Release|Any CPU + {67F02FD3-8F7F-4D89-8551-359993271CA3}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {67F02FD3-8F7F-4D89-8551-359993271CA3}.Debug|Any CPU.Build.0 = Debug|Any CPU + {67F02FD3-8F7F-4D89-8551-359993271CA3}.Release|Any CPU.ActiveCfg = Release|Any CPU + {67F02FD3-8F7F-4D89-8551-359993271CA3}.Release|Any CPU.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE @@ -107,4 +113,7 @@ Global {C2B07CD9-B388-4FC3-AF31-C648F7EA904E} = {1857BB8E-1A35-4EBF-9F6D-685F11DC025B} {2B11AAEB-D8AC-4356-938F-532D720E0C30} = {1857BB8E-1A35-4EBF-9F6D-685F11DC025B} EndGlobalSection + GlobalSection(ExtensibilityGlobals) = postSolution + SolutionGuid = {CFF5ADCD-8B5E-4C07-ACCA-304C81D4D839} + EndGlobalSection EndGlobal diff --git a/README.md b/README.md index 72938cbb..84d880a2 100644 --- a/README.md +++ b/README.md @@ -58,8 +58,8 @@ cd opentk # Enter the source directory ./build.sh # Build on Mono (Linux / Mac OS X) ``` -After this is done at least once, you can build OpenTK normally through -your IDE. +After this is done at least once, you can build OpenTK.Standard project normally through +your IDE. This fork is only for building opentk for .Net Standard, and not for .Net Framework. News ==== diff --git a/src/Generator.Rewrite/Options.cs b/src/Generator.Rewrite/Options.cs index 155a3abd..c53f3a90 100644 --- a/src/Generator.Rewrite/Options.cs +++ b/src/Generator.Rewrite/Options.cs @@ -35,5 +35,12 @@ namespace OpenTK.Rewrite [Option("dllimport", Default = false, HelpText = "Force native calls to use DllImport instead of GetProcAddress.")] public bool UseDLLImport { get; set; } + + /// + /// Toggles rewriting for NetStandard. + /// + [Option('n', "netstandard", Default = false, + HelpText = "Toggles rewriting for NetStandard.")] + public bool IsNetStandard { get; set; } } } diff --git a/src/Generator.Rewrite/Program.cs b/src/Generator.Rewrite/Program.cs index d0843901..f448b74f 100644 --- a/src/Generator.Rewrite/Program.cs +++ b/src/Generator.Rewrite/Program.cs @@ -55,6 +55,8 @@ namespace OpenTK.Rewrite program.Rewrite(); } + private static string GetCoreAssemblyName() => Options.IsNetStandard ? "netstandard" : "mscorlib"; + // mscorlib types private static AssemblyDefinition mscorlib; @@ -93,6 +95,21 @@ namespace OpenTK.Rewrite Console.Error.WriteLine("No keyfile specified or keyfile missing."); } + if (Options.IsNetStandard) + { + DefaultAssemblyResolver resolver = new DefaultAssemblyResolver(); + string searchPath = GetNetstandardRefPath(); + if (!Directory.Exists(searchPath)) + { + Console.Error.WriteLine( + "Could not locate .NET Standard reference assemblies. This is necessary for binary rewriting to proceed."); + return; + } + + resolver.AddSearchDirectory(searchPath); + read_params.AssemblyResolver = resolver; + } + // Load assembly and process all modules try { @@ -108,7 +125,7 @@ namespace OpenTK.Rewrite try { var resolved = module.AssemblyResolver.Resolve(reference); - if (reference.Name == "mscorlib") + if (reference.Name == GetCoreAssemblyName()) { mscorlib = resolved; } @@ -122,7 +139,7 @@ namespace OpenTK.Rewrite if (mscorlib == null) { - Console.Error.WriteLine("Failed to locate mscorlib"); + Console.Error.WriteLine("Failed to locate " + GetCoreAssemblyName()); return; } TypeMarshal = mscorlib.MainModule.GetType("System.Runtime.InteropServices.Marshal"); @@ -1073,5 +1090,18 @@ namespace OpenTK.Rewrite { il.Emit(OpCodes.Call, reference); } + + private string GetNetstandardRefPath() + { + return Path.Combine( + Environment.GetFolderPath(Environment.SpecialFolder.UserProfile), + ".nuget", + "packages", + "netstandard.library", + "2.0.1", + "build", + "netstandard2.0", + "ref"); + } } } diff --git a/src/OpenTK/Graphics/ES20/Helper.cs b/src/OpenTK/Graphics/ES20/Helper.cs index 59905173..70330e1a 100644 --- a/src/OpenTK/Graphics/ES20/Helper.cs +++ b/src/OpenTK/Graphics/ES20/Helper.cs @@ -340,7 +340,7 @@ namespace OpenTK.Graphics.ES20 { GL.Viewport(0, 0, size.Width, size.Height); } - +#if !MINIMAL public static void Viewport(Point location, Size size) { GL.Viewport(location.X, location.Y, size.Width, size.Height); @@ -350,7 +350,7 @@ namespace OpenTK.Graphics.ES20 { GL.Viewport(rectangle.X, rectangle.Y, rectangle.Width, rectangle.Height); } -#if MINIMAL +#else public static void Viewport(OpenTK.Point location, OpenTK.Size size) { GL.Viewport(location.X, location.Y, size.Width, size.Height); diff --git a/src/OpenTK/Graphics/ES30/Helper.cs b/src/OpenTK/Graphics/ES30/Helper.cs index b26975a7..c2a98381 100644 --- a/src/OpenTK/Graphics/ES30/Helper.cs +++ b/src/OpenTK/Graphics/ES30/Helper.cs @@ -335,7 +335,7 @@ namespace OpenTK.Graphics.ES30 { GL.Viewport(0, 0, size.Width, size.Height); } - +#if !MINIMAL public static void Viewport(Point location, Size size) { GL.Viewport(location.X, location.Y, size.Width, size.Height); @@ -345,7 +345,7 @@ namespace OpenTK.Graphics.ES30 { GL.Viewport(rectangle.X, rectangle.Y, rectangle.Width, rectangle.Height); } -#if MINIMAL +#else public static void Viewport(OpenTK.Point location, OpenTK.Size size) { GL.Viewport(location.X, location.Y, size.Width, size.Height); diff --git a/src/OpenTK/Graphics/OpenGL/GLHelper.cs b/src/OpenTK/Graphics/OpenGL/GLHelper.cs index 7d9f283a..e8887b14 100644 --- a/src/OpenTK/Graphics/OpenGL/GLHelper.cs +++ b/src/OpenTK/Graphics/OpenGL/GLHelper.cs @@ -2772,7 +2772,7 @@ namespace OpenTK.Graphics.OpenGL } } } - +#if MINIMAL /// /// [requires: v1.0] /// Set the viewport. This function assumes a lower left corner of (0, 0). @@ -2814,7 +2814,7 @@ namespace OpenTK.Graphics.OpenGL { GL.Viewport(rectangle.X, rectangle.Y, rectangle.Width, rectangle.Height); } -#if MINIMAL +#else /// /// [requires: v1.0] /// Set the viewport. diff --git a/src/OpenTK/Graphics/OpenGL4/Helper.cs b/src/OpenTK/Graphics/OpenGL4/Helper.cs index 4cc6d600..f2ead011 100644 --- a/src/OpenTK/Graphics/OpenGL4/Helper.cs +++ b/src/OpenTK/Graphics/OpenGL4/Helper.cs @@ -411,7 +411,7 @@ namespace OpenTK.Graphics.OpenGL4 { GL.Viewport(0, 0, size.Width, size.Height); } - +#if !MINIMAL public static void Viewport(Point location, Size size) { GL.Viewport(location.X, location.Y, size.Width, size.Height); @@ -421,7 +421,7 @@ namespace OpenTK.Graphics.OpenGL4 { GL.Viewport(rectangle.X, rectangle.Y, rectangle.Width, rectangle.Height); } -#if MINIMAL +#else public static void Viewport(OpenTK.Point location, OpenTK.Size size) { GL.Viewport(location.X, location.Y, size.Width, size.Height); diff --git a/src/OpenTK/OpenTK.Standard.csproj b/src/OpenTK/OpenTK.Standard.csproj new file mode 100644 index 00000000..a6edc1cd --- /dev/null +++ b/src/OpenTK/OpenTK.Standard.csproj @@ -0,0 +1,99 @@ + + + OpenTK + netstandard2.0 + OpenTK + $(DefineConstants);WIN32;CARBON;X11;SDL2;OPENGL;OPENGLES;MINIMAL + + + True + 285212672 + + + bin\Debug\OpenTK.xml + 4096 + False + bin\Debug\ + False + False + 4 + True + full + + + True + 285212672 + + + bin\Release\OpenTK.xml + 4096 + True + bin\Release\ + False + False + 4 + True + pdbonly + + + True + + + ..\..\OpenTK.snk + + + + + + + + + + + + + + + + + + + + + stylecop.json + + + stylecop.ruleset + + + + true + 1.0.1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/OpenTK/Platform/Windows/WinGLNative.cs b/src/OpenTK/Platform/Windows/WinGLNative.cs index a5714c27..d2eebd88 100644 --- a/src/OpenTK/Platform/Windows/WinGLNative.cs +++ b/src/OpenTK/Platform/Windows/WinGLNative.cs @@ -44,8 +44,11 @@ namespace OpenTK.Platform.Windows { private const ExtendedWindowStyle ParentStyleEx = ExtendedWindowStyle.WindowEdge | ExtendedWindowStyle.ApplicationWindow; private const ExtendedWindowStyle ChildStyleEx = 0; - +#if NETSTANDARD + private readonly IntPtr Instance = Functions.GetModuleHandle(typeof(WinGLNative).Module.Name); +#else private readonly IntPtr Instance = Marshal.GetHINSTANCE(typeof(WinGLNative).Module); +#endif private readonly IntPtr ClassName = Marshal.StringToHGlobalAuto(Guid.NewGuid().ToString()); private readonly WindowProcedure WindowProcedureDelegate; @@ -1240,11 +1243,15 @@ namespace OpenTK.Platform.Windows } } } - +#if !NETSTANDARD Debug.Assert(oldCursorHandle != IntPtr.Zero); Debug.Assert(oldCursorHandle != cursor_handle); Debug.Assert(oldCursor != cursor); - +#else + System.Diagnostics.Debug.Assert(oldCursorHandle != IntPtr.Zero); + System.Diagnostics.Debug.Assert(oldCursorHandle != cursor_handle); + System.Diagnostics.Debug.Assert(oldCursor != cursor); +#endif // If we've replaced a custom (non-default) cursor we need to free the handle. if (oldCursor != MouseCursor.Default) {