Merge branch 'develop' into fscheck_testing

Conflicts:
	paket.lock
This commit is contained in:
varon 2017-05-31 14:08:32 +02:00
commit 83e0175a9f
30 changed files with 1816 additions and 433 deletions

View file

@ -54,6 +54,14 @@ cd opentk # Enter the source directory
News News
==== ====
### 2017-05-08
A pre-release package is available.
https://www.nuget.org/packages/OpenTK/3.0.0-pre
https://www.nuget.org/packages/OpenTK.GLControl/3.0.0-pre
### 2016-09-23 ### 2016-09-23
OpenTK 2.0.0 is now available for download from [Nuget](https://www.nuget.org/packages/OpenTK/2.0.0). OpenTK 2.0.0 is now available for download from [Nuget](https://www.nuget.org/packages/OpenTK/2.0.0).

View file

@ -1,4 +1,21 @@
### 2.0.0 - alpha ### 3.0.0-pre
* Replaced JoystickButton enum with simple long. (breaking API change)
* Increase available joystick buttons to 64.
* Add support for OpenGL ES3 through Angle + DIrect3D.
* Fix 2 crashes on android
* Move to built-in System.Diagnostics.Debug for Android + iOS
* Fix for certain joysticks returning invalid HID pages.
* Fix for certain joysticks with negative axis range being inverted.
* Fix Xbox controller D-pad on windows
* Fix joystick hat position sticking on Linux
* Enhance xbox button detection to include GUIDE button.
* Fix iOS GL bindings issue introduced by 2ea8334
* Fix crash on setting time to <= 0 for iOS + Android.
* Several minor XML documentation fixes and enhancements
* Fix for angle backbuffer size issue on window resize
* Possible fix for broken GLControl package.
### 2.0.0
* Moved to new FAKE/Paket based build system * Moved to new FAKE/Paket based build system
* Removed superfluous release configurations * Removed superfluous release configurations
* Numerous other fixes and enhancements * Numerous other fixes and enhancements

View file

@ -8,5 +8,5 @@ nuget FsCheck.Xunit
nuget xunit.runner.console nuget xunit.runner.console
nuget xunit.assert nuget xunit.assert
nuget FAKE nuget FAKE
nuget Mono.Cecil nuget Mono.Cecil >= 0.10.0-beta1
nuget GtkSharp nuget GtkSharp

View file

@ -1,27 +1,64 @@
NUGET NUGET
remote: https://www.nuget.org/api/v2 remote: https://www.nuget.org/api/v2
FAKE (4.28) FAKE (4.61.2)
FsCheck (2.8) FsCheck (2.9)
FSharp.Core (>= 3.1.2.5) FSharp.Core (>= 4.1) - framework: >= net10, netstandard10, netstandard11, netstandard12, netstandard13, netstandard14, netstandard15
FsCheck.Xunit (2.8) FSharp.Core (>= 4.1.17) - framework: >= netstandard16
FsCheck (>= 2.8) NETStandard.Library (>= 1.6.1) - framework: >= netstandard16
xunit.extensibility.execution (>= 2.2 < 3.0) FsCheck.Xunit (2.9)
FsCheck (>= 2.9)
FSharp.Core (>= 4.1.17) - framework: >= netstandard16
NETStandard.Library (>= 1.6.1) - framework: >= netstandard16
xunit.abstractions (>= 2.0.1) - framework: >= netstandard16
xunit.core (>= 2.2) - framework: >= netstandard16
xunit.extensibility.execution (>= 2.2 < 3.0) - framework: >= net10, netstandard10, netstandard11, netstandard12, netstandard13, netstandard14, netstandard15
FSharp.Compiler.Service (2.0.0.6) FSharp.Compiler.Service (2.0.0.6)
FSharp.Core (4.0.0.1) FSharp.Core (4.1.17) - framework: >= net10, >= netstandard10
System.Collections (>= 4.0.11) - framework: >= netstandard16
System.Console (>= 4.0) - framework: >= netstandard16
System.Diagnostics.Debug (>= 4.0.11) - framework: >= netstandard16
System.Diagnostics.Tools (>= 4.0.1) - framework: >= netstandard16
System.Globalization (>= 4.0.11) - framework: >= netstandard16
System.IO (>= 4.1) - framework: >= netstandard16
System.Linq (>= 4.1) - framework: >= netstandard16
System.Linq.Expressions (>= 4.1) - framework: >= netstandard16
System.Linq.Queryable (>= 4.0.1) - framework: >= netstandard16
System.Net.Requests (>= 4.0.11) - framework: >= netstandard16
System.Reflection (>= 4.1) - framework: >= netstandard16
System.Reflection.Extensions (>= 4.0.1) - framework: >= netstandard16
System.Resources.ResourceManager (>= 4.0.1) - framework: >= netstandard16
System.Runtime (>= 4.1) - framework: >= netstandard16
System.Runtime.Extensions (>= 4.1) - framework: >= netstandard16
System.Runtime.Numerics (>= 4.0.1) - framework: >= netstandard16
System.Text.RegularExpressions (>= 4.1) - framework: >= netstandard16
System.Threading (>= 4.0.11) - framework: >= netstandard16
System.Threading.Tasks (>= 4.0.11) - framework: >= netstandard16
System.Threading.Tasks.Parallel (>= 4.0.1) - framework: >= netstandard16
System.Threading.Thread (>= 4.0) - framework: >= netstandard16
System.Threading.ThreadPool (>= 4.0.10) - framework: >= netstandard16
System.Threading.Timer (>= 4.0.1) - framework: >= netstandard16
FSharp.Formatting (2.14.4) FSharp.Formatting (2.14.4)
FSharp.Compiler.Service (2.0.0.6) FSharp.Compiler.Service (2.0.0.6)
FSharpVSPowerTools.Core (>= 2.3 < 2.4) FSharpVSPowerTools.Core (>= 2.3 < 2.4)
FSharpVSPowerTools.Core (2.3) FSharpVSPowerTools.Core (2.3)
FSharp.Compiler.Service (>= 2.0.0.3) FSharp.Compiler.Service (>= 2.0.0.3)
GtkSharp (3.1.3) GtkSharp (3.1.3)
Microsoft.NETCore.Platforms (1.1) - framework: >= net452, dnxcore50, >= netstandard11, netstandard12, netstandard13, netstandard14 Microsoft.NETCore.Platforms (1.1) - framework: >= net10, >= netstandard11, netstandard12, netstandard13, netstandard14, netstandard15
Microsoft.NETCore.Targets (1.1) - framework: >= net452, dnxcore50, >= netstandard11, netstandard12, netstandard13, netstandard14 Microsoft.NETCore.Targets (1.1) - framework: >= net10, >= netstandard11, netstandard12, netstandard13, netstandard14, netstandard15
Microsoft.Win32.Primitives (4.3) - framework: >= net452, >= netstandard13 Microsoft.Win32.Primitives (4.3) - framework: >= net10, >= netstandard13, netstandard14, netstandard15
Microsoft.NETCore.Platforms (>= 1.1) - framework: >= netstandard13 Microsoft.NETCore.Platforms (>= 1.1) - framework: >= netstandard13
Microsoft.NETCore.Targets (>= 1.1) - framework: >= netstandard13 Microsoft.NETCore.Targets (>= 1.1) - framework: >= netstandard13
System.Runtime (>= 4.3) - framework: >= netstandard13 System.Runtime (>= 4.3) - framework: >= netstandard13
Mono.Cecil (0.9.6.1) Mono.Cecil (0.10.0-beta6)
NETStandard.Library (1.6.1) - framework: >= net452, >= netstandard11 System.Collections (>= 4.0.11) - framework: >= netstandard13
System.IO.FileSystem (>= 4.0.1) - framework: >= netstandard13
System.IO.FileSystem.Primitives (>= 4.0.1) - framework: >= netstandard13
System.Reflection (>= 4.1) - framework: >= netstandard13
System.Runtime.Extensions (>= 4.1) - framework: >= netstandard13
System.Security.Cryptography.Algorithms (>= 4.2) - framework: >= netstandard13
System.Security.Cryptography.Csp (>= 4.0) - framework: >= netstandard13
System.Threading (>= 4.0.11) - framework: >= netstandard13
NETStandard.Library (1.6.1) - framework: >= net10, >= netstandard11, netstandard12, netstandard13, netstandard14, netstandard15
Microsoft.NETCore.Platforms (>= 1.1) - framework: >= netstandard10 Microsoft.NETCore.Platforms (>= 1.1) - framework: >= netstandard10
Microsoft.Win32.Primitives (>= 4.3) - framework: >= net46, >= netstandard13 Microsoft.Win32.Primitives (>= 4.3) - framework: >= net46, >= netstandard13
System.AppContext (>= 4.3) - framework: >= net46, >= netstandard13 System.AppContext (>= 4.3) - framework: >= net46, >= netstandard13
@ -66,52 +103,52 @@ NUGET
System.Threading.Timer (>= 4.3) - framework: >= net451, >= netstandard12 System.Threading.Timer (>= 4.3) - framework: >= net451, >= netstandard12
System.Xml.ReaderWriter (>= 4.3) - framework: >= netstandard10 System.Xml.ReaderWriter (>= 4.3) - framework: >= netstandard10
System.Xml.XDocument (>= 4.3) - framework: >= netstandard10 System.Xml.XDocument (>= 4.3) - framework: >= netstandard10
runtime.debian.8-x64.runtime.native.System.Security.Cryptography.OpenSsl (4.3) - framework: >= net452, >= netstandard13, netstandard14 runtime.debian.8-x64.runtime.native.System.Security.Cryptography.OpenSsl (4.3.1) - framework: >= net10, >= netstandard13, netstandard14, netstandard15
runtime.fedora.23-x64.runtime.native.System.Security.Cryptography.OpenSsl (4.3) - framework: >= net452, >= netstandard13, netstandard14 runtime.fedora.23-x64.runtime.native.System.Security.Cryptography.OpenSsl (4.3.1) - framework: >= net10, >= netstandard13, netstandard14, netstandard15
runtime.fedora.24-x64.runtime.native.System.Security.Cryptography.OpenSsl (4.3) - framework: >= net452, >= netstandard13, netstandard14 runtime.fedora.24-x64.runtime.native.System.Security.Cryptography.OpenSsl (4.3.1) - framework: >= net10, >= netstandard13, netstandard14, netstandard15
runtime.native.System (4.3) - framework: >= net452, >= netstandard11 runtime.native.System (4.3) - framework: >= net10, >= netstandard11, netstandard12, netstandard13, netstandard14, netstandard15
Microsoft.NETCore.Platforms (>= 1.1) Microsoft.NETCore.Platforms (>= 1.1)
Microsoft.NETCore.Targets (>= 1.1) Microsoft.NETCore.Targets (>= 1.1)
runtime.native.System.IO.Compression (4.3) - framework: >= net452, >= netstandard13 runtime.native.System.IO.Compression (4.3) - framework: >= net10, >= netstandard13, netstandard14, netstandard15
Microsoft.NETCore.Platforms (>= 1.1) Microsoft.NETCore.Platforms (>= 1.1)
Microsoft.NETCore.Targets (>= 1.1) Microsoft.NETCore.Targets (>= 1.1)
runtime.native.System.Net.Http (4.3) - framework: >= net452, >= netstandard16 runtime.native.System.Net.Http (4.3) - framework: >= net10, >= netstandard16
Microsoft.NETCore.Platforms (>= 1.1) Microsoft.NETCore.Platforms (>= 1.1)
Microsoft.NETCore.Targets (>= 1.1) Microsoft.NETCore.Targets (>= 1.1)
runtime.native.System.Security.Cryptography.Apple (4.3) - framework: >= net452, >= netstandard16 runtime.native.System.Security.Cryptography.Apple (4.3) - framework: >= net10, >= netstandard16
runtime.osx.10.10-x64.runtime.native.System.Security.Cryptography.Apple (>= 4.3) runtime.osx.10.10-x64.runtime.native.System.Security.Cryptography.Apple (>= 4.3)
runtime.native.System.Security.Cryptography.OpenSsl (4.3) - framework: >= net452, >= netstandard13, netstandard14 runtime.native.System.Security.Cryptography.OpenSsl (4.3.1) - framework: >= net10, >= netstandard13, netstandard14, netstandard15
runtime.debian.8-x64.runtime.native.System.Security.Cryptography.OpenSsl (>= 4.3) runtime.debian.8-x64.runtime.native.System.Security.Cryptography.OpenSsl (>= 4.3.1)
runtime.fedora.23-x64.runtime.native.System.Security.Cryptography.OpenSsl (>= 4.3) runtime.fedora.23-x64.runtime.native.System.Security.Cryptography.OpenSsl (>= 4.3.1)
runtime.fedora.24-x64.runtime.native.System.Security.Cryptography.OpenSsl (>= 4.3) runtime.fedora.24-x64.runtime.native.System.Security.Cryptography.OpenSsl (>= 4.3.1)
runtime.opensuse.13.2-x64.runtime.native.System.Security.Cryptography.OpenSsl (>= 4.3) runtime.opensuse.13.2-x64.runtime.native.System.Security.Cryptography.OpenSsl (>= 4.3.1)
runtime.opensuse.42.1-x64.runtime.native.System.Security.Cryptography.OpenSsl (>= 4.3) runtime.opensuse.42.1-x64.runtime.native.System.Security.Cryptography.OpenSsl (>= 4.3.1)
runtime.osx.10.10-x64.runtime.native.System.Security.Cryptography.OpenSsl (>= 4.3) runtime.osx.10.10-x64.runtime.native.System.Security.Cryptography.OpenSsl (>= 4.3.1)
runtime.rhel.7-x64.runtime.native.System.Security.Cryptography.OpenSsl (>= 4.3) runtime.rhel.7-x64.runtime.native.System.Security.Cryptography.OpenSsl (>= 4.3.1)
runtime.ubuntu.14.04-x64.runtime.native.System.Security.Cryptography.OpenSsl (>= 4.3) runtime.ubuntu.14.04-x64.runtime.native.System.Security.Cryptography.OpenSsl (>= 4.3.1)
runtime.ubuntu.16.04-x64.runtime.native.System.Security.Cryptography.OpenSsl (>= 4.3) runtime.ubuntu.16.04-x64.runtime.native.System.Security.Cryptography.OpenSsl (>= 4.3.1)
runtime.ubuntu.16.10-x64.runtime.native.System.Security.Cryptography.OpenSsl (>= 4.3) runtime.ubuntu.16.10-x64.runtime.native.System.Security.Cryptography.OpenSsl (>= 4.3.1)
runtime.opensuse.13.2-x64.runtime.native.System.Security.Cryptography.OpenSsl (4.3) - framework: >= net452, >= netstandard13, netstandard14 runtime.opensuse.13.2-x64.runtime.native.System.Security.Cryptography.OpenSsl (4.3.1) - framework: >= net10, >= netstandard13, netstandard14, netstandard15
runtime.opensuse.42.1-x64.runtime.native.System.Security.Cryptography.OpenSsl (4.3) - framework: >= net452, >= netstandard13, netstandard14 runtime.opensuse.42.1-x64.runtime.native.System.Security.Cryptography.OpenSsl (4.3.1) - framework: >= net10, >= netstandard13, netstandard14, netstandard15
runtime.osx.10.10-x64.runtime.native.System.Security.Cryptography.Apple (4.3) - framework: >= net452, >= netstandard16 runtime.osx.10.10-x64.runtime.native.System.Security.Cryptography.Apple (4.3) - framework: >= net10, >= netstandard16
runtime.osx.10.10-x64.runtime.native.System.Security.Cryptography.OpenSsl (4.3) - framework: >= net452, >= netstandard13, netstandard14 runtime.osx.10.10-x64.runtime.native.System.Security.Cryptography.OpenSsl (4.3.1) - framework: >= net10, >= netstandard13, netstandard14, netstandard15
runtime.rhel.7-x64.runtime.native.System.Security.Cryptography.OpenSsl (4.3) - framework: >= net452, >= netstandard13, netstandard14 runtime.rhel.7-x64.runtime.native.System.Security.Cryptography.OpenSsl (4.3.1) - framework: >= net10, >= netstandard13, netstandard14, netstandard15
runtime.ubuntu.14.04-x64.runtime.native.System.Security.Cryptography.OpenSsl (4.3) - framework: >= net452, >= netstandard13, netstandard14 runtime.ubuntu.14.04-x64.runtime.native.System.Security.Cryptography.OpenSsl (4.3.1) - framework: >= net10, >= netstandard13, netstandard14, netstandard15
runtime.ubuntu.16.04-x64.runtime.native.System.Security.Cryptography.OpenSsl (4.3) - framework: >= net452, >= netstandard13, netstandard14 runtime.ubuntu.16.04-x64.runtime.native.System.Security.Cryptography.OpenSsl (4.3.1) - framework: >= net10, >= netstandard13, netstandard14, netstandard15
runtime.ubuntu.16.10-x64.runtime.native.System.Security.Cryptography.OpenSsl (4.3) - framework: >= net452, >= netstandard13, netstandard14 runtime.ubuntu.16.10-x64.runtime.native.System.Security.Cryptography.OpenSsl (4.3.1) - framework: >= net10, >= netstandard13, netstandard14, netstandard15
System.AppContext (4.3) - framework: >= net46, >= netstandard13 System.AppContext (4.3) - framework: >= net46, >= netstandard13, netstandard14, netstandard15
System.Runtime (>= 4.3) - framework: dnxcore50, netstandard13, >= netstandard16 System.Runtime (>= 4.3) - framework: dnxcore50, netstandard13, >= netstandard16
System.Buffers (4.3) - framework: >= net452, >= netstandard13 System.Buffers (4.3) - framework: >= net10, >= netstandard13, netstandard14, netstandard15
System.Diagnostics.Debug (>= 4.3) - framework: >= netstandard11 System.Diagnostics.Debug (>= 4.3) - framework: >= netstandard11
System.Diagnostics.Tracing (>= 4.3) - framework: >= netstandard11 System.Diagnostics.Tracing (>= 4.3) - framework: >= netstandard11
System.Resources.ResourceManager (>= 4.3) - framework: >= netstandard11 System.Resources.ResourceManager (>= 4.3) - framework: >= netstandard11
System.Runtime (>= 4.3) - framework: >= netstandard11 System.Runtime (>= 4.3) - framework: >= netstandard11
System.Threading (>= 4.3) - framework: >= netstandard11 System.Threading (>= 4.3) - framework: >= netstandard11
System.Collections (4.3) - framework: >= net452, dnxcore50, >= netstandard11, netstandard13, netstandard14 System.Collections (4.3) - framework: >= net10, >= netstandard11, netstandard12, netstandard13, netstandard14, netstandard15
Microsoft.NETCore.Platforms (>= 1.1) - framework: dnxcore50, netstandard10, >= netstandard13 Microsoft.NETCore.Platforms (>= 1.1) - framework: dnxcore50, netstandard10, >= netstandard13
Microsoft.NETCore.Targets (>= 1.1) - framework: dnxcore50, netstandard10, >= netstandard13 Microsoft.NETCore.Targets (>= 1.1) - framework: dnxcore50, netstandard10, >= netstandard13
System.Runtime (>= 4.3) - framework: dnxcore50, netstandard10, >= netstandard13 System.Runtime (>= 4.3) - framework: dnxcore50, netstandard10, >= netstandard13
System.Collections.Concurrent (4.3) - framework: >= net452, >= netstandard11, netstandard14 System.Collections.Concurrent (4.3) - framework: >= net10, >= netstandard11, netstandard12, netstandard13, netstandard14, netstandard15
System.Collections (>= 4.3) - framework: dnxcore50, >= netstandard13 System.Collections (>= 4.3) - framework: dnxcore50, >= netstandard13
System.Diagnostics.Debug (>= 4.3) - framework: dnxcore50, >= netstandard13 System.Diagnostics.Debug (>= 4.3) - framework: dnxcore50, >= netstandard13
System.Diagnostics.Tracing (>= 4.3) - framework: dnxcore50, >= netstandard13 System.Diagnostics.Tracing (>= 4.3) - framework: dnxcore50, >= netstandard13
@ -122,55 +159,53 @@ NUGET
System.Runtime.Extensions (>= 4.3) - framework: dnxcore50, >= netstandard13 System.Runtime.Extensions (>= 4.3) - framework: dnxcore50, >= netstandard13
System.Threading (>= 4.3) - framework: dnxcore50, >= netstandard13 System.Threading (>= 4.3) - framework: dnxcore50, >= netstandard13
System.Threading.Tasks (>= 4.3) - framework: dnxcore50, netstandard11, >= netstandard13 System.Threading.Tasks (>= 4.3) - framework: dnxcore50, netstandard11, >= netstandard13
System.Console (4.3) - framework: >= net46, >= netstandard13 System.Console (4.3) - framework: >= net10, >= netstandard13, netstandard14, netstandard15
Microsoft.NETCore.Platforms (>= 1.1) - framework: >= netstandard13 Microsoft.NETCore.Platforms (>= 1.1) - framework: >= netstandard13
Microsoft.NETCore.Targets (>= 1.1) - framework: >= netstandard13 Microsoft.NETCore.Targets (>= 1.1) - framework: >= netstandard13
System.IO (>= 4.3) - framework: >= netstandard13 System.IO (>= 4.3) - framework: >= netstandard13
System.Runtime (>= 4.3) - framework: >= netstandard13 System.Runtime (>= 4.3) - framework: >= netstandard13
System.Text.Encoding (>= 4.3) - framework: >= netstandard13 System.Text.Encoding (>= 4.3) - framework: >= netstandard13
System.Diagnostics.Contracts (4.3) - framework: dnxcore50 System.Diagnostics.Debug (4.3) - framework: >= net10, >= netstandard11, netstandard12, netstandard13, netstandard14, netstandard15
System.Runtime (>= 4.3) - framework: dnxcore50, >= netstandard10
System.Diagnostics.Debug (4.3) - framework: >= net452, dnxcore50, >= netstandard11, netstandard13, netstandard14
Microsoft.NETCore.Platforms (>= 1.1) - framework: dnxcore50, netstandard10, >= netstandard13 Microsoft.NETCore.Platforms (>= 1.1) - framework: dnxcore50, netstandard10, >= netstandard13
Microsoft.NETCore.Targets (>= 1.1) - framework: dnxcore50, netstandard10, >= netstandard13 Microsoft.NETCore.Targets (>= 1.1) - framework: dnxcore50, netstandard10, >= netstandard13
System.Runtime (>= 4.3) - framework: dnxcore50, netstandard10, >= netstandard13 System.Runtime (>= 4.3) - framework: dnxcore50, netstandard10, >= netstandard13
System.Diagnostics.DiagnosticSource (4.3) - framework: >= net452, netstandard13, >= netstandard16 System.Diagnostics.DiagnosticSource (4.3.1) - framework: >= net10, netstandard13, >= netstandard16
System.Collections (>= 4.3) - framework: netstandard11, >= netstandard13 System.Collections (>= 4.3) - framework: netstandard11, >= netstandard13
System.Diagnostics.Tracing (>= 4.3) - framework: netstandard11, >= netstandard13 System.Diagnostics.Tracing (>= 4.3) - framework: netstandard11, >= netstandard13
System.Reflection (>= 4.3) - framework: netstandard11, >= netstandard13 System.Reflection (>= 4.3) - framework: netstandard11, >= netstandard13
System.Runtime (>= 4.3) - framework: netstandard11, >= netstandard13 System.Runtime (>= 4.3) - framework: netstandard11, >= netstandard13
System.Threading (>= 4.3) - framework: netstandard11, >= netstandard13 System.Threading (>= 4.3) - framework: netstandard11, >= netstandard13
System.Diagnostics.Tools (4.3) - framework: >= net452, >= netstandard11 System.Diagnostics.Tools (4.3) - framework: >= net10, >= netstandard11, netstandard12, netstandard13, netstandard14, netstandard15
Microsoft.NETCore.Platforms (>= 1.1) - framework: dnxcore50, >= netstandard10 Microsoft.NETCore.Platforms (>= 1.1) - framework: dnxcore50, >= netstandard10
Microsoft.NETCore.Targets (>= 1.1) - framework: dnxcore50, >= netstandard10 Microsoft.NETCore.Targets (>= 1.1) - framework: dnxcore50, >= netstandard10
System.Runtime (>= 4.3) - framework: dnxcore50, >= netstandard10 System.Runtime (>= 4.3) - framework: dnxcore50, >= netstandard10
System.Diagnostics.Tracing (4.3) - framework: >= net452, >= netstandard11, netstandard13, netstandard14 System.Diagnostics.Tracing (4.3) - framework: >= net10, >= netstandard11, netstandard12, netstandard13, netstandard14, netstandard15
Microsoft.NETCore.Platforms (>= 1.1) - framework: dnxcore50, netstandard11, netstandard12, netstandard13, >= netstandard15 Microsoft.NETCore.Platforms (>= 1.1) - framework: dnxcore50, netstandard11, netstandard12, netstandard13, >= netstandard15
Microsoft.NETCore.Targets (>= 1.1) - framework: dnxcore50, netstandard11, netstandard12, netstandard13, >= netstandard15 Microsoft.NETCore.Targets (>= 1.1) - framework: dnxcore50, netstandard11, netstandard12, netstandard13, >= netstandard15
System.Runtime (>= 4.3) - framework: dnxcore50, netstandard11, netstandard12, netstandard13, >= netstandard15 System.Runtime (>= 4.3) - framework: dnxcore50, netstandard11, netstandard12, netstandard13, >= netstandard15
System.Globalization (4.3) - framework: >= net452, dnxcore50, >= netstandard11, netstandard13, netstandard14 System.Globalization (4.3) - framework: >= net10, >= netstandard11, netstandard12, netstandard13, netstandard14, netstandard15
Microsoft.NETCore.Platforms (>= 1.1) - framework: dnxcore50, netstandard10, >= netstandard13 Microsoft.NETCore.Platforms (>= 1.1) - framework: dnxcore50, netstandard10, >= netstandard13
Microsoft.NETCore.Targets (>= 1.1) - framework: dnxcore50, netstandard10, >= netstandard13 Microsoft.NETCore.Targets (>= 1.1) - framework: dnxcore50, netstandard10, >= netstandard13
System.Runtime (>= 4.3) - framework: dnxcore50, netstandard10, >= netstandard13 System.Runtime (>= 4.3) - framework: dnxcore50, netstandard10, >= netstandard13
System.Globalization.Calendars (4.3) - framework: >= net46, >= netstandard13 System.Globalization.Calendars (4.3) - framework: >= net46, >= netstandard13, netstandard14, netstandard15
Microsoft.NETCore.Platforms (>= 1.1) - framework: >= netstandard13 Microsoft.NETCore.Platforms (>= 1.1) - framework: >= netstandard13
Microsoft.NETCore.Targets (>= 1.1) - framework: >= netstandard13 Microsoft.NETCore.Targets (>= 1.1) - framework: >= netstandard13
System.Globalization (>= 4.3) - framework: >= netstandard13 System.Globalization (>= 4.3) - framework: >= netstandard13
System.Runtime (>= 4.3) - framework: >= netstandard13 System.Runtime (>= 4.3) - framework: >= netstandard13
System.Globalization.Extensions (4.3) - framework: >= net452, >= netstandard16 System.Globalization.Extensions (4.3) - framework: >= net10, >= netstandard16
Microsoft.NETCore.Platforms (>= 1.1) - framework: >= netstandard13 Microsoft.NETCore.Platforms (>= 1.1) - framework: >= netstandard13
System.Globalization (>= 4.3) - framework: >= netstandard13 System.Globalization (>= 4.3) - framework: >= netstandard13
System.Resources.ResourceManager (>= 4.3) - framework: >= netstandard13 System.Resources.ResourceManager (>= 4.3) - framework: >= netstandard13
System.Runtime (>= 4.3) - framework: >= netstandard13 System.Runtime (>= 4.3) - framework: >= netstandard13
System.Runtime.Extensions (>= 4.3) - framework: >= netstandard13 System.Runtime.Extensions (>= 4.3) - framework: >= netstandard13
System.Runtime.InteropServices (>= 4.3) - framework: >= netstandard13 System.Runtime.InteropServices (>= 4.3) - framework: >= netstandard13
System.IO (4.3) - framework: >= net452, dnxcore50, >= netstandard11, netstandard13, netstandard14 System.IO (4.3) - framework: >= net10, >= netstandard11, netstandard12, netstandard13, netstandard14, netstandard15
Microsoft.NETCore.Platforms (>= 1.1) - framework: dnxcore50, netstandard10, netstandard13, >= netstandard15 Microsoft.NETCore.Platforms (>= 1.1) - framework: dnxcore50, netstandard10, netstandard13, >= netstandard15
Microsoft.NETCore.Targets (>= 1.1) - framework: dnxcore50, netstandard10, netstandard13, >= netstandard15 Microsoft.NETCore.Targets (>= 1.1) - framework: dnxcore50, netstandard10, netstandard13, >= netstandard15
System.Runtime (>= 4.3) - framework: dnxcore50, netstandard10, netstandard13, >= netstandard15 System.Runtime (>= 4.3) - framework: dnxcore50, netstandard10, netstandard13, >= netstandard15
System.Text.Encoding (>= 4.3) - framework: dnxcore50, netstandard10, netstandard13, >= netstandard15 System.Text.Encoding (>= 4.3) - framework: dnxcore50, netstandard10, netstandard13, >= netstandard15
System.Threading.Tasks (>= 4.3) - framework: dnxcore50, netstandard10, netstandard13, >= netstandard15 System.Threading.Tasks (>= 4.3) - framework: dnxcore50, netstandard10, netstandard13, >= netstandard15
System.IO.Compression (4.3) - framework: >= net452, >= netstandard11, netstandard13 System.IO.Compression (4.3) - framework: >= net10, >= netstandard11, netstandard12, netstandard13, netstandard14, netstandard15
Microsoft.NETCore.Platforms (>= 1.1) - framework: >= netstandard13 Microsoft.NETCore.Platforms (>= 1.1) - framework: >= netstandard13
runtime.native.System (>= 4.3) - framework: >= netstandard13 runtime.native.System (>= 4.3) - framework: >= netstandard13
runtime.native.System.IO.Compression (>= 4.3) - framework: dnxcore50, >= netstandard13 runtime.native.System.IO.Compression (>= 4.3) - framework: dnxcore50, >= netstandard13
@ -186,7 +221,7 @@ NUGET
System.Text.Encoding (>= 4.3) - framework: dnxcore50, netstandard11, >= netstandard13 System.Text.Encoding (>= 4.3) - framework: dnxcore50, netstandard11, >= netstandard13
System.Threading (>= 4.3) - framework: dnxcore50, >= netstandard13 System.Threading (>= 4.3) - framework: dnxcore50, >= netstandard13
System.Threading.Tasks (>= 4.3) - framework: dnxcore50, >= netstandard13 System.Threading.Tasks (>= 4.3) - framework: dnxcore50, >= netstandard13
System.IO.Compression.ZipFile (4.3) - framework: >= net46, >= netstandard13 System.IO.Compression.ZipFile (4.3) - framework: >= net46, >= netstandard13, netstandard14, netstandard15
System.Buffers (>= 4.3) - framework: >= netstandard13 System.Buffers (>= 4.3) - framework: >= netstandard13
System.IO (>= 4.3) - framework: >= netstandard13 System.IO (>= 4.3) - framework: >= netstandard13
System.IO.Compression (>= 4.3) - framework: >= netstandard13 System.IO.Compression (>= 4.3) - framework: >= netstandard13
@ -196,7 +231,7 @@ NUGET
System.Runtime (>= 4.3) - framework: >= netstandard13 System.Runtime (>= 4.3) - framework: >= netstandard13
System.Runtime.Extensions (>= 4.3) - framework: >= netstandard13 System.Runtime.Extensions (>= 4.3) - framework: >= netstandard13
System.Text.Encoding (>= 4.3) - framework: >= netstandard13 System.Text.Encoding (>= 4.3) - framework: >= netstandard13
System.IO.FileSystem (4.3) - framework: >= net452, >= netstandard13 System.IO.FileSystem (4.3) - framework: >= net10, >= netstandard13, netstandard14, netstandard15
Microsoft.NETCore.Platforms (>= 1.1) - framework: >= netstandard13 Microsoft.NETCore.Platforms (>= 1.1) - framework: >= netstandard13
Microsoft.NETCore.Targets (>= 1.1) - framework: >= netstandard13 Microsoft.NETCore.Targets (>= 1.1) - framework: >= netstandard13
System.IO (>= 4.3) - framework: >= netstandard13 System.IO (>= 4.3) - framework: >= netstandard13
@ -205,15 +240,15 @@ NUGET
System.Runtime.Handles (>= 4.3) - framework: >= netstandard13 System.Runtime.Handles (>= 4.3) - framework: >= netstandard13
System.Text.Encoding (>= 4.3) - framework: >= netstandard13 System.Text.Encoding (>= 4.3) - framework: >= netstandard13
System.Threading.Tasks (>= 4.3) - framework: >= netstandard13 System.Threading.Tasks (>= 4.3) - framework: >= netstandard13
System.IO.FileSystem.Primitives (4.3) - framework: >= net452, >= netstandard13 System.IO.FileSystem.Primitives (4.3) - framework: >= net10, >= netstandard13, netstandard14, netstandard15
System.Runtime (>= 4.3) - framework: >= netstandard13 System.Runtime (>= 4.3) - framework: >= netstandard13
System.Linq (4.3) - framework: >= net452, dnxcore50, >= netstandard11, netstandard14 System.Linq (4.3) - framework: >= net10, >= netstandard11, netstandard12, netstandard13, netstandard14, netstandard15
System.Collections (>= 4.3) - framework: dnxcore50, netstandard10, >= netstandard16 System.Collections (>= 4.3) - framework: dnxcore50, netstandard10, >= netstandard16
System.Diagnostics.Debug (>= 4.3) - framework: dnxcore50, >= netstandard16 System.Diagnostics.Debug (>= 4.3) - framework: dnxcore50, >= netstandard16
System.Resources.ResourceManager (>= 4.3) - framework: dnxcore50, >= netstandard16 System.Resources.ResourceManager (>= 4.3) - framework: dnxcore50, >= netstandard16
System.Runtime (>= 4.3) - framework: dnxcore50, netstandard10, >= netstandard16 System.Runtime (>= 4.3) - framework: dnxcore50, netstandard10, >= netstandard16
System.Runtime.Extensions (>= 4.3) - framework: dnxcore50, >= netstandard16 System.Runtime.Extensions (>= 4.3) - framework: dnxcore50, >= netstandard16
System.Linq.Expressions (4.3) - framework: >= net452, >= netstandard11 System.Linq.Expressions (4.3) - framework: >= net10, >= netstandard11, netstandard12, netstandard13, netstandard14, netstandard15
System.Collections (>= 4.3) - framework: dnxcore50, >= netstandard16 System.Collections (>= 4.3) - framework: dnxcore50, >= netstandard16
System.Diagnostics.Debug (>= 4.3) - framework: dnxcore50, >= netstandard16 System.Diagnostics.Debug (>= 4.3) - framework: dnxcore50, >= netstandard16
System.Globalization (>= 4.3) - framework: dnxcore50, >= netstandard16 System.Globalization (>= 4.3) - framework: dnxcore50, >= netstandard16
@ -231,7 +266,16 @@ NUGET
System.Runtime (>= 4.3) - framework: dnxcore50, netstandard10, netstandard13, >= netstandard16 System.Runtime (>= 4.3) - framework: dnxcore50, netstandard10, netstandard13, >= netstandard16
System.Runtime.Extensions (>= 4.3) - framework: dnxcore50, >= netstandard16 System.Runtime.Extensions (>= 4.3) - framework: dnxcore50, >= netstandard16
System.Threading (>= 4.3) - framework: dnxcore50, >= netstandard16 System.Threading (>= 4.3) - framework: dnxcore50, >= netstandard16
System.Net.Http (4.3.1) - framework: >= net452, >= netstandard11 System.Linq.Queryable (4.3) - framework: >= net10, >= netstandard16
System.Collections (>= 4.3) - framework: dnxcore50, >= netstandard13
System.Diagnostics.Debug (>= 4.3) - framework: dnxcore50, >= netstandard13
System.Linq (>= 4.3) - framework: dnxcore50, netstandard10, >= netstandard13
System.Linq.Expressions (>= 4.3) - framework: dnxcore50, netstandard10, >= netstandard13
System.Reflection (>= 4.3) - framework: dnxcore50, >= netstandard13
System.Reflection.Extensions (>= 4.3) - framework: dnxcore50, >= netstandard13
System.Resources.ResourceManager (>= 4.3) - framework: dnxcore50, >= netstandard13
System.Runtime (>= 4.3) - framework: dnxcore50, netstandard10, >= netstandard13
System.Net.Http (4.3.2) - framework: >= net10, >= netstandard11, netstandard12, netstandard13, netstandard14, netstandard15
Microsoft.NETCore.Platforms (>= 1.1) - framework: dnxcore50, netstandard13, >= netstandard16 Microsoft.NETCore.Platforms (>= 1.1) - framework: dnxcore50, netstandard13, >= netstandard16
Microsoft.Win32.Primitives (>= 4.3) - framework: netstandard13 Microsoft.Win32.Primitives (>= 4.3) - framework: netstandard13
runtime.native.System (>= 4.3) - framework: >= netstandard16 runtime.native.System (>= 4.3) - framework: >= netstandard16
@ -253,95 +297,108 @@ NUGET
System.Runtime.Handles (>= 4.3) - framework: netstandard13, >= netstandard16 System.Runtime.Handles (>= 4.3) - framework: netstandard13, >= netstandard16
System.Runtime.InteropServices (>= 4.3) - framework: dnxcore50, netstandard13, >= netstandard16 System.Runtime.InteropServices (>= 4.3) - framework: dnxcore50, netstandard13, >= netstandard16
System.Security.Cryptography.Algorithms (>= 4.3) - framework: >= netstandard16 System.Security.Cryptography.Algorithms (>= 4.3) - framework: >= netstandard16
System.Security.Cryptography.Encoding (>= 4.3) - framework: >= netstandard16 System.Security.Cryptography.Encoding (>= 4.3) - framework: netstandard13, >= netstandard16
System.Security.Cryptography.OpenSsl (>= 4.3) - framework: >= netstandard16 System.Security.Cryptography.OpenSsl (>= 4.3) - framework: >= netstandard16
System.Security.Cryptography.Primitives (>= 4.3) - framework: >= netstandard16 System.Security.Cryptography.Primitives (>= 4.3) - framework: >= netstandard16
System.Security.Cryptography.X509Certificates (>= 4.3) - framework: >= net46, dnxcore50, netstandard13, >= netstandard16 System.Security.Cryptography.X509Certificates (>= 4.3) - framework: >= net46, dnxcore50, netstandard13, >= netstandard16
System.Text.Encoding (>= 4.3) - framework: dnxcore50, netstandard11, netstandard13, >= netstandard16 System.Text.Encoding (>= 4.3) - framework: dnxcore50, netstandard11, netstandard13, >= netstandard16
System.Threading (>= 4.3) - framework: dnxcore50, netstandard13, >= netstandard16 System.Threading (>= 4.3) - framework: dnxcore50, netstandard13, >= netstandard16
System.Threading.Tasks (>= 4.3) - framework: dnxcore50, netstandard11, netstandard13, >= netstandard16 System.Threading.Tasks (>= 4.3) - framework: dnxcore50, netstandard11, netstandard13, >= netstandard16
System.Net.Primitives (4.3) - framework: >= net452, >= netstandard11, netstandard13 System.Net.Primitives (4.3) - framework: >= net10, >= netstandard11, netstandard12, netstandard13, netstandard14, netstandard15
Microsoft.NETCore.Platforms (>= 1.1) - framework: dnxcore50, netstandard10, netstandard11, >= netstandard13 Microsoft.NETCore.Platforms (>= 1.1) - framework: dnxcore50, netstandard10, netstandard11, >= netstandard13
Microsoft.NETCore.Targets (>= 1.1) - framework: dnxcore50, netstandard10, netstandard11, >= netstandard13 Microsoft.NETCore.Targets (>= 1.1) - framework: dnxcore50, netstandard10, netstandard11, >= netstandard13
System.Runtime (>= 4.3) - framework: dnxcore50, netstandard10, netstandard11, >= netstandard13 System.Runtime (>= 4.3) - framework: dnxcore50, netstandard10, netstandard11, >= netstandard13
System.Runtime.Handles (>= 4.3) - framework: dnxcore50, >= netstandard13 System.Runtime.Handles (>= 4.3) - framework: dnxcore50, >= netstandard13
System.Net.Sockets (4.3) - framework: >= net46, >= netstandard13 System.Net.Requests (4.3) - framework: >= net10, >= netstandard16
Microsoft.NETCore.Platforms (>= 1.1) - framework: >= netstandard13
System.Collections (>= 4.3) - framework: dnxcore50, >= netstandard13
System.Diagnostics.Debug (>= 4.3) - framework: dnxcore50, >= netstandard13
System.Diagnostics.Tracing (>= 4.3) - framework: dnxcore50, >= netstandard13
System.Globalization (>= 4.3) - framework: dnxcore50, >= netstandard13
System.IO (>= 4.3) - framework: dnxcore50, netstandard10, netstandard11, >= netstandard13
System.Net.Http (>= 4.3) - framework: dnxcore50, >= netstandard13
System.Net.Primitives (>= 4.3) - framework: dnxcore50, netstandard10, netstandard11, >= netstandard13
System.Net.WebHeaderCollection (>= 4.3) - framework: dnxcore50, >= netstandard13
System.Resources.ResourceManager (>= 4.3) - framework: dnxcore50, >= netstandard13
System.Runtime (>= 4.3) - framework: dnxcore50, netstandard10, netstandard11, >= netstandard13
System.Threading (>= 4.3) - framework: dnxcore50, >= netstandard13
System.Threading.Tasks (>= 4.3) - framework: dnxcore50, netstandard11, >= netstandard13
System.Net.Sockets (4.3) - framework: >= net46, >= netstandard13, netstandard14, netstandard15
Microsoft.NETCore.Platforms (>= 1.1) - framework: >= netstandard13 Microsoft.NETCore.Platforms (>= 1.1) - framework: >= netstandard13
Microsoft.NETCore.Targets (>= 1.1) - framework: >= netstandard13 Microsoft.NETCore.Targets (>= 1.1) - framework: >= netstandard13
System.IO (>= 4.3) - framework: >= netstandard13 System.IO (>= 4.3) - framework: >= netstandard13
System.Net.Primitives (>= 4.3) - framework: >= netstandard13 System.Net.Primitives (>= 4.3) - framework: >= netstandard13
System.Runtime (>= 4.3) - framework: >= netstandard13 System.Runtime (>= 4.3) - framework: >= netstandard13
System.Threading.Tasks (>= 4.3) - framework: >= netstandard13 System.Threading.Tasks (>= 4.3) - framework: >= netstandard13
System.ObjectModel (4.3) - framework: >= net452, dnxcore50, >= netstandard11 System.Net.WebHeaderCollection (4.3) - framework: >= net10, >= netstandard16
System.Collections (>= 4.3) - framework: >= netstandard13
System.Resources.ResourceManager (>= 4.3) - framework: >= netstandard13
System.Runtime (>= 4.3) - framework: >= netstandard13
System.Runtime.Extensions (>= 4.3) - framework: >= netstandard13
System.ObjectModel (4.3) - framework: >= net10, >= netstandard11, netstandard12, netstandard13, netstandard14, netstandard15
System.Collections (>= 4.3) - framework: dnxcore50, >= netstandard13 System.Collections (>= 4.3) - framework: dnxcore50, >= netstandard13
System.Diagnostics.Debug (>= 4.3) - framework: dnxcore50, >= netstandard13 System.Diagnostics.Debug (>= 4.3) - framework: dnxcore50, >= netstandard13
System.Resources.ResourceManager (>= 4.3) - framework: dnxcore50, >= netstandard13 System.Resources.ResourceManager (>= 4.3) - framework: dnxcore50, >= netstandard13
System.Runtime (>= 4.3) - framework: dnxcore50, netstandard10, >= netstandard13 System.Runtime (>= 4.3) - framework: dnxcore50, netstandard10, >= netstandard13
System.Threading (>= 4.3) - framework: dnxcore50, >= netstandard13 System.Threading (>= 4.3) - framework: dnxcore50, >= netstandard13
System.Reflection (4.3) - framework: >= net452, dnxcore50, >= netstandard11, netstandard12, netstandard13, netstandard14 System.Reflection (4.3) - framework: >= net10, >= netstandard11, netstandard12, netstandard13, netstandard14, netstandard15
Microsoft.NETCore.Platforms (>= 1.1) - framework: dnxcore50, netstandard10, netstandard13, >= netstandard15 Microsoft.NETCore.Platforms (>= 1.1) - framework: dnxcore50, netstandard10, netstandard13, >= netstandard15
Microsoft.NETCore.Targets (>= 1.1) - framework: dnxcore50, netstandard10, netstandard13, >= netstandard15 Microsoft.NETCore.Targets (>= 1.1) - framework: dnxcore50, netstandard10, netstandard13, >= netstandard15
System.IO (>= 4.3) - framework: dnxcore50, netstandard10, netstandard13, >= netstandard15 System.IO (>= 4.3) - framework: dnxcore50, netstandard10, netstandard13, >= netstandard15
System.Reflection.Primitives (>= 4.3) - framework: dnxcore50, netstandard10, netstandard13, >= netstandard15 System.Reflection.Primitives (>= 4.3) - framework: dnxcore50, netstandard10, netstandard13, >= netstandard15
System.Runtime (>= 4.3) - framework: dnxcore50, netstandard10, netstandard13, >= netstandard15 System.Runtime (>= 4.3) - framework: dnxcore50, netstandard10, netstandard13, >= netstandard15
System.Reflection.Emit (4.3) - framework: >= net452, >= netstandard16 System.Reflection.Emit (4.3) - framework: >= net10, >= netstandard16
System.IO (>= 4.3) - framework: >= netstandard11 System.IO (>= 4.3) - framework: >= netstandard11
System.Reflection (>= 4.3) - framework: >= netstandard11 System.Reflection (>= 4.3) - framework: >= netstandard11
System.Reflection.Emit.ILGeneration (>= 4.3) - framework: >= netstandard11 System.Reflection.Emit.ILGeneration (>= 4.3) - framework: >= netstandard11
System.Reflection.Primitives (>= 4.3) - framework: >= netstandard11 System.Reflection.Primitives (>= 4.3) - framework: >= netstandard11
System.Runtime (>= 4.3) - framework: >= netstandard11 System.Runtime (>= 4.3) - framework: >= netstandard11
System.Reflection.Emit.ILGeneration (4.3) - framework: >= net452, >= netstandard16 System.Reflection.Emit.ILGeneration (4.3) - framework: >= net10, >= netstandard16
System.Reflection (>= 4.3) - framework: >= netstandard10 System.Reflection (>= 4.3) - framework: >= netstandard10
System.Reflection.Primitives (>= 4.3) - framework: >= netstandard10 System.Reflection.Primitives (>= 4.3) - framework: >= netstandard10
System.Runtime (>= 4.3) - framework: >= netstandard10 System.Runtime (>= 4.3) - framework: >= netstandard10
System.Reflection.Emit.Lightweight (4.3) - framework: >= net452, >= netstandard16 System.Reflection.Emit.Lightweight (4.3) - framework: >= net10, >= netstandard16
System.Reflection (>= 4.3) - framework: >= netstandard10 System.Reflection (>= 4.3) - framework: >= netstandard10
System.Reflection.Emit.ILGeneration (>= 4.3) - framework: >= netstandard10 System.Reflection.Emit.ILGeneration (>= 4.3) - framework: >= netstandard10
System.Reflection.Primitives (>= 4.3) - framework: >= netstandard10 System.Reflection.Primitives (>= 4.3) - framework: >= netstandard10
System.Runtime (>= 4.3) - framework: >= netstandard10 System.Runtime (>= 4.3) - framework: >= netstandard10
System.Reflection.Extensions (4.3) - framework: >= net452, dnxcore50, >= netstandard11 System.Reflection.Extensions (4.3) - framework: >= net10, >= netstandard11, netstandard12, netstandard13, netstandard14, netstandard15
Microsoft.NETCore.Platforms (>= 1.1) - framework: dnxcore50, >= netstandard10 Microsoft.NETCore.Platforms (>= 1.1) - framework: dnxcore50, >= netstandard10
Microsoft.NETCore.Targets (>= 1.1) - framework: dnxcore50, >= netstandard10 Microsoft.NETCore.Targets (>= 1.1) - framework: dnxcore50, >= netstandard10
System.Reflection (>= 4.3) - framework: dnxcore50, >= netstandard10 System.Reflection (>= 4.3) - framework: dnxcore50, >= netstandard10
System.Runtime (>= 4.3) - framework: dnxcore50, >= netstandard10 System.Runtime (>= 4.3) - framework: dnxcore50, >= netstandard10
System.Reflection.Primitives (4.3) - framework: >= net452, dnxcore50, >= netstandard11, netstandard12, netstandard13 System.Reflection.Primitives (4.3) - framework: >= net10, >= netstandard11, netstandard12, netstandard13, netstandard14, netstandard15
Microsoft.NETCore.Platforms (>= 1.1) - framework: dnxcore50, >= netstandard10 Microsoft.NETCore.Platforms (>= 1.1) - framework: dnxcore50, >= netstandard10
Microsoft.NETCore.Targets (>= 1.1) - framework: dnxcore50, >= netstandard10 Microsoft.NETCore.Targets (>= 1.1) - framework: dnxcore50, >= netstandard10
System.Runtime (>= 4.3) - framework: dnxcore50, >= netstandard10 System.Runtime (>= 4.3) - framework: dnxcore50, >= netstandard10
System.Reflection.TypeExtensions (4.3) - framework: >= net452, dnxcore50, >= netstandard16 System.Reflection.TypeExtensions (4.3) - framework: >= net10, >= netstandard16
System.Diagnostics.Contracts (>= 4.3) - framework: dnxcore50
System.Diagnostics.Debug (>= 4.3) - framework: dnxcore50
System.Linq (>= 4.3) - framework: dnxcore50
System.Reflection (>= 4.3) - framework: >= net462, dnxcore50, netstandard13, >= netstandard15 System.Reflection (>= 4.3) - framework: >= net462, dnxcore50, netstandard13, >= netstandard15
System.Reflection.Primitives (>= 4.3) - framework: dnxcore50
System.Resources.ResourceManager (>= 4.3) - framework: dnxcore50
System.Runtime (>= 4.3) - framework: dnxcore50, netstandard13, >= netstandard15 System.Runtime (>= 4.3) - framework: dnxcore50, netstandard13, >= netstandard15
System.Runtime.Extensions (>= 4.3) - framework: dnxcore50 System.Resources.ResourceManager (4.3) - framework: >= net10, >= netstandard11, netstandard12, netstandard13, netstandard14, netstandard15
System.Resources.ResourceManager (4.3) - framework: >= net452, dnxcore50, >= netstandard11, netstandard13, netstandard14
Microsoft.NETCore.Platforms (>= 1.1) - framework: dnxcore50, >= netstandard10 Microsoft.NETCore.Platforms (>= 1.1) - framework: dnxcore50, >= netstandard10
Microsoft.NETCore.Targets (>= 1.1) - framework: dnxcore50, >= netstandard10 Microsoft.NETCore.Targets (>= 1.1) - framework: dnxcore50, >= netstandard10
System.Globalization (>= 4.3) - framework: dnxcore50, >= netstandard10 System.Globalization (>= 4.3) - framework: dnxcore50, >= netstandard10
System.Reflection (>= 4.3) - framework: dnxcore50, >= netstandard10 System.Reflection (>= 4.3) - framework: dnxcore50, >= netstandard10
System.Runtime (>= 4.3) - framework: dnxcore50, >= netstandard10 System.Runtime (>= 4.3) - framework: dnxcore50, >= netstandard10
System.Runtime (4.3) - framework: >= net452, dnxcore50, >= netstandard11, netstandard12, netstandard13, netstandard14 System.Runtime (4.3) - framework: >= net10, >= netstandard11, netstandard12, netstandard13, netstandard14, netstandard15
Microsoft.NETCore.Platforms (>= 1.1) - framework: dnxcore50, netstandard10, netstandard12, netstandard13, >= netstandard15 Microsoft.NETCore.Platforms (>= 1.1) - framework: dnxcore50, netstandard10, netstandard12, netstandard13, >= netstandard15
Microsoft.NETCore.Targets (>= 1.1) - framework: dnxcore50, netstandard10, netstandard12, netstandard13, >= netstandard15 Microsoft.NETCore.Targets (>= 1.1) - framework: dnxcore50, netstandard10, netstandard12, netstandard13, >= netstandard15
System.Runtime.Extensions (4.3) - framework: >= net452, dnxcore50, >= netstandard11, netstandard13, netstandard14 System.Runtime.Extensions (4.3) - framework: >= net10, >= netstandard11, netstandard12, netstandard13, netstandard14, netstandard15
Microsoft.NETCore.Platforms (>= 1.1) - framework: dnxcore50, netstandard10, netstandard13, >= netstandard15 Microsoft.NETCore.Platforms (>= 1.1) - framework: dnxcore50, netstandard10, netstandard13, >= netstandard15
Microsoft.NETCore.Targets (>= 1.1) - framework: dnxcore50, netstandard10, netstandard13, >= netstandard15 Microsoft.NETCore.Targets (>= 1.1) - framework: dnxcore50, netstandard10, netstandard13, >= netstandard15
System.Runtime (>= 4.3) - framework: dnxcore50, netstandard10, netstandard13, >= netstandard15 System.Runtime (>= 4.3) - framework: dnxcore50, netstandard10, netstandard13, >= netstandard15
System.Runtime.Handles (4.3) - framework: >= net452, >= netstandard13, netstandard14 System.Runtime.Handles (4.3) - framework: >= net10, >= netstandard13, netstandard14, netstandard15
Microsoft.NETCore.Platforms (>= 1.1) - framework: >= netstandard13 Microsoft.NETCore.Platforms (>= 1.1) - framework: >= netstandard13
Microsoft.NETCore.Targets (>= 1.1) - framework: >= netstandard13 Microsoft.NETCore.Targets (>= 1.1) - framework: >= netstandard13
System.Runtime (>= 4.3) - framework: >= netstandard13 System.Runtime (>= 4.3) - framework: >= netstandard13
System.Runtime.InteropServices (4.3) - framework: >= net452, >= netstandard11, netstandard13, netstandard14 System.Runtime.InteropServices (4.3) - framework: >= net10, >= netstandard11, netstandard12, netstandard13, netstandard14, netstandard15
Microsoft.NETCore.Platforms (>= 1.1) - framework: dnxcore50, netstandard11, netstandard12, netstandard13, >= netstandard15 Microsoft.NETCore.Platforms (>= 1.1) - framework: dnxcore50, netstandard11, netstandard12, netstandard13, >= netstandard15, netcore11
Microsoft.NETCore.Targets (>= 1.1) - framework: dnxcore50, netstandard11, netstandard12, netstandard13, >= netstandard15 Microsoft.NETCore.Targets (>= 1.1) - framework: dnxcore50, netstandard11, netstandard12, netstandard13, >= netstandard15, netcore11
System.Reflection (>= 4.3) - framework: dnxcore50, netstandard11, netstandard12, netstandard13, >= netstandard15 System.Reflection (>= 4.3) - framework: dnxcore50, netstandard11, netstandard12, netstandard13, >= netstandard15, netcore11
System.Reflection.Primitives (>= 4.3) - framework: dnxcore50, netstandard11, netstandard12, netstandard13, >= netstandard15 System.Reflection.Primitives (>= 4.3) - framework: dnxcore50, netstandard11, netstandard12, netstandard13, >= netstandard15, netcore11
System.Runtime (>= 4.3) - framework: net462, >= net463, dnxcore50, netstandard11, netstandard12, netstandard13, >= netstandard15 System.Runtime (>= 4.3) - framework: net462, >= net463, dnxcore50, netstandard11, netstandard12, netstandard13, >= netstandard15, netcore11
System.Runtime.Handles (>= 4.3) - framework: dnxcore50, netstandard13, >= netstandard15 System.Runtime.Handles (>= 4.3) - framework: dnxcore50, netstandard13, >= netstandard15, netcore11
System.Runtime.InteropServices.RuntimeInformation (4.3) - framework: >= net452, >= netstandard11 System.Runtime.InteropServices.RuntimeInformation (4.3) - framework: >= net45, >= netstandard11, netstandard12, netstandard13, netstandard14, netstandard15
runtime.native.System (>= 4.3) - framework: >= netstandard11 runtime.native.System (>= 4.3) - framework: >= netstandard11
System.Reflection (>= 4.3) - framework: dnxcore50, >= netstandard11 System.Reflection (>= 4.3) - framework: dnxcore50, >= netstandard11
System.Reflection.Extensions (>= 4.3) - framework: dnxcore50, >= netstandard11 System.Reflection.Extensions (>= 4.3) - framework: dnxcore50, >= netstandard11
@ -349,12 +406,12 @@ NUGET
System.Runtime (>= 4.3) - framework: dnxcore50, >= netstandard11 System.Runtime (>= 4.3) - framework: dnxcore50, >= netstandard11
System.Runtime.InteropServices (>= 4.3) - framework: >= netstandard11 System.Runtime.InteropServices (>= 4.3) - framework: >= netstandard11
System.Threading (>= 4.3) - framework: dnxcore50, >= netstandard11 System.Threading (>= 4.3) - framework: dnxcore50, >= netstandard11
System.Runtime.Numerics (4.3) - framework: >= net452, >= netstandard11 System.Runtime.Numerics (4.3) - framework: >= net10, >= netstandard11, netstandard12, netstandard13, netstandard14, netstandard15
System.Globalization (>= 4.3) - framework: dnxcore50, >= netstandard13 System.Globalization (>= 4.3) - framework: dnxcore50, >= netstandard13
System.Resources.ResourceManager (>= 4.3) - framework: dnxcore50, >= netstandard13 System.Resources.ResourceManager (>= 4.3) - framework: dnxcore50, >= netstandard13
System.Runtime (>= 4.3) - framework: dnxcore50, netstandard11, >= netstandard13 System.Runtime (>= 4.3) - framework: dnxcore50, netstandard11, >= netstandard13
System.Runtime.Extensions (>= 4.3) - framework: dnxcore50, >= netstandard13 System.Runtime.Extensions (>= 4.3) - framework: dnxcore50, >= netstandard13
System.Security.Cryptography.Algorithms (4.3) - framework: >= net452, >= netstandard13, netstandard14 System.Security.Cryptography.Algorithms (4.3) - framework: >= net10, >= netstandard13, netstandard14, netstandard15
Microsoft.NETCore.Platforms (>= 1.1) - framework: dnxcore50, >= netstandard16 Microsoft.NETCore.Platforms (>= 1.1) - framework: dnxcore50, >= netstandard16
runtime.native.System.Security.Cryptography.Apple (>= 4.3) - framework: >= netstandard16 runtime.native.System.Security.Cryptography.Apple (>= 4.3) - framework: >= netstandard16
runtime.native.System.Security.Cryptography.OpenSsl (>= 4.3) - framework: >= netstandard16 runtime.native.System.Security.Cryptography.OpenSsl (>= 4.3) - framework: >= netstandard16
@ -381,7 +438,7 @@ NUGET
System.Security.Cryptography.Encoding (>= 4.3) - framework: netstandard14, >= netstandard16 System.Security.Cryptography.Encoding (>= 4.3) - framework: netstandard14, >= netstandard16
System.Security.Cryptography.Primitives (>= 4.3) - framework: net46, net461, >= net463, netstandard13, netstandard14, >= netstandard16 System.Security.Cryptography.Primitives (>= 4.3) - framework: net46, net461, >= net463, netstandard13, netstandard14, >= netstandard16
System.Text.Encoding (>= 4.3) - framework: netstandard14, >= netstandard16 System.Text.Encoding (>= 4.3) - framework: netstandard14, >= netstandard16
System.Security.Cryptography.Csp (4.3) - framework: >= net46, >= netstandard16 System.Security.Cryptography.Csp (4.3) - framework: >= net46, >= netstandard13
Microsoft.NETCore.Platforms (>= 1.1) - framework: >= netstandard13 Microsoft.NETCore.Platforms (>= 1.1) - framework: >= netstandard13
System.IO (>= 4.3) - framework: >= netstandard13 System.IO (>= 4.3) - framework: >= netstandard13
System.Reflection (>= 4.3) - framework: >= netstandard13 System.Reflection (>= 4.3) - framework: >= netstandard13
@ -395,7 +452,7 @@ NUGET
System.Security.Cryptography.Primitives (>= 4.3) - framework: >= net46, >= netstandard13 System.Security.Cryptography.Primitives (>= 4.3) - framework: >= net46, >= netstandard13
System.Text.Encoding (>= 4.3) - framework: >= netstandard13 System.Text.Encoding (>= 4.3) - framework: >= netstandard13
System.Threading (>= 4.3) - framework: >= netstandard13 System.Threading (>= 4.3) - framework: >= netstandard13
System.Security.Cryptography.Encoding (4.3) - framework: >= net452, >= netstandard13, netstandard14 System.Security.Cryptography.Encoding (4.3) - framework: >= net10, >= netstandard13, netstandard14, netstandard15
Microsoft.NETCore.Platforms (>= 1.1) - framework: >= netstandard13 Microsoft.NETCore.Platforms (>= 1.1) - framework: >= netstandard13
runtime.native.System.Security.Cryptography.OpenSsl (>= 4.3) - framework: >= netstandard13 runtime.native.System.Security.Cryptography.OpenSsl (>= 4.3) - framework: >= netstandard13
System.Collections (>= 4.3) - framework: >= netstandard13 System.Collections (>= 4.3) - framework: >= netstandard13
@ -408,8 +465,8 @@ NUGET
System.Runtime.InteropServices (>= 4.3) - framework: >= netstandard13 System.Runtime.InteropServices (>= 4.3) - framework: >= netstandard13
System.Security.Cryptography.Primitives (>= 4.3) - framework: >= netstandard13 System.Security.Cryptography.Primitives (>= 4.3) - framework: >= netstandard13
System.Text.Encoding (>= 4.3) - framework: >= netstandard13 System.Text.Encoding (>= 4.3) - framework: >= netstandard13
System.Security.Cryptography.OpenSsl (4.3) - framework: >= net452, >= netstandard16 System.Security.Cryptography.OpenSsl (4.3) - framework: >= net10, >= netstandard16
runtime.native.System.Security.Cryptography.OpenSsl (>= 4.3) runtime.native.System.Security.Cryptography.OpenSsl (>= 4.3) - framework: >= net463, >= netstandard16, monoandroid, monotouch, xamarinios, xamarinmac
System.Collections (>= 4.3) - framework: >= netstandard16 System.Collections (>= 4.3) - framework: >= netstandard16
System.IO (>= 4.3) - framework: >= net463, >= netstandard16 System.IO (>= 4.3) - framework: >= net463, >= netstandard16
System.Resources.ResourceManager (>= 4.3) - framework: >= netstandard16 System.Resources.ResourceManager (>= 4.3) - framework: >= netstandard16
@ -422,7 +479,7 @@ NUGET
System.Security.Cryptography.Encoding (>= 4.3) - framework: >= net463, >= netstandard16 System.Security.Cryptography.Encoding (>= 4.3) - framework: >= net463, >= netstandard16
System.Security.Cryptography.Primitives (>= 4.3) - framework: >= net463, >= netstandard16 System.Security.Cryptography.Primitives (>= 4.3) - framework: >= net463, >= netstandard16
System.Text.Encoding (>= 4.3) - framework: >= netstandard16 System.Text.Encoding (>= 4.3) - framework: >= netstandard16
System.Security.Cryptography.Primitives (4.3) - framework: >= net452, >= netstandard13, netstandard14 System.Security.Cryptography.Primitives (4.3) - framework: >= net10, >= netstandard13, netstandard14, netstandard15
System.Diagnostics.Debug (>= 4.3) - framework: >= netstandard13 System.Diagnostics.Debug (>= 4.3) - framework: >= netstandard13
System.Globalization (>= 4.3) - framework: >= netstandard13 System.Globalization (>= 4.3) - framework: >= netstandard13
System.IO (>= 4.3) - framework: >= netstandard13 System.IO (>= 4.3) - framework: >= netstandard13
@ -430,7 +487,7 @@ NUGET
System.Runtime (>= 4.3) - framework: >= netstandard13 System.Runtime (>= 4.3) - framework: >= netstandard13
System.Threading (>= 4.3) - framework: >= netstandard13 System.Threading (>= 4.3) - framework: >= netstandard13
System.Threading.Tasks (>= 4.3) - framework: >= netstandard13 System.Threading.Tasks (>= 4.3) - framework: >= netstandard13
System.Security.Cryptography.X509Certificates (4.3) - framework: >= net46, >= netstandard13 System.Security.Cryptography.X509Certificates (4.3) - framework: >= net46, >= netstandard13, netstandard14, netstandard15
Microsoft.NETCore.Platforms (>= 1.1) - framework: dnxcore50, >= netstandard16 Microsoft.NETCore.Platforms (>= 1.1) - framework: dnxcore50, >= netstandard16
runtime.native.System (>= 4.3) - framework: >= netstandard16 runtime.native.System (>= 4.3) - framework: >= netstandard16
runtime.native.System.Net.Http (>= 4.3) - framework: >= netstandard16 runtime.native.System.Net.Http (>= 4.3) - framework: >= netstandard16
@ -456,38 +513,52 @@ NUGET
System.Security.Cryptography.Primitives (>= 4.3) - framework: dnxcore50, >= netstandard16 System.Security.Cryptography.Primitives (>= 4.3) - framework: dnxcore50, >= netstandard16
System.Text.Encoding (>= 4.3) - framework: dnxcore50, >= netstandard16 System.Text.Encoding (>= 4.3) - framework: dnxcore50, >= netstandard16
System.Threading (>= 4.3) - framework: dnxcore50, >= netstandard16 System.Threading (>= 4.3) - framework: dnxcore50, >= netstandard16
System.Text.Encoding (4.3) - framework: >= net452, dnxcore50, >= netstandard11, netstandard13, netstandard14 System.Text.Encoding (4.3) - framework: >= net10, >= netstandard11, netstandard12, netstandard13, netstandard14, netstandard15
Microsoft.NETCore.Platforms (>= 1.1) - framework: dnxcore50, netstandard10, >= netstandard13 Microsoft.NETCore.Platforms (>= 1.1) - framework: dnxcore50, netstandard10, >= netstandard13
Microsoft.NETCore.Targets (>= 1.1) - framework: dnxcore50, netstandard10, >= netstandard13 Microsoft.NETCore.Targets (>= 1.1) - framework: dnxcore50, netstandard10, >= netstandard13
System.Runtime (>= 4.3) - framework: dnxcore50, netstandard10, >= netstandard13 System.Runtime (>= 4.3) - framework: dnxcore50, netstandard10, >= netstandard13
System.Text.Encoding.Extensions (4.3) - framework: >= net452, >= netstandard11 System.Text.Encoding.Extensions (4.3) - framework: >= net10, >= netstandard11, netstandard12, netstandard13, netstandard14, netstandard15
Microsoft.NETCore.Platforms (>= 1.1) - framework: dnxcore50, netstandard10, >= netstandard13 Microsoft.NETCore.Platforms (>= 1.1) - framework: dnxcore50, netstandard10, >= netstandard13
Microsoft.NETCore.Targets (>= 1.1) - framework: dnxcore50, netstandard10, >= netstandard13 Microsoft.NETCore.Targets (>= 1.1) - framework: dnxcore50, netstandard10, >= netstandard13
System.Runtime (>= 4.3) - framework: dnxcore50, netstandard10, >= netstandard13 System.Runtime (>= 4.3) - framework: dnxcore50, netstandard10, >= netstandard13
System.Text.Encoding (>= 4.3) - framework: dnxcore50, netstandard10, >= netstandard13 System.Text.Encoding (>= 4.3) - framework: dnxcore50, netstandard10, >= netstandard13
System.Text.RegularExpressions (4.3) - framework: >= net452, dnxcore50, >= netstandard11 System.Text.RegularExpressions (4.3) - framework: >= net10, >= netstandard11, netstandard12, netstandard13, netstandard14, netstandard15
System.Collections (>= 4.3) - framework: dnxcore50, >= netstandard16 System.Collections (>= 4.3) - framework: dnxcore50, >= netstandard16
System.Globalization (>= 4.3) - framework: dnxcore50, >= netstandard16 System.Globalization (>= 4.3) - framework: dnxcore50, >= netstandard16
System.Resources.ResourceManager (>= 4.3) - framework: dnxcore50, >= netstandard16 System.Resources.ResourceManager (>= 4.3) - framework: dnxcore50, >= netstandard16
System.Runtime (>= 4.3) - framework: dnxcore50, netstandard10, netstandard13, >= netstandard16 System.Runtime (>= 4.3) - framework: dnxcore50, netstandard10, netstandard13, >= netstandard16, netcore11
System.Runtime.Extensions (>= 4.3) - framework: dnxcore50, >= netstandard16 System.Runtime.Extensions (>= 4.3) - framework: dnxcore50, >= netstandard16
System.Threading (>= 4.3) - framework: dnxcore50, >= netstandard16 System.Threading (>= 4.3) - framework: dnxcore50, >= netstandard16
System.Threading (4.3) - framework: >= net452, dnxcore50, >= netstandard11, netstandard13, netstandard14 System.Threading (4.3) - framework: >= net10, >= netstandard11, netstandard12, netstandard13, netstandard14, netstandard15
System.Runtime (>= 4.3) - framework: dnxcore50, netstandard10, >= netstandard13 System.Runtime (>= 4.3) - framework: dnxcore50, netstandard10, >= netstandard13
System.Threading.Tasks (>= 4.3) - framework: dnxcore50, netstandard10, >= netstandard13 System.Threading.Tasks (>= 4.3) - framework: dnxcore50, netstandard10, >= netstandard13
System.Threading.Tasks (4.3) - framework: >= net452, dnxcore50, >= netstandard11, netstandard13, netstandard14 System.Threading.Tasks (4.3) - framework: >= net10, >= netstandard11, netstandard12, netstandard13, netstandard14, netstandard15
Microsoft.NETCore.Platforms (>= 1.1) - framework: dnxcore50, netstandard10, >= netstandard13 Microsoft.NETCore.Platforms (>= 1.1) - framework: dnxcore50, netstandard10, >= netstandard13
Microsoft.NETCore.Targets (>= 1.1) - framework: dnxcore50, netstandard10, >= netstandard13 Microsoft.NETCore.Targets (>= 1.1) - framework: dnxcore50, netstandard10, >= netstandard13
System.Runtime (>= 4.3) - framework: dnxcore50, netstandard10, >= netstandard13 System.Runtime (>= 4.3) - framework: dnxcore50, netstandard10, >= netstandard13
System.Threading.Tasks.Extensions (4.3) - framework: >= net452, >= netstandard13 System.Threading.Tasks.Extensions (4.3) - framework: >= net10, >= netstandard13, netstandard14, netstandard15
System.Collections (>= 4.3) - framework: >= netstandard10 System.Collections (>= 4.3) - framework: >= netstandard10
System.Runtime (>= 4.3) - framework: >= netstandard10 System.Runtime (>= 4.3) - framework: >= netstandard10
System.Threading.Tasks (>= 4.3) - framework: >= netstandard10 System.Threading.Tasks (>= 4.3) - framework: >= netstandard10
System.Threading.Timer (4.3) - framework: >= net452, >= netstandard12 System.Threading.Tasks.Parallel (4.3) - framework: >= net10, >= netstandard16
System.Collections.Concurrent (>= 4.3) - framework: dnxcore50, netstandard11, >= netstandard13
System.Diagnostics.Debug (>= 4.3) - framework: dnxcore50, >= netstandard13
System.Diagnostics.Tracing (>= 4.3) - framework: dnxcore50, >= netstandard13
System.Resources.ResourceManager (>= 4.3) - framework: dnxcore50, >= netstandard13
System.Runtime (>= 4.3) - framework: dnxcore50, netstandard11, >= netstandard13
System.Runtime.Extensions (>= 4.3) - framework: dnxcore50, >= netstandard13
System.Threading (>= 4.3) - framework: dnxcore50, >= netstandard13
System.Threading.Tasks (>= 4.3) - framework: dnxcore50, netstandard11, >= netstandard13
System.Threading.Thread (4.3) - framework: >= net10, >= netstandard16
System.Runtime (>= 4.3) - framework: >= netstandard13
System.Threading.ThreadPool (4.3) - framework: >= net10, >= netstandard16
System.Runtime (>= 4.3) - framework: >= netstandard13
System.Runtime.Handles (>= 4.3) - framework: >= netstandard13
System.Threading.Timer (4.3) - framework: >= net10, >= netstandard12, netstandard13, netstandard14, netstandard15
Microsoft.NETCore.Platforms (>= 1.1) - framework: dnxcore50, >= netstandard12 Microsoft.NETCore.Platforms (>= 1.1) - framework: dnxcore50, >= netstandard12
Microsoft.NETCore.Targets (>= 1.1) - framework: dnxcore50, >= netstandard12 Microsoft.NETCore.Targets (>= 1.1) - framework: dnxcore50, >= netstandard12
System.Runtime (>= 4.3) - framework: dnxcore50, >= netstandard12 System.Runtime (>= 4.3) - framework: dnxcore50, >= netstandard12
System.Xml.ReaderWriter (4.3) - framework: >= net452, >= netstandard11 System.Xml.ReaderWriter (4.3) - framework: >= net10, >= netstandard11, netstandard12, netstandard13, netstandard14, netstandard15
System.Collections (>= 4.3) - framework: dnxcore50, >= netstandard13 System.Collections (>= 4.3) - framework: dnxcore50, >= netstandard13
System.Diagnostics.Debug (>= 4.3) - framework: dnxcore50, >= netstandard13 System.Diagnostics.Debug (>= 4.3) - framework: dnxcore50, >= netstandard13
System.Globalization (>= 4.3) - framework: dnxcore50, >= netstandard13 System.Globalization (>= 4.3) - framework: dnxcore50, >= netstandard13
@ -503,7 +574,7 @@ NUGET
System.Text.RegularExpressions (>= 4.3) - framework: dnxcore50, >= netstandard13 System.Text.RegularExpressions (>= 4.3) - framework: dnxcore50, >= netstandard13
System.Threading.Tasks (>= 4.3) - framework: dnxcore50, netstandard10, >= netstandard13 System.Threading.Tasks (>= 4.3) - framework: dnxcore50, netstandard10, >= netstandard13
System.Threading.Tasks.Extensions (>= 4.3) - framework: dnxcore50, >= netstandard13 System.Threading.Tasks.Extensions (>= 4.3) - framework: dnxcore50, >= netstandard13
System.Xml.XDocument (4.3) - framework: >= net452, >= netstandard11 System.Xml.XDocument (4.3) - framework: >= net10, >= netstandard11, netstandard12, netstandard13, netstandard14, netstandard15
System.Collections (>= 4.3) - framework: dnxcore50, >= netstandard13 System.Collections (>= 4.3) - framework: dnxcore50, >= netstandard13
System.Diagnostics.Debug (>= 4.3) - framework: dnxcore50, >= netstandard13 System.Diagnostics.Debug (>= 4.3) - framework: dnxcore50, >= netstandard13
System.Diagnostics.Tools (>= 4.3) - framework: dnxcore50, >= netstandard13 System.Diagnostics.Tools (>= 4.3) - framework: dnxcore50, >= netstandard13
@ -518,22 +589,15 @@ NUGET
System.Xml.ReaderWriter (>= 4.3) - framework: dnxcore50, netstandard10, >= netstandard13 System.Xml.ReaderWriter (>= 4.3) - framework: dnxcore50, netstandard10, >= netstandard13
xunit.abstractions (2.0.1) - framework: >= net452, >= netstandard11 xunit.abstractions (2.0.1) - framework: >= net452, >= netstandard11
NETStandard.Library (>= 1.6) - framework: >= netstandard10 NETStandard.Library (>= 1.6) - framework: >= netstandard10
xunit.assert (2.1) xunit.assert (2.2)
System.Collections (>= 4.0) - framework: dnxcore50 NETStandard.Library (>= 1.6) - framework: >= netstandard11
System.Diagnostics.Debug (>= 4.0) - framework: dnxcore50 xunit.core (2.2) - framework: >= netstandard16
System.Globalization (>= 4.0) - framework: dnxcore50 xunit.extensibility.core (2.2)
System.Linq (>= 4.0) - framework: dnxcore50 xunit.extensibility.execution (2.2)
System.ObjectModel (>= 4.0) - framework: dnxcore50
System.Reflection (>= 4.0) - framework: dnxcore50
System.Reflection.Extensions (>= 4.0) - framework: dnxcore50
System.Runtime (>= 4.0) - framework: dnxcore50
System.Runtime.Extensions (>= 4.0) - framework: dnxcore50
System.Text.RegularExpressions (>= 4.0) - framework: dnxcore50
System.Threading.Tasks (>= 4.0) - framework: dnxcore50
xunit.extensibility.core (2.2) - framework: >= net452, >= netstandard11 xunit.extensibility.core (2.2) - framework: >= net452, >= netstandard11
NETStandard.Library (>= 1.6) - framework: >= netstandard11 NETStandard.Library (>= 1.6) - framework: >= netstandard11
xunit.abstractions (>= 2.0.1) - framework: >= net452, >= netstandard11 xunit.abstractions (>= 2.0.1) - framework: >= net452, >= netstandard11
xunit.extensibility.execution (2.2) xunit.extensibility.execution (2.2) - framework: >= net10, >= netstandard10
NETStandard.Library (>= 1.6) - framework: >= netstandard11 NETStandard.Library (>= 1.6) - framework: >= netstandard11
xunit.extensibility.core (2.2) - framework: >= net452, >= netstandard11 xunit.extensibility.core (2.2) - framework: >= net452, >= netstandard11
xunit.runner.console (2.1) xunit.runner.console (2.2)

View file

@ -5,13 +5,13 @@ using System.Reflection;
[assembly: AssemblyTitleAttribute("Generator.Bind")] [assembly: AssemblyTitleAttribute("Generator.Bind")]
[assembly: AssemblyProductAttribute("OpenTK")] [assembly: AssemblyProductAttribute("OpenTK")]
[assembly: AssemblyDescriptionAttribute("A set of fast, low-level C# bindings for OpenGL, OpenGL ES and OpenAL.")] [assembly: AssemblyDescriptionAttribute("A set of fast, low-level C# bindings for OpenGL, OpenGL ES and OpenAL.")]
[assembly: AssemblyVersionAttribute("2.0.0")] [assembly: AssemblyVersionAttribute("3.0.0")]
[assembly: AssemblyFileVersionAttribute("2.0.0")] [assembly: AssemblyFileVersionAttribute("3.0.0")]
[assembly: CLSCompliantAttribute(true)] [assembly: CLSCompliantAttribute(true)]
[assembly: AssemblyCopyrightAttribute("Copyright (c) 2006 - 2016 Stefanos Apostolopoulos <stapostol@gmail.com> for the Open Toolkit library.")] [assembly: AssemblyCopyrightAttribute("Copyright (c) 2006 - 2016 Stefanos Apostolopoulos <stapostol@gmail.com> for the Open Toolkit library.")]
namespace System { namespace System {
internal static class AssemblyVersionInformation { internal static class AssemblyVersionInformation {
internal const string Version = "2.0.0"; internal const string Version = "3.0.0";
internal const string InformationalVersion = "2.0.0"; internal const string InformationalVersion = "3.0.0";
} }
} }

View file

@ -20,11 +20,11 @@ namespace Bind
OverridesFiles = new List<string>(); OverridesFiles = new List<string>();
} }
public string DefaultInputPath = "../../../Source/Bind/Specifications"; public string DefaultInputPath = "../../../Generator.Bind/Specifications";
public string DefaultOutputPath = "../../../Source/OpenTK/Graphics/OpenGL"; public string DefaultOutputPath = "../../../Source/OpenTK/Graphics/OpenGL";
public string DefaultOutputNamespace = "OpenTK.Graphics.OpenGL"; public string DefaultOutputNamespace = "OpenTK.Graphics.OpenGL";
public string DefaultDocPath = "../../../Source/Bind/Specifications/Docs"; public string DefaultDocPath = "../../../Generator.Bind/Specifications/Docs";
public string DefaultFallbackDocPath = "../../../Source/Bind/Specifications/Docs/GL"; public string DefaultFallbackDocPath = "../../../Generator.Bind/Specifications/Docs/GL";
public string DefaultLicenseFile = "License.txt"; public string DefaultLicenseFile = "License.txt";
public string DefaultLanguageTypeMapFile = "csharp.tm"; public string DefaultLanguageTypeMapFile = "csharp.tm";
public string DefaultKeywordEscapeCharacter = "@"; public string DefaultKeywordEscapeCharacter = "@";

