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)
{