View file

@ -5,13 +5,13 @@ using System.Reflection;
[assembly: AssemblyTitleAttribute("Generator.Convert")] [assembly: AssemblyTitleAttribute("Generator.Convert")]
[assembly: AssemblyProductAttribute("OpenTK")] [assembly: AssemblyProductAttribute("OpenTK")]
[assembly: AssemblyDescriptionAttribute("A set of fast, low-level C# bindings for OpenGL, OpenGL ES and OpenAL.")] [assembly: AssemblyDescriptionAttribute("A set of fast, low-level C# bindings for OpenGL, OpenGL ES and OpenAL.")]
[assembly: AssemblyVersionAttribute("2.0.0")] [assembly: AssemblyVersionAttribute("3.0.0")]
[assembly: AssemblyFileVersionAttribute("2.0.0")] [assembly: AssemblyFileVersionAttribute("3.0.0")]
[assembly: CLSCompliantAttribute(true)] [assembly: CLSCompliantAttribute(true)]
[assembly: AssemblyCopyrightAttribute("Copyright (c) 2006 - 2016 Stefanos Apostolopoulos <stapostol@gmail.com> for the Open Toolkit library.")] [assembly: AssemblyCopyrightAttribute("Copyright (c) 2006 - 2016 Stefanos Apostolopoulos <stapostol@gmail.com> for the Open Toolkit library.")]
namespace System { namespace System {
internal static class AssemblyVersionInformation { internal static class AssemblyVersionInformation {
internal const string Version = "2.0.0"; internal const string Version = "3.0.0";
internal const string InformationalVersion = "2.0.0"; internal const string InformationalVersion = "3.0.0";
} }
} }

View file

@ -0,0 +1,56 @@
using System;
using Mono.Cecil.Cil;
namespace OpenTK.Rewrite
{
/// <summary>
/// Acts as a unique identifier for a generated named variable that can be passed between methods. Replaces uses of
/// variable names from Mono.Cecil.
/// </summary>
internal sealed class GeneratedVariableIdentifier
{
/// <summary>
/// The <see cref="MethodBody"/> which the variable is in.
/// </summary>
public MethodBody Body { get; }
/// <summary>
/// The <see cref="VariableDefinition"/> which the variable idetifier maps to.
/// </summary>
public VariableDefinition Definition { get; }
/// <summary>
/// The name of the generated variable.
/// </summary>
public string Name { get; }
/// <summary>
/// Initializes a new instance of the <see cref="GeneratedVariableIdentifier"/> class.
/// </summary>
/// <param name="body">The method body which the variable is in.</param>
/// <param name="name">The name of the generated variable.</param>
/// <param name="index">The index of the generated variable in its method.</param>
/// <exception cref="ArgumentException"></exception>
public GeneratedVariableIdentifier(MethodBody body, VariableDefinition definition, string name)
{
if (body == null)
{
throw new ArgumentException("The body argument cannot be null.", nameof(body));
}
if (definition == null)
{
throw new ArgumentException("The definition argument cannot be null.", nameof(body));
}
if (string.IsNullOrEmpty(name))
{
throw new ArgumentException("The name argument cannot be null or empty", nameof(name));
}
this.Body = body;
this.Definition = definition;
this.Name = name;
}
}
}

View file

@ -52,6 +52,7 @@
<Reference Include="System.Core" /> <Reference Include="System.Core" />
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
<Compile Include="GeneratedVariableIdentifier.cs" />
<Compile Include="Program.cs" /> <Compile Include="Program.cs" />
<Compile Include="Properties\AssemblyInfo.cs" /> <Compile Include="Properties\AssemblyInfo.cs" />
</ItemGroup> </ItemGroup>
@ -84,27 +85,13 @@
</MonoDevelop> </MonoDevelop>
</ProjectExtensions> </ProjectExtensions>
<Choose> <Choose>
<When Condition="$(TargetFrameworkIdentifier) == '.NETFramework' And ($(TargetFrameworkVersion) == 'v2.0' Or $(TargetFrameworkVersion) == 'v3.0')">
<ItemGroup>
<Reference Include="Mono.Cecil.Mdb">
<HintPath>..\..\packages\Mono.Cecil\lib\net20\Mono.Cecil.Mdb.dll</HintPath>
<Private>True</Private>
<Paket>True</Paket>
</Reference>
<Reference Include="Mono.Cecil.Pdb">
<HintPath>..\..\packages\Mono.Cecil\lib\net20\Mono.Cecil.Pdb.dll</HintPath>
<Private>True</Private>
<Paket>True</Paket>
</Reference>
<Reference Include="Mono.Cecil">
<HintPath>..\..\packages\Mono.Cecil\lib\net20\Mono.Cecil.dll</HintPath>
<Private>True</Private>
<Paket>True</Paket>
</Reference>
</ItemGroup>
</When>
<When Condition="$(TargetFrameworkIdentifier) == '.NETFramework' And $(TargetFrameworkVersion) == 'v3.5'"> <When Condition="$(TargetFrameworkIdentifier) == '.NETFramework' And $(TargetFrameworkVersion) == 'v3.5'">
<ItemGroup> <ItemGroup>
<Reference Include="Mono.Cecil">
<HintPath>..\..\packages\Mono.Cecil\lib\net35\Mono.Cecil.dll</HintPath>
<Private>True</Private>
<Paket>True</Paket>
</Reference>
<Reference Include="Mono.Cecil.Mdb"> <Reference Include="Mono.Cecil.Mdb">
<HintPath>..\..\packages\Mono.Cecil\lib\net35\Mono.Cecil.Mdb.dll</HintPath> <HintPath>..\..\packages\Mono.Cecil\lib\net35\Mono.Cecil.Mdb.dll</HintPath>
<Private>True</Private> <Private>True</Private>
@ -120,15 +107,15 @@
<Private>True</Private> <Private>True</Private>
<Paket>True</Paket> <Paket>True</Paket>
</Reference> </Reference>
</ItemGroup>
</When>
<When Condition="$(TargetFrameworkIdentifier) == '.NETFramework' And ($(TargetFrameworkVersion) == 'v4.0' Or $(TargetFrameworkVersion) == 'v4.5' Or $(TargetFrameworkVersion) == 'v4.5.1' Or $(TargetFrameworkVersion) == 'v4.5.2' Or $(TargetFrameworkVersion) == 'v4.5.3' Or $(TargetFrameworkVersion) == 'v4.6' Or $(TargetFrameworkVersion) == 'v4.6.1' Or $(TargetFrameworkVersion) == 'v4.6.2' Or $(TargetFrameworkVersion) == 'v4.6.3' Or $(TargetFrameworkVersion) == 'v4.7')">
<ItemGroup>
<Reference Include="Mono.Cecil"> <Reference Include="Mono.Cecil">
<HintPath>..\..\packages\Mono.Cecil\lib\net35\Mono.Cecil.dll</HintPath> <HintPath>..\..\packages\Mono.Cecil\lib\net40\Mono.Cecil.dll</HintPath>
<Private>True</Private> <Private>True</Private>
<Paket>True</Paket> <Paket>True</Paket>
</Reference> </Reference>
</ItemGroup>
</When>
<When Condition="$(TargetFrameworkIdentifier) == '.NETFramework' And $(TargetFrameworkVersion) == 'v4.0'">
<ItemGroup>
<Reference Include="Mono.Cecil.Mdb"> <Reference Include="Mono.Cecil.Mdb">
<HintPath>..\..\packages\Mono.Cecil\lib\net40\Mono.Cecil.Mdb.dll</HintPath> <HintPath>..\..\packages\Mono.Cecil\lib\net40\Mono.Cecil.Mdb.dll</HintPath>
<Private>True</Private> <Private>True</Private>
@ -144,50 +131,653 @@
<Private>True</Private> <Private>True</Private>
<Paket>True</Paket> <Paket>True</Paket>
</Reference> </Reference>
</ItemGroup>
</When>
<When Condition="($(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6' Or $(TargetFrameworkVersion) == 'v2.0')) Or ($(TargetFrameworkIdentifier) == '.NETCoreApp' And ($(TargetFrameworkVersion) == 'v1.0' Or $(TargetFrameworkVersion) == 'v1.1' Or $(TargetFrameworkVersion) == 'v2.0'))">
<ItemGroup>
<Reference Include="Mono.Cecil"> <Reference Include="Mono.Cecil">
<HintPath>..\..\packages\Mono.Cecil\lib\net40\Mono.Cecil.dll</HintPath> <HintPath>..\..\packages\Mono.Cecil\lib\netstandard1.3\Mono.Cecil.dll</HintPath>
<Private>True</Private> <Private>True</Private>
<Paket>True</Paket> <Paket>True</Paket>
</Reference> </Reference>
</ItemGroup>
</When>
<When Condition="$(TargetFrameworkIdentifier) == '.NETFramework' And ($(TargetFrameworkVersion) == 'v4.5' Or $(TargetFrameworkVersion) == 'v4.5.1' Or $(TargetFrameworkVersion) == 'v4.5.2' Or $(TargetFrameworkVersion) == 'v4.5.3' Or $(TargetFrameworkVersion) == 'v4.6' Or $(TargetFrameworkVersion) == 'v4.6.1' Or $(TargetFrameworkVersion) == 'v4.6.2' Or $(TargetFrameworkVersion) == 'v4.6.3')">
<ItemGroup>
<Reference Include="Mono.Cecil.Mdb"> <Reference Include="Mono.Cecil.Mdb">
<HintPath>..\..\packages\Mono.Cecil\lib\net45\Mono.Cecil.Mdb.dll</HintPath> <HintPath>..\..\packages\Mono.Cecil\lib\netstandard1.3\Mono.Cecil.Mdb.dll</HintPath>
<Private>True</Private> <Private>True</Private>
<Paket>True</Paket> <Paket>True</Paket>
</Reference> </Reference>
<Reference Include="Mono.Cecil.Pdb"> <Reference Include="Mono.Cecil.Pdb">
<HintPath>..\..\packages\Mono.Cecil\lib\net45\Mono.Cecil.Pdb.dll</HintPath> <HintPath>..\..\packages\Mono.Cecil\lib\netstandard1.3\Mono.Cecil.Pdb.dll</HintPath>
<Private>True</Private> <Private>True</Private>
<Paket>True</Paket> <Paket>True</Paket>
</Reference> </Reference>
<Reference Include="Mono.Cecil.Rocks"> <Reference Include="Mono.Cecil.Rocks">
<HintPath>..\..\packages\Mono.Cecil\lib\net45\Mono.Cecil.Rocks.dll</HintPath> <HintPath>..\..\packages\Mono.Cecil\lib\netstandard1.3\Mono.Cecil.Rocks.dll</HintPath>
<Private>True</Private>
<Paket>True</Paket>
</Reference>
<Reference Include="Mono.Cecil">
<HintPath>..\..\packages\Mono.Cecil\lib\net45\Mono.Cecil.dll</HintPath>
<Private>True</Private>
<Paket>True</Paket>
</Reference>
</ItemGroup>
</When>
<When Condition="$(TargetFrameworkIdentifier) == 'Silverlight' And $(TargetFrameworkVersion) == 'v5.0'">
<ItemGroup>
<Reference Include="Mono.Cecil.Rocks">
<HintPath>..\..\packages\Mono.Cecil\lib\sl5\Mono.Cecil.Rocks.dll</HintPath>
<Private>True</Private>
<Paket>True</Paket>
</Reference>
<Reference Include="Mono.Cecil">
<HintPath>..\..\packages\Mono.Cecil\lib\sl5\Mono.Cecil.dll</HintPath>
<Private>True</Private> <Private>True</Private>
<Paket>True</Paket> <Paket>True</Paket>
</Reference> </Reference>
</ItemGroup> </ItemGroup>
</When> </When>
</Choose> </Choose>
<Choose>
<When Condition="$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.1' Or $(TargetFrameworkVersion) == 'v1.2')">
<ItemGroup>
<Reference Include="System.Collections">
<HintPath>..\..\packages\System.Collections\ref\netstandard1.0\System.Collections.dll</HintPath>
<Private>False</Private>
<Paket>True</Paket>
</Reference>
</ItemGroup>
</When>
<When Condition="$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6' Or $(TargetFrameworkVersion) == 'v2.0')">
<ItemGroup>
<Reference Include="System.Collections">
<HintPath>..\..\packages\System.Collections\ref\netstandard1.3\System.Collections.dll</HintPath>
<Private>False</Private>
<Paket>True</Paket>
</Reference>
</ItemGroup>
</When>
</Choose>
<Choose>
<When Condition="$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6' Or $(TargetFrameworkVersion) == 'v2.0')">
<ItemGroup>
<Reference Include="System.Collections.Concurrent">
<HintPath>..\..\packages\System.Collections.Concurrent\lib\netstandard1.3\System.Collections.Concurrent.dll</HintPath>
<Private>True</Private>
<Paket>True</Paket>
</Reference>
</ItemGroup>
</When>
</Choose>
<Choose>
<When Condition="$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.1' Or $(TargetFrameworkVersion) == 'v1.2')">
<ItemGroup>
<Reference Include="System.Diagnostics.Debug">
<HintPath>..\..\packages\System.Diagnostics.Debug\ref\netstandard1.0\System.Diagnostics.Debug.dll</HintPath>
<Private>False</Private>
<Paket>True</Paket>
</Reference>
</ItemGroup>
</When>
<When Condition="$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6' Or $(TargetFrameworkVersion) == 'v2.0')">
<ItemGroup>
<Reference Include="System.Diagnostics.Debug">
<HintPath>..\..\packages\System.Diagnostics.Debug\ref\netstandard1.3\System.Diagnostics.Debug.dll</HintPath>
<Private>False</Private>
<Paket>True</Paket>
</Reference>
</ItemGroup>
</When>
</Choose>
<Choose>
<When Condition="$(TargetFrameworkIdentifier) == '.NETFramework' And ($(TargetFrameworkVersion) == 'v4.6.2' Or $(TargetFrameworkVersion) == 'v4.6.3' Or $(TargetFrameworkVersion) == 'v4.7')">
<ItemGroup>
<Reference Include="mscorlib">
<Paket>True</Paket>
</Reference>
<Reference Include="System.Diagnostics.Tracing">
<HintPath>..\..\packages\System.Diagnostics.Tracing\lib\net462\System.Diagnostics.Tracing.dll</HintPath>
<Private>True</Private>
<Paket>True</Paket>
</Reference>
</ItemGroup>
</When>
<When Condition="$(TargetFrameworkIdentifier) == '.NETStandard' And $(TargetFrameworkVersion) == 'v1.1'">
<ItemGroup>
<Reference Include="System.Diagnostics.Tracing">
<HintPath>..\..\packages\System.Diagnostics.Tracing\ref\netstandard1.1\System.Diagnostics.Tracing.dll</HintPath>
<Private>False</Private>
<Paket>True</Paket>
</Reference>
</ItemGroup>
</When>
<When Condition="$(TargetFrameworkIdentifier) == '.NETStandard' And $(TargetFrameworkVersion) == 'v1.2'">
<ItemGroup>
<Reference Include="System.Diagnostics.Tracing">
<HintPath>..\..\packages\System.Diagnostics.Tracing\ref\netstandard1.2\System.Diagnostics.Tracing.dll</HintPath>
<Private>False</Private>
<Paket>True</Paket>
</Reference>
</ItemGroup>
</When>
<When Condition="$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4')">
<ItemGroup>
<Reference Include="System.Diagnostics.Tracing">
<HintPath>..\..\packages\System.Diagnostics.Tracing\ref\netstandard1.3\System.Diagnostics.Tracing.dll</HintPath>
<Private>False</Private>
<Paket>True</Paket>
</Reference>
</ItemGroup>
</When>
<When Condition="$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6' Or $(TargetFrameworkVersion) == 'v2.0')">
<ItemGroup>
<Reference Include="System.Diagnostics.Tracing">
<HintPath>..\..\packages\System.Diagnostics.Tracing\ref\netstandard1.5\System.Diagnostics.Tracing.dll</HintPath>
<Private>False</Private>
<Paket>True</Paket>
</Reference>
</ItemGroup>
</When>
</Choose>
<Choose>
<When Condition="$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.1' Or $(TargetFrameworkVersion) == 'v1.2')">
<ItemGroup>
<Reference Include="System.Globalization">
<HintPath>..\..\packages\System.Globalization\ref\netstandard1.0\System.Globalization.dll</HintPath>
<Private>False</Private>
<Paket>True</Paket>
</Reference>
</ItemGroup>
</When>
<When Condition="$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6' Or $(TargetFrameworkVersion) == 'v2.0')">
<ItemGroup>
<Reference Include="System.Globalization">
<HintPath>..\..\packages\System.Globalization\ref\netstandard1.3\System.Globalization.dll</HintPath>
<Private>False</Private>
<Paket>True</Paket>
</Reference>
</ItemGroup>
</When>
</Choose>
<Choose>
<When Condition="$(TargetFrameworkIdentifier) == '.NETFramework' And ($(TargetFrameworkVersion) == 'v4.6.2' Or $(TargetFrameworkVersion) == 'v4.6.3' Or $(TargetFrameworkVersion) == 'v4.7')">
<ItemGroup>
<Reference Include="System.IO">
<HintPath>..\..\packages\System.IO\lib\net462\System.IO.dll</HintPath>
<Private>True</Private>
<Paket>True</Paket>
</Reference>
</ItemGroup>
</When>
<When Condition="$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.1' Or $(TargetFrameworkVersion) == 'v1.2')">
<ItemGroup>
<Reference Include="System.IO">
<HintPath>..\..\packages\System.IO\ref\netstandard1.0\System.IO.dll</HintPath>
<Private>False</Private>
<Paket>True</Paket>
</Reference>
</ItemGroup>
</When>
<When Condition="$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4')">
<ItemGroup>
<Reference Include="System.IO">
<HintPath>..\..\packages\System.IO\ref\netstandard1.3\System.IO.dll</HintPath>
<Private>False</Private>
<Paket>True</Paket>
</Reference>
</ItemGroup>
</When>
<When Condition="$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6' Or $(TargetFrameworkVersion) == 'v2.0')">
<ItemGroup>
<Reference Include="System.IO">
<HintPath>..\..\packages\System.IO\ref\netstandard1.5\System.IO.dll</HintPath>
<Private>False</Private>
<Paket>True</Paket>
</Reference>
</ItemGroup>
</When>
</Choose>
<Choose>
<When Condition="$(TargetFrameworkIdentifier) == '.NETFramework' And ($(TargetFrameworkVersion) == 'v4.6' Or $(TargetFrameworkVersion) == 'v4.6.1')">
<ItemGroup>
<Reference Include="mscorlib">
<Paket>True</Paket>
</Reference>
</ItemGroup>
</When>
</Choose>
<Choose>
<When Condition="$(TargetFrameworkIdentifier) == '.NETFramework' And ($(TargetFrameworkVersion) == 'v4.6' Or $(TargetFrameworkVersion) == 'v4.6.1' Or $(TargetFrameworkVersion) == 'v4.6.2' Or $(TargetFrameworkVersion) == 'v4.6.3' Or $(TargetFrameworkVersion) == 'v4.7')">
<ItemGroup>
<Reference Include="System.IO.FileSystem">
<HintPath>..\..\packages\System.IO.FileSystem\lib\net46\System.IO.FileSystem.dll</HintPath>
<Private>True</Private>
<Paket>True</Paket>
</Reference>
</ItemGroup>
</When>
<When Condition="$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6' Or $(TargetFrameworkVersion) == 'v2.0')">
<ItemGroup>
<Reference Include="System.IO.FileSystem">
<HintPath>..\..\packages\System.IO.FileSystem\ref\netstandard1.3\System.IO.FileSystem.dll</HintPath>
<Private>False</Private>
<Paket>True</Paket>
</Reference>
</ItemGroup>
</When>
</Choose>
<Choose>
<When Condition="$(TargetFrameworkIdentifier) == '.NETFramework' And ($(TargetFrameworkVersion) == 'v4.6' Or $(TargetFrameworkVersion) == 'v4.6.1' Or $(TargetFrameworkVersion) == 'v4.6.2' Or $(TargetFrameworkVersion) == 'v4.6.3' Or $(TargetFrameworkVersion) == 'v4.7')">
<ItemGroup>
<Reference Include="System.IO.FileSystem.Primitives">
<HintPath>..\..\packages\System.IO.FileSystem.Primitives\lib\net46\System.IO.FileSystem.Primitives.dll</HintPath>
<Private>True</Private>
<Paket>True</Paket>
</Reference>
</ItemGroup>
</When>
<When Condition="$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6' Or $(TargetFrameworkVersion) == 'v2.0')">
<ItemGroup>
<Reference Include="System.IO.FileSystem.Primitives">
<HintPath>..\..\packages\System.IO.FileSystem.Primitives\lib\netstandard1.3\System.IO.FileSystem.Primitives.dll</HintPath>
<Private>True</Private>
<Paket>True</Paket>
</Reference>
</ItemGroup>
</When>
</Choose>
<Choose>
<When Condition="$(TargetFrameworkIdentifier) == '.NETFramework' And ($(TargetFrameworkVersion) == 'v4.6.3' Or $(TargetFrameworkVersion) == 'v4.7')">
<ItemGroup>
<Reference Include="System.Linq">
<HintPath>..\..\packages\System.Linq\lib\net463\System.Linq.dll</HintPath>
<Private>True</Private>
<Paket>True</Paket>
</Reference>
</ItemGroup>
</When>
<When Condition="$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.6' Or $(TargetFrameworkVersion) == 'v2.0')">
<ItemGroup>
<Reference Include="System.Linq">
<HintPath>..\..\packages\System.Linq\lib\netstandard1.6\System.Linq.dll</HintPath>
<Private>True</Private>
<Paket>True</Paket>
</Reference>
</ItemGroup>
</When>
</Choose>
<Choose>
<When Condition="$(TargetFrameworkIdentifier) == '.NETFramework' And ($(TargetFrameworkVersion) == 'v4.6.2' Or $(TargetFrameworkVersion) == 'v4.6.3' Or $(TargetFrameworkVersion) == 'v4.7')">
<ItemGroup>
<Reference Include="System.Reflection">
<HintPath>..\..\packages\System.Reflection\lib\net462\System.Reflection.dll</HintPath>
<Private>True</Private>
<Paket>True</Paket>
</Reference>
</ItemGroup>
</When>
<When Condition="$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.1' Or $(TargetFrameworkVersion) == 'v1.2')">
<ItemGroup>
<Reference Include="System.Reflection">
<HintPath>..\..\packages\System.Reflection\ref\netstandard1.0\System.Reflection.dll</HintPath>
<Private>False</Private>
<Paket>True</Paket>
</Reference>
</ItemGroup>
</When>
<When Condition="$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4')">
<ItemGroup>
<Reference Include="System.Reflection">
<HintPath>..\..\packages\System.Reflection\ref\netstandard1.3\System.Reflection.dll</HintPath>
<Private>False</Private>
<Paket>True</Paket>
</Reference>
</ItemGroup>
</When>
<When Condition="$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6' Or $(TargetFrameworkVersion) == 'v2.0')">
<ItemGroup>
<Reference Include="System.Reflection">
<HintPath>..\..\packages\System.Reflection\ref\netstandard1.5\System.Reflection.dll</HintPath>
<Private>False</Private>
<Paket>True</Paket>
</Reference>
</ItemGroup>
</When>
</Choose>
<Choose>
<When Condition="$(TargetFrameworkIdentifier) == '.NETFramework' And ($(TargetFrameworkVersion) == 'v4.5' Or $(TargetFrameworkVersion) == 'v4.5.1' Or $(TargetFrameworkVersion) == 'v4.5.2' Or $(TargetFrameworkVersion) == 'v4.5.3' Or $(TargetFrameworkVersion) == 'v4.6' Or $(TargetFrameworkVersion) == 'v4.6.1')">
<ItemGroup>
<Reference Include="System.ComponentModel.Composition">
<Paket>True</Paket>
</Reference>
</ItemGroup>
</When>
<When Condition="$(TargetFrameworkIdentifier) == '.NETFramework' And ($(TargetFrameworkVersion) == 'v4.6.2' Or $(TargetFrameworkVersion) == 'v4.6.3' Or $(TargetFrameworkVersion) == 'v4.7')">
<ItemGroup>
<Reference Include="System.ComponentModel.Composition">
<Paket>True</Paket>
</Reference>
<Reference Include="System.Runtime">
<HintPath>..\..\packages\System.Runtime\lib\net462\System.Runtime.dll</HintPath>
<Private>True</Private>
<Paket>True</Paket>
</Reference>
</ItemGroup>
</When>
<When Condition="$(TargetFrameworkIdentifier) == '.NETStandard' And $(TargetFrameworkVersion) == 'v1.1'">
<ItemGroup>
<Reference Include="System.Runtime">
<HintPath>..\..\packages\System.Runtime\ref\netstandard1.0\System.Runtime.dll</HintPath>
<Private>False</Private>
<Paket>True</Paket>
</Reference>
</ItemGroup>
</When>
<When Condition="$(TargetFrameworkIdentifier) == '.NETStandard' And $(TargetFrameworkVersion) == 'v1.2'">
<ItemGroup>
<Reference Include="System.Runtime">
<HintPath>..\..\packages\System.Runtime\ref\netstandard1.2\System.Runtime.dll</HintPath>
<Private>False</Private>
<Paket>True</Paket>
</Reference>
</ItemGroup>
</When>
<When Condition="$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4')">
<ItemGroup>
<Reference Include="System.Runtime">
<HintPath>..\..\packages\System.Runtime\ref\netstandard1.3\System.Runtime.dll</HintPath>
<Private>False</Private>
<Paket>True</Paket>
</Reference>
</ItemGroup>
</When>
<When Condition="$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6' Or $(TargetFrameworkVersion) == 'v2.0')">
<ItemGroup>
<Reference Include="System.Runtime">
<HintPath>..\..\packages\System.Runtime\ref\netstandard1.5\System.Runtime.dll</HintPath>
<Private>False</Private>
<Paket>True</Paket>
</Reference>
</ItemGroup>
</When>
</Choose>
<Choose>
<When Condition="$(TargetFrameworkIdentifier) == '.NETFramework' And ($(TargetFrameworkVersion) == 'v4.6.2' Or $(TargetFrameworkVersion) == 'v4.6.3' Or $(TargetFrameworkVersion) == 'v4.7')">
<ItemGroup>
<Reference Include="System.Runtime.Extensions">
<HintPath>..\..\packages\System.Runtime.Extensions\lib\net462\System.Runtime.Extensions.dll</HintPath>
<Private>True</Private>
<Paket>True</Paket>
</Reference>
</ItemGroup>
</When>
<When Condition="$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.1' Or $(TargetFrameworkVersion) == 'v1.2')">
<ItemGroup>
<Reference Include="System.Runtime.Extensions">
<HintPath>..\..\packages\System.Runtime.Extensions\ref\netstandard1.0\System.Runtime.Extensions.dll</HintPath>
<Private>False</Private>
<Paket>True</Paket>
</Reference>
</ItemGroup>
</When>
<When Condition="$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4')">
<ItemGroup>
<Reference Include="System.Runtime.Extensions">
<HintPath>..\..\packages\System.Runtime.Extensions\ref\netstandard1.3\System.Runtime.Extensions.dll</HintPath>
<Private>False</Private>
<Paket>True</Paket>
</Reference>
</ItemGroup>
</When>
<When Condition="$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6' Or $(TargetFrameworkVersion) == 'v2.0')">
<ItemGroup>
<Reference Include="System.Runtime.Extensions">
<HintPath>..\..\packages\System.Runtime.Extensions\ref\netstandard1.5\System.Runtime.Extensions.dll</HintPath>
<Private>False</Private>
<Paket>True</Paket>
</Reference>
</ItemGroup>
</When>
</Choose>
<Choose>
<When Condition="$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6' Or $(TargetFrameworkVersion) == 'v2.0')">
<ItemGroup>
<Reference Include="System.Runtime.Handles">
<HintPath>..\..\packages\System.Runtime.Handles\ref\netstandard1.3\System.Runtime.Handles.dll</HintPath>
<Private>False</Private>
<Paket>True</Paket>
</Reference>
</ItemGroup>
</When>
</Choose>
<Choose>
<When Condition="$(TargetFrameworkIdentifier) == '.NETFramework' And $(TargetFrameworkVersion) == 'v4.6.2'">
<ItemGroup>
<Reference Include="System.Runtime.InteropServices">
<HintPath>..\..\packages\System.Runtime.InteropServices\lib\net462\System.Runtime.InteropServices.dll</HintPath>
<Private>True</Private>
<Paket>True</Paket>
</Reference>
</ItemGroup>
</When>
<When Condition="$(TargetFrameworkIdentifier) == '.NETFramework' And ($(TargetFrameworkVersion) == 'v4.6.3' Or $(TargetFrameworkVersion) == 'v4.7')">
<ItemGroup>
<Reference Include="System.Runtime.InteropServices">
<HintPath>..\..\packages\System.Runtime.InteropServices\lib\net463\System.Runtime.InteropServices.dll</HintPath>
<Private>True</Private>
<Paket>True</Paket>
</Reference>
</ItemGroup>
</When>
<When Condition="$(TargetFrameworkIdentifier) == '.NETStandard' And $(TargetFrameworkVersion) == 'v1.1'">
<ItemGroup>
<Reference Include="System.Runtime.InteropServices">
<HintPath>..\..\packages\System.Runtime.InteropServices\ref\netstandard1.1\System.Runtime.InteropServices.dll</HintPath>
<Private>False</Private>
<Paket>True</Paket>
</Reference>
</ItemGroup>
</When>
<When Condition="$(TargetFrameworkIdentifier) == '.NETStandard' And $(TargetFrameworkVersion) == 'v1.2'">
<ItemGroup>
<Reference Include="System.Runtime.InteropServices">
<HintPath>..\..\packages\System.Runtime.InteropServices\ref\netstandard1.2\System.Runtime.InteropServices.dll</HintPath>
<Private>False</Private>
<Paket>True</Paket>
</Reference>
</ItemGroup>
</When>
<When Condition="$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4')">
<ItemGroup>
<Reference Include="System.Runtime.InteropServices">
<HintPath>..\..\packages\System.Runtime.InteropServices\ref\netstandard1.3\System.Runtime.InteropServices.dll</HintPath>
<Private>False</Private>
<Paket>True</Paket>
</Reference>
</ItemGroup>
</When>
<When Condition="$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6' Or $(TargetFrameworkVersion) == 'v2.0')">
<ItemGroup>
<Reference Include="System.Runtime.InteropServices">
<HintPath>..\..\packages\System.Runtime.InteropServices\ref\netstandard1.5\System.Runtime.InteropServices.dll</HintPath>
<Private>False</Private>
<Paket>True</Paket>
</Reference>
</ItemGroup>
</When>
</Choose>
<Choose>
<When Condition="$(TargetFrameworkIdentifier) == '.NETFramework' And ($(TargetFrameworkVersion) == 'v4.5' Or $(TargetFrameworkVersion) == 'v4.5.1' Or $(TargetFrameworkVersion) == 'v4.5.2' Or $(TargetFrameworkVersion) == 'v4.5.3' Or $(TargetFrameworkVersion) == 'v4.6' Or $(TargetFrameworkVersion) == 'v4.6.1' Or $(TargetFrameworkVersion) == 'v4.6.2' Or $(TargetFrameworkVersion) == 'v4.6.3' Or $(TargetFrameworkVersion) == 'v4.7')">
<ItemGroup>
<Reference Include="System.Numerics">
<Paket>True</Paket>
</Reference>
</ItemGroup>
</When>
<When Condition="$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.1' Or $(TargetFrameworkVersion) == 'v1.2' Or $(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6' Or $(TargetFrameworkVersion) == 'v2.0')">
<ItemGroup>
<Reference Include="System.Runtime.Numerics">
<HintPath>..\..\packages\System.Runtime.Numerics\ref\netstandard1.1\System.Runtime.Numerics.dll</HintPath>
<Private>False</Private>
<Paket>True</Paket>
</Reference>
</ItemGroup>
</When>
<When Condition="$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6' Or $(TargetFrameworkVersion) == 'v2.0')">
<ItemGroup>
<Reference Include="System.Runtime.Numerics">
<HintPath>..\..\packages\System.Runtime.Numerics\lib\netstandard1.3\System.Runtime.Numerics.dll</HintPath>
<Private>True</Private>
<Paket>True</Paket>
</Reference>
</ItemGroup>
</When>
</Choose>
<Choose>
<When Condition="$(TargetFrameworkIdentifier) == '.NETFramework' And $(TargetFrameworkVersion) == 'v4.6'">
<ItemGroup>
<Reference Include="System.Security.Cryptography.Algorithms">
<HintPath>..\..\packages\System.Security.Cryptography.Algorithms\lib\net46\System.Security.Cryptography.Algorithms.dll</HintPath>
<Private>True</Private>
<Paket>True</Paket>
</Reference>
</ItemGroup>
</When>
<When Condition="$(TargetFrameworkIdentifier) == '.NETFramework' And ($(TargetFrameworkVersion) == 'v4.6.1' Or $(TargetFrameworkVersion) == 'v4.6.2')">
<ItemGroup>
<Reference Include="System.Security.Cryptography.Algorithms">
<HintPath>..\..\packages\System.Security.Cryptography.Algorithms\lib\net461\System.Security.Cryptography.Algorithms.dll</HintPath>
<Private>True</Private>
<Paket>True</Paket>
</Reference>
</ItemGroup>
</When>
<When Condition="$(TargetFrameworkIdentifier) == '.NETFramework' And ($(TargetFrameworkVersion) == 'v4.6.3' Or $(TargetFrameworkVersion) == 'v4.7')">
<ItemGroup>
<Reference Include="System.Security.Cryptography.Algorithms">
<HintPath>..\..\packages\System.Security.Cryptography.Algorithms\lib\net463\System.Security.Cryptography.Algorithms.dll</HintPath>
<Private>True</Private>
<Paket>True</Paket>
</Reference>
</ItemGroup>
</When>
<When Condition="$(TargetFrameworkIdentifier) == '.NETStandard' And $(TargetFrameworkVersion) == 'v1.3'">
<ItemGroup>
<Reference Include="System.Security.Cryptography.Algorithms">
<HintPath>..\..\packages\System.Security.Cryptography.Algorithms\ref\netstandard1.3\System.Security.Cryptography.Algorithms.dll</HintPath>
<Private>False</Private>
<Paket>True</Paket>
</Reference>
</ItemGroup>
</When>
<When Condition="$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5')">
<ItemGroup>
<Reference Include="System.Security.Cryptography.Algorithms">
<HintPath>..\..\packages\System.Security.Cryptography.Algorithms\ref\netstandard1.4\System.Security.Cryptography.Algorithms.dll</HintPath>
<Private>False</Private>
<Paket>True</Paket>
</Reference>
</ItemGroup>
</When>
<When Condition="$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.6' Or $(TargetFrameworkVersion) == 'v2.0')">
<ItemGroup>
<Reference Include="System.Security.Cryptography.Algorithms">
<HintPath>..\..\packages\System.Security.Cryptography.Algorithms\ref\netstandard1.6\System.Security.Cryptography.Algorithms.dll</HintPath>
<Private>False</Private>
<Paket>True</Paket>
</Reference>
</ItemGroup>
</When>
</Choose>
<Choose>
<When Condition="$(TargetFrameworkIdentifier) == '.NETFramework' And ($(TargetFrameworkVersion) == 'v4.6' Or $(TargetFrameworkVersion) == 'v4.6.1' Or $(TargetFrameworkVersion) == 'v4.6.2' Or $(TargetFrameworkVersion) == 'v4.6.3' Or $(TargetFrameworkVersion) == 'v4.7')">
<ItemGroup>
<Reference Include="System.Security.Cryptography.Csp">
<HintPath>..\..\packages\System.Security.Cryptography.Csp\lib\net46\System.Security.Cryptography.Csp.dll</HintPath>
<Private>True</Private>
<Paket>True</Paket>
</Reference>
</ItemGroup>
</When>
<When Condition="$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6' Or $(TargetFrameworkVersion) == 'v2.0')">
<ItemGroup>
<Reference Include="System.Security.Cryptography.Csp">
<HintPath>..\..\packages\System.Security.Cryptography.Csp\ref\netstandard1.3\System.Security.Cryptography.Csp.dll</HintPath>
<Private>False</Private>
<Paket>True</Paket>
</Reference>
</ItemGroup>
</When>
</Choose>
<Choose>
<When Condition="$(TargetFrameworkIdentifier) == '.NETFramework' And ($(TargetFrameworkVersion) == 'v4.6' Or $(TargetFrameworkVersion) == 'v4.6.1' Or $(TargetFrameworkVersion) == 'v4.6.2' Or $(TargetFrameworkVersion) == 'v4.6.3' Or $(TargetFrameworkVersion) == 'v4.7')">
<ItemGroup>
<Reference Include="System.Security.Cryptography.Encoding">
<HintPath>..\..\packages\System.Security.Cryptography.Encoding\lib\net46\System.Security.Cryptography.Encoding.dll</HintPath>
<Private>True</Private>
<Paket>True</Paket>
</Reference>
</ItemGroup>
</When>
<When Condition="$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6' Or $(TargetFrameworkVersion) == 'v2.0')">
<ItemGroup>
<Reference Include="System.Security.Cryptography.Encoding">
<HintPath>..\..\packages\System.Security.Cryptography.Encoding\ref\netstandard1.3\System.Security.Cryptography.Encoding.dll</HintPath>
<Private>False</Private>
<Paket>True</Paket>
</Reference>
</ItemGroup>
</When>
</Choose>
<Choose>
<When Condition="$(TargetFrameworkIdentifier) == '.NETFramework' And ($(TargetFrameworkVersion) == 'v4.6' Or $(TargetFrameworkVersion) == 'v4.6.1' Or $(TargetFrameworkVersion) == 'v4.6.2' Or $(TargetFrameworkVersion) == 'v4.6.3' Or $(TargetFrameworkVersion) == 'v4.7')">
<ItemGroup>
<Reference Include="System.Security.Cryptography.Primitives">
<HintPath>..\..\packages\System.Security.Cryptography.Primitives\lib\net46\System.Security.Cryptography.Primitives.dll</HintPath>
<Private>True</Private>
<Paket>True</Paket>
</Reference>
</ItemGroup>
</When>
<When Condition="$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6' Or $(TargetFrameworkVersion) == 'v2.0')">
<ItemGroup>
<Reference Include="System.Security.Cryptography.Primitives">
<HintPath>..\..\packages\System.Security.Cryptography.Primitives\lib\netstandard1.3\System.Security.Cryptography.Primitives.dll</HintPath>
<Private>True</Private>
<Paket>True</Paket>
</Reference>
</ItemGroup>
</When>
</Choose>
<Choose>
<When Condition="$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.1' Or $(TargetFrameworkVersion) == 'v1.2')">
<ItemGroup>
<Reference Include="System.Text.Encoding">
<HintPath>..\..\packages\System.Text.Encoding\ref\netstandard1.0\System.Text.Encoding.dll</HintPath>
<Private>False</Private>
<Paket>True</Paket>
</Reference>
</ItemGroup>
</When>
<When Condition="$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6' Or $(TargetFrameworkVersion) == 'v2.0')">
<ItemGroup>
<Reference Include="System.Text.Encoding">
<HintPath>..\..\packages\System.Text.Encoding\ref\netstandard1.3\System.Text.Encoding.dll</HintPath>
<Private>False</Private>
<Paket>True</Paket>
</Reference>
</ItemGroup>
</When>
</Choose>
<Choose>
<When Condition="$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6' Or $(TargetFrameworkVersion) == 'v2.0')">
<ItemGroup>
<Reference Include="System.Threading">
<HintPath>..\..\packages\System.Threading\lib\netstandard1.3\System.Threading.dll</HintPath>
<Private>True</Private>
<Paket>True</Paket>
</Reference>
</ItemGroup>
</When>
</Choose>
<Choose>
<When Condition="$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.1' Or $(TargetFrameworkVersion) == 'v1.2')">
<ItemGroup>
<Reference Include="System.Threading.Tasks">
<HintPath>..\..\packages\System.Threading.Tasks\ref\netstandard1.0\System.Threading.Tasks.dll</HintPath>
<Private>False</Private>
<Paket>True</Paket>
</Reference>
</ItemGroup>
</When>
<When Condition="$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6' Or $(TargetFrameworkVersion) == 'v2.0')">
<ItemGroup>
<Reference Include="System.Threading.Tasks">
<HintPath>..\..\packages\System.Threading.Tasks\ref\netstandard1.3\System.Threading.Tasks.dll</HintPath>
<Private>False</Private>
<Paket>True</Paket>
</Reference>
</ItemGroup>
</When>
</Choose>
</Project> </Project>

View file

@ -18,7 +18,6 @@ using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.IO; using System.IO;
using System.Linq; using System.Linq;
using System.Text;
using Mono.Cecil; using Mono.Cecil;
using Mono.Cecil.Cil; using Mono.Cecil.Cil;
@ -63,34 +62,27 @@ namespace OpenTK.Rewrite
void Rewrite(string file, string keyfile, IEnumerable<string> options) void Rewrite(string file, string keyfile, IEnumerable<string> options)
{ {
dllimport = options.Contains("-dllimport"); IEnumerable<string> optionsEnumerated = options as IList<string> ?? options.ToList();
dllimport = optionsEnumerated.Contains("-dllimport");
// Specify assembly read and write parameters // Specify assembly read and write parameters
// We want to keep a valid symbols file (pdb or mdb) // We want to keep a valid symbols file (pdb or mdb)
var read_params = new ReaderParameters(); var read_params = new ReaderParameters();
var write_params = new WriterParameters(); var write_params = new WriterParameters();
var pdb = Path.ChangeExtension(file, "pdb");
var mdb = file + ".mdb";
ISymbolReaderProvider provider = null;
if (File.Exists(pdb))
{
provider = new Mono.Cecil.Pdb.PdbReaderProvider();
}
else if (File.Exists(mdb))
{
provider = new Mono.Cecil.Mdb.MdbReaderProvider();
}
read_params.SymbolReaderProvider = provider;
read_params.ReadSymbols = true; read_params.ReadSymbols = true;
read_params.ReadWrite = true;
write_params.WriteSymbols = true; write_params.WriteSymbols = true;
if (!String.IsNullOrEmpty(keyfile) && File.Exists(keyfile)) if (!String.IsNullOrEmpty(keyfile) && File.Exists(keyfile))
{ {
keyfile = Path.GetFullPath(keyfile); keyfile = Path.GetFullPath(keyfile);
var fs = new FileStream(keyfile, FileMode.Open, FileAccess.Read);
var keypair = new System.Reflection.StrongNameKeyPair(fs); using (var fs = new FileStream(keyfile, FileMode.Open, FileAccess.Read))
fs.Close(); {
write_params.StrongNameKeyPair = keypair; var keypair = new System.Reflection.StrongNameKeyPair(fs);
write_params.StrongNameKeyPair = keypair;
}
} }
else else
{ {
@ -98,57 +90,66 @@ namespace OpenTK.Rewrite
} }
// Load assembly and process all modules // Load assembly and process all modules
var assembly = AssemblyDefinition.ReadAssembly(file, read_params); try
var rewritten = assembly.CustomAttributes.FirstOrDefault(a => a.AttributeType.Name == "RewrittenAttribute");
if (rewritten == null)
{ {
foreach (var module in assembly.Modules) using (AssemblyDefinition assembly = AssemblyDefinition.ReadAssembly(file, read_params))
{ {
foreach (var reference in module.AssemblyReferences) var rewritten = assembly.CustomAttributes.FirstOrDefault(a => a.AttributeType.Name == "RewrittenAttribute");
if (rewritten == null)
{ {
try foreach (var module in assembly.Modules)
{ {
var resolved = module.AssemblyResolver.Resolve(reference); foreach (var reference in module.AssemblyReferences)
if (reference.Name == "mscorlib")
{ {
mscorlib = resolved; try
{
var resolved = module.AssemblyResolver.Resolve(reference);
if (reference.Name == "mscorlib")
{
mscorlib = resolved;
}
}
catch (Exception e)
{
Console.Error.WriteLine(e.ToString());
}
} }
} }
catch (Exception e)
if (mscorlib == null)
{ {
Console.Error.WriteLine(e.ToString()); Console.Error.WriteLine("Failed to locate mscorlib");
return;
}
TypeMarshal = mscorlib.MainModule.GetType("System.Runtime.InteropServices.Marshal");
TypeStringBuilder = mscorlib.MainModule.GetType("System.Text.StringBuilder");
TypeVoid = mscorlib.MainModule.GetType("System.Void");
TypeIntPtr = mscorlib.MainModule.GetType("System.IntPtr");
TypeInt32 = mscorlib.MainModule.GetType("System.Int32");
TypeBindingsBase = assembly.Modules.Select(m => m.GetType("OpenTK.BindingsBase")).First();
foreach (var module in assembly.Modules)
{
foreach (var type in module.Types)
{
Rewrite(type, optionsEnumerated);
}
} }
} }
} else
if (mscorlib == null)
{
Console.Error.WriteLine("Failed to locate mscorlib");
return;
}
TypeMarshal = mscorlib.MainModule.GetType("System.Runtime.InteropServices.Marshal");
TypeStringBuilder = mscorlib.MainModule.GetType("System.Text.StringBuilder");
TypeVoid = mscorlib.MainModule.GetType("System.Void");
TypeIntPtr = mscorlib.MainModule.GetType("System.IntPtr");
TypeInt32 = mscorlib.MainModule.GetType("System.Int32");
TypeBindingsBase = assembly.Modules.Select(m => m.GetType("OpenTK.BindingsBase")).First();
foreach (var module in assembly.Modules)
{
foreach (var type in module.Types)
{ {
Rewrite(type, options); Console.Error.WriteLine("Error: assembly has already been rewritten");
} }
// Save rewritten assembly
assembly.Write(write_params);
} }
} }
else catch (InvalidOperationException inex)
{ {
Console.Error.WriteLine("Error: assembly has already been rewritten"); Console.WriteLine("Failed to load the assembly. It may already have been rewritten, and the debug symbols no longer match.");
} }
// Save rewritten assembly
assembly.Write(file, write_params);
} }
void Rewrite(TypeDefinition type, IEnumerable<string> options) void Rewrite(TypeDefinition type, IEnumerable<string> options)
@ -171,12 +172,12 @@ namespace OpenTK.Rewrite
var rewritten_constructor = type.GetConstructors().First(); var rewritten_constructor = type.GetConstructors().First();
var rewritten = new CustomAttribute(rewritten_constructor); var rewritten = new CustomAttribute(rewritten_constructor);
rewritten.ConstructorArguments.Add(new CustomAttributeArgument( rewritten.ConstructorArguments.Add(new CustomAttributeArgument(
type.Module.Import(mscorlib.MainModule.GetType("System.Boolean")), true)); type.Module.ImportReference(mscorlib.MainModule.GetType("System.Boolean")), true));
type.Module.Assembly.CustomAttributes.Add(rewritten); type.Module.Assembly.CustomAttributes.Add(rewritten);
} }
} }
int GetSlot(MethodDefinition signature) static int GetSlot(MethodDefinition signature)
{ {
// Pretend there is no slots if we want to force everything to work through DllImport (Android & iOS) // Pretend there is no slots if we want to force everything to work through DllImport (Android & iOS)
if (dllimport) if (dllimport)
@ -200,18 +201,19 @@ namespace OpenTK.Rewrite
wrapper_signatures.AddRange(type.Methods wrapper_signatures.AddRange(type.Methods
.Where(m => m.IsPublic && m.CustomAttributes.Any(a => a.AttributeType.Name == "AutoGeneratedAttribute"))); .Where(m => m.IsPublic && m.CustomAttributes.Any(a => a.AttributeType.Name == "AutoGeneratedAttribute")));
IEnumerable<string> optionsEnumerated = options as IList<string> ?? options.ToList();
foreach (var wrapper in wrapper_signatures) foreach (var wrapper in wrapper_signatures)
{ {
var autogenerated = wrapper.CustomAttributes var autogenerated = wrapper.CustomAttributes
.Where(a => a.AttributeType.Name == "AutoGeneratedAttribute"); .Where(a => a.AttributeType.Name == "AutoGeneratedAttribute").ToList();
if (autogenerated.Count() > 0) if (autogenerated.Any())
{ {
var signature_name = (string)autogenerated.First() var signature_name = (string)autogenerated.First()
.Fields.First(f => f.Name == "EntryPoint").Argument.Value; .Fields.First(f => f.Name == "EntryPoint").Argument.Value;
var signature = entry_signatures.FirstOrDefault(s => s.Name == signature_name); var signature = entry_signatures.FirstOrDefault(s => s.Name == signature_name);
int slot = GetSlot(signature); int slot = GetSlot(signature);
ProcessMethod(wrapper, signature, slot, entry_points, options); ProcessMethod(wrapper, signature, slot, entry_points, optionsEnumerated);
} }
} }
@ -221,12 +223,12 @@ namespace OpenTK.Rewrite
{ {
foreach (var nested_type in type.NestedTypes) foreach (var nested_type in type.NestedTypes)
{ {
Rewrite(nested_type, entry_points, entry_signatures, options); Rewrite(nested_type, entry_points, entry_signatures, optionsEnumerated);
} }
} }
} }
void RemoveNativeSignatures(TypeDefinition type, List<MethodDefinition> methods) static void RemoveNativeSignatures(TypeDefinition type, IEnumerable<MethodDefinition> methods)
{ {
// Remove all DllImports for functions called through calli, since // Remove all DllImports for functions called through calli, since
// their signatures are embedded directly into the calli callsite. // their signatures are embedded directly into the calli callsite.
@ -237,7 +239,7 @@ namespace OpenTK.Rewrite
} }
} }
void RemoveSupportingAttributes(TypeDefinition type) static void RemoveSupportingAttributes(TypeDefinition type)
{ {
foreach (var method in type.Methods) foreach (var method in type.Methods)
{ {
@ -266,20 +268,22 @@ namespace OpenTK.Rewrite
// and push each parameter on the stack // and push each parameter on the stack
DebugVariables vars = null; DebugVariables vars = null;
if (options.Contains("-debug")) IEnumerable<string> optionsEnumerated = options as IList<string> ?? options.ToList();
if (optionsEnumerated.Contains("-debug"))
{ {
vars = EmitDebugPrologue(wrapper, il); vars = EmitDebugPrologue(wrapper, il);
} }
// Patch convenience wrappers // Patch convenience wrappers
List<GeneratedVariableIdentifier> generatedVariables = new List<GeneratedVariableIdentifier>();
if (wrapper.Parameters.Count == native.Parameters.Count) if (wrapper.Parameters.Count == native.Parameters.Count)
{ {
EmitParameters(wrapper, native, body, il); generatedVariables = EmitParameters(wrapper, native, body, il);
} }
else else
{ {
int difference = native.Parameters.Count - wrapper.Parameters.Count; int difference = native.Parameters.Count - wrapper.Parameters.Count;
EmitConvenienceWrapper(wrapper, native, difference, body, il); generatedVariables = EmitConvenienceWrapper(wrapper, native, difference, body, il);
} }
if (slot != -1) if (slot != -1)
@ -301,9 +305,9 @@ namespace OpenTK.Rewrite
EmitReturnTypeWrapper(wrapper, native, body, il); EmitReturnTypeWrapper(wrapper, native, body, il);
} }
EmitParameterEpilogues(wrapper, native, body, il); EmitParameterEpilogues(wrapper, native, body, il, generatedVariables);
if (options.Contains("-debug")) if (optionsEnumerated.Contains("-debug"))
{ {
EmitDebugEpilogue(wrapper, il, vars); EmitDebugEpilogue(wrapper, il, vars);
} }
@ -339,7 +343,7 @@ namespace OpenTK.Rewrite
// something like "type namespace.class::method(type arg)" // something like "type namespace.class::method(type arg)"
var module = il.Body.Method.FullName; var module = il.Body.Method.FullName;
module = module.Substring(module.IndexOf(' ') + 1); module = module.Substring(module.IndexOf(' ') + 1);
module = module.Substring(0, module.IndexOf("::")); module = module.Substring(0, module.IndexOf("::", StringComparison.Ordinal));
module = module.Substring(0, module.LastIndexOf('.')); module = module.Substring(0, module.LastIndexOf('.'));
// Only works for Graphics modules due to hardcoded use of // Only works for Graphics modules due to hardcoded use of
@ -479,7 +483,7 @@ namespace OpenTK.Rewrite
// String return-type wrapper // String return-type wrapper
// return new string((sbyte*)((void*)GetString())); // return new string((sbyte*)((void*)GetString()));
var intptr_to_voidpointer = wrapper.Module.Import(mscorlib.MainModule.GetType("System.IntPtr").GetMethods() var intptr_to_voidpointer = wrapper.Module.ImportReference(mscorlib.MainModule.GetType("System.IntPtr").GetMethods()
.First(m => .First(m =>
{ {
return return
@ -487,7 +491,7 @@ namespace OpenTK.Rewrite
m.ReturnType.Name == "Void*"; m.ReturnType.Name == "Void*";
})); }));
var string_constructor = wrapper.Module.Import(mscorlib.MainModule.GetType("System.String").GetConstructors() var string_constructor = wrapper.Module.ImportReference(mscorlib.MainModule.GetType("System.String").GetConstructors()
.First(m => .First(m =>
{ {
var p = m.Parameters; var p = m.Parameters;
@ -521,28 +525,42 @@ namespace OpenTK.Rewrite
} }
} }
static void EmitParameterEpilogues(MethodDefinition wrapper, MethodDefinition native, MethodBody body, ILProcessor il) static void EmitParameterEpilogues(MethodDefinition wrapper, MethodDefinition native, MethodBody body, ILProcessor il,
List<GeneratedVariableIdentifier> generatedVariables)
{ {
foreach (var p in wrapper.Parameters) foreach (var p in wrapper.Parameters)
{ {
if (p.ParameterType.Name == "StringBuilder") if (p.ParameterType.Name == "StringBuilder")
{ {
EmitStringBuilderEpilogue(wrapper, native, p, body, il); EmitStringBuilderEpilogue(wrapper, native, p, body, il, GetGeneratedVariable(generatedVariables, p.Name + "_sb_ptr", body));
} }
if (!p.ParameterType.IsArray && p.ParameterType.Name == "String") if (!p.ParameterType.IsArray && p.ParameterType.Name == "String")
{ {
EmitStringEpilogue(wrapper, p, body, il); EmitStringEpilogue(wrapper, p, body, il,GetGeneratedVariable(generatedVariables, p.Name + "_string_ptr", body));
} }
if (p.ParameterType.IsArray && p.ParameterType.GetElementType().Name == "String") if (p.ParameterType.IsArray && p.ParameterType.GetElementType().Name == "String")
{ {
EmitStringArrayEpilogue(wrapper, p, body, il); EmitStringArrayEpilogue(wrapper, p, body, il, GetGeneratedVariable(generatedVariables, p.Name + "_string_array_ptr", body));
} }
} }
} }
static void EmitStringBuilderParameter(MethodDefinition method, ParameterDefinition parameter, MethodBody body, ILProcessor il) /// <summary>
/// Retrieves a generated variable by searching the given list by the variable's name and associated method body.
/// </summary>
/// <param name="variableIdentifiers"></param>
/// <param name="name"></param>
/// <param name="body"></param>
/// <returns></returns>
static GeneratedVariableIdentifier GetGeneratedVariable(IEnumerable<GeneratedVariableIdentifier> variableIdentifiers, string name, MethodBody body)
{
return variableIdentifiers.FirstOrDefault(v => v.Name == name && v.Body == body &&
body.Variables.Contains(v.Definition));
}
static GeneratedVariableIdentifier EmitStringBuilderParameter(MethodDefinition method, ParameterDefinition parameter, MethodBody body, ILProcessor il)
{ {
var p = parameter.ParameterType; var p = parameter.ParameterType;
@ -557,26 +575,36 @@ namespace OpenTK.Rewrite
// Marshal.FreeHGlobal(sb_ptr); // Marshal.FreeHGlobal(sb_ptr);
// } // }
// Make sure we have imported StringBuilder::Capacity and Marshal::AllocHGlobal // Make sure we have imported StringBuilder::Capacity and Marshal::AllocHGlobal
var sb_get_capacity = method.Module.Import(TypeStringBuilder.Methods.First(m => m.Name == "get_Capacity")); var sb_get_capacity = method.Module.ImportReference(TypeStringBuilder.Methods.First(m => m.Name == "get_Capacity"));
var alloc_hglobal = method.Module.Import(TypeMarshal.Methods.First(m => m.Name == "AllocHGlobal")); var alloc_hglobal = method.Module.ImportReference(TypeMarshal.Methods.First(m => m.Name == "AllocHGlobal"));
// IntPtr ptr; // IntPtr ptr;
var variable_name = parameter.Name + " _sb_ptr"; var variableDefinition = new VariableDefinition(TypeIntPtr);
body.Variables.Add(new VariableDefinition(variable_name, TypeIntPtr)); body.Variables.Add(variableDefinition);
int index = body.Variables.Count - 1; int stringBuilderPtrIndex = body.Variables.Count - 1;
GeneratedVariableIdentifier stringBuilderPtrVar = new GeneratedVariableIdentifier(body, variableDefinition, parameter.Name + "_sb_ptr");
// ptr = Marshal.AllocHGlobal(sb.Capacity + 1); // ptr = Marshal.AllocHGlobal(sb.Capacity + 1);
il.Emit(OpCodes.Callvirt, sb_get_capacity); il.Emit(OpCodes.Callvirt, sb_get_capacity);
il.Emit(OpCodes.Call, alloc_hglobal); il.Emit(OpCodes.Call, alloc_hglobal);
il.Emit(OpCodes.Stloc, index); il.Emit(OpCodes.Stloc, stringBuilderPtrIndex);
il.Emit(OpCodes.Ldloc, index); il.Emit(OpCodes.Ldloc, stringBuilderPtrIndex);
// We'll emit the try-finally block in the epilogue implementation, // We'll emit the try-finally block in the epilogue implementation,
// because we haven't yet emitted all necessary instructions here. // because we haven't yet emitted all necessary instructions here.
return stringBuilderPtrVar;
} }
static void EmitStringBuilderEpilogue(MethodDefinition wrapper, MethodDefinition native, ParameterDefinition parameter, MethodBody body, ILProcessor il) static void EmitStringBuilderEpilogue(MethodDefinition wrapper, MethodDefinition native,
ParameterDefinition parameter, MethodBody body, ILProcessor il, GeneratedVariableIdentifier generatedPtrVar)
{ {
if (generatedPtrVar == null)
{
throw new ArgumentNullException(nameof(generatedPtrVar));
}
var p = parameter.ParameterType; var p = parameter.ParameterType;
if (p.Name == "StringBuilder") if (p.Name == "StringBuilder")
{ {
@ -591,29 +619,28 @@ namespace OpenTK.Rewrite
// } // }
// Make sure we have imported BindingsBase::MasrhalPtrToStringBuilder and Marshal::FreeHGlobal // Make sure we have imported BindingsBase::MasrhalPtrToStringBuilder and Marshal::FreeHGlobal
var ptr_to_sb = wrapper.Module.Import(TypeBindingsBase.Methods.First(m => m.Name == "MarshalPtrToStringBuilder")); var ptr_to_sb = wrapper.Module.ImportReference(TypeBindingsBase.Methods.First(m => m.Name == "MarshalPtrToStringBuilder"));
var free_hglobal = wrapper.Module.Import(TypeMarshal.Methods.First(m => m.Name == "FreeHGlobal")); var free_hglobal = wrapper.Module.ImportReference(TypeMarshal.Methods.First(m => m.Name == "FreeHGlobal"));
var block = new ExceptionHandler(ExceptionHandlerType.Finally); var block = new ExceptionHandler(ExceptionHandlerType.Finally);
block.TryStart = body.Instructions[0]; block.TryStart = body.Instructions[0];
var variable_name = parameter.Name + " _sb_ptr"; il.Emit(OpCodes.Ldloc, generatedPtrVar.Definition.Index);
var v = body.Variables.First(m => m.Name == variable_name);
il.Emit(OpCodes.Ldloc, v.Index);
il.Emit(OpCodes.Ldarg, parameter.Index); il.Emit(OpCodes.Ldarg, parameter.Index);
il.Emit(OpCodes.Call, ptr_to_sb); il.Emit(OpCodes.Call, ptr_to_sb);
block.TryEnd = body.Instructions.Last(); block.TryEnd = body.Instructions.Last();
block.HandlerStart = body.Instructions.Last(); block.HandlerStart = body.Instructions.Last();
il.Emit(OpCodes.Ldloc, v.Index); il.Emit(OpCodes.Ldloc, generatedPtrVar.Definition.Index);
il.Emit(OpCodes.Call, free_hglobal); il.Emit(OpCodes.Call, free_hglobal);
block.HandlerEnd = body.Instructions.Last(); block.HandlerEnd = body.Instructions.Last();
} }
} }
static void EmitStringParameter(MethodDefinition wrapper, ParameterDefinition parameter, MethodBody body, ILProcessor il) static GeneratedVariableIdentifier EmitStringParameter(MethodDefinition wrapper, ParameterDefinition parameter, MethodBody body,
ILProcessor il)
{ {
var p = parameter.ParameterType; var p = parameter.ParameterType;
@ -621,34 +648,37 @@ namespace OpenTK.Rewrite
// IntPtr ptr = MarshalStringToPtr(str); // IntPtr ptr = MarshalStringToPtr(str);
// try { calli } // try { calli }
// finally { Marshal.FreeHGlobal(ptr); } // finally { Marshal.FreeHGlobal(ptr); }
var marshal_str_to_ptr = wrapper.Module.Import(TypeBindingsBase.Methods.First(m => m.Name == "MarshalStringToPtr")); var marshal_str_to_ptr = wrapper.Module.ImportReference(TypeBindingsBase.Methods.First(m => m.Name == "MarshalStringToPtr"));
// IntPtr ptr; // IntPtr ptr;
var variable_name = parameter.Name + "_string_ptr"; var variableDefinition = new VariableDefinition(TypeIntPtr);
body.Variables.Add(new VariableDefinition(variable_name, TypeIntPtr)); body.Variables.Add(variableDefinition);
int index = body.Variables.Count - 1; int generatedPointerVarIndex = body.Variables.Count - 1;
GeneratedVariableIdentifier stringPtrVar = new GeneratedVariableIdentifier(body, variableDefinition, parameter.Name + "_string_ptr");
// ptr = Marshal.StringToHGlobalAnsi(str); // ptr = Marshal.StringToHGlobalAnsi(str);
il.Emit(OpCodes.Call, marshal_str_to_ptr); il.Emit(OpCodes.Call, marshal_str_to_ptr);
il.Emit(OpCodes.Stloc, index); il.Emit(OpCodes.Stloc, generatedPointerVarIndex);
il.Emit(OpCodes.Ldloc, index); il.Emit(OpCodes.Ldloc, generatedPointerVarIndex);
// The finally block will be emitted in the function epilogue // The finally block will be emitted in the function epilogue
return stringPtrVar;
} }
static void EmitStringEpilogue(MethodDefinition wrapper, ParameterDefinition parameter, MethodBody body, ILProcessor il) static void EmitStringEpilogue(MethodDefinition wrapper, ParameterDefinition parameter, MethodBody body,
ILProcessor il, GeneratedVariableIdentifier generatedPtrVar)
{ {
var p = parameter.ParameterType; var p = parameter.ParameterType;
var free = wrapper.Module.Import(TypeBindingsBase.Methods.First(m => m.Name == "FreeStringPtr")); var free = wrapper.Module.ImportReference(TypeBindingsBase.Methods.First(m => m.Name == "FreeStringPtr"));
// FreeStringPtr(ptr) // FreeStringPtr(ptr)
var variable_name = parameter.Name + "_string_ptr"; il.Emit(OpCodes.Ldloc, generatedPtrVar.Definition.Index);
var v = body.Variables.First(m => m.Name == variable_name);
il.Emit(OpCodes.Ldloc, v.Index);
il.Emit(OpCodes.Call, free); il.Emit(OpCodes.Call, free);
} }
static void EmitStringArrayParameter(MethodDefinition wrapper, ParameterDefinition parameter, MethodBody body, ILProcessor il) static GeneratedVariableIdentifier EmitStringArrayParameter(MethodDefinition wrapper, ParameterDefinition parameter, MethodBody body,
ILProcessor il)
{ {
var p = parameter.ParameterType; var p = parameter.ParameterType;
@ -656,34 +686,42 @@ namespace OpenTK.Rewrite
// IntPtr ptr = MarshalStringArrayToPtr(strings); // IntPtr ptr = MarshalStringArrayToPtr(strings);
// try { calli } // try { calli }
// finally { FreeStringArrayPtr(ptr); } // finally { FreeStringArrayPtr(ptr); }
var marshal_str_array_to_ptr = wrapper.Module.Import(TypeBindingsBase.Methods.First(m => m.Name == "MarshalStringArrayToPtr")); var marshal_str_array_to_ptr = wrapper.Module.ImportReference(TypeBindingsBase.Methods.First(m => m.Name == "MarshalStringArrayToPtr"));
// IntPtr ptr; // IntPtr ptr;
var variable_name = parameter.Name + "_string_array_ptr"; var variableDefinition = new VariableDefinition(TypeIntPtr);
body.Variables.Add(new VariableDefinition(variable_name, TypeIntPtr)); body.Variables.Add(variableDefinition);
int index = body.Variables.Count - 1; int generatedPointerVarIndex = body.Variables.Count - 1;
GeneratedVariableIdentifier stringArrayPtrVar = new GeneratedVariableIdentifier(body, variableDefinition, parameter.Name + "_string_array_ptr");
// ptr = MarshalStringArrayToPtr(strings); // ptr = MarshalStringArrayToPtr(strings);
il.Emit(OpCodes.Call, marshal_str_array_to_ptr); il.Emit(OpCodes.Call, marshal_str_array_to_ptr);
il.Emit(OpCodes.Stloc, index); il.Emit(OpCodes.Stloc, generatedPointerVarIndex);
il.Emit(OpCodes.Ldloc, index); il.Emit(OpCodes.Ldloc, generatedPointerVarIndex);
// The finally block will be emitted in the function epilogue // The finally block will be emitted in the function epilogue
return stringArrayPtrVar;
} }
static void EmitStringArrayEpilogue(MethodDefinition wrapper, ParameterDefinition parameter, MethodBody body, ILProcessor il) static void EmitStringArrayEpilogue(MethodDefinition wrapper, ParameterDefinition parameter, MethodBody body,
ILProcessor il, GeneratedVariableIdentifier generatedPtrVar)
{ {
if (generatedPtrVar == null)
{
throw new ArgumentNullException(nameof(generatedPtrVar));
}
// Note: only works for string vectors (1d arrays). // Note: only works for string vectors (1d arrays).
// We do not (and will probably never) support 2d or higher string arrays // We do not (and will probably never) support 2d or higher string arrays
var p = parameter.ParameterType; var p = parameter.ParameterType;
var free = wrapper.Module.Import(TypeBindingsBase.Methods.First(m => m.Name == "FreeStringArrayPtr")); var free = wrapper.Module.ImportReference(TypeBindingsBase.Methods.First(m => m.Name == "FreeStringArrayPtr"));
// FreeStringArrayPtr(string_array_ptr, string_array.Length) // FreeStringArrayPtr(string_array_ptr, string_array.Length)
var variable_name = parameter.Name + "_string_array_ptr";
var v = body.Variables.First(m => m.Name == variable_name);
// load string_array_ptr // load string_array_ptr
il.Emit(OpCodes.Ldloc, v.Index); il.Emit(OpCodes.Ldloc, generatedPtrVar.Definition.Index);
// load string_array.Length // load string_array.Length
il.Emit(OpCodes.Ldarg, parameter.Index); il.Emit(OpCodes.Ldarg, parameter.Index);
@ -694,7 +732,7 @@ namespace OpenTK.Rewrite
il.Emit(OpCodes.Call, free); il.Emit(OpCodes.Call, free);
} }
static void EmitConvenienceWrapper(MethodDefinition wrapper, static List<GeneratedVariableIdentifier> EmitConvenienceWrapper(MethodDefinition wrapper,
MethodDefinition native, int difference, MethodBody body, ILProcessor il) MethodDefinition native, int difference, MethodBody body, ILProcessor il)
{ {
if (wrapper.Parameters.Count > 2) if (wrapper.Parameters.Count > 2)
@ -703,6 +741,8 @@ namespace OpenTK.Rewrite
throw new NotImplementedException(); throw new NotImplementedException();
} }
List<GeneratedVariableIdentifier> generatedVariables = new List<GeneratedVariableIdentifier>();
if (wrapper.ReturnType.Name != "Void") if (wrapper.ReturnType.Name != "Void")
{ {
if (difference == 2) if (difference == 2)
@ -729,7 +769,8 @@ namespace OpenTK.Rewrite
// return result; // return result;
// } // }
body.Variables.Add(new VariableDefinition(wrapper.ReturnType)); body.Variables.Add(new VariableDefinition(wrapper.ReturnType));
EmitParameters(wrapper, native, body, il);
generatedVariables = EmitParameters(wrapper, native, body, il);
il.Emit(OpCodes.Ldloca, body.Variables.Count - 1); il.Emit(OpCodes.Ldloca, body.Variables.Count - 1);
} }
else else
@ -755,15 +796,17 @@ namespace OpenTK.Rewrite
Console.Error.WriteLine("Unknown wrapper type for ({0})", native.Name); Console.Error.WriteLine("Unknown wrapper type for ({0})", native.Name);
} }
} }
return generatedVariables;
} }
static int EmitParameters(MethodDefinition method, MethodDefinition native, MethodBody body, ILProcessor il) static List<GeneratedVariableIdentifier> EmitParameters(MethodDefinition method, MethodDefinition native, MethodBody body, ILProcessor il)
{ {
int i; List<GeneratedVariableIdentifier> generatedVariables = new List<GeneratedVariableIdentifier>();
for (i = 0; i < method.Parameters.Count; i++) for (int i = 0; i < method.Parameters.Count; i++)
{ {
var parameter = method.Parameters[i]; var parameter = method.Parameters[i];
var p = method.Module.Import(method.Parameters[i].ParameterType); var p = method.Module.ImportReference(method.Parameters[i].ParameterType);
il.Emit(OpCodes.Ldarg, i); il.Emit(OpCodes.Ldarg, i);
if (p.Name.Contains("Int32") && native.Parameters[i].ParameterType.Name.Contains("IntPtr")) if (p.Name.Contains("Int32") && native.Parameters[i].ParameterType.Name.Contains("IntPtr"))
@ -774,11 +817,11 @@ namespace OpenTK.Rewrite
} }
else if (p.Name == "StringBuilder") else if (p.Name == "StringBuilder")
{ {
EmitStringBuilderParameter(method, parameter, body, il); generatedVariables.Add(EmitStringBuilderParameter(method, parameter, body, il));
} }
else if (p.Name == "String" && !p.IsArray) else if (p.Name == "String" && !p.IsArray)
{ {
EmitStringParameter(method, parameter, body, il); generatedVariables.Add(EmitStringParameter(method, parameter, body, il));
} }
else if (p.IsByReference) else if (p.IsByReference)
{ {
@ -790,7 +833,7 @@ namespace OpenTK.Rewrite
} }
else if (p.IsArray) else if (p.IsArray)
{ {
if (p.Name != method.Module.Import(typeof(string[])).Name) if (p.Name != method.Module.ImportReference(typeof(string[])).Name)
{ {
// .Net treats 1d arrays differently than higher rank arrays. // .Net treats 1d arrays differently than higher rank arrays.
// 1d arrays are directly supported by instructions such as ldlen and ldelema. // 1d arrays are directly supported by instructions such as ldlen and ldelema.
@ -834,7 +877,7 @@ namespace OpenTK.Rewrite
} }
else else
{ {
var get_length = method.Module.Import( var get_length = method.Module.ImportReference(
mscorlib.MainModule.GetType("System.Array").Methods.First(m => m.Name == "get_Length")); mscorlib.MainModule.GetType("System.Array").Methods.First(m => m.Name == "get_Length"));
il.Emit(OpCodes.Callvirt, get_length); il.Emit(OpCodes.Callvirt, get_length);
} }
@ -880,11 +923,12 @@ namespace OpenTK.Rewrite
} }
else else
{ {
EmitStringArrayParameter(method, parameter, body, il); generatedVariables.Add(EmitStringArrayParameter(method, parameter, body, il));
} }
} }
} }
return i;
return generatedVariables;
} }
static void EmitEntryPoint(FieldDefinition entry_points, ILProcessor il, int slot) static void EmitEntryPoint(FieldDefinition entry_points, ILProcessor il, int slot)

View file

@ -5,13 +5,13 @@ using System.Reflection;
[assembly: AssemblyTitleAttribute("Generator.Rewrite")] [assembly: AssemblyTitleAttribute("Generator.Rewrite")]
[assembly: AssemblyProductAttribute("OpenTK")] [assembly: AssemblyProductAttribute("OpenTK")]
[assembly: AssemblyDescriptionAttribute("A set of fast, low-level C# bindings for OpenGL, OpenGL ES and OpenAL.")] [assembly: AssemblyDescriptionAttribute("A set of fast, low-level C# bindings for OpenGL, OpenGL ES and OpenAL.")]
[assembly: AssemblyVersionAttribute("2.0.0")] [assembly: AssemblyVersionAttribute("3.0.0")]
[assembly: AssemblyFileVersionAttribute("2.0.0")] [assembly: AssemblyFileVersionAttribute("3.0.0")]
[assembly: CLSCompliantAttribute(true)] [assembly: CLSCompliantAttribute(true)]
[assembly: AssemblyCopyrightAttribute("Copyright (c) 2006 - 2016 Stefanos Apostolopoulos <stapostol@gmail.com> for the Open Toolkit library.")] [assembly: AssemblyCopyrightAttribute("Copyright (c) 2006 - 2016 Stefanos Apostolopoulos <stapostol@gmail.com> for the Open Toolkit library.")]
namespace System { namespace System {
internal static class AssemblyVersionInformation { internal static class AssemblyVersionInformation {
internal const string Version = "2.0.0"; internal const string Version = "3.0.0";
internal const string InformationalVersion = "2.0.0"; internal const string InformationalVersion = "3.0.0";
} }
} }

View file

@ -5,13 +5,13 @@ using System.Reflection;
[assembly: AssemblyTitleAttribute("OpenTK.GLControl")] [assembly: AssemblyTitleAttribute("OpenTK.GLControl")]
[assembly: AssemblyProductAttribute("OpenTK")] [assembly: AssemblyProductAttribute("OpenTK")]
[assembly: AssemblyDescriptionAttribute("A set of fast, low-level C# bindings for OpenGL, OpenGL ES and OpenAL.")] [assembly: AssemblyDescriptionAttribute("A set of fast, low-level C# bindings for OpenGL, OpenGL ES and OpenAL.")]
[assembly: AssemblyVersionAttribute("2.0.0")] [assembly: AssemblyVersionAttribute("3.0.0")]
[assembly: AssemblyFileVersionAttribute("2.0.0")] [assembly: AssemblyFileVersionAttribute("3.0.0")]
[assembly: CLSCompliantAttribute(true)] [assembly: CLSCompliantAttribute(true)]
[assembly: AssemblyCopyrightAttribute("Copyright (c) 2006 - 2016 Stefanos Apostolopoulos <stapostol@gmail.com> for the Open Toolkit library.")] [assembly: AssemblyCopyrightAttribute("Copyright (c) 2006 - 2016 Stefanos Apostolopoulos <stapostol@gmail.com> for the Open Toolkit library.")]
namespace System { namespace System {
internal static class AssemblyVersionInformation { internal static class AssemblyVersionInformation {
internal const string Version = "2.0.0"; internal const string Version = "3.0.0";
internal const string InformationalVersion = "2.0.0"; internal const string InformationalVersion = "3.0.0";
} }
} }

View file

@ -5,13 +5,13 @@ using System.Reflection;
[assembly: AssemblyTitleAttribute("OpenTK.GLWidget")] [assembly: AssemblyTitleAttribute("OpenTK.GLWidget")]
[assembly: AssemblyProductAttribute("OpenTK")] [assembly: AssemblyProductAttribute("OpenTK")]
[assembly: AssemblyDescriptionAttribute("A set of fast, low-level C# bindings for OpenGL, OpenGL ES and OpenAL.")] [assembly: AssemblyDescriptionAttribute("A set of fast, low-level C# bindings for OpenGL, OpenGL ES and OpenAL.")]
[assembly: AssemblyVersionAttribute("2.0.0")] [assembly: AssemblyVersionAttribute("3.0.0")]
[assembly: AssemblyFileVersionAttribute("2.0.0")] [assembly: AssemblyFileVersionAttribute("3.0.0")]
[assembly: CLSCompliantAttribute(true)] [assembly: CLSCompliantAttribute(true)]
[assembly: AssemblyCopyrightAttribute("Copyright (c) 2006 - 2016 Stefanos Apostolopoulos <stapostol@gmail.com> for the Open Toolkit library.")] [assembly: AssemblyCopyrightAttribute("Copyright (c) 2006 - 2016 Stefanos Apostolopoulos <stapostol@gmail.com> for the Open Toolkit library.")]
namespace System { namespace System {
internal static class AssemblyVersionInformation { internal static class AssemblyVersionInformation {
internal const string Version = "2.0.0"; internal const string Version = "3.0.0";
internal const string InformationalVersion = "2.0.0"; internal const string InformationalVersion = "3.0.0";
} }
} }

View file

@ -97,6 +97,23 @@ namespace OpenTK.Graphics
/// Different hardware supports different flags, major and minor versions. Invalid parameters will be silently ignored. /// Different hardware supports different flags, major and minor versions. Invalid parameters will be silently ignored.
/// </remarks> /// </remarks>
public GraphicsContext(GraphicsMode mode, IWindowInfo window, int major, int minor, GraphicsContextFlags flags) public GraphicsContext(GraphicsMode mode, IWindowInfo window, int major, int minor, GraphicsContextFlags flags)
: this(mode, window, FindSharedContext(), major, minor, flags)
{
}
/// <summary>
/// Constructs a new GraphicsContext with the specified GraphicsMode, version and flags, and attaches it to the specified window.
/// </summary>
/// <param name="mode">The OpenTK.Graphics.GraphicsMode of the GraphicsContext.</param>
/// <param name="window">The OpenTK.Platform.IWindowInfo to attach the GraphicsContext to.</param>
/// <param name="shareContext">The GraphicsContext to share resources with, or null for explicit non-sharing.</param>
/// <param name="major">The major version of the new GraphicsContext.</param>
/// <param name="minor">The minor version of the new GraphicsContext.</param>
/// <param name="flags">The GraphicsContextFlags for the GraphicsContext.</param>
/// <remarks>
/// Different hardware supports different flags, major and minor versions. Invalid parameters will be silently ignored.
/// </remarks>
public GraphicsContext(GraphicsMode mode, IWindowInfo window, IGraphicsContext shareContext, int major, int minor, GraphicsContextFlags flags)
{ {
lock (SyncRoot) lock (SyncRoot)
{ {
@ -112,6 +129,18 @@ namespace OpenTK.Graphics
if (minor < 0) if (minor < 0)
minor = 0; minor = 0;
// Angle needs an embedded context
const GraphicsContextFlags useAngleFlag = GraphicsContextFlags.Angle
| GraphicsContextFlags.AngleD3D9
| GraphicsContextFlags.AngleD3D11
| GraphicsContextFlags.AngleOpenGL;
var useAngle = false;
if ((flags & useAngleFlag) != 0)
{
flags |= GraphicsContextFlags.Embedded;
useAngle = true;
}
Debug.Print("Creating GraphicsContext."); Debug.Print("Creating GraphicsContext.");
try try
{ {
@ -121,8 +150,6 @@ namespace OpenTK.Graphics
Debug.Print("GraphicsContextFlags: {0}", flags); Debug.Print("GraphicsContextFlags: {0}", flags);
Debug.Print("Requested version: {0}.{1}", major, minor); Debug.Print("Requested version: {0}.{1}", major, minor);
IGraphicsContext shareContext = FindSharedContext();
// Todo: Add a DummyFactory implementing IPlatformFactory. // Todo: Add a DummyFactory implementing IPlatformFactory.
if (designMode) if (designMode)
{ {
@ -133,8 +160,12 @@ namespace OpenTK.Graphics
IPlatformFactory factory = null; IPlatformFactory factory = null;
switch ((flags & GraphicsContextFlags.Embedded) == GraphicsContextFlags.Embedded) switch ((flags & GraphicsContextFlags.Embedded) == GraphicsContextFlags.Embedded)
{ {
case false: factory = Factory.Default; break; case false:
case true: factory = Factory.Embedded; break; factory = Factory.Default;
break;
case true:
factory = useAngle ? Factory.Angle : Factory.Embedded;
break;
} }
// Note: this approach does not allow us to mix native and EGL contexts in the same process. // Note: this approach does not allow us to mix native and EGL contexts in the same process.

View file

@ -56,6 +56,30 @@ namespace OpenTK.Graphics
/// <summary> /// <summary>
/// Indicates that this GraphicsContext is targeting OpenGL|ES. /// Indicates that this GraphicsContext is targeting OpenGL|ES.
/// </summary> /// </summary>
Embedded = 0x0004 Embedded = 0x0004,
/// <summary>
/// Indicates that this GraphicsContext is intended for offscreen rendering.
/// </summary>
Offscreen = 0x0008,
/// <summary>
/// Indicates that this GraphicsContext is targeting OpenGL|ES via Angle
/// and that angle-specific extensions are available.
/// </summary>
Angle = 0x0010,
/// <summary>
/// Indicates that this GraphicsContext is targeting OpenGL|ES via Angle
/// and uses Direct3D9 as rendering backend.
/// </summary>
AngleD3D9 = 0x0020,
/// <summary>
/// Indicates that this GraphicsContext is targeting OpenGL|ES via Angle
/// and uses Direct3D11 as rendering backend.
/// </summary>
AngleD3D11 = 0x0040,
/// <summary>
/// Indicates that this GraphicsContext is targeting OpenGL|ES via Angle
/// and uses OpenGL as rendering backend.
/// </summary>
AngleOpenGL = 0x0080,
} }
} }

View file

@ -238,7 +238,7 @@ namespace OpenTK
event EventHandler<EventArgs> WindowStateChanged; event EventHandler<EventArgs> WindowStateChanged;
/// <summary> /// <summary>
/// Occurs whenever a keybord key is pressed. /// Occurs whenever a keyboard key is pressed.
/// </summary> /// </summary>
event EventHandler<OpenTK.Input.KeyboardKeyEventArgs> KeyDown; event EventHandler<OpenTK.Input.KeyboardKeyEventArgs> KeyDown;

View file

@ -635,7 +635,7 @@ namespace OpenTK
public event EventHandler<EventArgs> IconChanged = delegate { }; public event EventHandler<EventArgs> IconChanged = delegate { };
/// <summary> /// <summary>
/// Occurs whenever a keybord key is pressed. /// Occurs whenever a keyboard key is pressed.
/// </summary> /// </summary>
public event EventHandler<OpenTK.Input.KeyboardKeyEventArgs> KeyDown = delegate { }; public event EventHandler<OpenTK.Input.KeyboardKeyEventArgs> KeyDown = delegate { };
@ -859,7 +859,7 @@ namespace OpenTK
#region OnKeyDown #region OnKeyDown
/// <summary> /// <summary>
/// Occurs whenever a keybord key is pressed. /// Occurs whenever a keyboard key is pressed.
/// </summary> /// </summary>
protected virtual void OnKeyDown(KeyboardKeyEventArgs e) protected virtual void OnKeyDown(KeyboardKeyEventArgs e)
{ {
@ -884,7 +884,7 @@ namespace OpenTK
#region OnKeyUp #region OnKeyUp
/// <summary> /// <summary>
/// Called when a keybord key is released. /// Called when a keyboard key is released.
/// </summary> /// </summary>
/// <param name="e">The <see cref="OpenTK.Input.KeyboardKeyEventArgs"/> for this event.</param> /// <param name="e">The <see cref="OpenTK.Input.KeyboardKeyEventArgs"/> for this event.</param>
protected virtual void OnKeyUp(KeyboardKeyEventArgs e) protected virtual void OnKeyUp(KeyboardKeyEventArgs e)

View file

@ -132,9 +132,11 @@
<Compile Include="Math\Matrix4x3d.cs" /> <Compile Include="Math\Matrix4x3d.cs" />
<Compile Include="Platform\Common\Hid.cs" /> <Compile Include="Platform\Common\Hid.cs" />
<Compile Include="Platform\DisplayDeviceBase.cs" /> <Compile Include="Platform\DisplayDeviceBase.cs" />
<Compile Include="Platform\Egl\AngleWindowInfo.cs" />
<Compile Include="Platform\Egl\EglException.cs" /> <Compile Include="Platform\Egl\EglException.cs" />
<Compile Include="Platform\Egl\EglUnixContext.cs" /> <Compile Include="Platform\Egl\EglUnixContext.cs" />
<Compile Include="Platform\Egl\EglWinContext.cs" /> <Compile Include="Platform\Egl\EglWinContext.cs" />
<Compile Include="Platform\Egl\EglAnglePlatformFactory.cs" />
<Compile Include="Platform\MappedGamePadDriver.cs" /> <Compile Include="Platform\MappedGamePadDriver.cs" />
<Compile Include="Platform\Windows\Bindings\HidProtocol.cs" /> <Compile Include="Platform\Windows\Bindings\HidProtocol.cs" />
<Compile Include="Platform\Windows\WinInputBase.cs" /> <Compile Include="Platform\Windows\WinInputBase.cs" />

View file

@ -27,6 +27,7 @@ using Android.Views;
using Android.Runtime; using Android.Runtime;
using Android.Graphics; using Android.Graphics;
using OpenTK.Platform.Egl; using OpenTK.Platform.Egl;
using SurfaceType = Android.Views.SurfaceType;
namespace OpenTK.Platform.Android namespace OpenTK.Platform.Android
{ {
@ -493,8 +494,8 @@ namespace OpenTK.Platform.Android
DateTime prevRenderTime; DateTime prevRenderTime;
DateTime curUpdateTime; DateTime curUpdateTime;
DateTime curRenderTime; DateTime curRenderTime;
FrameEventArgs updateEventArgs; FrameEventArgs updateEventArgs = new FrameEventArgs();
FrameEventArgs renderEventArgs; FrameEventArgs renderEventArgs = new FrameEventArgs();
// this method is called on the main thread if RenderOnUIThread is true // this method is called on the main thread if RenderOnUIThread is true
void RunIteration (CancellationToken token) void RunIteration (CancellationToken token)
@ -505,21 +506,19 @@ namespace OpenTK.Platform.Android
if (!ReadyToRender) if (!ReadyToRender)
return; return;
updateEventArgs = new FrameEventArgs ();
curUpdateTime = DateTime.Now; curUpdateTime = DateTime.Now;
if (prevUpdateTime.Ticks != 0) { if (prevUpdateTime.Ticks != 0) {
var t = (curUpdateTime - prevUpdateTime).TotalSeconds; var t = (curUpdateTime - prevUpdateTime).TotalSeconds;
updateEventArgs.Time = t < 0 ? 0 : t; updateEventArgs.Time = t;
} }
UpdateFrameInternal (updateEventArgs); UpdateFrameInternal (updateEventArgs);
prevUpdateTime = curUpdateTime; prevUpdateTime = curUpdateTime;
renderEventArgs = new FrameEventArgs ();
curRenderTime = DateTime.Now; curRenderTime = DateTime.Now;
if (prevRenderTime.Ticks == 0) { if (prevRenderTime.Ticks == 0) {
var t = (curRenderTime - prevRenderTime).TotalSeconds; var t = (curRenderTime - prevRenderTime).TotalSeconds;
renderEventArgs.Time = t < 0 ? 0 : t; renderEventArgs.Time = t;
} }
RenderFrameInternal (renderEventArgs); RenderFrameInternal (renderEventArgs);

View file

@ -0,0 +1,183 @@
using System;
using OpenTK.Graphics;
using OpenTK.Platform.Windows;
namespace OpenTK.Platform.Egl
{
using EGLSurface = IntPtr;
/// <summary>
/// A window info for angle.
/// </summary>
public interface IAngleWindowInfo : IWindowInfo
{
/// <summary>
/// Query the underlying platform pointer / handle for this window's
/// default surface or IntPtr.Zero
/// </summary>
IntPtr QuerySurfacePointer();
/// <summary>
/// Create an additional rendering surface that shares the display
/// of this window.
/// </summary>
/// <param name="width">width in pixels</param>
/// <param name="height">height in pixels</param>
/// <returns>A reference to the new surface</returns>
EGLSurface CreateSurface(int width, int height);
/// <summary>
/// Destroy a surface created with CreateSurface and clears the passed reference.
/// </summary>
/// <param name="surface">Reference to the surface.</param>
void DestroySurface(ref EGLSurface surface);
/// <summary>
/// MakeCurrent the custom surface created with CreateSurface.
/// </summary>
/// <param name="surface">Reference to the surface.</param>
void MakeCurrent(EGLSurface surface);
/// <summary>
/// Query the underlying platform pointer / handle for an EGLSurface
/// created with CreateSurface.
/// </summary>
/// <param name="surface"></param>
IntPtr QuerySurfacePointer(EGLSurface surface);
}
internal interface IAngleWindowInfoInternal : IAngleWindowInfo
{
IWindowInfo PlatformWindow { get; }
IntPtr Display { get; }
IntPtr Surface { get; }
EglContext EglContext { get; set; }
EglWindowInfo EglWindowInfo { get; set; }
IntPtr DeviceContext { get; }
}
internal class AngleWindowInfo : IAngleWindowInfoInternal
{
private readonly IWindowInfo _platform_window;
private bool _disposed;
public AngleWindowInfo(IWindowInfo platform_window)
{
_platform_window = platform_window;
}
public IWindowInfo PlatformWindow
{
get { return _platform_window; }
}
public IWindowInfo WindowInfo
{
get { return EglWindowInfo; }
}
public IntPtr DeviceContext
{
get
{
var win_win = _platform_window as WinWindowInfo;
if (win_win != null)
{
return win_win.DeviceContext;
}
return IntPtr.Zero;
}
}
public EglContext EglContext { get; set; }
public EglWindowInfo EglWindowInfo { get; set; }
public IntPtr Display
{
get { return EglWindowInfo.Display; }
}
public IntPtr Surface
{
get { return EglWindowInfo.Surface; }
}
public void Dispose()
{
Dispose(false);
}
public IntPtr Handle
{
get { return _platform_window.Handle; }
}
~AngleWindowInfo()
{
Dispose(true);
}
private void Dispose(bool called_from_finalizer)
{
if (_disposed)
{
return;
}
if (!called_from_finalizer)
{
_platform_window.Dispose();
}
// dispose unmanaged
_disposed = true;
GC.SuppressFinalize(this);
}
public IntPtr QuerySurfacePointer()
{
return QuerySurfacePointer(Surface);
}
public EGLSurface CreateSurface(int width, int height)
{
IntPtr surface;
EglWindowInfo.CreatePbufferSurface(
EglContext.GraphicsMode.Index.Value,
width, height,
out surface);
return surface;
}
public void DestroySurface(ref EGLSurface surface)
{
EglWindowInfo.DestroySurface(ref surface);
}
public void MakeCurrent(EGLSurface surface)
{
Egl.MakeCurrent(Display, surface, surface, EglContext.HandleAsEGLContext);
}
public IntPtr QuerySurfacePointer(IntPtr surface)
{
if (UsesDirect3DBackend())
{
return QuerySurfacePointer(surface,
Egl.EGL_D3D_TEXTURE_2D_SHARE_HANDLE_ANGLE);
}
return IntPtr.Zero;
}
private IntPtr QuerySurfacePointer(IntPtr surface, int attrib)
{
IntPtr surface_pointer;
if (Egl.QuerySurfacePointerANGLE(
Display, surface, attrib, out surface_pointer))
{
return surface_pointer;
}
return IntPtr.Zero;
}
private bool UsesDirect3DBackend()
{
var d3d_flags = GraphicsContextFlags.AngleD3D9 | GraphicsContextFlags.AngleD3D11;
return ((EglContext.GraphicsContextFlags & d3d_flags) != 0);
}
}
}

View file

@ -78,6 +78,17 @@ namespace OpenTK.Platform.Egl
CONTEXT_LOST = 12302, CONTEXT_LOST = 12302,
} }
enum SurfaceType
{
PBUFFER_BIT = 0x0001,
PIXMAP_BIT = 0x0002,
WINDOW_BIT = 0x0004,
VG_COLORSPACE_LINEAR_BIT = 0x0020,
VG_ALPHA_FORMAT_PRE_BIT = 0x0040,
MULTISAMPLE_RESOLVE_BOX_BIT = 0x0200,
SWAP_BEHAVIOR_PRESERVED_BIT = 0x0400,
}
static partial class Egl static partial class Egl
{ {
public const int VERSION_1_0 = 1; public const int VERSION_1_0 = 1;
@ -199,6 +210,10 @@ namespace OpenTK.Platform.Egl
// EGL_ANGLE_query_surface_pointer // EGL_ANGLE_query_surface_pointer
[DllImport("libEGL.dll", EntryPoint = "eglQuerySurfacePointerANGLE")] [DllImport("libEGL.dll", EntryPoint = "eglQuerySurfacePointerANGLE")]
public static extern bool QuerySurfacePointerANGLE(EGLDisplay display, EGLSurface surface, int attribute, out IntPtr value); public static extern bool QuerySurfacePointerANGLE(EGLDisplay display, EGLSurface surface, int attribute, out IntPtr value);
[DllImport("libEGL.dll", EntryPoint = "eglGetPlatformDisplayEXT")]
public static extern EGLDisplay GetPlatformDisplay(int platform, EGLNativeDisplayType displayId, int[] attribList);
// EGL_ANGLE_software_display // EGL_ANGLE_software_display
public static readonly EGLNativeDisplayType SOFTWARE_DISPLAY_ANGLE = new EGLNativeDisplayType(-1); public static readonly EGLNativeDisplayType SOFTWARE_DISPLAY_ANGLE = new EGLNativeDisplayType(-1);
// EGL_ANGLE_direct3d_display // EGL_ANGLE_direct3d_display
@ -224,6 +239,8 @@ namespace OpenTK.Platform.Egl
// EGL_ANGLE_platform_angle_opengl // EGL_ANGLE_platform_angle_opengl
public const int PLATFORM_ANGLE_TYPE_OPENGL_ANGLE = 0x320D; public const int PLATFORM_ANGLE_TYPE_OPENGL_ANGLE = 0x320D;
public const int PLATFORM_ANGLE_TYPE_OPENGLES_ANGLE = 0x320E; public const int PLATFORM_ANGLE_TYPE_OPENGLES_ANGLE = 0x320E;
// See EGL_ANGLE_surface_d3d_texture_2d_share_handle
public const int EGL_D3D_TEXTURE_2D_SHARE_HANDLE_ANGLE = 0x3200;
[DllImportAttribute("libEGL.dll", EntryPoint = "eglGetError")] [DllImportAttribute("libEGL.dll", EntryPoint = "eglGetError")]
public static extern ErrorCode GetError(); public static extern ErrorCode GetError();

View file

@ -0,0 +1,172 @@
#region License
//
// The Open Toolkit Library License
//
// Copyright (c) 2006 - 2015 the Open Toolkit library.
//
// Permission is hereby granted, free of charge, to any person obtaining a copy
// of this software and associated documentation files (the "Software"), to deal
// in the Software without restriction, including without limitation the rights to
// use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
// the Software, and to permit persons to whom the Software is furnished to do
// so, subject to the following conditions:
//
// The above copyright notice and this permission notice shall be included in all
// copies or substantial portions of the Software.
//
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
// OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
// HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
// WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
// OTHER DEALINGS IN THE SOFTWARE.
//
#endregion
using System;
using OpenTK.Graphics;
using OpenTK.Input;
namespace OpenTK.Platform.Egl
{
internal class EglAnglePlatformFactory : PlatformFactoryBase
{
private readonly IPlatformFactory _platform_factory;
#region Public Members
public EglAnglePlatformFactory(IPlatformFactory platform_factory)
{
_platform_factory = platform_factory;
}
public override INativeWindow CreateNativeWindow(int x, int y, int width, int height, string title, GraphicsMode mode,
GameWindowFlags options, DisplayDevice device)
{
return _platform_factory.CreateNativeWindow(x, y, width, height, title,
mode, options, device);
}
public override IDisplayDeviceDriver CreateDisplayDeviceDriver()
{
return _platform_factory.CreateDisplayDeviceDriver();
}
public override IGraphicsContext CreateGLContext(GraphicsMode mode, IWindowInfo window,
IGraphicsContext shareContext, bool directRendering, int major, int minor, GraphicsContextFlags flags)
{
var angle_window = (IAngleWindowInfoInternal) window;
var egl_window = CreateWindowInfo(angle_window, major, flags);
var egl_context = new EglWinContext(mode, egl_window, shareContext, major, minor, flags);
angle_window.EglContext = egl_context;
return egl_context;
}
public override IGraphicsContext CreateGLContext(ContextHandle handle, IWindowInfo window,
IGraphicsContext shareContext, bool directRendering, int major, int minor, GraphicsContextFlags flags)
{
var angle_window = (IAngleWindowInfoInternal) window;
var egl_window = CreateWindowInfo(angle_window, major, flags);
var egl_context = new EglWinContext(handle, egl_window, shareContext, major, minor, flags);
angle_window.EglContext = egl_context;
return egl_context;
}
public override GraphicsContext.GetCurrentContextDelegate CreateGetCurrentGraphicsContext()
{
return (GraphicsContext.GetCurrentContextDelegate)delegate
{
return new ContextHandle(Platform.Egl.Egl.GetCurrentContext());
};
}
public override IKeyboardDriver2 CreateKeyboardDriver()
{
return _platform_factory.CreateKeyboardDriver();
}
public override IMouseDriver2 CreateMouseDriver()
{
return _platform_factory.CreateMouseDriver();
}
public override IJoystickDriver2 CreateJoystickDriver()
{
return _platform_factory.CreateJoystickDriver();
}
#endregion
#region Private Members
private static bool FlagEnabled(GraphicsContextFlags flags, GraphicsContextFlags flag)
{
return (flags & flag) != 0;
}
private EglWindowInfo CreateWindowInfo(IAngleWindowInfoInternal window_info,
int major, GraphicsContextFlags flags)
{
var egl_display = GetAngleDisplay(window_info.DeviceContext, flags, major);
var egl_window = new EglWindowInfo(window_info.Handle, egl_display);
window_info.EglWindowInfo = egl_window;
return egl_window;
}
private IntPtr GetAngleDisplay(IntPtr dc, GraphicsContextFlags flags, int major)
{
// default to D3D9 for ES2, but use D3D11 for ES3 as required by Angle.
var platform_type = major == 2
? Platform.Egl.Egl.PLATFORM_ANGLE_TYPE_D3D9_ANGLE
: Platform.Egl.Egl.PLATFORM_ANGLE_TYPE_D3D11_ANGLE;
if (FlagEnabled(flags, GraphicsContextFlags.AngleD3D11))
{
platform_type = Platform.Egl.Egl.PLATFORM_ANGLE_TYPE_D3D11_ANGLE;
}
else if (FlagEnabled(flags, GraphicsContextFlags.AngleD3D9))
{
platform_type = Platform.Egl.Egl.PLATFORM_ANGLE_TYPE_D3D9_ANGLE;
}
else if (FlagEnabled(flags, GraphicsContextFlags.AngleOpenGL))
{
platform_type = Platform.Egl.Egl.PLATFORM_ANGLE_TYPE_OPENGL_ANGLE;
}
else
{
// make sure the correct flag is set.
switch (platform_type)
{
case Platform.Egl.Egl.PLATFORM_ANGLE_TYPE_D3D9_ANGLE:
flags |= GraphicsContextFlags.AngleD3D9;
break;
case Platform.Egl.Egl.PLATFORM_ANGLE_TYPE_D3D11_ANGLE:
flags |= GraphicsContextFlags.AngleD3D11;
break;
case Platform.Egl.Egl.PLATFORM_ANGLE_TYPE_OPENGL_ANGLE:
flags |= GraphicsContextFlags.AngleOpenGL;
break;
}
}
var attribs = new[]
{
Platform.Egl.Egl.PLATFORM_ANGLE_TYPE_ANGLE, platform_type,
Platform.Egl.Egl.PLATFORM_ANGLE_MAX_VERSION_MAJOR_ANGLE, Platform.Egl.Egl.DONT_CARE,
Platform.Egl.Egl.PLATFORM_ANGLE_MAX_VERSION_MINOR_ANGLE, Platform.Egl.Egl.DONT_CARE,
Platform.Egl.Egl.PLATFORM_ANGLE_DEVICE_TYPE_ANGLE, Platform.Egl.Egl.PLATFORM_ANGLE_DEVICE_TYPE_HARDWARE_ANGLE,
Platform.Egl.Egl.NONE
};
return Platform.Egl.Egl.GetPlatformDisplay(
Platform.Egl.Egl.PLATFORM_ANGLE_ANGLE,
dc,
attribs
);
}
#endregion
}
}

View file

@ -28,6 +28,7 @@
using System; using System;
using System.Diagnostics; using System.Diagnostics;
using OpenTK.Graphics; using OpenTK.Graphics;
using OpenTK.Graphics.ES20;
namespace OpenTK.Platform.Egl namespace OpenTK.Platform.Egl
{ {
@ -36,9 +37,11 @@ namespace OpenTK.Platform.Egl
#region Fields #region Fields
protected readonly RenderableFlags Renderable; protected readonly RenderableFlags Renderable;
protected EglWindowInfo WindowInfo; internal EglWindowInfo WindowInfo;
IntPtr HandleAsEGLContext { get { return Handle.Handle; } set { Handle = new ContextHandle(value); } } internal GraphicsContextFlags GraphicsContextFlags { get; set; }
internal IntPtr HandleAsEGLContext { get { return Handle.Handle; } set { Handle = new ContextHandle(value); } }
int swap_interval = 1; // Default interval is defined as 1 in EGL. int swap_interval = 1; // Default interval is defined as 1 in EGL.
#endregion #endregion
@ -53,6 +56,8 @@ namespace OpenTK.Platform.Egl
if (window == null) if (window == null)
throw new ArgumentNullException("window"); throw new ArgumentNullException("window");
EglContext shared = GetSharedEglContext(sharedContext);
WindowInfo = window; WindowInfo = window;
// Select an EGLConfig that matches the desired mode. We cannot use the 'mode' // Select an EGLConfig that matches the desired mode. We cannot use the 'mode'
@ -83,19 +88,38 @@ namespace OpenTK.Platform.Egl
Debug.Print("[EGL] Failed to bind rendering API. Error: {0}", Egl.GetError()); Debug.Print("[EGL] Failed to bind rendering API. Error: {0}", Egl.GetError());
} }
Mode = new EglGraphicsMode().SelectGraphicsMode(window, bool offscreen = (flags & GraphicsContextFlags.Offscreen) != 0;
mode.ColorFormat, mode.Depth, mode.Stencil, mode.Samples,
mode.AccumulatorFormat, mode.Buffers, mode.Stereo, SurfaceType surfaceType = offscreen
Renderable); ? SurfaceType.PBUFFER_BIT
: SurfaceType.WINDOW_BIT;
Mode = new EglGraphicsMode().SelectGraphicsMode(surfaceType,
window.Display, mode.ColorFormat, mode.Depth, mode.Stencil,
mode.Samples, mode.AccumulatorFormat, mode.Buffers, mode.Stereo,
Renderable);
if (!Mode.Index.HasValue) if (!Mode.Index.HasValue)
throw new GraphicsModeException("Invalid or unsupported GraphicsMode."); throw new GraphicsModeException("Invalid or unsupported GraphicsMode.");
IntPtr config = Mode.Index.Value; IntPtr config = Mode.Index.Value;
if (window.Surface == IntPtr.Zero) if (window.Surface == IntPtr.Zero)
window.CreateWindowSurface(config); {
if (!offscreen)
{
window.CreateWindowSurface(config);
}
else
{
window.CreatePbufferSurface(config);
}
}
int[] attrib_list = new int[] { Egl.CONTEXT_CLIENT_VERSION, major, Egl.NONE }; int[] attribList = { Egl.CONTEXT_CLIENT_VERSION, major, Egl.NONE };
HandleAsEGLContext = Egl.CreateContext(window.Display, config, sharedContext != null ? (sharedContext as IGraphicsContextInternal).Context.Handle : IntPtr.Zero, attrib_list); var shareContext = shared?.HandleAsEGLContext ?? IntPtr.Zero;
HandleAsEGLContext = Egl.CreateContext(window.Display, config, shareContext, attribList);
GraphicsContextFlags = flags;
} }
public EglContext(ContextHandle handle, EglWindowInfo window, IGraphicsContext sharedContext, public EglContext(ContextHandle handle, EglWindowInfo window, IGraphicsContext sharedContext,
@ -131,6 +155,11 @@ namespace OpenTK.Platform.Egl
{ {
if (window is EglWindowInfo) if (window is EglWindowInfo)
WindowInfo = (EglWindowInfo) window; WindowInfo = (EglWindowInfo) window;
#if !ANDROID
else if (window is IAngleWindowInfoInternal)
WindowInfo = ((IAngleWindowInfoInternal) window).EglWindowInfo;
#endif
if (!Egl.MakeCurrent(WindowInfo.Display, WindowInfo.Surface, WindowInfo.Surface, HandleAsEGLContext)) if (!Egl.MakeCurrent(WindowInfo.Display, WindowInfo.Surface, WindowInfo.Surface, HandleAsEGLContext))
{ {
throw new GraphicsContextException(string.Format("Failed to make context {0} current. Error: {1}", Handle, Egl.GetError())); throw new GraphicsContextException(string.Format("Failed to make context {0} current. Error: {1}", Handle, Egl.GetError()));
@ -171,6 +200,19 @@ namespace OpenTK.Platform.Egl
} }
} }
public override void Update(IWindowInfo window)
{
MakeCurrent(window);
// ANGLE updates the width and height of the back buffer surfaces in the WaitClient function.
// So without this calling this function, the surface won't match the size of the window after it
// was resized.
// https://bugs.chromium.org/p/angleproject/issues/detail?id=1438
if (!Egl.WaitClient())
{
Debug.Print("[Warning] Egl.WaitClient() failed. Error: {0}", Egl.GetError());
}
}
#endregion #endregion
#region IGraphicsContextInternal Members #region IGraphicsContextInternal Members
@ -216,6 +258,21 @@ namespace OpenTK.Platform.Egl
} }
} }
private EglContext GetSharedEglContext(IGraphicsContext sharedContext)
{
if (sharedContext == null)
{
return null;
}
var internalContext = sharedContext as IGraphicsContextInternal;
if (internalContext != null)
{
return (EglContext) internalContext.Implementation;
}
return (EglContext) sharedContext;
}
#endregion #endregion
} }
} }

View file

@ -26,8 +26,6 @@
#endregion #endregion
using System; using System;
using System.Collections.Generic;
using System.Text;
using OpenTK.Graphics; using OpenTK.Graphics;
namespace OpenTK.Platform.Egl namespace OpenTK.Platform.Egl
@ -46,13 +44,24 @@ namespace OpenTK.Platform.Egl
public GraphicsMode SelectGraphicsMode(EglWindowInfo window, public GraphicsMode SelectGraphicsMode(EglWindowInfo window,
ColorFormat color, int depth, int stencil, ColorFormat color, int depth, int stencil,
int samples, ColorFormat accum, int buffers, bool stereo, int samples, ColorFormat accum, int buffers, bool stereo,
RenderableFlags renderable_flags) RenderableFlags renderableFlags)
{
return SelectGraphicsMode(
SurfaceType.WINDOW_BIT,
window.Display,
color, depth, stencil, samples, accum, buffers, stereo, renderableFlags);
}
public GraphicsMode SelectGraphicsMode(SurfaceType surfaceType,
IntPtr display, ColorFormat color, int depth, int stencil,
int samples, ColorFormat accum, int buffers, bool stereo,
RenderableFlags renderableFlags)
{ {
IntPtr[] configs = new IntPtr[1]; IntPtr[] configs = new IntPtr[1];
int[] attribList = new int[] int[] attribList = new int[]
{ {
Egl.SURFACE_TYPE, Egl.WINDOW_BIT, Egl.SURFACE_TYPE, (int) surfaceType,
Egl.RENDERABLE_TYPE, (int)renderable_flags, Egl.RENDERABLE_TYPE, (int)renderableFlags,
Egl.RED_SIZE, color.Red, Egl.RED_SIZE, color.Red,
Egl.GREEN_SIZE, color.Green, Egl.GREEN_SIZE, color.Green,
@ -68,29 +77,27 @@ namespace OpenTK.Platform.Egl
Egl.NONE, Egl.NONE,
}; };
IntPtr display = window.Display; int numConfigs;
if (!Egl.ChooseConfig(display, attribList, configs, configs.Length, out numConfigs) || numConfigs == 0)
int num_configs;
if (!Egl.ChooseConfig(display, attribList, configs, configs.Length, out num_configs) || num_configs == 0)
{ {
throw new GraphicsModeException(String.Format("Failed to retrieve GraphicsMode, error {0}", Egl.GetError())); throw new GraphicsModeException(String.Format("Failed to retrieve GraphicsMode, error {0}", Egl.GetError()));
} }
// See what we really got // See what we really got
IntPtr active_config = configs[0]; IntPtr activeConfig = configs[0];
int r, g, b, a; int r, g, b, a;
Egl.GetConfigAttrib(display, active_config, Egl.RED_SIZE, out r); Egl.GetConfigAttrib(display, activeConfig, Egl.RED_SIZE, out r);
Egl.GetConfigAttrib(display, active_config, Egl.GREEN_SIZE, out g); Egl.GetConfigAttrib(display, activeConfig, Egl.GREEN_SIZE, out g);
Egl.GetConfigAttrib(display, active_config, Egl.BLUE_SIZE, out b); Egl.GetConfigAttrib(display, activeConfig, Egl.BLUE_SIZE, out b);
Egl.GetConfigAttrib(display, active_config, Egl.ALPHA_SIZE, out a); Egl.GetConfigAttrib(display, activeConfig, Egl.ALPHA_SIZE, out a);
int d, s; int d, s;
Egl.GetConfigAttrib(display, active_config, Egl.DEPTH_SIZE, out d); Egl.GetConfigAttrib(display, activeConfig, Egl.DEPTH_SIZE, out d);
Egl.GetConfigAttrib(display, active_config, Egl.STENCIL_SIZE, out s); Egl.GetConfigAttrib(display, activeConfig, Egl.STENCIL_SIZE, out s);
int sample_buffers; int sampleBuffers;
Egl.GetConfigAttrib(display, active_config, Egl.SAMPLES, out sample_buffers); Egl.GetConfigAttrib(display, activeConfig, Egl.SAMPLES, out sampleBuffers);
Egl.GetConfigAttrib(display, active_config, Egl.SAMPLES, out samples); Egl.GetConfigAttrib(display, activeConfig, Egl.SAMPLES, out samples);
return new GraphicsMode(active_config, new ColorFormat(r, g, b, a), d, s, sample_buffers > 0 ? samples : 0, 0, 2, false); return new GraphicsMode(activeConfig, new ColorFormat(r, g, b, a), d, s, sampleBuffers > 0 ? samples : 0, 0, 2, false);
} }
} }
} }

View file

@ -64,8 +64,8 @@ namespace OpenTK.Platform.Egl
Display = display; Display = display;
int dummy_major, dummy_minor; int dummyMajor, dummyMinor;
if (!Egl.Initialize(Display, out dummy_major, out dummy_minor)) if (!Egl.Initialize(Display, out dummyMajor, out dummyMinor))
{ {
throw new GraphicsContextException(String.Format("Failed to initialize EGL, error {0}.", Egl.GetError())); throw new GraphicsContextException(String.Format("Failed to initialize EGL, error {0}.", Egl.GetError()));
} }
@ -98,20 +98,66 @@ namespace OpenTK.Platform.Egl
public void CreatePbufferSurface(IntPtr config) public void CreatePbufferSurface(IntPtr config)
{ {
Surface = Egl.CreatePbufferSurface(Display, config, null); int[] attribs = new int[]{Egl.NONE};
Surface = Egl.CreatePbufferSurface(Display, config, attribs);
if (Surface == IntPtr.Zero)
{
throw new GraphicsContextException(String.Format(
"[EGL] Failed to create pbuffer surface, error {0}.", Egl.GetError()));
}
}
public void CreatePbufferSurface(IntPtr config, int width, int height)
{
if (surface != IntPtr.Zero)
{
DestroySurface();
}
CreatePbufferSurface(config, width, height, out surface);
}
public void CreatePbufferSurface(IntPtr config, int width, int height, out IntPtr bufferSurface)
{
int[] attribs = new int[]
{
Egl.WIDTH, width,
Egl.HEIGHT, height,
Egl.TEXTURE_TARGET, Egl.TEXTURE_2D,
Egl.TEXTURE_FORMAT, Egl.TEXTURE_RGBA,
Egl.NONE
};
bufferSurface = Egl.CreatePbufferSurface(Display, config, attribs);
if (bufferSurface == IntPtr.Zero)
{
throw new GraphicsContextException(String.Format(
"[EGL] Failed to create pbuffer surface, error {0}.", Egl.GetError()));
}
} }
public void DestroySurface() public void DestroySurface()
{ {
if (Surface != IntPtr.Zero) DestroySurface(ref surface);
{ }
if (Egl.GetCurrentSurface(Egl.DRAW) == Surface)
Egl.MakeCurrent(Display, IntPtr.Zero, IntPtr.Zero, IntPtr.Zero);
if (!Egl.DestroySurface(Display, Surface)) public void DestroySurface(ref IntPtr bufferSurface)
Debug.Print("[Warning] Failed to destroy {0}:{1}.", Surface.GetType().Name, Surface); {
Surface = IntPtr.Zero; if (bufferSurface == IntPtr.Zero)
{
return;
} }
if (Egl.GetCurrentSurface(Egl.DRAW) == Surface)
{
Egl.MakeCurrent(Display, IntPtr.Zero, IntPtr.Zero, IntPtr.Zero);
}
if (Egl.DestroySurface(Display, bufferSurface))
{
bufferSurface = IntPtr.Zero;
return;
}
Debug.Print("[Warning] Failed to destroy {0}:{1}.", Surface.GetType().Name, Surface);
Surface = IntPtr.Zero;
} }
public void TerminateDisplay() public void TerminateDisplay()

View file

@ -26,9 +26,7 @@
#endregion #endregion
using System; using System;
using System.Collections.Generic;
using System.Diagnostics; using System.Diagnostics;
using System.Text;
namespace OpenTK.Platform namespace OpenTK.Platform
{ {
@ -39,8 +37,10 @@ namespace OpenTK.Platform
{ {
#region Fields #region Fields
bool disposed; private bool disposed;
static IPlatformFactory default_implementation, embedded_implementation; private static IPlatformFactory defaultImplementation;
private static IPlatformFactory embeddedImplementation;
private static IPlatformFactory angleImplementation;
#endregion #endregion
@ -102,11 +102,18 @@ namespace OpenTK.Platform
else if (Configuration.RunningOnAndroid) Embedded = new Android.AndroidFactory(); else if (Configuration.RunningOnAndroid) Embedded = new Android.AndroidFactory();
#endif #endif
else Embedded = new UnsupportedPlatform(); else Embedded = new UnsupportedPlatform();
#if ANDROID
Angle = new UnsupportedPlatform();
#else
Angle = new Egl.EglAnglePlatformFactory(Embedded);
#endif
} }
#endif #endif
else else
{ {
Embedded = new UnsupportedPlatform(); Embedded = new UnsupportedPlatform();
Angle = Embedded;
} }
if (Default is UnsupportedPlatform && !(Embedded is UnsupportedPlatform)) if (Default is UnsupportedPlatform && !(Embedded is UnsupportedPlatform))
@ -119,14 +126,20 @@ namespace OpenTK.Platform
public static IPlatformFactory Default public static IPlatformFactory Default
{ {
get { return default_implementation; } get { return defaultImplementation; }
private set { default_implementation = value; } private set { defaultImplementation = value; }
} }
public static IPlatformFactory Embedded public static IPlatformFactory Embedded
{ {
get { return embedded_implementation; } get { return embeddedImplementation; }
private set { embedded_implementation = value; } private set { embeddedImplementation = value; }
}
public static IPlatformFactory Angle
{
get { return angleImplementation; }
private set { angleImplementation = value; }
} }
#endregion #endregion
@ -136,60 +149,60 @@ namespace OpenTK.Platform
public INativeWindow CreateNativeWindow(int x, int y, int width, int height, string title, public INativeWindow CreateNativeWindow(int x, int y, int width, int height, string title,
GraphicsMode mode, GameWindowFlags options, DisplayDevice device) GraphicsMode mode, GameWindowFlags options, DisplayDevice device)
{ {
return default_implementation.CreateNativeWindow(x, y, width, height, title, mode, options, device); return defaultImplementation.CreateNativeWindow(x, y, width, height, title, mode, options, device);
} }
public IDisplayDeviceDriver CreateDisplayDeviceDriver() public IDisplayDeviceDriver CreateDisplayDeviceDriver()
{ {
return default_implementation.CreateDisplayDeviceDriver(); return defaultImplementation.CreateDisplayDeviceDriver();
} }
public IGraphicsContext CreateGLContext(GraphicsMode mode, IWindowInfo window, IGraphicsContext shareContext, bool directRendering, int major, int minor, GraphicsContextFlags flags) public IGraphicsContext CreateGLContext(GraphicsMode mode, IWindowInfo window, IGraphicsContext shareContext, bool directRendering, int major, int minor, GraphicsContextFlags flags)
{ {
return default_implementation.CreateGLContext(mode, window, shareContext, directRendering, major, minor, flags); return defaultImplementation.CreateGLContext(mode, window, shareContext, directRendering, major, minor, flags);
} }
public IGraphicsContext CreateGLContext(ContextHandle handle, IWindowInfo window, IGraphicsContext shareContext, bool directRendering, int major, int minor, GraphicsContextFlags flags) public IGraphicsContext CreateGLContext(ContextHandle handle, IWindowInfo window, IGraphicsContext shareContext, bool directRendering, int major, int minor, GraphicsContextFlags flags)
{ {
return default_implementation.CreateGLContext(handle, window, shareContext, directRendering, major, minor, flags); return defaultImplementation.CreateGLContext(handle, window, shareContext, directRendering, major, minor, flags);
} }
public GraphicsContext.GetCurrentContextDelegate CreateGetCurrentGraphicsContext() public GraphicsContext.GetCurrentContextDelegate CreateGetCurrentGraphicsContext()
{ {
return default_implementation.CreateGetCurrentGraphicsContext(); return defaultImplementation.CreateGetCurrentGraphicsContext();
} }
public IKeyboardDriver2 CreateKeyboardDriver() public IKeyboardDriver2 CreateKeyboardDriver()
{ {
return default_implementation.CreateKeyboardDriver(); return defaultImplementation.CreateKeyboardDriver();
} }
public IMouseDriver2 CreateMouseDriver() public IMouseDriver2 CreateMouseDriver()
{ {
return default_implementation.CreateMouseDriver(); return defaultImplementation.CreateMouseDriver();
} }
public IGamePadDriver CreateGamePadDriver() public IGamePadDriver CreateGamePadDriver()
{ {
return default_implementation.CreateGamePadDriver(); return defaultImplementation.CreateGamePadDriver();
} }
public IJoystickDriver2 CreateJoystickDriver() public IJoystickDriver2 CreateJoystickDriver()
{ {
return default_implementation.CreateJoystickDriver(); return defaultImplementation.CreateJoystickDriver();
} }
[Obsolete] [Obsolete]
public IJoystickDriver CreateLegacyJoystickDriver() public IJoystickDriver CreateLegacyJoystickDriver()
{ {
#pragma warning disable 612,618 #pragma warning disable 612,618
return default_implementation.CreateLegacyJoystickDriver(); return defaultImplementation.CreateLegacyJoystickDriver();
#pragma warning restore 612,618 #pragma warning restore 612,618
} }
public void RegisterResource(IDisposable resource) public void RegisterResource(IDisposable resource)
{ {
default_implementation.RegisterResource(resource); defaultImplementation.RegisterResource(resource);
} }
class UnsupportedPlatform : PlatformFactoryBase class UnsupportedPlatform : PlatformFactoryBase

View file

@ -393,6 +393,24 @@ namespace OpenTK.Platform
#endregion #endregion
#region
#if !__MOBILE__
/// <summary>
/// Creates an IWindowInfo instance for Angle rendering, based on
/// supplied platform window (e.g. a window created with
/// CreateWindowsWindowInfo, or CreateDummyWindowInfo).
/// </summary>
/// <param name="platformWindow"></param>
/// <returns></returns>
public static Egl.IAngleWindowInfo CreateAngleWindowInfo(IWindowInfo platformWindow)
{
return new Egl.AngleWindowInfo(platformWindow);
}
#endif
#endregion
#endregion #endregion
#region RelaxGraphicsMode #region RelaxGraphicsMode

View file

@ -371,8 +371,8 @@ namespace OpenTK.Platform.Windows
// Load the entry points we are interested in from that dll // Load the entry points we are interested in from that dll
GetCapabilities = (XInputGetCapabilities)Load("XInputGetCapabilities", typeof(XInputGetCapabilities)); GetCapabilities = (XInputGetCapabilities)Load("XInputGetCapabilities", typeof(XInputGetCapabilities));
GetState = GetState =
// undocumented XInputGetStateEx with support for the "Guide" button (requires XINPUT_1_3+) // undocumented XInputGetStateEx (Ordinal 100) with support for the "Guide" button (requires XINPUT_1_3+)
(XInputGetState)Load("XInputGetStateEx", typeof(XInputGetState)) ?? (XInputGetState)Load(100, typeof(XInputGetState)) ??
// documented XInputGetState (no support for the "Guide" button) // documented XInputGetState (no support for the "Guide" button)
(XInputGetState)Load("XInputGetState", typeof(XInputGetState)); (XInputGetState)Load("XInputGetState", typeof(XInputGetState));
SetState = (XInputSetState)Load("XInputSetState", typeof(XInputSetState)); SetState = (XInputSetState)Load("XInputSetState", typeof(XInputSetState));
@ -380,6 +380,14 @@ namespace OpenTK.Platform.Windows
#region Private Members #region Private Members
Delegate Load(ushort ordinal, Type type)
{
IntPtr pfunc = Functions.GetProcAddress(dll, (IntPtr)ordinal);
if (pfunc != IntPtr.Zero)
return Marshal.GetDelegateForFunctionPointer(pfunc, type);
return null;
}
Delegate Load(string name, Type type) Delegate Load(string name, Type type)
{ {
IntPtr pfunc = Functions.GetProcAddress(dll, name); IntPtr pfunc = Functions.GetProcAddress(dll, name);

View file

@ -553,31 +553,11 @@ namespace OpenTK.Platform.iPhoneOS
GraphicsContext.MakeCurrent(WindowInfo); GraphicsContext.MakeCurrent(WindowInfo);
gl = GLCalls.GetGLCalls(ContextRenderingApi); gl = GLCalls.GetGLCalls(ContextRenderingApi);
int oldFramebuffer = 0, oldRenderbuffer = 1; int oldFramebuffer = 0;
gl.GetInteger(All.FramebufferBindingOes, out oldFramebuffer); gl.GetInteger(All.FramebufferBindingOes, out oldFramebuffer);
gl.GetInteger(All.RenderbufferBindingOes, out oldRenderbuffer); gl.GenFramebuffers(1, out framebuffer);
gl.GenRenderbuffers(1, out renderbuffer); CreateFrameBuffer(eaglLayer);
gl.BindRenderbuffer(All.RenderbufferOes, renderbuffer);
if (!EAGLContext.RenderBufferStorage((uint) All.RenderbufferOes, eaglLayer)) {
gl.DeleteRenderbuffers(1, ref renderbuffer);
renderbuffer = 0;
gl.BindRenderbuffer(All.RenderbufferBindingOes, oldRenderbuffer);
throw new InvalidOperationException("Error with EAGLContext.RenderBufferStorage!");
}
gl.GenFramebuffers (1, out framebuffer);
gl.BindFramebuffer (All.FramebufferOes, framebuffer);
gl.FramebufferRenderbuffer (All.FramebufferOes, All.ColorAttachment0Oes, All.RenderbufferOes, renderbuffer);
Size newSize = new Size(
(int) Math.Round(eaglLayer.Bounds.Size.Width),
(int) Math.Round(eaglLayer.Bounds.Size.Height));
Size = newSize;
gl.Viewport(0, 0, newSize.Width, newSize.Height);
gl.Scissor(0, 0, newSize.Width, newSize.Height);
frameBufferWindow = new WeakReference(Window); frameBufferWindow = new WeakReference(Window);
frameBufferLayer = new WeakReference(Layer); frameBufferLayer = new WeakReference(Layer);
@ -609,6 +589,53 @@ namespace OpenTK.Platform.iPhoneOS
gl = null; gl = null;
} }
/// <summary>
/// Resizes the frame buffer.
/// On IOS, when the device is rotated from portrait to landscape, if the framebuffer is not recreated
/// then the EAGLContext will stretch the render buffer to fit the screen.
/// If you care at all about aspect ratio, then this behavior is not desired, and in that case this method
/// should be called when rotating the device.
/// See here: http://stackoverflow.com/questions/20326947/opengl-what-need-to-reconfig-when-rotate-screen
/// And also here: https://gamedev.stackexchange.com/questions/75965/how-do-i-reconfigure-my-gles-frame-buffer-after-a-rotation
/// </summary>
public void ResizeFrameBuffer()
{
MakeCurrent();
gl.DeleteRenderbuffers(1, ref renderbuffer);
CAEAGLLayer eaglLayer = (CAEAGLLayer)Layer;
CreateFrameBuffer(eaglLayer);
}
void CreateFrameBuffer(CAEAGLLayer eaglLayer)
{
int oldRenderbuffer = 1;
gl.GetInteger(All.RenderbufferBindingOes, out oldRenderbuffer);
gl.GenRenderbuffers(1, out renderbuffer);
gl.BindRenderbuffer(All.RenderbufferOes, renderbuffer);
if (!EAGLContext.RenderBufferStorage((uint)All.RenderbufferOes, eaglLayer))
{
gl.DeleteRenderbuffers(1, ref renderbuffer);
renderbuffer = 0;
gl.BindRenderbuffer(All.RenderbufferBindingOes, oldRenderbuffer);
throw new InvalidOperationException("Error with EAGLContext.RenderBufferStorage!");
}
gl.BindFramebuffer(All.FramebufferOes, framebuffer);
gl.FramebufferRenderbuffer(All.FramebufferOes, All.ColorAttachment0Oes, All.RenderbufferOes, renderbuffer);
Size newSize = new Size(
(int)Math.Round(eaglLayer.Bounds.Size.Width),
(int)Math.Round(eaglLayer.Bounds.Size.Height));
Size = newSize;
gl.Viewport(0, 0, newSize.Width, newSize.Height);
gl.Scissor(0, 0, newSize.Width, newSize.Height);
}
public virtual void Close() public virtual void Close()
{ {
AssertValid(); AssertValid();
@ -861,20 +888,20 @@ namespace OpenTK.Platform.iPhoneOS
internal void RunIteration (NSTimer timer) internal void RunIteration (NSTimer timer)
{ {
var curUpdateTime = stopwatch.Elapsed; var curUpdateTime = stopwatch.Elapsed;
if (prevUpdateTime == TimeSpan.Zero) if (prevUpdateTime.Ticks != 0) {
prevUpdateTime = curUpdateTime; var t = (curUpdateTime - prevUpdateTime).TotalSeconds;
var t = (curUpdateTime - prevUpdateTime).TotalSeconds; updateEventArgs.Time = t;
updateEventArgs.Time = t; }
OnUpdateFrame(updateEventArgs); OnUpdateFrame(updateEventArgs);
prevUpdateTime = curUpdateTime; prevUpdateTime = curUpdateTime;
gl.BindFramebuffer(All.FramebufferOes, framebuffer); gl.BindFramebuffer(All.FramebufferOes, framebuffer);
var curRenderTime = stopwatch.Elapsed; var curRenderTime = stopwatch.Elapsed;
if (prevRenderTime == TimeSpan.Zero) if (prevRenderTime.Ticks == 0) {
prevRenderTime = curRenderTime; var t = (curRenderTime - prevRenderTime).TotalSeconds;
t = (curRenderTime - prevRenderTime).TotalSeconds; renderEventArgs.Time = t;
renderEventArgs.Time = t; }
OnRenderFrame(renderEventArgs); OnRenderFrame(renderEventArgs);
prevRenderTime = curRenderTime; prevRenderTime = curRenderTime;
} }

View file

@ -5,13 +5,13 @@ using System.Reflection;
[assembly: AssemblyTitleAttribute("OpenTK")] [assembly: AssemblyTitleAttribute("OpenTK")]
[assembly: AssemblyProductAttribute("OpenTK")] [assembly: AssemblyProductAttribute("OpenTK")]
[assembly: AssemblyDescriptionAttribute("A set of fast, low-level C# bindings for OpenGL, OpenGL ES and OpenAL.")] [assembly: AssemblyDescriptionAttribute("A set of fast, low-level C# bindings for OpenGL, OpenGL ES and OpenAL.")]
[assembly: AssemblyVersionAttribute("2.0.0")] [assembly: AssemblyVersionAttribute("3.0.0")]
[assembly: AssemblyFileVersionAttribute("2.0.0")] [assembly: AssemblyFileVersionAttribute("3.0.0")]
[assembly: CLSCompliantAttribute(true)] [assembly: CLSCompliantAttribute(true)]
[assembly: AssemblyCopyrightAttribute("Copyright (c) 2006 - 2016 Stefanos Apostolopoulos <stapostol@gmail.com> for the Open Toolkit library.")] [assembly: AssemblyCopyrightAttribute("Copyright (c) 2006 - 2016 Stefanos Apostolopoulos <stapostol@gmail.com> for the Open Toolkit library.")]
namespace System { namespace System {
internal static class AssemblyVersionInformation { internal static class AssemblyVersionInformation {
internal const string Version = "2.0.0"; internal const string Version = "3.0.0";
internal const string InformationalVersion = "2.0.0"; internal const string InformationalVersion = "3.0.0";
} }
} }