Merge remote-tracking branch 'opentk/develop' into develop

This commit is contained in:
Tzach Shabtay 2017-12-19 22:35:10 -05:00
commit 3ac862693d
456 changed files with 260509 additions and 115341 deletions

16
.github/PULL_REQUEST_TEMPLATE.md vendored Normal file
View file

@ -0,0 +1,16 @@
### Purpose of this PR
* Description of feature/change.
* Which part of OpenTK does this affect (Math, OpenGL, Platform, Input, etc).
* Links to screenshots, design docs, user docs, etc.
### Testing status
* Explanation of whats tested, how tested and existing or new automation tests.
* Can include manual testing by self.
* Specify test plans.
* Rarely acceptable to have no testing.
### Comments
* Any other comments to help understand the change.

418
.gitignore vendored
View file

@ -1,31 +1,63 @@
# =============================================
# Visual Studio & Associated technologies
# =============================================
## Ignore Visual Studio temporary files, build results, and
## files generated by popular Visual Studio add-ons.
##
## Get latest from https://github.com/github/gitignore/blob/master/VisualStudio.gitignore
# User-specific files
*.suo
*.user
*.userosscache
*.sln.docstates
# Xamarin Studio / monodevelop user-specific
# User-specific files (MonoDevelop/Xamarin Studio)
*.userprefs
*.dll.mdb
*.exe.mdb
# Build results
[Dd]ebug/
[Dd]ebugPublic/
[Rr]elease/
[Rr]eleases/
x64/
build/
x86/
bld/
[Bb]in/
[Oo]bj/
[Ll]og/
# Visual Studio 2015 cache/options directory
.vs/
# Uncomment if you have tasks that create the project's static files in wwwroot
#wwwroot/
# MSTest test Results
[Tt]est[Rr]esult*/
[Bb]uild[Ll]og.*
# NUNIT
*.VisualState.xml
TestResult.xml
# Build Results of an ATL Project
[Dd]ebugPS/
[Rr]eleasePS/
dlldata.c
# Benchmark Results
BenchmarkDotNet.Artifacts/
# .NET Core
project.lock.json
project.fragment.lock.json
artifacts/
**/Properties/launchSettings.json
*_i.c
*_p.c
*_i.h
*.ilk
*.meta
*.obj
@ -45,24 +77,31 @@ build/
*.vssscc
.builds
*.pidb
*.log
*.svclog
*.scc
# Chutzpah Test files
_Chutzpah*
# Visual C++ cache files
ipch/
*.aps
*.ncb
*.opendb
*.opensdf
*.sdf
*.cachefile
*.VC.db
*.VC.VC.opendb
# Visual Studio profiler
*.psess
*.vsp
*.vspx
*.sap
# Other Visual Studio data
.vs/
# TFS 2012 Local Workspace
$tf/
# Guidance Automation Toolkit
*.gpState
@ -70,6 +109,10 @@ ipch/
# ReSharper is a .NET coding add-in
_ReSharper*/
*.[Rr]e[Ss]harper
*.DotSettings.user
# JustCode is a .NET coding add-in
.JustCode
# TeamCity is a build add-in
_TeamCity*
@ -77,9 +120,21 @@ _TeamCity*
# DotCover is a Code Coverage Tool
*.dotCover
# Visual Studio code coverage results
*.coverage
*.coveragexml
# NCrunch
*.ncrunch*
_NCrunch_*
.*crunch*.local.xml
nCrunchTemp_*
# MightyMoose
*.mm.*
AutoTest.Net/
# Web workbench (sass)
.sass-cache/
# Installshield output folder
[Ee]xpress/
@ -98,57 +153,158 @@ DocProject/Help/html
publish/
# Publish Web Output
*.Publish.xml
*.[Pp]ublish.xml
*.azurePubxml
# TODO: Comment the next line if you want to checkin your web deploy settings
# but database connection strings (with potential passwords) will be unencrypted
*.pubxml
*.publishproj
# Enable nuget.exe in the .nuget folder (though normally executables are not tracked)
!.nuget/NuGet.exe
# Microsoft Azure Web App publish settings. Comment the next line if you want to
# checkin your Azure Web App publish settings, but sensitive information contained
# in these scripts will be unencrypted
PublishScripts/
# Windows Azure Build Output
csx
# NuGet Packages
*.nupkg
# The packages folder can be ignored because of Package Restore
**/packages/*
# except build/, which is used as an MSBuild target.
!**/packages/build/
# Uncomment if necessary however generally it will be regenerated when needed
#!**/packages/repositories.config
# NuGet v3's project.json files produces more ignorable files
*.nuget.props
*.nuget.targets
# Microsoft Azure Build Output
csx/
*.build.csdef
# Windows Store app package directory
# Microsoft Azure Emulator
ecf/
rcf/
# Windows Store app package directories and files
AppPackages/
BundleArtifacts/
Package.StoreAssociation.xml
_pkginfo.txt
*.appx
# Visual Studio cache files
# files ending in .cache can be ignored
*.[Cc]ache
# but keep track of directories ending in .cache
!*.[Cc]ache/
# Others
sql/
*.Cache
ClientBin/
[Ss]tyle[Cc]op.*
~$*
*~
*.dbmdl
*.[Pp]ublish.xml
*.dbproj.schemaview
*.jfm
*.pfx
*.publishsettings
orleans.codegen.cs
# Since there are multiple workflows, uncomment next line to ignore bower_components
# (https://github.com/github/gitignore/pull/1529#issuecomment-104372622)
#bower_components/
# RIA/Silverlight projects
Generated_Code/
# Backup & report files from converting an old project file to a newer
# Visual Studio version. Backup files are not needed, because we have git ;-)
# Backup & report files from converting an old project file
# to a newer Visual Studio version. Backup files are not needed,
# because we have git ;-)
_UpgradeReport_Files/
Backup*/
UpgradeLog*.XML
UpgradeLog*.htm
# SQL Server files
App_Data/*.mdf
App_Data/*.ldf
*.mdf
*.ldf
*.ndf
# Business Intelligence projects
*.rdl.data
*.bim.layout
*.bim_*.settings
#LightSwitch generated files
GeneratedArtifacts/
_Pvt_Extensions/
ModelManifest.xml
# Microsoft Fakes
FakesAssemblies/
# GhostDoc plugin setting file
*.GhostDoc.xml
# Node.js Tools for Visual Studio
.ntvs_analysis.dat
node_modules/
# Typescript v1 declaration files
typings/
# Visual Studio 6 build log
*.plg
# Visual Studio 6 workspace options file
*.opt
# Visual Studio 6 auto-generated workspace file (contains which files were open etc.)
*.vbw
# Visual Studio LightSwitch build output
**/*.HTMLClient/GeneratedArtifacts
**/*.DesktopClient/GeneratedArtifacts
**/*.DesktopClient/ModelManifest.xml
**/*.Server/GeneratedArtifacts
**/*.Server/ModelManifest.xml
_Pvt_Extensions
# Paket dependency manager
.paket/paket.exe
paket-files/
# FAKE - F# Make
.fake/
# CodeRush
.cr/
# Python Tools for Visual Studio (PTVS)
__pycache__/
*.pyc
# Cake - Uncomment if you are using it
# tools/**
# !tools/packages.config
# Tabs Studio
*.tss
# Telerik's JustMock configuration file
*.jmconfig
# BizTalk build output
*.btp.cs
*.btm.cs
*.odx.cs
*.xsd.cs
# =========================
# Windows detritus
# =========================
# Windows image file caches
# Windows thumbnail cache files
Thumbs.db
ehthumbs.db
ehthumbs_vista.db
# Dump file
*.stackdump
# Folder config file
Desktop.ini
@ -156,8 +312,46 @@ Desktop.ini
# Recycle Bin used on file shares
$RECYCLE.BIN/
# Mac desktop service store files
.DS_Store
# Windows Installer files
*.cab
*.msi
*.msm
*.msp
# Windows shortcuts
*.lnk
# ===========
# Macintosh
# ===========
# General
*.DS_Store
.AppleDouble
.LSOverride
# Icon must end with two \r
Icon
# Thumbnails
._*
# Files that might appear in the root of a volume
.DocumentRevisions-V100
.fseventsd
.Spotlight-V100
.TemporaryItems
.Trashes
.VolumeIcon.icns
.com.apple.timemachine.donotpresent
# Directories potentially created on remote AFP share
.AppleDB
.AppleDesktop
Network Trash Folder
Temporary Items
.apdisk
# ===================================================
# Exclude F# project specific directories and files
@ -174,6 +368,8 @@ temp/
# Test results produced by build
TestResults.xml
output.mlpd
coverage.xml
# Nuget outputs
nuget/*.nupkg
@ -187,3 +383,165 @@ docs/content/license.md
docs/content/release-notes.md
.fake
docs/tools/FSharp.Formatting.svclog
# ===========
# Covers JetBrains IDEs: Rider, IntelliJ, RubyMine, PhpStorm, AppCode, PyCharm, CLion, Android Studio and Webstorm
# Reference: https://intellij-support.jetbrains.com/hc/en-us/articles/206544839
# ===========
# User-specific stuff:
.idea/**/workspace.xml
.idea/**/tasks.xml
.idea/dictionaries
# Sensitive or high-churn files:
.idea/**/dataSources/
.idea/**/dataSources.ids
.idea/**/dataSources.xml
.idea/**/dataSources.local.xml
.idea/**/sqlDataSources.xml
.idea/**/dynamic.xml
.idea/**/uiDesigner.xml
# Gradle:
.idea/**/gradle.xml
.idea/**/libraries
# CMake
cmake-build-debug/
# Mongo Explorer plugin:
.idea/**/mongoSettings.xml
## File-based project format:
*.iws
## Plugin-specific files:
# IntelliJ
/out/
# mpeltonen/sbt-idea plugin
.idea_modules/
# JIRA plugin
atlassian-ide-plugin.xml
# Cursive Clojure plugin
.idea/replstate.xml
# Crashlytics plugin (for Android Studio and IntelliJ)
com_crashlytics_export_strings.xml
crashlytics.properties
crashlytics-build.properties
fabric.properties
# ============
# MonoDevelop
# ============
#User Specific
*.userprefs
*.usertasks
#Mono Project Files
*.pidb
*.resources
test-results/
# ================
# Linux-specific
# ================
*~
# temporary files which can be created if a process still has a handle open of a deleted file
.fuse_hidden*
# KDE directory preferences
.directory
# Linux trash folder which might appear on any partition or disk
.Trash-*
# .nfs files are created when an open file is removed but is still being accessed
.nfs*
# ============
# VS Code
# ============
.vscode/*
!.vscode/settings.json
!.vscode/tasks.json
!.vscode/launch.json
!.vscode/extensions.json
# ============
# Emacs
# ============
# -*- mode: gitignore; -*-
*~
\#*\#
/.emacs.desktop
/.emacs.desktop.lock
*.elc
auto-save-list
tramp
.\#*
# Org-mode
.org-id-locations
*_archive
# flymake-mode
*_flymake.*
# eshell files
/eshell/history
/eshell/lastdir
# elpa packages
/elpa/
# reftex files
*.rel
# AUCTeX auto folder
/auto/
# cask packages
.cask/
dist/
# Flycheck
flycheck_*.el
# server auth directory
/server/
# projectiles files
.projectile
# directory configuration
.dir-locals.el
# ===========
# Vim
# ===========
# Swap
[._]*.s[a-v][a-z]
[._]*.sw[a-p]
[._]s[a-v][a-z]
[._]sw[a-p]
# Session
Session.vim
# Temporary
.netrwhist
*~
# Auto-generated tag files
tags

View file

@ -1,9 +1,20 @@
language: csharp
sudo: false # use the new container-based Travis infrastructure
sudo: false # use the new container-based Travis infrastructure
before_install:
- chmod +x build.sh
script:
- ./build.sh NuGet
before_script:
# Start a virtual framebuffer as described: https://docs.travis-ci.com/user/gui-and-headless-browsers/
- "export DISPLAY=:99.0"
- "sh -e /etc/init.d/xvfb start"
- sleep 3 # give xvfb some time to start
script:
- travis_wait ./build.sh NuGet
after_script:
- mono --debug --profile=log:coverage,covfilter=+OpenTK,covfilter=-OpenTK.Tests,covfilter=-FSharp.Core,covfilter=-FsCheck,covfilter=-xunit.assert "packages/xunit.runner.console/tools/xunit.console.exe" "tests/OpenTK.Tests/bin/Release/OpenTK.Tests.dll" -parallel none
- mprof-report --reports=coverage --coverage-out=coverage.xml output.mlpd
- bash <(curl -s https://codecov.io/bash)

View file

@ -21,8 +21,6 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "OpenTK.GLWidget", "src\Open
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "tests", "tests", "{1857BB8E-1A35-4EBF-9F6D-685F11DC025B}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "OpenTK.Tests", "tests\OpenTK.Tests\OpenTK.Tests.csproj", "{930A780C-A67C-422F-9EED-DB38DAA47AB0}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Test.API.Desktop", "tests\Test.API.Desktop\Test.API.Desktop.csproj", "{C4DDD20F-CB4E-43F4-A75C-4A3D668E1F99}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = ".paket", ".paket", "{F1A57014-71CE-4032-A652-01B7E35E14DB}"
@ -38,6 +36,10 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "project", "project", "{5EEE
RELEASE_NOTES.md = RELEASE_NOTES.md
EndProjectSection
EndProject
Project("{F2A71F9B-5D33-465A-A702-920D77279786}") = "OpenTK.Tests", "tests\OpenTK.Tests\OpenTK.Tests.fsproj", "{6801C263-ADDA-4A7B-979D-649BCB5A1DF7}"
EndProject
Project("{F2A71F9B-5D33-465A-A702-920D77279786}") = "OpenTK.Tests.Integration", "tests\OpenTK.Tests.Integration\OpenTK.Tests.Integration.fsproj", "{522D9279-3ED6-475F-867A-6AE69A53C24A}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU
@ -76,23 +78,25 @@ Global
{A625BE87-0000-0000-0000-000000000000}.Debug|Any CPU.Build.0 = Debug|Any CPU
{A625BE87-0000-0000-0000-000000000000}.Release|Any CPU.ActiveCfg = Release|Any CPU
{A625BE87-0000-0000-0000-000000000000}.Release|Any CPU.Build.0 = Release|Any CPU
{930A780C-A67C-422F-9EED-DB38DAA47AB0}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{930A780C-A67C-422F-9EED-DB38DAA47AB0}.Debug|Any CPU.Build.0 = Debug|Any CPU
{930A780C-A67C-422F-9EED-DB38DAA47AB0}.Release|Any CPU.ActiveCfg = Release|Any CPU
{930A780C-A67C-422F-9EED-DB38DAA47AB0}.Release|Any CPU.Build.0 = Release|Any CPU
{C4DDD20F-CB4E-43F4-A75C-4A3D668E1F99}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{C4DDD20F-CB4E-43F4-A75C-4A3D668E1F99}.Debug|Any CPU.Build.0 = Debug|Any CPU
{C4DDD20F-CB4E-43F4-A75C-4A3D668E1F99}.Release|Any CPU.ActiveCfg = Release|Any CPU
{C4DDD20F-CB4E-43F4-A75C-4A3D668E1F99}.Release|Any CPU.Build.0 = Release|Any CPU
{6801C263-ADDA-4A7B-979D-649BCB5A1DF7}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{6801C263-ADDA-4A7B-979D-649BCB5A1DF7}.Debug|Any CPU.Build.0 = Debug|Any CPU
{6801C263-ADDA-4A7B-979D-649BCB5A1DF7}.Release|Any CPU.ActiveCfg = Release|Any CPU
{6801C263-ADDA-4A7B-979D-649BCB5A1DF7}.Release|Any CPU.Build.0 = Release|Any CPU
{522D9279-3ED6-475F-867A-6AE69A53C24A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{522D9279-3ED6-475F-867A-6AE69A53C24A}.Debug|Any CPU.Build.0 = Debug|Any CPU
{522D9279-3ED6-475F-867A-6AE69A53C24A}.Release|Any CPU.ActiveCfg = Release|Any CPU
{522D9279-3ED6-475F-867A-6AE69A53C24A}.Release|Any CPU.Build.0 = Release|Any CPU
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
EndGlobalSection
GlobalSection(NestedProjects) = preSolution
{930A780C-A67C-422F-9EED-DB38DAA47AB0} = {1857BB8E-1A35-4EBF-9F6D-685F11DC025B}
{C4DDD20F-CB4E-43F4-A75C-4A3D668E1F99} = {1857BB8E-1A35-4EBF-9F6D-685F11DC025B}
EndGlobalSection
GlobalSection(MonoDevelopProperties) = preSolution
StartupItem = Source\Examples\OpenTK.Examples.csproj
{6801C263-ADDA-4A7B-979D-649BCB5A1DF7} = {1857BB8E-1A35-4EBF-9F6D-685F11DC025B}
{522D9279-3ED6-475F-867A-6AE69A53C24A} = {1857BB8E-1A35-4EBF-9F6D-685F11DC025B}
EndGlobalSection
EndGlobal

View file

@ -18,10 +18,19 @@ Project website: https://opentk.github.io/
Official git repository: https://github.com/opentk/opentk
Build Status
========
| Platform | Status |
| -------------- | -------------- |
| Windows | [![Build status](https://ci.appveyor.com/api/projects/status/opentk/branch/develop?svg=true)](https://ci.appveyor.com/project/varon/opentk/branch/develop) |
| Mono/Linux | [![Build status](https://travis-ci.org/opentk/opentk.svg?branch=develop)](https://travis-ci.org/opentk/opentk) |
Features
========
- Create cutting-edge graphics with OpenGL 4.4 and OpenGL ES 3.0
- Create cutting-edge graphics with OpenGL 4.6 and OpenGL ES 3.0
- Spice up your GUI with 3d acceleration
- Improve your code flow with strong types and inline documentation
- Write once run everywhere
@ -35,6 +44,7 @@ Instructions
============
The simplest way to use OpenTK in your project is to install the [NuGet package](http://www.nuget.org/packages/OpenTK/).
If you want to try out the latest development build from the `develop` branch, we also have a [MyGet feed](https://www.myget.org/F/opentk-develop/api/v3/index.json).
Note what installing NuGet package will add reference to OpenTK.dll, but OpenTK.dll.config
will not be copied to the project output directory automatically, so you need to add it to your project
@ -54,6 +64,14 @@ cd opentk # Enter the source directory
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
OpenTK 2.0.0 is now available for download from [Nuget](https://www.nuget.org/packages/OpenTK/2.0.0).
@ -163,7 +181,7 @@ Requirements
Documentation
=============
Your favorite IDE will display inline documentation for all OpenTK APIs. Additional information can be found in the [OpenTK Manual](http://www.opentk.com/doc) and in the [opentk/Documentation/](https://github.com/opentk/opentk/tree/develop/Documentation) folder.
Your favorite IDE will display inline documentation for all OpenTK APIs. Additional information can be found in the [OpenTK Manual](http://web.archive.org/web/20150325224427/http://www.opentk.com/doc).
Technical documentation about the implementation of OpenTK can be found in the [Technical Wiki](https://github.com/opentk/opentk/wiki).

View file

@ -1,4 +1,22 @@
### 2.0.0 - alpha
### 3.0.0-pre
* Support for OpenGL 4.6
* 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
* Removed superfluous release configurations
* Numerous other fixes and enhancements

View file

@ -1,3 +1,4 @@
image: Visual Studio 2017
init:
- git config --global core.autocrlf input
build_script:

View file

@ -15,4 +15,14 @@ IF NOT EXIST build.fsx (
.paket\paket.exe update
packages\FAKE\tools\FAKE.exe init.fsx
)
packages\FAKE\tools\FAKE.exe build.fsx %*
SET BuildTarget=
if "%BuildRunner%" == "MyGet" (
SET BuildTarget=NuGet
:: Replace the existing release notes file with one for this build only
echo ### %PackageVersion% > RELEASE_NOTES.md
echo * git build >> RELEASE_NOTES.md
)
packages\FAKE\tools\FAKE.exe build.fsx %* %BuildTarget%

View file

@ -42,7 +42,7 @@ let tags = "OpenTK OpenGL OpenGLES GLES OpenAL C# F# VB .NET Mono Vector Math Ga
let copyright = "Copyright (c) 2006 - 2016 Stefanos Apostolopoulos <stapostol@gmail.com> for the Open Toolkit library."
// File system information
// File system information
let solutionFile = "OpenTK.sln"
// Pattern specifying assemblies to be tested using NUnit
@ -50,7 +50,7 @@ let testAssemblies = "tests/**/bin/Release/*Tests*.dll"
// Git configuration (used for publishing documentation in gh-pages branch)
// The profile where the project is posted
let gitOwner = "opentk"
let gitOwner = "opentk"
let gitHome = "https://github.com/" + gitOwner
// The name of the project on GitHub
@ -70,7 +70,7 @@ let isXamarinPlatform = false //EnvironmentHelper.isMacOS || Environment.OSVersi
// Helper active pattern for project types
let (|Fsproj|Csproj|Vbproj|) (projFileName:string) =
let (|Fsproj|Csproj|Vbproj|) (projFileName:string) =
match projFileName with
| f when f.EndsWith "fsproj" -> Fsproj
| f when f.EndsWith "csproj" -> Csproj
@ -78,8 +78,8 @@ let (|Fsproj|Csproj|Vbproj|) (projFileName:string) =
| _ -> failwith (sprintf "Project file %s not supported. Unknown project type." projFileName)
let activeProjects =
let xamarinFilter f =
let activeProjects =
let xamarinFilter f =
if isXamarinPlatform then
f
else
@ -88,13 +88,13 @@ let activeProjects =
-- "**/OpenTK.iOS.csproj"
!! "src/**/*.??proj"
-- "**/OpenTK.GLWidget.csproj"
++ "tests/**/OpenTK.Tests*.fsproj"
|> xamarinFilter
// Generate assembly info files with the right version & up-to-date information
Target "AssemblyInfo" (fun _ ->
let getAssemblyInfoAttributes (projectName:string) =
let projectName =
let projectName =
if projectName.Contains(".iOS") || projectName.Contains(".Android") then
projectName.Split('.').[0]
else
@ -105,11 +105,12 @@ Target "AssemblyInfo" (fun _ ->
Attribute.Version release.AssemblyVersion
Attribute.FileVersion release.AssemblyVersion
Attribute.CLSCompliant true
Attribute.Copyright copyright ]
Attribute.Copyright copyright
]
let getProjectDetails projectPath =
let projectName = System.IO.Path.GetFileNameWithoutExtension(projectPath)
( projectPath,
( projectPath,
projectName,
System.IO.Path.GetDirectoryName(projectPath),
(getAssemblyInfoAttributes projectName)
@ -126,7 +127,7 @@ Target "AssemblyInfo" (fun _ ->
)
// Copies binaries from default VS location to expected bin folder
// But keeps a subdirectory structure for each project in the
// But keeps a subdirectory structure for each project in the
// src folder to support multiple project outputs
Target "CopyBinaries" (fun _ ->
activeProjects
@ -146,7 +147,7 @@ Target "Clean" (fun _ ->
Target "Build" (fun _ ->
activeProjects
|> MSBuildRelease "" "Rebuild"
|> MSBuildRelease "" "Build"
|> ignore
)
@ -174,10 +175,10 @@ Target "NuGet" (fun _ ->
"OpenTK.iOS" ]
Paket.Pack(fun p ->
Paket.Pack(fun p ->
{ p with
OutputPath = "bin"
ExcludedTemplates = "OpenTK.GLWidget" :: xamExcludes
ExcludedTemplates = xamExcludes
Version = release.NugetVersion
ReleaseNotes = toLines release.Notes})
)
@ -194,10 +195,10 @@ Target "All" DoNothing
==> "AssemblyInfo"
==> "Build"
==> "CopyBinaries"
// ==> "RunTests"
==> "RunTests"
==> "All"
"All"
"All"
==> "NuGet"

View file

@ -33,5 +33,4 @@ run .paket/paket.exe restore
[ ! -e build.fsx ] && run .paket/paket.exe update
[ ! -e build.fsx ] && run packages/FAKE/tools/FAKE.exe init.fsx
run packages/FAKE/tools/FAKE.exe "$@" $FSIARGS build.fsx
run packages/FAKE/tools/FAKE.exe "$@" $FSIARGS build.fsx

View file

@ -2,10 +2,13 @@ source https://nuget.org/api/v2
#Open packages
nuget CommandLineParser >= 2.1.1-beta
nuget FSharp.Formatting
nuget FsCheck
nuget FsCheck.Xunit
nuget StyleCop.Analyzers
nuget xunit.runner.console
nuget xunit.assert
nuget FAKE
nuget Mono.Cecil
nuget GtkSharp
nuget Mono.Cecil >= 0.10.0-beta6
nuget gtk-sharp3

View file

@ -1,165 +1,620 @@
NUGET
remote: https://www.nuget.org/api/v2
FAKE (4.28)
FsCheck (2.4)
FSharp.Core (>= 3.1.2.5)
FsCheck.Xunit (2.4)
FsCheck (>= 2.4)
xunit.extensibility.execution (>= 2.1 < 3.0)
CommandLineParser (2.1.1-beta)
System.Collections (>= 4.0.11-rc2-24027) - restriction: >= netstandard1.5
System.Console (>= 4.0.0-rc2-24027) - restriction: >= netstandard1.5
System.Diagnostics.Debug (>= 4.0.11-rc2-24027) - restriction: >= netstandard1.5
System.Globalization (>= 4.0.11-rc2-24027) - restriction: >= netstandard1.5
System.IO (>= 4.1.0-rc2-24027) - restriction: >= netstandard1.5
System.Linq (>= 4.1.0-rc2-24027) - restriction: >= netstandard1.5
System.Linq.Expressions (>= 4.0.11-rc2-24027) - restriction: >= netstandard1.5
System.Reflection (>= 4.1.0-rc2-24027) - restriction: >= netstandard1.5
System.Reflection.Extensions (>= 4.0.1-rc2-24027) - restriction: >= netstandard1.5
System.Reflection.TypeExtensions (>= 4.1.0-rc2-24027) - restriction: >= netstandard1.5
System.Resources.ResourceManager (>= 4.0.1-rc2-24027) - restriction: >= netstandard1.5
System.Runtime (>= 4.1.0-rc2-24027) - restriction: >= netstandard1.5
System.Runtime.Extensions (>= 4.1.0-rc2-24027) - restriction: >= netstandard1.5
FAKE (4.62.5)
FsCheck (2.9)
FSharp.Core (>= 4.1) - restriction: < netstandard1.6
FSharp.Core (>= 4.1.17) - restriction: >= netstandard1.6
NETStandard.Library (>= 1.6.1) - restriction: >= netstandard1.6
FsCheck.Xunit (2.9)
FsCheck (>= 2.9)
FSharp.Core (>= 4.1.17) - restriction: >= netstandard1.6
NETStandard.Library (>= 1.6.1) - restriction: >= netstandard1.6
xunit.abstractions (>= 2.0.1) - restriction: >= netstandard1.6
xunit.core (>= 2.2) - restriction: >= netstandard1.6
xunit.extensibility.execution (>= 2.2 < 3.0) - restriction: < netstandard1.6
FSharp.Compiler.Service (2.0.0.6)
FSharp.Core (4.0.0.1)
FSharp.Core (4.2.1)
System.Collections (>= 4.0.11) - restriction: >= netstandard1.6
System.Console (>= 4.0) - restriction: >= netstandard1.6
System.Diagnostics.Debug (>= 4.0.11) - restriction: >= netstandard1.6
System.Diagnostics.Tools (>= 4.0.1) - restriction: >= netstandard1.6
System.Globalization (>= 4.0.11) - restriction: >= netstandard1.6
System.IO (>= 4.1) - restriction: >= netstandard1.6
System.Linq (>= 4.1) - restriction: >= netstandard1.6
System.Linq.Expressions (>= 4.1) - restriction: >= netstandard1.6
System.Linq.Queryable (>= 4.0.1) - restriction: >= netstandard1.6
System.Net.Requests (>= 4.0.11) - restriction: >= netstandard1.6
System.Reflection (>= 4.1) - restriction: >= netstandard1.6
System.Reflection.Extensions (>= 4.0.1) - restriction: >= netstandard1.6
System.Resources.ResourceManager (>= 4.0.1) - restriction: >= netstandard1.6
System.Runtime (>= 4.1) - restriction: >= netstandard1.6
System.Runtime.Extensions (>= 4.1) - restriction: >= netstandard1.6
System.Runtime.Numerics (>= 4.0.1) - restriction: >= netstandard1.6
System.Text.RegularExpressions (>= 4.1) - restriction: >= netstandard1.6
System.Threading (>= 4.0.11) - restriction: >= netstandard1.6
System.Threading.Tasks (>= 4.0.11) - restriction: >= netstandard1.6
System.Threading.Tasks.Parallel (>= 4.0.1) - restriction: >= netstandard1.6
System.Threading.Thread (>= 4.0) - restriction: >= netstandard1.6
System.Threading.ThreadPool (>= 4.0.10) - restriction: >= netstandard1.6
System.Threading.Timer (>= 4.0.1) - restriction: >= netstandard1.6
FSharp.Formatting (2.14.4)
FSharp.Compiler.Service (2.0.0.6)
FSharpVSPowerTools.Core (>= 2.3 < 2.4)
FSharpVSPowerTools.Core (2.3)
FSharp.Compiler.Service (>= 2.0.0.3)
GtkSharp (3.1.3)
Mono.Cecil (0.9.6.1)
System.Collections (4.0.10) - framework: dnxcore50
System.Diagnostics.Debug (>= 4.0) - framework: dnxcore50
System.Resources.ResourceManager (>= 4.0) - framework: dnxcore50
System.Runtime (>= 4.0) - framework: dnxcore50
System.Runtime (>= 4.0.20) - framework: dnxcore50
System.Runtime.Extensions (>= 4.0) - framework: dnxcore50
System.Threading (>= 4.0) - framework: dnxcore50
System.Diagnostics.Contracts (4.0) - framework: dnxcore50
System.Runtime (>= 4.0) - framework: dnxcore50
System.Diagnostics.Debug (4.0.10) - framework: dnxcore50
System.Runtime (>= 4.0) - framework: dnxcore50
System.Globalization (4.0.10) - framework: dnxcore50
System.Runtime (>= 4.0) - framework: dnxcore50
System.IO (4.0.10) - framework: dnxcore50
System.Globalization (>= 4.0) - framework: dnxcore50
System.Runtime (>= 4.0.20) - framework: dnxcore50
System.Text.Encoding (>= 4.0) - framework: dnxcore50
System.Text.Encoding (>= 4.0.10) - framework: dnxcore50
System.Text.Encoding.Extensions (>= 4.0) - framework: dnxcore50
System.Threading (>= 4.0) - framework: dnxcore50
System.Threading.Tasks (>= 4.0) - framework: dnxcore50
System.Linq (4.0) - framework: dnxcore50
System.Collections (>= 4.0.10) - framework: dnxcore50
System.Diagnostics.Debug (>= 4.0.10) - framework: dnxcore50
System.Resources.ResourceManager (>= 4.0) - framework: dnxcore50
System.Runtime (>= 4.0.20) - framework: dnxcore50
System.Runtime.Extensions (>= 4.0.10) - framework: dnxcore50
System.Linq.Expressions (4.0.10) - framework: dnxcore50
System.Collections (>= 4.0) - framework: dnxcore50
System.Diagnostics.Debug (>= 4.0) - framework: dnxcore50
System.Globalization (>= 4.0) - framework: dnxcore50
System.IO (>= 4.0) - framework: dnxcore50
System.Linq (>= 4.0) - framework: dnxcore50
System.ObjectModel (>= 4.0) - framework: dnxcore50
System.Reflection (>= 4.0) - framework: dnxcore50
System.Reflection.Emit (>= 4.0) - framework: dnxcore50
System.Reflection.Extensions (>= 4.0) - framework: dnxcore50
System.Reflection.Primitives (>= 4.0) - framework: dnxcore50
System.Reflection.TypeExtensions (>= 4.0) - framework: dnxcore50
System.Resources.ResourceManager (>= 4.0) - framework: dnxcore50
System.Runtime (>= 4.0) - framework: dnxcore50
System.Runtime (>= 4.0.20) - framework: dnxcore50
System.Runtime.Extensions (>= 4.0) - framework: dnxcore50
System.Threading (>= 4.0) - framework: dnxcore50
System.ObjectModel (4.0.10) - framework: dnxcore50
System.Collections (>= 4.0.10) - framework: dnxcore50
System.Diagnostics.Debug (>= 4.0.10) - framework: dnxcore50
System.Resources.ResourceManager (>= 4.0) - framework: dnxcore50
System.Runtime (>= 4.0.20) - framework: dnxcore50
System.Threading (>= 4.0.10) - framework: dnxcore50
System.Private.Uri (4.0) - framework: dnxcore50
System.Reflection (4.0.10) - framework: dnxcore50
System.IO (>= 4.0) - framework: dnxcore50
System.Reflection.Primitives (>= 4.0) - framework: dnxcore50
System.Runtime (>= 4.0.20) - framework: dnxcore50
System.Reflection.Emit (4.0) - framework: dnxcore50
System.IO (>= 4.0) - framework: dnxcore50
System.Reflection (>= 4.0) - framework: dnxcore50
System.Reflection.Emit.ILGeneration (>= 4.0) - framework: dnxcore50
System.Reflection.Primitives (>= 4.0) - framework: dnxcore50
System.Runtime (>= 4.0) - framework: dnxcore50
System.Reflection.Emit.ILGeneration (4.0) - framework: dnxcore50
System.Reflection (>= 4.0) - framework: dnxcore50
System.Reflection.Primitives (>= 4.0) - framework: dnxcore50
System.Runtime (>= 4.0) - framework: dnxcore50
System.Reflection.Extensions (4.0) - framework: dnxcore50
System.Diagnostics.Debug (>= 4.0.10) - framework: dnxcore50
System.Reflection (>= 4.0) - framework: dnxcore50
System.Reflection (>= 4.0.10) - framework: dnxcore50
System.Reflection.Primitives (>= 4.0) - framework: dnxcore50
System.Reflection.TypeExtensions (>= 4.0) - framework: dnxcore50
System.Resources.ResourceManager (>= 4.0) - framework: dnxcore50
System.Runtime (>= 4.0) - framework: dnxcore50
System.Runtime (>= 4.0.20) - framework: dnxcore50
System.Runtime.Extensions (>= 4.0.10) - framework: dnxcore50
System.Reflection.Primitives (4.0) - framework: dnxcore50
System.Runtime (>= 4.0) - framework: dnxcore50
System.Threading (>= 4.0) - framework: dnxcore50
System.Reflection.TypeExtensions (4.0) - framework: dnxcore50
System.Diagnostics.Contracts (>= 4.0) - framework: dnxcore50
System.Diagnostics.Debug (>= 4.0.10) - framework: dnxcore50
System.Linq (>= 4.0) - framework: dnxcore50
System.Reflection (>= 4.0) - framework: dnxcore50
System.Reflection (>= 4.0.10) - framework: dnxcore50
System.Reflection.Primitives (>= 4.0) - framework: dnxcore50
System.Resources.ResourceManager (>= 4.0) - framework: dnxcore50
System.Runtime (>= 4.0) - framework: dnxcore50
System.Runtime (>= 4.0.20) - framework: dnxcore50
System.Runtime.Extensions (>= 4.0.10) - framework: dnxcore50
System.Resources.ResourceManager (4.0) - framework: dnxcore50
System.Globalization (>= 4.0) - framework: dnxcore50
System.Reflection (>= 4.0) - framework: dnxcore50
System.Reflection (>= 4.0.10) - framework: dnxcore50
System.Runtime (>= 4.0) - framework: dnxcore50
System.Runtime (>= 4.0.20) - framework: dnxcore50
System.Runtime (4.0.20) - framework: dnxcore50
System.Private.Uri (>= 4.0) - framework: dnxcore50
System.Runtime.Extensions (4.0.10) - framework: dnxcore50
System.Runtime (>= 4.0.20) - framework: dnxcore50
System.Text.Encoding (4.0.10) - framework: dnxcore50
System.Runtime (>= 4.0) - framework: dnxcore50
System.Text.Encoding.Extensions (4.0.10) - framework: dnxcore50
System.Runtime (>= 4.0) - framework: dnxcore50
System.Text.Encoding (>= 4.0.10) - framework: dnxcore50
System.Text.RegularExpressions (4.0.10) - framework: dnxcore50
System.Collections (>= 4.0.10) - framework: dnxcore50
System.Globalization (>= 4.0.10) - framework: dnxcore50
System.Resources.ResourceManager (>= 4.0) - framework: dnxcore50
System.Runtime (>= 4.0.20) - framework: dnxcore50
System.Runtime.Extensions (>= 4.0.10) - framework: dnxcore50
System.Threading (>= 4.0.10) - framework: dnxcore50
System.Threading (4.0.10) - framework: dnxcore50
System.Runtime (>= 4.0) - framework: dnxcore50
System.Threading.Tasks (>= 4.0) - framework: dnxcore50
System.Threading.Tasks (4.0.10) - framework: dnxcore50
System.Runtime (>= 4.0) - framework: dnxcore50
xunit.abstractions (2.0) - framework: >= net45, dnx451, dnxcore50, monoandroid, monotouch, xamarinios, winv4.5, wpv8.0, wpav8.1
xunit.assert (2.1)
System.Collections (>= 4.0) - framework: dnxcore50
System.Diagnostics.Debug (>= 4.0) - framework: dnxcore50
System.Globalization (>= 4.0) - framework: dnxcore50
System.Linq (>= 4.0) - framework: dnxcore50
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.1) - framework: >= net45, dnx451, dnxcore50, monoandroid, monotouch, xamarinios, winv4.5, wpv8.0, wpav8.1
xunit.abstractions (2.0)
xunit.extensibility.execution (2.1)
System.Collections (>= 4.0) - framework: dnxcore50
System.Diagnostics.Debug (>= 4.0) - framework: dnxcore50
System.Globalization (>= 4.0) - framework: dnxcore50
System.IO (>= 4.0) - framework: dnxcore50
System.Linq (>= 4.0) - framework: dnxcore50
System.Linq.Expressions (>= 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.Encoding (>= 4.0) - framework: dnxcore50
System.Threading (>= 4.0) - framework: dnxcore50
System.Threading.Tasks (>= 4.0) - framework: dnxcore50
xunit.abstractions (>= 2.0) - framework: dnxcore50
xunit.extensibility.core (2.1) - framework: >= net45, dnx451, dnxcore50, monoandroid, monotouch, xamarinios, winv4.5, wpv8.0, wpav8.1
xunit.runner.console (2.1)
gtk-sharp3 (3.22)
Microsoft.NETCore.Platforms (1.1) - restriction: || (&& (< net35) (>= netstandard1.3) (< netstandard1.5) (< monoandroid) (< win8) (< wpa81)) (&& (< net35) (>= netstandard1.3) (< monotouch) (< xamarinios) (< xamarinmac)) (&& (< net35) (>= netstandard1.5) (< monotouch) (< xamarinios) (< xamarinmac)) (&& (< net45) (>= netstandard1.1) (< netstandard1.2) (< monoandroid) (< win8)) (&& (< net45) (>= netstandard1.1) (< netstandard1.3) (< monoandroid) (< win8) (< wpa81)) (&& (< net45) (>= netstandard1.1) (< monotouch) (< xamarinios) (< xamarinmac) (< win8) (< wpa81)) (&& (< net45) (>= netstandard1.2) (< netstandard1.3) (< monoandroid) (< win8) (< wpa81)) (&& (< net45) (< netstandard1.2) (>= netstandard1.5) (< monoandroid)) (&& (< net45) (>= netstandard1.3) (< monoandroid) (< win8) (< wpa81)) (&& (< net45) (>= netstandard1.3) (< monotouch) (< xamarinios) (< xamarinmac) (< win8) (< wpa81)) (&& (< net45) (< netstandard1.3) (>= netstandard1.5) (< monoandroid)) (&& (< net45) (>= netstandard1.5) (< monotouch) (< xamarinios) (< xamarinmac)) (&& (< net451) (>= netstandard1.2) (< monotouch) (< xamarinios) (< xamarinmac) (< win81) (< wpa81)) (&& (< net452) (>= netstandard1.1)) (&& (< net452) (>= netstandard1.3) (< monotouch) (< xamarinios) (< xamarinmac)) (&& (< net46) (>= netstandard1.5) (< monotouch) (< xamarinios) (< xamarinmac)) (&& (>= dnxcore50) (>= netstandard1.1)) (&& (>= dnxcore50) (>= netstandard1.2)) (&& (>= dnxcore50) (>= netstandard1.3)) (&& (>= dnxcore50) (>= netstandard1.5)) (>= netstandard1.6)
Microsoft.NETCore.Targets (1.1) - restriction: || (&& (< net35) (>= netstandard1.3) (< netstandard1.5) (< monoandroid) (< win8) (< wpa81)) (&& (< net35) (>= netstandard1.3) (< monotouch) (< xamarinios) (< xamarinmac)) (&& (< net35) (>= netstandard1.5) (< monotouch) (< xamarinios) (< xamarinmac)) (&& (< net45) (>= netstandard1.1) (< netstandard1.2) (< monoandroid) (< win8)) (&& (< net45) (>= netstandard1.1) (< netstandard1.3) (< monoandroid) (< win8) (< wpa81)) (&& (< net45) (>= netstandard1.1) (< monotouch) (< xamarinios) (< xamarinmac) (< win8) (< wpa81)) (&& (< net45) (>= netstandard1.2) (< netstandard1.3) (< monoandroid) (< win8) (< wpa81)) (&& (< net45) (< netstandard1.2) (>= netstandard1.5) (< monoandroid)) (&& (< net45) (>= netstandard1.3) (< netstandard1.5) (< monoandroid) (< win8) (< wpa81)) (&& (< net45) (>= netstandard1.3) (< monotouch) (< xamarinios) (< xamarinmac) (< win8) (< wpa81)) (&& (< net45) (< netstandard1.3) (>= netstandard1.5) (< monoandroid)) (&& (< net45) (>= netstandard1.5) (< monotouch) (< xamarinios) (< xamarinmac)) (&& (< net451) (>= netstandard1.2) (< monotouch) (< xamarinios) (< xamarinmac) (< win81) (< wpa81)) (&& (< net452) (>= netstandard1.3) (< monotouch) (< xamarinios) (< xamarinmac)) (&& (< net46) (>= netstandard1.5) (< monotouch) (< xamarinios) (< xamarinmac)) (&& (>= dnxcore50) (>= netstandard1.1)) (&& (>= dnxcore50) (>= netstandard1.2)) (&& (>= dnxcore50) (>= netstandard1.3)) (&& (>= dnxcore50) (>= netstandard1.5)) (&& (>= dnxcore50) (>= netstandard1.6)) (&& (< netstandard1.1) (>= netstandard1.6) (< monoandroid)) (&& (< netstandard1.2) (>= netstandard1.6) (< monoandroid)) (&& (< netstandard1.3) (>= netstandard1.6) (< monoandroid)) (&& (< netstandard1.5) (>= netstandard1.6) (< monoandroid)) (&& (>= netstandard1.6) (< monotouch) (< xamarinios) (< xamarinmac)) (>= netcore1.1)
Microsoft.Win32.Primitives (4.3) - restriction: || (&& (< net45) (>= netstandard1.3) (< monoandroid) (< win8) (< wpa81)) (&& (< net452) (>= netstandard1.3)) (>= netstandard1.6)
Microsoft.NETCore.Platforms (>= 1.1) - restriction: && (< net46) (>= netstandard1.3) (< monotouch) (< xamarinios) (< xamarinmac)
Microsoft.NETCore.Targets (>= 1.1) - restriction: && (< net46) (>= netstandard1.3) (< monotouch) (< xamarinios) (< xamarinmac)
System.Runtime (>= 4.3) - restriction: && (< net46) (>= netstandard1.3) (< monotouch) (< xamarinios) (< xamarinmac)
Mono.Cecil (0.10.0-beta6)
System.Collections (>= 4.0.11) - restriction: && (< net35) (>= netstandard1.3)
System.IO.FileSystem (>= 4.0.1) - restriction: && (< net35) (>= netstandard1.3)
System.IO.FileSystem.Primitives (>= 4.0.1) - restriction: && (< net35) (>= netstandard1.3)
System.Reflection (>= 4.1) - restriction: && (< net35) (>= netstandard1.3)
System.Runtime.Extensions (>= 4.1) - restriction: && (< net35) (>= netstandard1.3)
System.Security.Cryptography.Algorithms (>= 4.2) - restriction: && (< net35) (>= netstandard1.3)
System.Security.Cryptography.Csp (>= 4.0) - restriction: && (< net35) (>= netstandard1.3)
System.Threading (>= 4.0.11) - restriction: && (< net35) (>= netstandard1.3)
NETStandard.Library (1.6.1) - restriction: || (&& (< net35) (>= netstandard1.1)) (&& (< net452) (>= netstandard1.1)) (>= netstandard1.6)
Microsoft.NETCore.Platforms (>= 1.1) - restriction: >= netstandard1.0
Microsoft.Win32.Primitives (>= 4.3) - restriction: >= netstandard1.3
System.AppContext (>= 4.3) - restriction: >= netstandard1.3
System.Collections (>= 4.3) - restriction: >= netstandard1.0
System.Collections.Concurrent (>= 4.3) - restriction: >= netstandard1.1
System.Console (>= 4.3) - restriction: >= netstandard1.3
System.Diagnostics.Debug (>= 4.3) - restriction: >= netstandard1.0
System.Diagnostics.Tools (>= 4.3) - restriction: >= netstandard1.0
System.Diagnostics.Tracing (>= 4.3) - restriction: >= netstandard1.1
System.Globalization (>= 4.3) - restriction: >= netstandard1.0
System.Globalization.Calendars (>= 4.3) - restriction: >= netstandard1.3
System.IO (>= 4.3) - restriction: >= netstandard1.0
System.IO.Compression (>= 4.3) - restriction: >= netstandard1.1
System.IO.Compression.ZipFile (>= 4.3) - restriction: >= netstandard1.3
System.IO.FileSystem (>= 4.3) - restriction: >= netstandard1.3
System.IO.FileSystem.Primitives (>= 4.3) - restriction: >= netstandard1.3
System.Linq (>= 4.3) - restriction: >= netstandard1.0
System.Linq.Expressions (>= 4.3) - restriction: >= netstandard1.0
System.Net.Http (>= 4.3) - restriction: >= netstandard1.1
System.Net.Primitives (>= 4.3) - restriction: >= netstandard1.0
System.Net.Sockets (>= 4.3) - restriction: >= netstandard1.3
System.ObjectModel (>= 4.3) - restriction: >= netstandard1.0
System.Reflection (>= 4.3) - restriction: >= netstandard1.0
System.Reflection.Extensions (>= 4.3) - restriction: >= netstandard1.0
System.Reflection.Primitives (>= 4.3) - restriction: >= netstandard1.0
System.Resources.ResourceManager (>= 4.3) - restriction: >= netstandard1.0
System.Runtime (>= 4.3) - restriction: >= netstandard1.0
System.Runtime.Extensions (>= 4.3) - restriction: >= netstandard1.0
System.Runtime.Handles (>= 4.3) - restriction: >= netstandard1.3
System.Runtime.InteropServices (>= 4.3) - restriction: >= netstandard1.1
System.Runtime.InteropServices.RuntimeInformation (>= 4.3) - restriction: >= netstandard1.1
System.Runtime.Numerics (>= 4.3) - restriction: >= netstandard1.1
System.Security.Cryptography.Algorithms (>= 4.3) - restriction: >= netstandard1.3
System.Security.Cryptography.Encoding (>= 4.3) - restriction: >= netstandard1.3
System.Security.Cryptography.Primitives (>= 4.3) - restriction: >= netstandard1.3
System.Security.Cryptography.X509Certificates (>= 4.3) - restriction: >= netstandard1.3
System.Text.Encoding (>= 4.3) - restriction: >= netstandard1.0
System.Text.Encoding.Extensions (>= 4.3) - restriction: >= netstandard1.0
System.Text.RegularExpressions (>= 4.3) - restriction: >= netstandard1.0
System.Threading (>= 4.3) - restriction: >= netstandard1.0
System.Threading.Tasks (>= 4.3) - restriction: >= netstandard1.0
System.Threading.Timer (>= 4.3) - restriction: >= netstandard1.2
System.Xml.ReaderWriter (>= 4.3) - restriction: >= netstandard1.0
System.Xml.XDocument (>= 4.3) - restriction: >= netstandard1.0
runtime.debian.8-x64.runtime.native.System.Security.Cryptography.OpenSsl (4.3.1) - restriction: || (&& (< net452) (>= netstandard1.3) (< monotouch) (< xamarinios) (< xamarinmac)) (&& (>= netstandard1.6) (< monotouch) (< xamarinios) (< xamarinmac))
runtime.fedora.23-x64.runtime.native.System.Security.Cryptography.OpenSsl (4.3.1) - restriction: || (&& (< net452) (>= netstandard1.3) (< monotouch) (< xamarinios) (< xamarinmac)) (&& (>= netstandard1.6) (< monotouch) (< xamarinios) (< xamarinmac))
runtime.fedora.24-x64.runtime.native.System.Security.Cryptography.OpenSsl (4.3.1) - restriction: || (&& (< net452) (>= netstandard1.3) (< monotouch) (< xamarinios) (< xamarinmac)) (&& (>= netstandard1.6) (< monotouch) (< xamarinios) (< xamarinmac))
runtime.native.System (4.3) - restriction: || (&& (< net45) (>= netstandard1.1) (< monotouch) (< xamarinios) (< xamarinmac) (< win8) (< wpa81)) (&& (< net45) (>= netstandard1.3) (< monotouch) (< xamarinios) (< xamarinmac) (< win8) (< wpa81)) (&& (>= netstandard1.6) (< monotouch) (< xamarinios) (< xamarinmac))
Microsoft.NETCore.Platforms (>= 1.1)
Microsoft.NETCore.Targets (>= 1.1)
runtime.native.System.IO.Compression (4.3) - restriction: || (&& (< net45) (>= netstandard1.3) (< monotouch) (< xamarinios) (< xamarinmac) (< win8) (< wpa81)) (&& (>= dnxcore50) (>= netstandard1.1)) (&& (>= dnxcore50) (>= netstandard1.6)) (&& (>= netstandard1.6) (< monotouch) (< xamarinios) (< xamarinmac))
Microsoft.NETCore.Platforms (>= 1.1)
Microsoft.NETCore.Targets (>= 1.1)
runtime.native.System.Net.Http (4.3) - restriction: && (>= netstandard1.6) (< monotouch) (< xamarinios) (< xamarinmac)
Microsoft.NETCore.Platforms (>= 1.1)
Microsoft.NETCore.Targets (>= 1.1)
runtime.native.System.Security.Cryptography.Apple (4.3) - restriction: && (>= netstandard1.6) (< monotouch) (< xamarinios) (< xamarinmac)
runtime.osx.10.10-x64.runtime.native.System.Security.Cryptography.Apple (>= 4.3)
runtime.native.System.Security.Cryptography.OpenSsl (4.3.1) - restriction: || (&& (< net452) (>= netstandard1.3) (< monotouch) (< xamarinios) (< xamarinmac)) (&& (>= netstandard1.6) (< monotouch) (< xamarinios) (< xamarinmac))
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.1)
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.1)
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.1)
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.1)
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.1)
runtime.opensuse.13.2-x64.runtime.native.System.Security.Cryptography.OpenSsl (4.3.1) - restriction: || (&& (< net452) (>= netstandard1.3) (< monotouch) (< xamarinios) (< xamarinmac)) (&& (>= netstandard1.6) (< monotouch) (< xamarinios) (< xamarinmac))
runtime.opensuse.42.1-x64.runtime.native.System.Security.Cryptography.OpenSsl (4.3.1) - restriction: || (&& (< net452) (>= netstandard1.3) (< monotouch) (< xamarinios) (< xamarinmac)) (&& (>= netstandard1.6) (< monotouch) (< xamarinios) (< xamarinmac))
runtime.osx.10.10-x64.runtime.native.System.Security.Cryptography.Apple (4.3) - restriction: && (>= netstandard1.6) (< monotouch) (< xamarinios) (< xamarinmac)
runtime.osx.10.10-x64.runtime.native.System.Security.Cryptography.OpenSsl (4.3.1) - restriction: || (&& (< net452) (>= netstandard1.3) (< monotouch) (< xamarinios) (< xamarinmac)) (&& (>= netstandard1.6) (< monotouch) (< xamarinios) (< xamarinmac))
runtime.rhel.7-x64.runtime.native.System.Security.Cryptography.OpenSsl (4.3.1) - restriction: || (&& (< net452) (>= netstandard1.3) (< monotouch) (< xamarinios) (< xamarinmac)) (&& (>= netstandard1.6) (< monotouch) (< xamarinios) (< xamarinmac))
runtime.ubuntu.14.04-x64.runtime.native.System.Security.Cryptography.OpenSsl (4.3.1) - restriction: || (&& (< net452) (>= netstandard1.3) (< monotouch) (< xamarinios) (< xamarinmac)) (&& (>= netstandard1.6) (< monotouch) (< xamarinios) (< xamarinmac))
runtime.ubuntu.16.04-x64.runtime.native.System.Security.Cryptography.OpenSsl (4.3.1) - restriction: || (&& (< net452) (>= netstandard1.3) (< monotouch) (< xamarinios) (< xamarinmac)) (&& (>= netstandard1.6) (< monotouch) (< xamarinios) (< xamarinmac))
runtime.ubuntu.16.10-x64.runtime.native.System.Security.Cryptography.OpenSsl (4.3.1) - restriction: || (&& (< net452) (>= netstandard1.3) (< monotouch) (< xamarinios) (< xamarinmac)) (&& (>= netstandard1.6) (< monotouch) (< xamarinios) (< xamarinmac))
StyleCop.Analyzers (1.0.2)
System.AppContext (4.3) - restriction: || (&& (< net452) (>= netstandard1.3)) (>= netstandard1.6)
System.Runtime (>= 4.3) - restriction: || (&& (< net46) (>= netstandard1.3) (< netstandard1.6) (< monoandroid)) (>= dnxcore50) (&& (>= netstandard1.6) (< monotouch) (< xamarinios) (< xamarinmac))
System.Buffers (4.3) - restriction: || (&& (< net45) (>= netstandard1.3) (< monotouch) (< xamarinios) (< xamarinmac) (< win8) (< wpa81)) (&& (< net452) (>= netstandard1.3) (< monotouch) (< xamarinios) (< xamarinmac)) (&& (>= dnxcore50) (>= netstandard1.1)) (&& (>= dnxcore50) (>= netstandard1.6)) (&& (>= netstandard1.6) (< monotouch) (< xamarinios) (< xamarinmac))
System.Diagnostics.Debug (>= 4.3) - restriction: && (< net45) (>= netstandard1.1) (< monotouch) (< xamarinios) (< xamarinmac) (< win8) (< wpa81)
System.Diagnostics.Tracing (>= 4.3) - restriction: && (< net45) (>= netstandard1.1) (< monotouch) (< xamarinios) (< xamarinmac) (< win8) (< wpa81)
System.Resources.ResourceManager (>= 4.3) - restriction: && (< net45) (>= netstandard1.1) (< monotouch) (< xamarinios) (< xamarinmac) (< win8) (< wpa81)
System.Runtime (>= 4.3) - restriction: && (< net45) (>= netstandard1.1) (< monotouch) (< xamarinios) (< xamarinmac) (< win8) (< wpa81)
System.Threading (>= 4.3) - restriction: && (< net45) (>= netstandard1.1) (< monotouch) (< xamarinios) (< xamarinmac) (< win8) (< wpa81)
System.Collections (4.3) - restriction: || (&& (< net35) (>= netstandard1.3)) (&& (< net45) (>= netstandard1.1) (< netstandard1.6) (< monoandroid) (< win8) (< wpa81)) (&& (< net45) (>= netstandard1.3) (< netstandard1.6) (< monoandroid) (< win8) (< wpa81)) (&& (< net45) (>= netstandard1.3) (< monotouch) (< xamarinios) (< xamarinmac) (< win8) (< wpa81)) (&& (< net452) (>= netstandard1.1)) (&& (< net452) (>= netstandard1.3) (< monotouch) (< xamarinios) (< xamarinmac)) (&& (>= dnxcore50) (>= netstandard1.1)) (&& (>= dnxcore50) (>= netstandard1.3)) (&& (>= dnxcore50) (>= netstandard1.6)) (&& (< netstandard1.3) (>= netstandard1.6)) (>= netstandard1.5) (&& (>= netstandard1.6) (< monotouch) (< xamarinios) (< xamarinmac))
Microsoft.NETCore.Platforms (>= 1.1) - restriction: || (&& (< net45) (>= netstandard1.0) (< netstandard1.3) (< monoandroid) (< win8) (< wp8) (< wpa81)) (&& (< net45) (>= netstandard1.3) (< monotouch) (< xamarinios) (< xamarinmac) (< win8) (< wpa81)) (>= dnxcore50)
Microsoft.NETCore.Targets (>= 1.1) - restriction: || (&& (< net45) (>= netstandard1.0) (< netstandard1.3) (< monoandroid) (< win8) (< wp8) (< wpa81)) (&& (< net45) (>= netstandard1.3) (< monotouch) (< xamarinios) (< xamarinmac) (< win8) (< wpa81)) (>= dnxcore50)
System.Runtime (>= 4.3) - restriction: || (&& (< net45) (>= netstandard1.0) (< netstandard1.3) (< monoandroid) (< win8) (< wp8) (< wpa81)) (&& (< net45) (>= netstandard1.3) (< monotouch) (< xamarinios) (< xamarinmac) (< win8) (< wpa81)) (>= dnxcore50)
System.Collections.Concurrent (4.3) - restriction: || (&& (< net452) (>= netstandard1.1)) (&& (< net452) (>= netstandard1.3) (< monotouch) (< xamarinios) (< xamarinmac)) (>= netstandard1.6)
System.Collections (>= 4.3) - restriction: || (&& (< net45) (>= netstandard1.3) (< monotouch) (< xamarinios) (< xamarinmac) (< win8) (< wpa81)) (>= dnxcore50)
System.Diagnostics.Debug (>= 4.3) - restriction: || (&& (< net45) (>= netstandard1.3) (< monotouch) (< xamarinios) (< xamarinmac) (< win8) (< wpa81)) (>= dnxcore50)
System.Diagnostics.Tracing (>= 4.3) - restriction: || (&& (< net45) (>= netstandard1.3) (< monotouch) (< xamarinios) (< xamarinmac) (< win8) (< wpa81)) (>= dnxcore50)
System.Globalization (>= 4.3) - restriction: || (&& (< net45) (>= netstandard1.3) (< monotouch) (< xamarinios) (< xamarinmac) (< win8) (< wpa81)) (>= dnxcore50)
System.Reflection (>= 4.3) - restriction: && (< net45) (>= netstandard1.3) (< monotouch) (< xamarinios) (< xamarinmac) (< win8) (< wpa81)
System.Resources.ResourceManager (>= 4.3) - restriction: || (&& (< net45) (>= netstandard1.3) (< monotouch) (< xamarinios) (< xamarinmac) (< win8) (< wpa81)) (>= dnxcore50)
System.Runtime (>= 4.3) - restriction: || (&& (< net45) (>= netstandard1.1) (< netstandard1.3) (< monoandroid) (< win8) (< wpa81)) (&& (< net45) (>= netstandard1.3) (< monotouch) (< xamarinios) (< xamarinmac) (< win8) (< wpa81)) (>= dnxcore50)
System.Runtime.Extensions (>= 4.3) - restriction: || (&& (< net45) (>= netstandard1.3) (< monotouch) (< xamarinios) (< xamarinmac) (< win8) (< wpa81)) (>= dnxcore50)
System.Threading (>= 4.3) - restriction: || (&& (< net45) (>= netstandard1.3) (< monotouch) (< xamarinios) (< xamarinmac) (< win8) (< wpa81)) (>= dnxcore50)
System.Threading.Tasks (>= 4.3) - restriction: || (&& (< net45) (>= netstandard1.1) (< netstandard1.3) (< monoandroid) (< win8) (< wpa81)) (&& (< net45) (>= netstandard1.3) (< monotouch) (< xamarinios) (< xamarinmac) (< win8) (< wpa81)) (>= dnxcore50)
System.Console (4.3) - restriction: || (&& (< net452) (>= netstandard1.3)) (>= netstandard1.5)
Microsoft.NETCore.Platforms (>= 1.1) - restriction: && (< net46) (>= netstandard1.3) (< monotouch) (< xamarinios) (< xamarinmac)
Microsoft.NETCore.Targets (>= 1.1) - restriction: && (< net46) (>= netstandard1.3) (< monotouch) (< xamarinios) (< xamarinmac)
System.IO (>= 4.3) - restriction: && (< net46) (>= netstandard1.3) (< monotouch) (< xamarinios) (< xamarinmac)
System.Runtime (>= 4.3) - restriction: && (< net46) (>= netstandard1.3) (< monotouch) (< xamarinios) (< xamarinmac)
System.Text.Encoding (>= 4.3) - restriction: && (< net46) (>= netstandard1.3) (< monotouch) (< xamarinios) (< xamarinmac)
System.Diagnostics.Debug (4.3) - restriction: || (&& (< net45) (>= netstandard1.3) (< netstandard1.6) (< monoandroid) (< win8) (< wpa81)) (&& (< net45) (>= netstandard1.3) (< monotouch) (< xamarinios) (< xamarinmac) (< win8) (< wpa81)) (&& (< net452) (>= netstandard1.1)) (&& (< net452) (>= netstandard1.3) (< monotouch) (< xamarinios) (< xamarinmac)) (&& (>= dnxcore50) (>= netstandard1.1)) (&& (>= dnxcore50) (>= netstandard1.3)) (&& (>= dnxcore50) (>= netstandard1.6)) (>= netstandard1.5) (&& (>= netstandard1.6) (< monotouch) (< xamarinios) (< xamarinmac))
Microsoft.NETCore.Platforms (>= 1.1) - restriction: || (&& (< net45) (>= netstandard1.0) (< netstandard1.3) (< monoandroid) (< win8) (< wp8) (< wpa81)) (&& (< net45) (>= netstandard1.3) (< monotouch) (< xamarinios) (< xamarinmac) (< win8) (< wpa81)) (>= dnxcore50)
Microsoft.NETCore.Targets (>= 1.1) - restriction: || (&& (< net45) (>= netstandard1.0) (< netstandard1.3) (< monoandroid) (< win8) (< wp8) (< wpa81)) (&& (< net45) (>= netstandard1.3) (< monotouch) (< xamarinios) (< xamarinmac) (< win8) (< wpa81)) (>= dnxcore50)
System.Runtime (>= 4.3) - restriction: || (&& (< net45) (>= netstandard1.0) (< netstandard1.3) (< monoandroid) (< win8) (< wp8) (< wpa81)) (&& (< net45) (>= netstandard1.3) (< monotouch) (< xamarinios) (< xamarinmac) (< win8) (< wpa81)) (>= dnxcore50)
System.Diagnostics.DiagnosticSource (4.4) - restriction: || (&& (< net45) (>= netstandard1.3) (< netstandard1.6) (< monoandroid) (< win8) (< wpa81)) (&& (>= dnxcore50) (>= netstandard1.1)) (&& (>= dnxcore50) (>= netstandard1.6)) (&& (>= netstandard1.6) (< monotouch) (< xamarinios) (< xamarinmac))
System.Collections (>= 4.3) - restriction: || (&& (< net45) (>= netstandard1.1) (< netstandard1.3)) (&& (< net45) (>= netstandard1.3) (< netcore2.0) (< xamarinmac))
System.Diagnostics.Debug (>= 4.3) - restriction: && (< net45) (>= netstandard1.3) (< netcore2.0) (< xamarinmac)
System.Diagnostics.Tracing (>= 4.3) - restriction: || (&& (< net45) (>= netstandard1.1) (< netstandard1.3)) (&& (< net45) (>= netstandard1.3) (< netcore2.0) (< xamarinmac))
System.Reflection (>= 4.3) - restriction: || (&& (< net45) (>= netstandard1.1) (< netstandard1.3)) (&& (< net45) (>= netstandard1.3) (< netcore2.0) (< xamarinmac))
System.Runtime (>= 4.3) - restriction: || (&& (< net45) (>= netstandard1.1) (< netstandard1.3)) (&& (< net45) (>= netstandard1.3) (< netcore2.0) (< xamarinmac))
System.Runtime.Extensions (>= 4.3) - restriction: && (< net45) (>= netstandard1.3) (< netcore2.0) (< xamarinmac)
System.Threading (>= 4.3) - restriction: || (&& (< net45) (>= netstandard1.1) (< netstandard1.3)) (&& (< net45) (>= netstandard1.3) (< netcore2.0) (< xamarinmac))
System.Diagnostics.Tools (4.3) - restriction: || (&& (< net45) (>= netstandard1.3) (< monotouch) (< xamarinios) (< xamarinmac) (< win8) (< wpa81)) (&& (< net452) (>= netstandard1.1)) (&& (>= dnxcore50) (>= netstandard1.1)) (>= netstandard1.6)
Microsoft.NETCore.Platforms (>= 1.1) - restriction: || (&& (< net45) (>= netstandard1.0) (< monotouch) (< xamarinios) (< xamarinmac) (< win8) (< wp8) (< wpa81)) (>= dnxcore50)
Microsoft.NETCore.Targets (>= 1.1) - restriction: || (&& (< net45) (>= netstandard1.0) (< monotouch) (< xamarinios) (< xamarinmac) (< win8) (< wp8) (< wpa81)) (>= dnxcore50)
System.Runtime (>= 4.3) - restriction: || (&& (< net45) (>= netstandard1.0) (< monotouch) (< xamarinios) (< xamarinmac) (< win8) (< wp8) (< wpa81)) (>= dnxcore50)
System.Diagnostics.Tracing (4.3) - restriction: || (&& (< net45) (>= netstandard1.3) (< monoandroid) (< win8) (< wpa81)) (&& (< net45) (>= netstandard1.3) (< monotouch) (< xamarinios) (< xamarinmac) (< win8) (< wpa81)) (&& (< net452) (>= netstandard1.1)) (&& (>= dnxcore50) (>= netstandard1.1)) (&& (>= dnxcore50) (>= netstandard1.3)) (>= netstandard1.6)
Microsoft.NETCore.Platforms (>= 1.1) - restriction: || (&& (< net45) (>= netstandard1.1) (< netstandard1.2) (< monoandroid) (< win8)) (&& (< net45) (>= netstandard1.2) (< netstandard1.3) (< monoandroid) (< win8) (< wpa81)) (&& (< net45) (>= netstandard1.3) (< netstandard1.5) (< monoandroid) (< win8) (< wpa81)) (&& (< net45) (>= netstandard1.5) (< monotouch) (< xamarinios) (< xamarinmac)) (>= dnxcore50)
Microsoft.NETCore.Targets (>= 1.1) - restriction: || (&& (< net45) (>= netstandard1.1) (< netstandard1.2) (< monoandroid) (< win8)) (&& (< net45) (>= netstandard1.2) (< netstandard1.3) (< monoandroid) (< win8) (< wpa81)) (&& (< net45) (>= netstandard1.3) (< netstandard1.5) (< monoandroid) (< win8) (< wpa81)) (&& (< net45) (>= netstandard1.5) (< monotouch) (< xamarinios) (< xamarinmac)) (>= dnxcore50)
System.Runtime (>= 4.3) - restriction: || (&& (< net45) (>= netstandard1.1) (< netstandard1.2) (< monoandroid) (< win8)) (&& (< net45) (>= netstandard1.2) (< netstandard1.3) (< monoandroid) (< win8) (< wpa81)) (&& (< net45) (>= netstandard1.3) (< netstandard1.5) (< monoandroid) (< win8) (< wpa81)) (&& (< net45) (>= netstandard1.5) (< monotouch) (< xamarinios) (< xamarinmac)) (>= dnxcore50)
System.Globalization (4.3) - restriction: || (&& (< net45) (>= netstandard1.1) (< monotouch) (< xamarinios) (< xamarinmac) (< win8) (< wpa81)) (&& (< net45) (>= netstandard1.3) (< netstandard1.6) (< monoandroid) (< win8) (< wpa81)) (&& (< net45) (>= netstandard1.3) (< monotouch) (< xamarinios) (< xamarinmac) (< win8) (< wpa81)) (&& (< net452) (>= netstandard1.1)) (&& (< net452) (>= netstandard1.3) (< monotouch) (< xamarinios) (< xamarinmac)) (&& (>= dnxcore50) (>= netstandard1.1)) (&& (>= dnxcore50) (>= netstandard1.3)) (&& (>= dnxcore50) (>= netstandard1.6)) (>= netstandard1.5) (&& (>= netstandard1.6) (< monotouch) (< xamarinios) (< xamarinmac))
Microsoft.NETCore.Platforms (>= 1.1) - restriction: || (&& (< net45) (>= netstandard1.0) (< netstandard1.3) (< monoandroid) (< win8) (< wp8) (< wpa81)) (&& (< net45) (>= netstandard1.3) (< monotouch) (< xamarinios) (< xamarinmac) (< win8) (< wpa81)) (>= dnxcore50)
Microsoft.NETCore.Targets (>= 1.1) - restriction: || (&& (< net45) (>= netstandard1.0) (< netstandard1.3) (< monoandroid) (< win8) (< wp8) (< wpa81)) (&& (< net45) (>= netstandard1.3) (< monotouch) (< xamarinios) (< xamarinmac) (< win8) (< wpa81)) (>= dnxcore50)
System.Runtime (>= 4.3) - restriction: || (&& (< net45) (>= netstandard1.0) (< netstandard1.3) (< monoandroid) (< win8) (< wp8) (< wpa81)) (&& (< net45) (>= netstandard1.3) (< monotouch) (< xamarinios) (< xamarinmac) (< win8) (< wpa81)) (>= dnxcore50)
System.Globalization.Calendars (4.3) - restriction: || (&& (< net452) (>= netstandard1.3)) (&& (>= dnxcore50) (>= netstandard1.3)) (>= netstandard1.6)
Microsoft.NETCore.Platforms (>= 1.1) - restriction: && (< net46) (>= netstandard1.3) (< monotouch) (< xamarinios) (< xamarinmac)
Microsoft.NETCore.Targets (>= 1.1) - restriction: && (< net46) (>= netstandard1.3) (< monotouch) (< xamarinios) (< xamarinmac)
System.Globalization (>= 4.3) - restriction: && (< net46) (>= netstandard1.3) (< monotouch) (< xamarinios) (< xamarinmac)
System.Runtime (>= 4.3) - restriction: && (< net46) (>= netstandard1.3) (< monotouch) (< xamarinios) (< xamarinmac)
System.Globalization.Extensions (4.3) - restriction: && (>= netstandard1.6) (< monotouch) (< xamarinios) (< xamarinmac)
Microsoft.NETCore.Platforms (>= 1.1) - restriction: && (< net46) (>= netstandard1.3) (< monotouch) (< xamarinios) (< xamarinmac)
System.Globalization (>= 4.3) - restriction: && (< net46) (>= netstandard1.3) (< monotouch) (< xamarinios) (< xamarinmac)
System.Resources.ResourceManager (>= 4.3) - restriction: && (< net46) (>= netstandard1.3) (< monotouch) (< xamarinios) (< xamarinmac)
System.Runtime (>= 4.3) - restriction: && (< net46) (>= netstandard1.3) (< monotouch) (< xamarinios) (< xamarinmac)
System.Runtime.Extensions (>= 4.3) - restriction: && (< net46) (>= netstandard1.3) (< monotouch) (< xamarinios) (< xamarinmac)
System.Runtime.InteropServices (>= 4.3) - restriction: && (< net46) (>= netstandard1.3) (< monotouch) (< xamarinios) (< xamarinmac)
System.IO (4.3) - restriction: || (&& (< net35) (>= net463)) (&& (< net35) (>= netstandard1.3) (< netstandard1.4) (< monoandroid)) (&& (< net35) (>= netstandard1.3) (< monoandroid) (< win8) (< wpa81)) (&& (< net35) (>= netstandard1.3) (< monotouch) (< xamarinios) (< xamarinmac)) (&& (< net35) (>= netstandard1.4) (< monoandroid)) (&& (< net45) (>= netstandard1.1) (< netstandard1.3) (< monoandroid) (< win8) (< wpa81)) (&& (< net45) (>= netstandard1.3) (< monoandroid) (< win8) (< wpa81)) (&& (< net45) (>= netstandard1.3) (< monotouch) (< xamarinios) (< xamarinmac) (< win8) (< wpa81)) (&& (< net452) (>= netstandard1.1)) (&& (< net452) (>= netstandard1.3) (< monotouch) (< xamarinios) (< xamarinmac)) (&& (>= dnxcore50) (>= netstandard1.1)) (&& (>= dnxcore50) (>= netstandard1.3)) (&& (>= dnxcore50) (>= netstandard1.6)) (&& (< netstandard1.3) (>= netstandard1.6) (< monoandroid)) (>= netstandard1.5) (&& (>= netstandard1.6) (< monotouch) (< xamarinios) (< xamarinmac))
Microsoft.NETCore.Platforms (>= 1.1) - restriction: || (&& (< net45) (>= netstandard1.0) (< netstandard1.3) (< monoandroid) (< win8) (< wp8) (< wpa81)) (&& (< net45) (>= netstandard1.3) (< netstandard1.5) (< monoandroid) (< win8) (< wpa81)) (&& (< net45) (>= netstandard1.5) (< monotouch) (< xamarinios) (< xamarinmac)) (>= dnxcore50)
Microsoft.NETCore.Targets (>= 1.1) - restriction: || (&& (< net45) (>= netstandard1.0) (< netstandard1.3) (< monoandroid) (< win8) (< wp8) (< wpa81)) (&& (< net45) (>= netstandard1.3) (< netstandard1.5) (< monoandroid) (< win8) (< wpa81)) (&& (< net45) (>= netstandard1.5) (< monotouch) (< xamarinios) (< xamarinmac)) (>= dnxcore50)
System.Runtime (>= 4.3) - restriction: || (&& (< net45) (>= netstandard1.0) (< netstandard1.3) (< monoandroid) (< win8) (< wp8) (< wpa81)) (&& (< net45) (>= netstandard1.3) (< netstandard1.5) (< monoandroid) (< win8) (< wpa81)) (&& (< net45) (>= netstandard1.5) (< monotouch) (< xamarinios) (< xamarinmac)) (>= dnxcore50)
System.Text.Encoding (>= 4.3) - restriction: || (&& (< net45) (>= netstandard1.0) (< netstandard1.3) (< monoandroid) (< win8) (< wp8) (< wpa81)) (&& (< net45) (>= netstandard1.3) (< netstandard1.5) (< monoandroid) (< win8) (< wpa81)) (&& (< net45) (>= netstandard1.5) (< monotouch) (< xamarinios) (< xamarinmac)) (>= dnxcore50)
System.Threading.Tasks (>= 4.3) - restriction: || (&& (< net45) (>= netstandard1.0) (< netstandard1.3) (< monoandroid) (< win8) (< wp8) (< wpa81)) (&& (< net45) (>= netstandard1.3) (< netstandard1.5) (< monoandroid) (< win8) (< wpa81)) (&& (< net45) (>= netstandard1.5) (< monotouch) (< xamarinios) (< xamarinmac)) (>= dnxcore50)
System.IO.Compression (4.3) - restriction: || (&& (< net45) (>= netstandard1.3) (< monoandroid) (< win8) (< wpa81)) (&& (< net452) (>= netstandard1.1)) (&& (< net452) (>= netstandard1.3) (< monotouch) (< xamarinios) (< xamarinmac)) (>= netstandard1.6)
Microsoft.NETCore.Platforms (>= 1.1) - restriction: && (< net45) (>= netstandard1.3) (< monotouch) (< xamarinios) (< xamarinmac) (< win8) (< wpa81)
runtime.native.System (>= 4.3) - restriction: && (< net45) (>= netstandard1.3) (< monotouch) (< xamarinios) (< xamarinmac) (< win8) (< wpa81)
runtime.native.System.IO.Compression (>= 4.3) - restriction: || (&& (< net45) (>= netstandard1.3) (< monotouch) (< xamarinios) (< xamarinmac) (< win8) (< wpa81)) (>= dnxcore50)
System.Buffers (>= 4.3) - restriction: || (&& (< net45) (>= netstandard1.3) (< monotouch) (< xamarinios) (< xamarinmac) (< win8) (< wpa81)) (>= dnxcore50)
System.Collections (>= 4.3) - restriction: || (&& (< net45) (>= netstandard1.3) (< monotouch) (< xamarinios) (< xamarinmac) (< win8) (< wpa81)) (>= dnxcore50)
System.Diagnostics.Debug (>= 4.3) - restriction: || (&& (< net45) (>= netstandard1.3) (< monotouch) (< xamarinios) (< xamarinmac) (< win8) (< wpa81)) (>= dnxcore50)
System.IO (>= 4.3) - restriction: || (&& (< net45) (>= netstandard1.1) (< netstandard1.3) (< monoandroid) (< win8) (< wpa81)) (&& (< net45) (>= netstandard1.3) (< monotouch) (< xamarinios) (< xamarinmac) (< win8) (< wpa81)) (>= dnxcore50)
System.Resources.ResourceManager (>= 4.3) - restriction: || (&& (< net45) (>= netstandard1.3) (< monotouch) (< xamarinios) (< xamarinmac) (< win8) (< wpa81)) (>= dnxcore50)
System.Runtime (>= 4.3) - restriction: || (&& (< net45) (>= netstandard1.1) (< netstandard1.3) (< monoandroid) (< win8) (< wpa81)) (&& (< net45) (>= netstandard1.3) (< monotouch) (< xamarinios) (< xamarinmac) (< win8) (< wpa81)) (>= dnxcore50)
System.Runtime.Extensions (>= 4.3) - restriction: || (&& (< net45) (>= netstandard1.3) (< monotouch) (< xamarinios) (< xamarinmac) (< win8) (< wpa81)) (>= dnxcore50)
System.Runtime.Handles (>= 4.3) - restriction: || (&& (< net45) (>= netstandard1.3) (< monotouch) (< xamarinios) (< xamarinmac) (< win8) (< wpa81)) (>= dnxcore50)
System.Runtime.InteropServices (>= 4.3) - restriction: || (&& (< net45) (>= netstandard1.3) (< monotouch) (< xamarinios) (< xamarinmac) (< win8) (< wpa81)) (>= dnxcore50)
System.Text.Encoding (>= 4.3) - restriction: || (&& (< net45) (>= netstandard1.1) (< netstandard1.3) (< monoandroid) (< win8) (< wpa81)) (&& (< net45) (>= netstandard1.3) (< monotouch) (< xamarinios) (< xamarinmac) (< win8) (< wpa81)) (>= dnxcore50)
System.Threading (>= 4.3) - restriction: || (&& (< net45) (>= netstandard1.3) (< monotouch) (< xamarinios) (< xamarinmac) (< win8) (< wpa81)) (>= dnxcore50)
System.Threading.Tasks (>= 4.3) - restriction: || (&& (< net45) (>= netstandard1.3) (< monotouch) (< xamarinios) (< xamarinmac) (< win8) (< wpa81)) (>= dnxcore50)
System.IO.Compression.ZipFile (4.3) - restriction: || (&& (< net452) (>= netstandard1.3)) (>= netstandard1.6)
System.Buffers (>= 4.3) - restriction: && (< net46) (>= netstandard1.3) (< monotouch) (< xamarinios) (< xamarinmac)
System.IO (>= 4.3) - restriction: && (< net46) (>= netstandard1.3) (< monotouch) (< xamarinios) (< xamarinmac)
System.IO.Compression (>= 4.3) - restriction: && (< net46) (>= netstandard1.3) (< monotouch) (< xamarinios) (< xamarinmac)
System.IO.FileSystem (>= 4.3) - restriction: && (< net46) (>= netstandard1.3) (< monotouch) (< xamarinios) (< xamarinmac)
System.IO.FileSystem.Primitives (>= 4.3) - restriction: && (< net46) (>= netstandard1.3) (< monotouch) (< xamarinios) (< xamarinmac)
System.Resources.ResourceManager (>= 4.3) - restriction: && (< net46) (>= netstandard1.3) (< monotouch) (< xamarinios) (< xamarinmac)
System.Runtime (>= 4.3) - restriction: && (< net46) (>= netstandard1.3) (< monotouch) (< xamarinios) (< xamarinmac)
System.Runtime.Extensions (>= 4.3) - restriction: && (< net46) (>= netstandard1.3) (< monotouch) (< xamarinios) (< xamarinmac)
System.Text.Encoding (>= 4.3) - restriction: && (< net46) (>= netstandard1.3) (< monotouch) (< xamarinios) (< xamarinmac)
System.IO.FileSystem (4.3) - restriction: || (&& (< net35) (>= netstandard1.3)) (&& (< net45) (>= netstandard1.3) (< monotouch) (< xamarinios) (< xamarinmac) (< win8) (< wpa81)) (&& (< net452) (>= netstandard1.3)) (&& (>= dnxcore50) (>= netstandard1.1)) (&& (>= dnxcore50) (>= netstandard1.3)) (>= netstandard1.6)
Microsoft.NETCore.Platforms (>= 1.1) - restriction: && (< net46) (>= netstandard1.3) (< monotouch) (< xamarinios) (< xamarinmac)
Microsoft.NETCore.Targets (>= 1.1) - restriction: && (< net46) (>= netstandard1.3) (< monotouch) (< xamarinios) (< xamarinmac)
System.IO (>= 4.3) - restriction: && (< net46) (>= netstandard1.3) (< monotouch) (< xamarinios) (< xamarinmac)
System.IO.FileSystem.Primitives (>= 4.3) - restriction: || (>= net46) (&& (>= netstandard1.3) (< monotouch) (< xamarinios) (< xamarinmac))
System.Runtime (>= 4.3) - restriction: && (< net46) (>= netstandard1.3) (< monotouch) (< xamarinios) (< xamarinmac)
System.Runtime.Handles (>= 4.3) - restriction: && (< net46) (>= netstandard1.3) (< monotouch) (< xamarinios) (< xamarinmac)
System.Text.Encoding (>= 4.3) - restriction: && (< net46) (>= netstandard1.3) (< monotouch) (< xamarinios) (< xamarinmac)
System.Threading.Tasks (>= 4.3) - restriction: && (< net46) (>= netstandard1.3) (< monotouch) (< xamarinios) (< xamarinmac)
System.IO.FileSystem.Primitives (4.3) - restriction: || (&& (< net35) (>= net46)) (&& (< net35) (>= netstandard1.3)) (&& (< net45) (>= netstandard1.3) (< monotouch) (< xamarinios) (< xamarinmac) (< win8) (< wpa81)) (&& (< net452) (>= netstandard1.3)) (&& (>= dnxcore50) (>= netstandard1.1)) (>= netstandard1.6)
System.Runtime (>= 4.3) - restriction: && (< net46) (>= netstandard1.3) (< monotouch) (< xamarinios) (< xamarinmac)
System.Linq (4.3) - restriction: || (&& (< net452) (>= netstandard1.1)) (&& (< net452) (>= netstandard1.3) (< monotouch) (< xamarinios) (< xamarinmac)) (>= netstandard1.5) (&& (>= netstandard1.6) (< monotouch) (< xamarinios) (< xamarinmac))
System.Collections (>= 4.3) - restriction: || (&& (< net45) (>= netstandard1.0) (< netstandard1.6) (< monoandroid) (< win8) (< wp8) (< wpa81)) (>= dnxcore50) (&& (>= netstandard1.6) (< monotouch) (< xamarinios) (< xamarinmac))
System.Diagnostics.Debug (>= 4.3) - restriction: || (>= dnxcore50) (&& (>= netstandard1.6) (< monotouch) (< xamarinios) (< xamarinmac))
System.Resources.ResourceManager (>= 4.3) - restriction: || (>= dnxcore50) (&& (>= netstandard1.6) (< monotouch) (< xamarinios) (< xamarinmac))
System.Runtime (>= 4.3) - restriction: || (&& (< net45) (>= netstandard1.0) (< netstandard1.6) (< monoandroid) (< win8) (< wp8) (< wpa81)) (>= dnxcore50) (&& (>= netstandard1.6) (< monotouch) (< xamarinios) (< xamarinmac))
System.Runtime.Extensions (>= 4.3) - restriction: || (>= dnxcore50) (&& (>= netstandard1.6) (< monotouch) (< xamarinios) (< xamarinmac))
System.Linq.Expressions (4.3) - restriction: || (&& (< net452) (>= netstandard1.1)) (&& (>= dnxcore50) (>= netstandard1.6)) (&& (< netstandard1.3) (>= netstandard1.6) (< monoandroid)) (>= netstandard1.5) (&& (>= netstandard1.6) (< monotouch) (< xamarinios) (< xamarinmac))
System.Collections (>= 4.3) - restriction: || (>= dnxcore50) (&& (>= netstandard1.6) (< monotouch) (< xamarinios) (< xamarinmac))
System.Diagnostics.Debug (>= 4.3) - restriction: || (>= dnxcore50) (&& (>= netstandard1.6) (< monotouch) (< xamarinios) (< xamarinmac))
System.Globalization (>= 4.3) - restriction: || (>= dnxcore50) (&& (>= netstandard1.6) (< monotouch) (< xamarinios) (< xamarinmac))
System.IO (>= 4.3) - restriction: || (>= dnxcore50) (&& (>= netstandard1.6) (< monotouch) (< xamarinios) (< xamarinmac))
System.Linq (>= 4.3) - restriction: || (>= dnxcore50) (&& (>= netstandard1.6) (< monotouch) (< xamarinios) (< xamarinmac))
System.ObjectModel (>= 4.3) - restriction: && (>= netstandard1.6) (< monotouch) (< xamarinios) (< xamarinmac)
System.Reflection (>= 4.3) - restriction: || (&& (< net45) (>= netstandard1.0) (< netstandard1.3) (< monoandroid) (< win8) (< wp8) (< wpa81)) (&& (< net45) (>= netstandard1.3) (< netstandard1.6) (< monoandroid) (< win8) (< wpa81)) (>= dnxcore50) (&& (>= netstandard1.6) (< monotouch) (< xamarinios) (< xamarinmac))
System.Reflection.Emit (>= 4.3) - restriction: && (>= netstandard1.6) (< monotouch) (< xamarinios) (< xamarinmac)
System.Reflection.Emit.ILGeneration (>= 4.3) - restriction: || (>= dnxcore50) (&& (>= netstandard1.6) (< monotouch) (< xamarinios) (< xamarinmac))
System.Reflection.Emit.Lightweight (>= 4.3) - restriction: || (>= dnxcore50) (&& (>= netstandard1.6) (< monotouch) (< xamarinios) (< xamarinmac))
System.Reflection.Extensions (>= 4.3) - restriction: || (>= dnxcore50) (&& (>= netstandard1.6) (< monotouch) (< xamarinios) (< xamarinmac))
System.Reflection.Primitives (>= 4.3) - restriction: || (>= dnxcore50) (&& (>= netstandard1.6) (< monotouch) (< xamarinios) (< xamarinmac))
System.Reflection.TypeExtensions (>= 4.3) - restriction: || (>= dnxcore50) (&& (>= netstandard1.6) (< monotouch) (< xamarinios) (< xamarinmac))
System.Resources.ResourceManager (>= 4.3) - restriction: || (>= dnxcore50) (&& (>= netstandard1.6) (< monotouch) (< xamarinios) (< xamarinmac))
System.Runtime (>= 4.3) - restriction: || (&& (< net45) (>= netstandard1.0) (< netstandard1.3) (< monoandroid) (< win8) (< wp8) (< wpa81)) (&& (< net45) (>= netstandard1.3) (< netstandard1.6) (< monoandroid) (< win8) (< wpa81)) (>= dnxcore50) (&& (>= netstandard1.6) (< monotouch) (< xamarinios) (< xamarinmac))
System.Runtime.Extensions (>= 4.3) - restriction: || (>= dnxcore50) (&& (>= netstandard1.6) (< monotouch) (< xamarinios) (< xamarinmac))
System.Threading (>= 4.3) - restriction: || (>= dnxcore50) (&& (>= netstandard1.6) (< monotouch) (< xamarinios) (< xamarinmac))
System.Linq.Queryable (4.3) - restriction: >= netstandard1.6
System.Collections (>= 4.3) - restriction: || (&& (< net45) (>= netstandard1.3) (< monotouch) (< xamarinios) (< xamarinmac) (< win8) (< wpa81)) (>= dnxcore50)
System.Diagnostics.Debug (>= 4.3) - restriction: || (&& (< net45) (>= netstandard1.3) (< monotouch) (< xamarinios) (< xamarinmac) (< win8) (< wpa81)) (>= dnxcore50)
System.Linq (>= 4.3) - restriction: || (&& (< net45) (>= netstandard1.0) (< netstandard1.3) (< monoandroid) (< win8) (< wp8) (< wpa81)) (&& (< net45) (>= netstandard1.3) (< monotouch) (< xamarinios) (< xamarinmac) (< win8) (< wpa81)) (>= dnxcore50)
System.Linq.Expressions (>= 4.3) - restriction: || (&& (< net45) (>= netstandard1.0) (< netstandard1.3) (< monoandroid) (< win8) (< wp8) (< wpa81)) (&& (< net45) (>= netstandard1.3) (< monotouch) (< xamarinios) (< xamarinmac) (< win8) (< wpa81)) (>= dnxcore50)
System.Reflection (>= 4.3) - restriction: || (&& (< net45) (>= netstandard1.3) (< monotouch) (< xamarinios) (< xamarinmac) (< win8) (< wpa81)) (>= dnxcore50)
System.Reflection.Extensions (>= 4.3) - restriction: || (&& (< net45) (>= netstandard1.3) (< monotouch) (< xamarinios) (< xamarinmac) (< win8) (< wpa81)) (>= dnxcore50)
System.Resources.ResourceManager (>= 4.3) - restriction: || (&& (< net45) (>= netstandard1.3) (< monotouch) (< xamarinios) (< xamarinmac) (< win8) (< wpa81)) (>= dnxcore50)
System.Runtime (>= 4.3) - restriction: || (&& (< net45) (>= netstandard1.0) (< netstandard1.3) (< monoandroid) (< win8) (< wp8) (< wpa81)) (&& (< net45) (>= netstandard1.3) (< monotouch) (< xamarinios) (< xamarinmac) (< win8) (< wpa81)) (>= dnxcore50)
System.Net.Http (4.3.2) - restriction: || (&& (< net452) (>= netstandard1.1)) (>= netstandard1.6)
Microsoft.NETCore.Platforms (>= 1.1) - restriction: || (&& (< net45) (>= netstandard1.3) (< netstandard1.6) (< monoandroid) (< win8) (< wpa81)) (>= dnxcore50) (&& (>= netstandard1.6) (< monotouch) (< xamarinios) (< xamarinmac))
Microsoft.Win32.Primitives (>= 4.3) - restriction: && (< net45) (>= netstandard1.3) (< netstandard1.6) (< monoandroid) (< win8) (< wpa81)
runtime.native.System (>= 4.3) - restriction: && (>= netstandard1.6) (< monotouch) (< xamarinios) (< xamarinmac)
runtime.native.System.Net.Http (>= 4.3) - restriction: && (>= netstandard1.6) (< monotouch) (< xamarinios) (< xamarinmac)
runtime.native.System.Security.Cryptography.OpenSsl (>= 4.3) - restriction: && (>= netstandard1.6) (< monotouch) (< xamarinios) (< xamarinmac)
System.Collections (>= 4.3) - restriction: || (&& (< net45) (>= netstandard1.3) (< netstandard1.6) (< monoandroid) (< win8) (< wpa81)) (>= dnxcore50) (&& (>= netstandard1.6) (< monotouch) (< xamarinios) (< xamarinmac))
System.Diagnostics.Debug (>= 4.3) - restriction: || (&& (< net45) (>= netstandard1.3) (< netstandard1.6) (< monoandroid) (< win8) (< wpa81)) (>= dnxcore50) (&& (>= netstandard1.6) (< monotouch) (< xamarinios) (< xamarinmac))
System.Diagnostics.DiagnosticSource (>= 4.3) - restriction: || (&& (< net45) (>= netstandard1.3) (< netstandard1.6) (< monoandroid) (< win8) (< wpa81)) (>= dnxcore50) (&& (>= netstandard1.6) (< monotouch) (< xamarinios) (< xamarinmac))
System.Diagnostics.Tracing (>= 4.3) - restriction: || (&& (< net45) (>= netstandard1.3) (< netstandard1.6) (< monoandroid) (< win8) (< wpa81)) (>= dnxcore50) (&& (>= netstandard1.6) (< monotouch) (< xamarinios) (< xamarinmac))
System.Globalization (>= 4.3) - restriction: || (&& (< net45) (>= netstandard1.3) (< netstandard1.6) (< monoandroid) (< win8) (< wpa81)) (>= dnxcore50) (&& (>= netstandard1.6) (< monotouch) (< xamarinios) (< xamarinmac))
System.Globalization.Extensions (>= 4.3) - restriction: && (>= netstandard1.6) (< monotouch) (< xamarinios) (< xamarinmac)
System.IO (>= 4.3) - restriction: || (&& (< net45) (>= netstandard1.1) (< netstandard1.3) (< monoandroid) (< win8) (< wpa81)) (&& (< net45) (>= netstandard1.3) (< netstandard1.6) (< monoandroid) (< win8) (< wpa81)) (>= dnxcore50) (&& (>= netstandard1.6) (< monotouch) (< xamarinios) (< xamarinmac))
System.IO.Compression (>= 4.3) - restriction: && (< net45) (>= netstandard1.3) (< netstandard1.6) (< monoandroid) (< win8) (< wpa81)
System.IO.FileSystem (>= 4.3) - restriction: && (>= netstandard1.6) (< monotouch) (< xamarinios) (< xamarinmac)
System.Net.Primitives (>= 4.3) - restriction: || (&& (< net45) (>= netstandard1.1) (< netstandard1.3) (< monoandroid) (< win8) (< wpa81)) (&& (< net45) (>= netstandard1.3) (< netstandard1.6) (< monoandroid) (< win8) (< wpa81)) (>= dnxcore50) (&& (>= netstandard1.6) (< monotouch) (< xamarinios) (< xamarinmac))
System.Resources.ResourceManager (>= 4.3) - restriction: || (&& (< net45) (>= netstandard1.3) (< netstandard1.6) (< monoandroid) (< win8) (< wpa81)) (>= dnxcore50) (&& (>= netstandard1.6) (< monotouch) (< xamarinios) (< xamarinmac))
System.Runtime (>= 4.3) - restriction: || (&& (< net45) (>= netstandard1.1) (< netstandard1.3) (< monoandroid) (< win8) (< wpa81)) (&& (< net45) (>= netstandard1.3) (< netstandard1.6) (< monoandroid) (< win8) (< wpa81)) (>= dnxcore50) (&& (>= netstandard1.6) (< monotouch) (< xamarinios) (< xamarinmac))
System.Runtime.Extensions (>= 4.3) - restriction: || (&& (< net45) (>= netstandard1.3) (< netstandard1.6) (< monoandroid) (< win8) (< wpa81)) (>= dnxcore50) (&& (>= netstandard1.6) (< monotouch) (< xamarinios) (< xamarinmac))
System.Runtime.Handles (>= 4.3) - restriction: || (&& (< net45) (>= netstandard1.3) (< netstandard1.6) (< monoandroid) (< win8) (< wpa81)) (&& (>= netstandard1.6) (< monotouch) (< xamarinios) (< xamarinmac))
System.Runtime.InteropServices (>= 4.3) - restriction: || (&& (< net45) (>= netstandard1.3) (< netstandard1.6) (< monoandroid) (< win8) (< wpa81)) (>= dnxcore50) (&& (>= netstandard1.6) (< monotouch) (< xamarinios) (< xamarinmac))
System.Security.Cryptography.Algorithms (>= 4.3) - restriction: && (>= netstandard1.6) (< monotouch) (< xamarinios) (< xamarinmac)
System.Security.Cryptography.Encoding (>= 4.3) - restriction: || (&& (< net45) (>= netstandard1.3) (< netstandard1.6) (< monoandroid) (< win8) (< wpa81)) (&& (>= netstandard1.6) (< monotouch) (< xamarinios) (< xamarinmac))
System.Security.Cryptography.OpenSsl (>= 4.3) - restriction: && (>= netstandard1.6) (< monotouch) (< xamarinios) (< xamarinmac)
System.Security.Cryptography.Primitives (>= 4.3) - restriction: && (>= netstandard1.6) (< monotouch) (< xamarinios) (< xamarinmac)
System.Security.Cryptography.X509Certificates (>= 4.3) - restriction: || (&& (< net45) (>= netstandard1.3) (< netstandard1.6) (< monoandroid) (< win8) (< wpa81)) (>= net46) (>= dnxcore50) (&& (>= netstandard1.6) (< monotouch) (< xamarinios) (< xamarinmac))
System.Text.Encoding (>= 4.3) - restriction: || (&& (< net45) (>= netstandard1.1) (< netstandard1.3) (< monoandroid) (< win8) (< wpa81)) (&& (< net45) (>= netstandard1.3) (< netstandard1.6) (< monoandroid) (< win8) (< wpa81)) (>= dnxcore50) (&& (>= netstandard1.6) (< monotouch) (< xamarinios) (< xamarinmac))
System.Threading (>= 4.3) - restriction: || (&& (< net45) (>= netstandard1.3) (< netstandard1.6) (< monoandroid) (< win8) (< wpa81)) (>= dnxcore50) (&& (>= netstandard1.6) (< monotouch) (< xamarinios) (< xamarinmac))
System.Threading.Tasks (>= 4.3) - restriction: || (&& (< net45) (>= netstandard1.1) (< netstandard1.3) (< monoandroid) (< win8) (< wpa81)) (&& (< net45) (>= netstandard1.3) (< netstandard1.6) (< monoandroid) (< win8) (< wpa81)) (>= dnxcore50) (&& (>= netstandard1.6) (< monotouch) (< xamarinios) (< xamarinmac))
System.Net.Primitives (4.3) - restriction: || (&& (< net45) (>= netstandard1.1) (< netstandard1.3) (< monoandroid) (< win8) (< wpa81)) (&& (< net45) (>= netstandard1.3) (< monoandroid) (< win8) (< wpa81)) (&& (< net452) (>= netstandard1.1)) (&& (< net452) (>= netstandard1.3) (< monotouch) (< xamarinios) (< xamarinmac)) (&& (>= dnxcore50) (>= netstandard1.1)) (>= netstandard1.6)
Microsoft.NETCore.Platforms (>= 1.1) - restriction: || (&& (< net45) (>= netstandard1.1) (< netstandard1.3) (< monoandroid) (< win8) (< wpa81)) (&& (< net45) (>= netstandard1.3) (< monotouch) (< xamarinios) (< xamarinmac) (< win8) (< wpa81)) (>= dnxcore50) (&& (>= netstandard1.0) (< netstandard1.1) (< monoandroid) (< win8) (< wp8))
Microsoft.NETCore.Targets (>= 1.1) - restriction: || (&& (< net45) (>= netstandard1.1) (< netstandard1.3) (< monoandroid) (< win8) (< wpa81)) (&& (< net45) (>= netstandard1.3) (< monotouch) (< xamarinios) (< xamarinmac) (< win8) (< wpa81)) (>= dnxcore50) (&& (>= netstandard1.0) (< netstandard1.1) (< monoandroid) (< win8) (< wp8))
System.Runtime (>= 4.3) - restriction: || (&& (< net45) (>= netstandard1.1) (< netstandard1.3) (< monoandroid) (< win8) (< wpa81)) (&& (< net45) (>= netstandard1.3) (< monotouch) (< xamarinios) (< xamarinmac) (< win8) (< wpa81)) (>= dnxcore50) (&& (>= netstandard1.0) (< netstandard1.1) (< monoandroid) (< win8) (< wp8))
System.Runtime.Handles (>= 4.3) - restriction: || (&& (< net45) (>= netstandard1.3) (< monotouch) (< xamarinios) (< xamarinmac) (< win8) (< wpa81)) (>= dnxcore50)
System.Net.Requests (4.3) - restriction: >= netstandard1.6
Microsoft.NETCore.Platforms (>= 1.1) - restriction: && (< net45) (>= netstandard1.3) (< monotouch) (< xamarinios) (< xamarinmac) (< win8) (< wpa81)
System.Collections (>= 4.3) - restriction: || (&& (< net45) (>= netstandard1.3) (< monotouch) (< xamarinios) (< xamarinmac) (< win8) (< wpa81)) (>= dnxcore50)
System.Diagnostics.Debug (>= 4.3) - restriction: || (&& (< net45) (>= netstandard1.3) (< monotouch) (< xamarinios) (< xamarinmac) (< win8) (< wpa81)) (>= dnxcore50)
System.Diagnostics.Tracing (>= 4.3) - restriction: || (&& (< net45) (>= netstandard1.3) (< monotouch) (< xamarinios) (< xamarinmac) (< win8) (< wpa81)) (>= dnxcore50)
System.Globalization (>= 4.3) - restriction: || (&& (< net45) (>= netstandard1.3) (< monotouch) (< xamarinios) (< xamarinmac) (< win8) (< wpa81)) (>= dnxcore50)
System.IO (>= 4.3) - restriction: || (&& (< net45) (>= netstandard1.1) (< netstandard1.3) (< monoandroid) (< win8) (< wpa81)) (&& (< net45) (>= netstandard1.3) (< monotouch) (< xamarinios) (< xamarinmac) (< win8) (< wpa81)) (>= dnxcore50) (&& (>= netstandard1.0) (< netstandard1.1) (< monoandroid) (< win8) (< wp8))
System.Net.Http (>= 4.3) - restriction: || (&& (< net45) (>= netstandard1.3) (< monotouch) (< xamarinios) (< xamarinmac) (< win8) (< wpa81)) (>= dnxcore50)
System.Net.Primitives (>= 4.3) - restriction: || (&& (< net45) (>= netstandard1.1) (< netstandard1.3) (< monoandroid) (< win8) (< wpa81)) (&& (< net45) (>= netstandard1.3) (< monotouch) (< xamarinios) (< xamarinmac) (< win8) (< wpa81)) (>= dnxcore50) (&& (>= netstandard1.0) (< netstandard1.1) (< monoandroid) (< win8) (< wp8))
System.Net.WebHeaderCollection (>= 4.3) - restriction: || (&& (< net45) (>= netstandard1.3) (< monotouch) (< xamarinios) (< xamarinmac) (< win8) (< wpa81)) (>= dnxcore50)
System.Resources.ResourceManager (>= 4.3) - restriction: || (&& (< net45) (>= netstandard1.3) (< monotouch) (< xamarinios) (< xamarinmac) (< win8) (< wpa81)) (>= dnxcore50)
System.Runtime (>= 4.3) - restriction: || (&& (< net45) (>= netstandard1.1) (< netstandard1.3) (< monoandroid) (< win8) (< wpa81)) (&& (< net45) (>= netstandard1.3) (< monotouch) (< xamarinios) (< xamarinmac) (< win8) (< wpa81)) (>= dnxcore50) (&& (>= netstandard1.0) (< netstandard1.1) (< monoandroid) (< win8) (< wp8))
System.Threading (>= 4.3) - restriction: || (&& (< net45) (>= netstandard1.3) (< monotouch) (< xamarinios) (< xamarinmac) (< win8) (< wpa81)) (>= dnxcore50)
System.Threading.Tasks (>= 4.3) - restriction: || (&& (< net45) (>= netstandard1.1) (< netstandard1.3) (< monoandroid) (< win8) (< wpa81)) (&& (< net45) (>= netstandard1.3) (< monotouch) (< xamarinios) (< xamarinmac) (< win8) (< wpa81)) (>= dnxcore50)
System.Net.Sockets (4.3) - restriction: || (&& (< net452) (>= netstandard1.3)) (>= netstandard1.6)
Microsoft.NETCore.Platforms (>= 1.1) - restriction: && (< net46) (>= netstandard1.3) (< monotouch) (< xamarinios) (< xamarinmac)
Microsoft.NETCore.Targets (>= 1.1) - restriction: && (< net46) (>= netstandard1.3) (< monotouch) (< xamarinios) (< xamarinmac)
System.IO (>= 4.3) - restriction: && (< net46) (>= netstandard1.3) (< monotouch) (< xamarinios) (< xamarinmac)
System.Net.Primitives (>= 4.3) - restriction: && (< net46) (>= netstandard1.3) (< monotouch) (< xamarinios) (< xamarinmac)
System.Runtime (>= 4.3) - restriction: && (< net46) (>= netstandard1.3) (< monotouch) (< xamarinios) (< xamarinmac)
System.Threading.Tasks (>= 4.3) - restriction: && (< net46) (>= netstandard1.3) (< monotouch) (< xamarinios) (< xamarinmac)
System.Net.WebHeaderCollection (4.3) - restriction: || (&& (>= dnxcore50) (>= netstandard1.6)) (&& (>= netstandard1.6) (< monotouch) (< xamarinios) (< xamarinmac))
System.Collections (>= 4.3) - restriction: && (< net46) (>= netstandard1.3) (< monotouch) (< xamarinios) (< xamarinmac)
System.Resources.ResourceManager (>= 4.3) - restriction: && (< net46) (>= netstandard1.3) (< monotouch) (< xamarinios) (< xamarinmac)
System.Runtime (>= 4.3) - restriction: && (< net46) (>= netstandard1.3) (< monotouch) (< xamarinios) (< xamarinmac)
System.Runtime.Extensions (>= 4.3) - restriction: && (< net46) (>= netstandard1.3) (< monotouch) (< xamarinios) (< xamarinmac)
System.ObjectModel (4.3) - restriction: || (&& (< net452) (>= netstandard1.1)) (>= netstandard1.6)
System.Collections (>= 4.3) - restriction: || (&& (< net45) (>= netstandard1.3) (< monotouch) (< xamarinios) (< xamarinmac) (< win8) (< wpa81)) (>= dnxcore50)
System.Diagnostics.Debug (>= 4.3) - restriction: || (&& (< net45) (>= netstandard1.3) (< monotouch) (< xamarinios) (< xamarinmac) (< win8) (< wpa81)) (>= dnxcore50)
System.Resources.ResourceManager (>= 4.3) - restriction: || (&& (< net45) (>= netstandard1.3) (< monotouch) (< xamarinios) (< xamarinmac) (< win8) (< wpa81)) (>= dnxcore50)
System.Runtime (>= 4.3) - restriction: || (&& (< net45) (>= netstandard1.0) (< netstandard1.3) (< monoandroid) (< win8) (< wp8) (< wpa81)) (&& (< net45) (>= netstandard1.3) (< monotouch) (< xamarinios) (< xamarinmac) (< win8) (< wpa81)) (>= dnxcore50)
System.Threading (>= 4.3) - restriction: || (&& (< net45) (>= netstandard1.3) (< monotouch) (< xamarinios) (< xamarinmac) (< win8) (< wpa81)) (>= dnxcore50)
System.Reflection (4.3) - restriction: || (&& (< net35) (>= netstandard1.3)) (&& (< net45) (>= netstandard1.1) (< netstandard1.2) (< monoandroid) (< win8)) (&& (< net45) (>= netstandard1.1) (< netstandard1.3) (< monoandroid) (< win8) (< wpa81)) (&& (< net45) (>= netstandard1.1) (< monotouch) (< xamarinios) (< xamarinmac) (< win8) (< wpa81)) (&& (< net45) (>= netstandard1.2) (< netstandard1.3) (< monoandroid) (< win8) (< wpa81)) (&& (< net45) (>= netstandard1.3) (< monoandroid) (< win8) (< wpa81)) (&& (< net45) (>= netstandard1.3) (< monotouch) (< xamarinios) (< xamarinmac) (< win8) (< wpa81)) (&& (< net452) (>= netstandard1.1)) (&& (>= dnxcore50) (>= netstandard1.1)) (&& (>= dnxcore50) (>= netstandard1.3)) (&& (>= dnxcore50) (>= netstandard1.6)) (&& (< netstandard1.3) (>= netstandard1.6)) (>= netstandard1.5) (&& (>= netstandard1.6) (< monoandroid)) (&& (>= netstandard1.6) (< monotouch) (< xamarinios) (< xamarinmac))
Microsoft.NETCore.Platforms (>= 1.1) - restriction: || (&& (< net45) (>= netstandard1.0) (< netstandard1.3) (< monoandroid) (< win8) (< wp8) (< wpa81)) (&& (< net45) (>= netstandard1.3) (< netstandard1.5) (< monoandroid) (< win8) (< wpa81)) (&& (< net45) (>= netstandard1.5) (< monotouch) (< xamarinios) (< xamarinmac)) (>= dnxcore50)
Microsoft.NETCore.Targets (>= 1.1) - restriction: || (&& (< net45) (>= netstandard1.0) (< netstandard1.3) (< monoandroid) (< win8) (< wp8) (< wpa81)) (&& (< net45) (>= netstandard1.3) (< netstandard1.5) (< monoandroid) (< win8) (< wpa81)) (&& (< net45) (>= netstandard1.5) (< monotouch) (< xamarinios) (< xamarinmac)) (>= dnxcore50)
System.IO (>= 4.3) - restriction: || (&& (< net45) (>= netstandard1.0) (< netstandard1.3) (< monoandroid) (< win8) (< wp8) (< wpa81)) (&& (< net45) (>= netstandard1.3) (< netstandard1.5) (< monoandroid) (< win8) (< wpa81)) (&& (< net45) (>= netstandard1.5) (< monotouch) (< xamarinios) (< xamarinmac)) (>= dnxcore50)
System.Reflection.Primitives (>= 4.3) - restriction: || (&& (< net45) (>= netstandard1.0) (< netstandard1.3) (< monoandroid) (< win8) (< wp8) (< wpa81)) (&& (< net45) (>= netstandard1.3) (< netstandard1.5) (< monoandroid) (< win8) (< wpa81)) (&& (< net45) (>= netstandard1.5) (< monotouch) (< xamarinios) (< xamarinmac)) (>= dnxcore50)
System.Runtime (>= 4.3) - restriction: || (&& (< net45) (>= netstandard1.0) (< netstandard1.3) (< monoandroid) (< win8) (< wp8) (< wpa81)) (&& (< net45) (>= netstandard1.3) (< netstandard1.5) (< monoandroid) (< win8) (< wpa81)) (&& (< net45) (>= netstandard1.5) (< monotouch) (< xamarinios) (< xamarinmac)) (>= dnxcore50)
System.Reflection.Emit (4.3) - restriction: && (>= netstandard1.6) (< monotouch) (< xamarinios) (< xamarinmac)
System.IO (>= 4.3) - restriction: && (< net45) (>= netstandard1.1) (< monotouch) (< xamarinios) (< xamarinmac)
System.Reflection (>= 4.3) - restriction: && (< net45) (>= netstandard1.1) (< monotouch) (< xamarinios) (< xamarinmac)
System.Reflection.Emit.ILGeneration (>= 4.3) - restriction: && (< net45) (>= netstandard1.1) (< monotouch) (< xamarinios) (< xamarinmac)
System.Reflection.Primitives (>= 4.3) - restriction: && (< net45) (>= netstandard1.1) (< monotouch) (< xamarinios) (< xamarinmac)
System.Runtime (>= 4.3) - restriction: && (< net45) (>= netstandard1.1) (< monotouch) (< xamarinios) (< xamarinmac)
System.Reflection.Emit.ILGeneration (4.3) - restriction: || (&& (>= dnxcore50) (>= netstandard1.5)) (&& (>= netstandard1.6) (< monotouch) (< xamarinios) (< xamarinmac))
System.Reflection (>= 4.3) - restriction: && (< net45) (>= netstandard1.0) (< monotouch) (< xamarinios) (< xamarinmac) (< wp8)
System.Reflection.Primitives (>= 4.3) - restriction: && (< net45) (>= netstandard1.0) (< monotouch) (< xamarinios) (< xamarinmac) (< wp8)
System.Runtime (>= 4.3) - restriction: && (< net45) (>= netstandard1.0) (< monotouch) (< xamarinios) (< xamarinmac) (< wp8)
System.Reflection.Emit.Lightweight (4.3) - restriction: || (&& (>= dnxcore50) (>= netstandard1.5)) (&& (>= netstandard1.6) (< monotouch) (< xamarinios) (< xamarinmac))
System.Reflection (>= 4.3) - restriction: && (< net45) (>= netstandard1.0) (< monotouch) (< xamarinios) (< xamarinmac) (< wp8)
System.Reflection.Emit.ILGeneration (>= 4.3) - restriction: && (< net45) (>= netstandard1.0) (< monotouch) (< xamarinios) (< xamarinmac) (< wp8)
System.Reflection.Primitives (>= 4.3) - restriction: && (< net45) (>= netstandard1.0) (< monotouch) (< xamarinios) (< xamarinmac) (< wp8)
System.Runtime (>= 4.3) - restriction: && (< net45) (>= netstandard1.0) (< monotouch) (< xamarinios) (< xamarinmac) (< wp8)
System.Reflection.Extensions (4.3) - restriction: || (&& (< net45) (>= netstandard1.1) (< monotouch) (< xamarinios) (< xamarinmac) (< win8) (< wpa81)) (&& (< net452) (>= netstandard1.1)) (&& (>= dnxcore50) (>= netstandard1.1)) (&& (>= dnxcore50) (>= netstandard1.6)) (>= netstandard1.5) (&& (>= netstandard1.6) (< monotouch) (< xamarinios) (< xamarinmac))
Microsoft.NETCore.Platforms (>= 1.1) - restriction: || (&& (< net45) (>= netstandard1.0) (< monotouch) (< xamarinios) (< xamarinmac) (< win8) (< wp8) (< wpa81)) (>= dnxcore50)
Microsoft.NETCore.Targets (>= 1.1) - restriction: || (&& (< net45) (>= netstandard1.0) (< monotouch) (< xamarinios) (< xamarinmac) (< win8) (< wp8) (< wpa81)) (>= dnxcore50)
System.Reflection (>= 4.3) - restriction: || (&& (< net45) (>= netstandard1.0) (< monotouch) (< xamarinios) (< xamarinmac) (< win8) (< wp8) (< wpa81)) (>= dnxcore50)
System.Runtime (>= 4.3) - restriction: || (&& (< net45) (>= netstandard1.0) (< monotouch) (< xamarinios) (< xamarinmac) (< win8) (< wp8) (< wpa81)) (>= dnxcore50)
System.Reflection.Primitives (4.3) - restriction: || (&& (< net35) (>= netstandard1.3) (< netstandard1.5) (< monoandroid) (< win8) (< wpa81)) (&& (< net35) (>= netstandard1.5) (< monotouch) (< xamarinios) (< xamarinmac)) (&& (< net45) (>= netstandard1.1) (< netstandard1.2) (< monoandroid) (< win8)) (&& (< net45) (>= netstandard1.1) (< netstandard1.3) (< monoandroid) (< win8) (< wpa81)) (&& (< net45) (>= netstandard1.2) (< netstandard1.3) (< monoandroid) (< win8) (< wpa81)) (&& (< net45) (>= netstandard1.3) (< netstandard1.5) (< monoandroid) (< win8) (< wpa81)) (&& (< net45) (< netstandard1.3) (>= netstandard1.5) (< monoandroid)) (&& (< net45) (>= netstandard1.5) (< monotouch) (< xamarinios) (< xamarinmac)) (&& (< net452) (>= netstandard1.1)) (&& (>= dnxcore50) (>= netstandard1.1)) (&& (>= dnxcore50) (>= netstandard1.3)) (&& (>= dnxcore50) (>= netstandard1.5)) (>= netstandard1.6)
Microsoft.NETCore.Platforms (>= 1.1) - restriction: || (&& (< net45) (>= netstandard1.0) (< monotouch) (< xamarinios) (< xamarinmac) (< win8) (< wp8) (< wpa81)) (>= dnxcore50)
Microsoft.NETCore.Targets (>= 1.1) - restriction: || (&& (< net45) (>= netstandard1.0) (< monotouch) (< xamarinios) (< xamarinmac) (< win8) (< wp8) (< wpa81)) (>= dnxcore50)
System.Runtime (>= 4.3) - restriction: || (&& (< net45) (>= netstandard1.0) (< monotouch) (< xamarinios) (< xamarinmac) (< win8) (< wp8) (< wpa81)) (>= dnxcore50)
System.Reflection.TypeExtensions (4.3) - restriction: || (>= netstandard1.5) (&& (>= netstandard1.6) (< monotouch) (< xamarinios) (< xamarinmac))
System.Reflection (>= 4.3) - restriction: || (&& (< net46) (>= netstandard1.3) (< netstandard1.5) (< monoandroid)) (&& (< net46) (>= netstandard1.5) (< monotouch) (< xamarinios) (< xamarinmac)) (>= net462) (>= dnxcore50)
System.Runtime (>= 4.3) - restriction: || (&& (< net46) (>= netstandard1.3) (< netstandard1.5) (< monoandroid)) (&& (< net46) (>= netstandard1.5) (< monotouch) (< xamarinios) (< xamarinmac)) (>= dnxcore50)
System.Resources.ResourceManager (4.3) - restriction: || (&& (< net35) (>= netstandard1.3) (< monotouch) (< xamarinios) (< xamarinmac)) (&& (< net45) (>= netstandard1.1) (< monotouch) (< xamarinios) (< xamarinmac) (< win8) (< wpa81)) (&& (< net45) (>= netstandard1.3) (< netstandard1.6) (< monoandroid) (< win8) (< wpa81)) (&& (< net45) (>= netstandard1.3) (< monotouch) (< xamarinios) (< xamarinmac) (< win8) (< wpa81)) (&& (< net452) (>= netstandard1.1)) (&& (< net452) (>= netstandard1.3) (< monotouch) (< xamarinios) (< xamarinmac)) (&& (>= dnxcore50) (>= netstandard1.1)) (&& (>= dnxcore50) (>= netstandard1.3)) (&& (>= dnxcore50) (>= netstandard1.6)) (>= netstandard1.5) (&& (>= netstandard1.6) (< monotouch) (< xamarinios) (< xamarinmac))
Microsoft.NETCore.Platforms (>= 1.1) - restriction: || (&& (< net45) (>= netstandard1.0) (< monotouch) (< xamarinios) (< xamarinmac) (< win8) (< wp8) (< wpa81)) (>= dnxcore50)
Microsoft.NETCore.Targets (>= 1.1) - restriction: || (&& (< net45) (>= netstandard1.0) (< monotouch) (< xamarinios) (< xamarinmac) (< win8) (< wp8) (< wpa81)) (>= dnxcore50)
System.Globalization (>= 4.3) - restriction: || (&& (< net45) (>= netstandard1.0) (< monotouch) (< xamarinios) (< xamarinmac) (< win8) (< wp8) (< wpa81)) (>= dnxcore50)
System.Reflection (>= 4.3) - restriction: || (&& (< net45) (>= netstandard1.0) (< monotouch) (< xamarinios) (< xamarinmac) (< win8) (< wp8) (< wpa81)) (>= dnxcore50)
System.Runtime (>= 4.3) - restriction: || (&& (< net45) (>= netstandard1.0) (< monotouch) (< xamarinios) (< xamarinmac) (< win8) (< wp8) (< wpa81)) (>= dnxcore50)
System.Runtime (4.3) - restriction: || (&& (< net35) (>= net463)) (&& (< net35) (>= netstandard1.3) (< netstandard1.4) (< monoandroid)) (&& (< net35) (>= netstandard1.3) (< monoandroid) (< win8) (< wpa81)) (&& (< net35) (>= netstandard1.3) (< monotouch) (< xamarinios) (< xamarinmac)) (&& (< net35) (>= netstandard1.4) (< monoandroid)) (&& (< net45) (>= netstandard1.1) (< netstandard1.2) (< monoandroid) (< win8)) (&& (< net45) (>= netstandard1.1) (< netstandard1.3) (< monoandroid) (< win8) (< wpa81)) (&& (< net45) (>= netstandard1.1) (< netstandard1.6) (< monoandroid) (< win8) (< wpa81)) (&& (< net45) (>= netstandard1.1) (< monotouch) (< xamarinios) (< xamarinmac) (< win8) (< wpa81)) (&& (< net45) (>= netstandard1.2) (< netstandard1.3) (< monoandroid) (< win8) (< wpa81)) (&& (< net45) (>= netstandard1.3) (< monoandroid) (< win8) (< wpa81)) (&& (< net45) (>= netstandard1.3) (< monotouch) (< xamarinios) (< xamarinmac) (< win8) (< wpa81)) (&& (< net451) (>= netstandard1.2) (< monotouch) (< xamarinios) (< xamarinmac) (< win81) (< wpa81)) (&& (< net452) (>= net462)) (&& (< net452) (>= netstandard1.1)) (&& (< net452) (>= netstandard1.3) (< netstandard1.4) (< monoandroid)) (&& (< net452) (>= netstandard1.3) (< netstandard1.6) (< monoandroid)) (&& (< net452) (>= netstandard1.3) (< monotouch) (< xamarinios) (< xamarinmac)) (&& (< net452) (>= netstandard1.4) (< netstandard1.6) (< monoandroid)) (&& (>= net462) (>= netstandard1.6)) (&& (>= dnxcore50) (>= netstandard1.1)) (&& (>= dnxcore50) (>= netstandard1.2)) (&& (>= dnxcore50) (>= netstandard1.3)) (&& (>= dnxcore50) (>= netstandard1.6)) (&& (< netstandard1.3) (>= netstandard1.6)) (>= netstandard1.5) (&& (>= netstandard1.6) (< monoandroid)) (&& (>= netstandard1.6) (< monotouch) (< xamarinios) (< xamarinmac))
Microsoft.NETCore.Platforms (>= 1.1) - restriction: || (&& (< net45) (>= netstandard1.0) (< netstandard1.2) (< monoandroid) (< win8) (< wp8)) (&& (< net45) (>= netstandard1.2) (< netstandard1.3) (< monoandroid) (< win8) (< wpa81)) (&& (< net45) (>= netstandard1.3) (< netstandard1.5) (< monoandroid) (< win8) (< wpa81)) (&& (< net45) (>= netstandard1.5) (< monotouch) (< xamarinios) (< xamarinmac)) (>= dnxcore50)
Microsoft.NETCore.Targets (>= 1.1) - restriction: || (&& (< net45) (>= netstandard1.0) (< netstandard1.2) (< monoandroid) (< win8) (< wp8)) (&& (< net45) (>= netstandard1.2) (< netstandard1.3) (< monoandroid) (< win8) (< wpa81)) (&& (< net45) (>= netstandard1.3) (< netstandard1.5) (< monoandroid) (< win8) (< wpa81)) (&& (< net45) (>= netstandard1.5) (< monotouch) (< xamarinios) (< xamarinmac)) (>= dnxcore50)
System.Runtime.Extensions (4.3) - restriction: || (&& (< net35) (>= netstandard1.3)) (&& (< net45) (>= netstandard1.3) (< netstandard1.6) (< monoandroid) (< win8) (< wpa81)) (&& (< net45) (>= netstandard1.3) (< monotouch) (< xamarinios) (< xamarinmac) (< win8) (< wpa81)) (&& (< net452) (>= netstandard1.1)) (&& (< net452) (>= netstandard1.3) (< monotouch) (< xamarinios) (< xamarinmac)) (&& (>= dnxcore50) (>= netstandard1.1)) (&& (>= dnxcore50) (>= netstandard1.3)) (&& (>= dnxcore50) (>= netstandard1.6)) (>= netstandard1.5) (&& (>= netstandard1.6) (< monotouch) (< xamarinios) (< xamarinmac))
Microsoft.NETCore.Platforms (>= 1.1) - restriction: || (&& (< net45) (>= netstandard1.0) (< netstandard1.3) (< monoandroid) (< win8) (< wp8) (< wpa81)) (&& (< net45) (>= netstandard1.3) (< netstandard1.5) (< monoandroid) (< win8) (< wpa81)) (&& (< net45) (>= netstandard1.5) (< monotouch) (< xamarinios) (< xamarinmac)) (>= dnxcore50)
Microsoft.NETCore.Targets (>= 1.1) - restriction: || (&& (< net45) (>= netstandard1.0) (< netstandard1.3) (< monoandroid) (< win8) (< wp8) (< wpa81)) (&& (< net45) (>= netstandard1.3) (< netstandard1.5) (< monoandroid) (< win8) (< wpa81)) (&& (< net45) (>= netstandard1.5) (< monotouch) (< xamarinios) (< xamarinmac)) (>= dnxcore50)
System.Runtime (>= 4.3) - restriction: || (&& (< net45) (>= netstandard1.0) (< netstandard1.3) (< monoandroid) (< win8) (< wp8) (< wpa81)) (&& (< net45) (>= netstandard1.3) (< netstandard1.5) (< monoandroid) (< win8) (< wpa81)) (&& (< net45) (>= netstandard1.5) (< monotouch) (< xamarinios) (< xamarinmac)) (>= dnxcore50)
System.Runtime.Handles (4.3) - restriction: || (&& (< net35) (>= netstandard1.3) (< monotouch) (< xamarinios) (< xamarinmac)) (&& (< net45) (>= netstandard1.3) (< monoandroid) (< win8) (< wpa81)) (&& (< net45) (>= netstandard1.3) (< monotouch) (< xamarinios) (< xamarinmac) (< win8) (< wpa81)) (&& (< net45) (>= netstandard1.5) (< monotouch) (< xamarinios) (< xamarinmac)) (&& (< net452) (>= netstandard1.3)) (&& (< net452) (>= netstandard1.4) (< monoandroid)) (&& (>= dnxcore50) (>= netstandard1.1)) (&& (>= dnxcore50) (>= netstandard1.3)) (>= netstandard1.6)
Microsoft.NETCore.Platforms (>= 1.1) - restriction: && (< net46) (>= netstandard1.3) (< monotouch) (< xamarinios) (< xamarinmac)
Microsoft.NETCore.Targets (>= 1.1) - restriction: && (< net46) (>= netstandard1.3) (< monotouch) (< xamarinios) (< xamarinmac)
System.Runtime (>= 4.3) - restriction: && (< net46) (>= netstandard1.3) (< monotouch) (< xamarinios) (< xamarinmac)
System.Runtime.InteropServices (4.3) - restriction: || (&& (< net35) (>= netstandard1.3) (< monotouch) (< xamarinios) (< xamarinmac)) (&& (< net45) (>= netstandard1.1) (< monotouch) (< xamarinios) (< xamarinmac) (< win8) (< wpa81)) (&& (< net45) (>= netstandard1.3) (< monoandroid) (< win8) (< wpa81)) (&& (< net45) (>= netstandard1.3) (< monotouch) (< xamarinios) (< xamarinmac) (< win8) (< wpa81)) (&& (< net452) (>= netstandard1.1)) (&& (< net452) (>= netstandard1.3) (< monotouch) (< xamarinios) (< xamarinmac)) (&& (>= dnxcore50) (>= netstandard1.1)) (&& (>= dnxcore50) (>= netstandard1.3)) (>= netstandard1.6)
Microsoft.NETCore.Platforms (>= 1.1) - restriction: || (&& (< net45) (>= netstandard1.1) (< netstandard1.2) (< monoandroid) (< win8)) (&& (< net45) (>= netstandard1.2) (< netstandard1.3) (< monoandroid) (< win8) (< wpa81)) (&& (< net45) (>= netstandard1.3) (< netstandard1.5) (< monoandroid) (< win8) (< wpa81)) (&& (< net45) (>= netstandard1.5) (< monotouch) (< xamarinios) (< xamarinmac)) (>= dnxcore50) (>= netcore1.1)
Microsoft.NETCore.Targets (>= 1.1) - restriction: || (&& (< net45) (>= netstandard1.1) (< netstandard1.2) (< monoandroid) (< win8)) (&& (< net45) (>= netstandard1.2) (< netstandard1.3) (< monoandroid) (< win8) (< wpa81)) (&& (< net45) (>= netstandard1.3) (< netstandard1.5) (< monoandroid) (< win8) (< wpa81)) (&& (< net45) (>= netstandard1.5) (< monotouch) (< xamarinios) (< xamarinmac)) (>= dnxcore50) (>= netcore1.1)
System.Reflection (>= 4.3) - restriction: || (&& (< net45) (>= netstandard1.1) (< netstandard1.2) (< monoandroid) (< win8)) (&& (< net45) (>= netstandard1.2) (< netstandard1.3) (< monoandroid) (< win8) (< wpa81)) (&& (< net45) (>= netstandard1.3) (< netstandard1.5) (< monoandroid) (< win8) (< wpa81)) (&& (< net45) (>= netstandard1.5) (< monotouch) (< xamarinios) (< xamarinmac)) (>= dnxcore50) (>= netcore1.1)
System.Reflection.Primitives (>= 4.3) - restriction: || (&& (< net45) (>= netstandard1.1) (< netstandard1.2) (< monoandroid) (< win8)) (&& (< net45) (>= netstandard1.2) (< netstandard1.3) (< monoandroid) (< win8) (< wpa81)) (&& (< net45) (>= netstandard1.3) (< netstandard1.5) (< monoandroid) (< win8) (< wpa81)) (&& (< net45) (>= netstandard1.5) (< monotouch) (< xamarinios) (< xamarinmac)) (>= dnxcore50) (>= netcore1.1)
System.Runtime (>= 4.3) - restriction: || (&& (< net45) (>= netstandard1.1) (< netstandard1.2) (< monoandroid) (< win8)) (&& (< net45) (>= netstandard1.2) (< netstandard1.3) (< monoandroid) (< win8) (< wpa81)) (&& (< net45) (>= netstandard1.3) (< netstandard1.5) (< monoandroid) (< win8) (< wpa81)) (&& (< net45) (>= netstandard1.5) (< monotouch) (< xamarinios) (< xamarinmac)) (>= net462) (>= dnxcore50) (>= netcore1.1)
System.Runtime.Handles (>= 4.3) - restriction: || (&& (< net45) (>= netstandard1.3) (< netstandard1.5) (< monoandroid) (< win8) (< wpa81)) (&& (< net45) (>= netstandard1.5) (< monotouch) (< xamarinios) (< xamarinmac)) (>= dnxcore50) (>= netcore1.1)
System.Runtime.InteropServices.RuntimeInformation (4.3) - restriction: || (&& (< net452) (>= netstandard1.1)) (>= netstandard1.6)
runtime.native.System (>= 4.3) - restriction: && (< net45) (>= netstandard1.1) (< monotouch) (< xamarinios) (< xamarinmac) (< win8) (< wpa81)
System.Reflection (>= 4.3) - restriction: || (&& (< net45) (>= netstandard1.1) (< monotouch) (< xamarinios) (< xamarinmac) (< win8) (< wpa81)) (>= dnxcore50)
System.Reflection.Extensions (>= 4.3) - restriction: || (&& (< net45) (>= netstandard1.1) (< monotouch) (< xamarinios) (< xamarinmac) (< win8) (< wpa81)) (>= dnxcore50)
System.Resources.ResourceManager (>= 4.3) - restriction: || (&& (< net45) (>= netstandard1.1) (< monotouch) (< xamarinios) (< xamarinmac) (< win8) (< wpa81)) (>= dnxcore50)
System.Runtime (>= 4.3) - restriction: || (&& (< net45) (>= netstandard1.1) (< monotouch) (< xamarinios) (< xamarinmac) (< win8) (< wpa81)) (>= dnxcore50)
System.Runtime.InteropServices (>= 4.3) - restriction: && (< net45) (>= netstandard1.1) (< monotouch) (< xamarinios) (< xamarinmac) (< win8) (< wpa81)
System.Threading (>= 4.3) - restriction: || (&& (< net45) (>= netstandard1.1) (< monotouch) (< xamarinios) (< xamarinmac) (< win8) (< wpa81)) (>= dnxcore50)
System.Runtime.Numerics (4.3) - restriction: || (&& (< net452) (>= netstandard1.1)) (&& (>= dnxcore50) (>= netstandard1.3)) (>= netstandard1.6)
System.Globalization (>= 4.3) - restriction: || (&& (< net45) (>= netstandard1.3) (< monotouch) (< xamarinios) (< xamarinmac) (< win8) (< wpa81)) (>= dnxcore50)
System.Resources.ResourceManager (>= 4.3) - restriction: || (&& (< net45) (>= netstandard1.3) (< monotouch) (< xamarinios) (< xamarinmac) (< win8) (< wpa81)) (>= dnxcore50)
System.Runtime (>= 4.3) - restriction: || (&& (< net45) (>= netstandard1.1) (< netstandard1.3) (< monoandroid) (< win8) (< wpa81)) (&& (< net45) (>= netstandard1.3) (< monotouch) (< xamarinios) (< xamarinmac) (< win8) (< wpa81)) (>= dnxcore50)
System.Runtime.Extensions (>= 4.3) - restriction: || (&& (< net45) (>= netstandard1.3) (< monotouch) (< xamarinios) (< xamarinmac) (< win8) (< wpa81)) (>= dnxcore50)
System.Security.Cryptography.Algorithms (4.3) - restriction: || (&& (< net35) (>= net46)) (&& (< net35) (>= netstandard1.3)) (&& (< net452) (>= net46) (< netstandard1.4)) (&& (< net452) (>= net461)) (&& (< net452) (>= netstandard1.3)) (&& (< net452) (>= netstandard1.4) (< monoandroid)) (&& (>= dnxcore50) (>= netstandard1.3)) (>= netstandard1.6)
Microsoft.NETCore.Platforms (>= 1.1) - restriction: || (>= dnxcore50) (&& (>= netstandard1.6) (< monotouch) (< xamarinios) (< xamarinmac))
runtime.native.System.Security.Cryptography.Apple (>= 4.3) - restriction: && (>= netstandard1.6) (< monotouch) (< xamarinios) (< xamarinmac)
runtime.native.System.Security.Cryptography.OpenSsl (>= 4.3) - restriction: && (>= netstandard1.6) (< monotouch) (< xamarinios) (< xamarinmac)
System.Collections (>= 4.3) - restriction: && (>= netstandard1.6) (< monotouch) (< xamarinios) (< xamarinmac)
System.IO (>= 4.3) - restriction: || (&& (< net46) (>= netstandard1.3) (< netstandard1.4) (< monoandroid)) (&& (< net46) (>= netstandard1.4) (< netstandard1.6) (< monoandroid)) (>= net463) (>= dnxcore50) (&& (>= netstandard1.6) (< monotouch) (< xamarinios) (< xamarinmac))
System.Resources.ResourceManager (>= 4.3) - restriction: || (>= dnxcore50) (&& (>= netstandard1.6) (< monotouch) (< xamarinios) (< xamarinmac))
System.Runtime (>= 4.3) - restriction: || (&& (< net46) (>= netstandard1.3) (< netstandard1.4) (< monoandroid)) (&& (< net46) (>= netstandard1.4) (< netstandard1.6) (< monoandroid)) (>= net463) (>= dnxcore50) (&& (>= netstandard1.6) (< monotouch) (< xamarinios) (< xamarinmac))
System.Runtime.Extensions (>= 4.3) - restriction: || (>= dnxcore50) (&& (>= netstandard1.6) (< monotouch) (< xamarinios) (< xamarinmac))
System.Runtime.Handles (>= 4.3) - restriction: || (>= dnxcore50) (&& (>= netstandard1.6) (< monotouch) (< xamarinios) (< xamarinmac))
System.Runtime.InteropServices (>= 4.3) - restriction: || (>= dnxcore50) (&& (>= netstandard1.6) (< monotouch) (< xamarinios) (< xamarinmac))
System.Runtime.Numerics (>= 4.3) - restriction: && (>= netstandard1.6) (< monotouch) (< xamarinios) (< xamarinmac)
System.Security.Cryptography.Encoding (>= 4.3) - restriction: || (>= net463) (>= dnxcore50) (&& (>= netstandard1.6) (< monotouch) (< xamarinios) (< xamarinmac))
System.Security.Cryptography.Primitives (>= 4.3) - restriction: || (&& (>= net46) (< netstandard1.4)) (&& (< net46) (>= netstandard1.3) (< netstandard1.4) (< monoandroid)) (&& (< net46) (>= netstandard1.4) (< netstandard1.6) (< monoandroid)) (>= net461) (>= dnxcore50) (&& (>= netstandard1.6) (< monotouch) (< xamarinios) (< xamarinmac))
System.Text.Encoding (>= 4.3) - restriction: || (>= dnxcore50) (&& (>= netstandard1.6) (< monotouch) (< xamarinios) (< xamarinmac))
System.Security.Cryptography.Cng (4.3) - restriction: || (&& (>= dnxcore50) (>= netstandard1.3)) (&& (>= dnxcore50) (>= netstandard1.6)) (&& (>= netstandard1.6) (< monotouch) (< xamarinios) (< xamarinmac))
Microsoft.NETCore.Platforms (>= 1.1) - restriction: || (&& (< net46) (>= netstandard1.4)) (>= netstandard1.6)
System.IO (>= 4.3) - restriction: || (&& (< net46) (>= netstandard1.3) (< netstandard1.4)) (&& (< net46) (>= netstandard1.4)) (>= netstandard1.6)
System.Resources.ResourceManager (>= 4.3) - restriction: || (&& (< net46) (>= netstandard1.4)) (>= netstandard1.6)
System.Runtime (>= 4.3) - restriction: || (&& (< net46) (>= netstandard1.3) (< netstandard1.4)) (&& (< net46) (>= netstandard1.4)) (>= netstandard1.6)
System.Runtime.Extensions (>= 4.3) - restriction: || (&& (< net46) (>= netstandard1.4)) (>= netstandard1.6)
System.Runtime.Handles (>= 4.3) - restriction: || (&& (< net46) (>= netstandard1.3) (< netstandard1.4)) (&& (< net46) (>= netstandard1.4)) (>= netstandard1.6)
System.Runtime.InteropServices (>= 4.3) - restriction: || (&& (< net46) (>= netstandard1.4)) (>= netstandard1.6)
System.Security.Cryptography.Algorithms (>= 4.3) - restriction: || (&& (>= net46) (< netstandard1.4)) (&& (< net46) (>= netstandard1.3) (< netstandard1.4)) (&& (< net46) (>= netstandard1.4)) (>= net461) (>= netstandard1.6)
System.Security.Cryptography.Encoding (>= 4.3) - restriction: || (&& (< net46) (>= netstandard1.4)) (>= netstandard1.6)
System.Security.Cryptography.Primitives (>= 4.3) - restriction: || (&& (>= net46) (< netstandard1.4)) (&& (< net46) (>= netstandard1.3) (< netstandard1.4)) (&& (< net46) (>= netstandard1.4)) (>= net461) (>= netstandard1.6)
System.Text.Encoding (>= 4.3) - restriction: || (&& (< net46) (>= netstandard1.4)) (>= netstandard1.6)
System.Security.Cryptography.Csp (4.3) - restriction: || (&& (< net35) (>= netstandard1.3)) (&& (>= netstandard1.6) (< monotouch) (< xamarinios) (< xamarinmac))
Microsoft.NETCore.Platforms (>= 1.1) - restriction: && (< net46) (>= netstandard1.3) (< monotouch) (< xamarinios) (< xamarinmac)
System.IO (>= 4.3) - restriction: && (< net46) (>= netstandard1.3) (< monotouch) (< xamarinios) (< xamarinmac)
System.Reflection (>= 4.3) - restriction: && (< net46) (>= netstandard1.3) (< monotouch) (< xamarinios) (< xamarinmac)
System.Resources.ResourceManager (>= 4.3) - restriction: && (< net46) (>= netstandard1.3) (< monotouch) (< xamarinios) (< xamarinmac)
System.Runtime (>= 4.3) - restriction: && (< net46) (>= netstandard1.3) (< monotouch) (< xamarinios) (< xamarinmac)
System.Runtime.Extensions (>= 4.3) - restriction: && (< net46) (>= netstandard1.3) (< monotouch) (< xamarinios) (< xamarinmac)
System.Runtime.Handles (>= 4.3) - restriction: && (< net46) (>= netstandard1.3) (< monotouch) (< xamarinios) (< xamarinmac)
System.Runtime.InteropServices (>= 4.3) - restriction: && (< net46) (>= netstandard1.3) (< monotouch) (< xamarinios) (< xamarinmac)
System.Security.Cryptography.Algorithms (>= 4.3) - restriction: || (>= net46) (&& (>= netstandard1.3) (< monotouch) (< xamarinios) (< xamarinmac))
System.Security.Cryptography.Encoding (>= 4.3) - restriction: && (< net46) (>= netstandard1.3) (< monotouch) (< xamarinios) (< xamarinmac)
System.Security.Cryptography.Primitives (>= 4.3) - restriction: || (>= net46) (&& (>= netstandard1.3) (< monotouch) (< xamarinios) (< xamarinmac))
System.Text.Encoding (>= 4.3) - restriction: && (< net46) (>= netstandard1.3) (< monotouch) (< xamarinios) (< xamarinmac)
System.Threading (>= 4.3) - restriction: && (< net46) (>= netstandard1.3) (< monotouch) (< xamarinios) (< xamarinmac)
System.Security.Cryptography.Encoding (4.3) - restriction: || (&& (< net35) (>= net463)) (&& (< net35) (>= netstandard1.3) (< monotouch) (< xamarinios) (< xamarinmac)) (&& (< net45) (>= netstandard1.3) (< monoandroid) (< win8) (< wpa81)) (&& (< net452) (>= net46) (< netstandard1.4)) (&& (< net452) (>= net461)) (&& (< net452) (>= netstandard1.3)) (&& (< net452) (>= netstandard1.4) (< monoandroid)) (&& (>= dnxcore50) (>= netstandard1.3)) (>= netstandard1.6)
Microsoft.NETCore.Platforms (>= 1.1) - restriction: && (< net46) (>= netstandard1.3) (< monotouch) (< xamarinios) (< xamarinmac)
runtime.native.System.Security.Cryptography.OpenSsl (>= 4.3) - restriction: && (< net46) (>= netstandard1.3) (< monotouch) (< xamarinios) (< xamarinmac)
System.Collections (>= 4.3) - restriction: && (< net46) (>= netstandard1.3) (< monotouch) (< xamarinios) (< xamarinmac)
System.Collections.Concurrent (>= 4.3) - restriction: && (< net46) (>= netstandard1.3) (< monotouch) (< xamarinios) (< xamarinmac)
System.Linq (>= 4.3) - restriction: && (< net46) (>= netstandard1.3) (< monotouch) (< xamarinios) (< xamarinmac)
System.Resources.ResourceManager (>= 4.3) - restriction: && (< net46) (>= netstandard1.3) (< monotouch) (< xamarinios) (< xamarinmac)
System.Runtime (>= 4.3) - restriction: && (< net46) (>= netstandard1.3) (< monotouch) (< xamarinios) (< xamarinmac)
System.Runtime.Extensions (>= 4.3) - restriction: && (< net46) (>= netstandard1.3) (< monotouch) (< xamarinios) (< xamarinmac)
System.Runtime.Handles (>= 4.3) - restriction: && (< net46) (>= netstandard1.3) (< monotouch) (< xamarinios) (< xamarinmac)
System.Runtime.InteropServices (>= 4.3) - restriction: && (< net46) (>= netstandard1.3) (< monotouch) (< xamarinios) (< xamarinmac)
System.Security.Cryptography.Primitives (>= 4.3) - restriction: && (< net46) (>= netstandard1.3) (< monotouch) (< xamarinios) (< xamarinmac)
System.Text.Encoding (>= 4.3) - restriction: && (< net46) (>= netstandard1.3) (< monotouch) (< xamarinios) (< xamarinmac)
System.Security.Cryptography.OpenSsl (4.3) - restriction: && (>= netstandard1.6) (< monotouch) (< xamarinios) (< xamarinmac)
runtime.native.System.Security.Cryptography.OpenSsl (>= 4.3) - restriction: || (>= net463) (>= netstandard1.6) (>= monoandroid)
System.Collections (>= 4.3) - restriction: && (>= netstandard1.6) (< monotouch) (< xamarinios) (< xamarinmac)
System.IO (>= 4.3) - restriction: || (>= net463) (&& (>= netstandard1.6) (< monotouch) (< xamarinios) (< xamarinmac))
System.Resources.ResourceManager (>= 4.3) - restriction: && (>= netstandard1.6) (< monotouch) (< xamarinios) (< xamarinmac)
System.Runtime (>= 4.3) - restriction: || (>= net463) (&& (>= netstandard1.6) (< monotouch) (< xamarinios) (< xamarinmac))
System.Runtime.Extensions (>= 4.3) - restriction: || (>= net463) (&& (>= netstandard1.6) (< monotouch) (< xamarinios) (< xamarinmac))
System.Runtime.Handles (>= 4.3) - restriction: && (>= netstandard1.6) (< monotouch) (< xamarinios) (< xamarinmac)
System.Runtime.InteropServices (>= 4.3) - restriction: && (>= netstandard1.6) (< monotouch) (< xamarinios) (< xamarinmac)
System.Runtime.Numerics (>= 4.3) - restriction: && (>= netstandard1.6) (< monotouch) (< xamarinios) (< xamarinmac)
System.Security.Cryptography.Algorithms (>= 4.3) - restriction: || (>= net463) (&& (>= netstandard1.6) (< monotouch) (< xamarinios) (< xamarinmac))
System.Security.Cryptography.Encoding (>= 4.3) - restriction: || (>= net463) (&& (>= netstandard1.6) (< monotouch) (< xamarinios) (< xamarinmac))
System.Security.Cryptography.Primitives (>= 4.3) - restriction: || (>= net463) (&& (>= netstandard1.6) (< monotouch) (< xamarinios) (< xamarinmac))
System.Text.Encoding (>= 4.3) - restriction: && (>= netstandard1.6) (< monotouch) (< xamarinios) (< xamarinmac)
System.Security.Cryptography.Primitives (4.3) - restriction: || (&& (< net35) (>= net46)) (&& (< net35) (>= net461)) (&& (< net35) (>= netstandard1.3) (< netstandard1.4) (< monoandroid)) (&& (< net35) (>= netstandard1.3) (< monotouch) (< xamarinios) (< xamarinmac)) (&& (< net35) (>= netstandard1.4) (< monoandroid)) (&& (< net452) (>= netstandard1.3)) (&& (>= dnxcore50) (>= netstandard1.3)) (>= netstandard1.6)
System.Diagnostics.Debug (>= 4.3) - restriction: && (< net46) (>= netstandard1.3) (< monotouch) (< xamarinios) (< xamarinmac)
System.Globalization (>= 4.3) - restriction: && (< net46) (>= netstandard1.3) (< monotouch) (< xamarinios) (< xamarinmac)
System.IO (>= 4.3) - restriction: && (< net46) (>= netstandard1.3) (< monotouch) (< xamarinios) (< xamarinmac)
System.Resources.ResourceManager (>= 4.3) - restriction: && (< net46) (>= netstandard1.3) (< monotouch) (< xamarinios) (< xamarinmac)
System.Runtime (>= 4.3) - restriction: && (< net46) (>= netstandard1.3) (< monotouch) (< xamarinios) (< xamarinmac)
System.Threading (>= 4.3) - restriction: && (< net46) (>= netstandard1.3) (< monotouch) (< xamarinios) (< xamarinmac)
System.Threading.Tasks (>= 4.3) - restriction: && (< net46) (>= netstandard1.3) (< monotouch) (< xamarinios) (< xamarinmac)
System.Security.Cryptography.X509Certificates (4.3) - restriction: || (&& (< net45) (>= netstandard1.3) (< monoandroid) (< win8) (< wpa81)) (&& (< net452) (>= net46)) (&& (< net452) (>= netstandard1.3)) (&& (>= dnxcore50) (>= netstandard1.1)) (>= netstandard1.6)
Microsoft.NETCore.Platforms (>= 1.1) - restriction: || (>= dnxcore50) (&& (>= netstandard1.6) (< monotouch) (< xamarinios) (< xamarinmac))
runtime.native.System (>= 4.3) - restriction: && (>= netstandard1.6) (< monotouch) (< xamarinios) (< xamarinmac)
runtime.native.System.Net.Http (>= 4.3) - restriction: && (>= netstandard1.6) (< monotouch) (< xamarinios) (< xamarinmac)
runtime.native.System.Security.Cryptography.OpenSsl (>= 4.3) - restriction: && (>= netstandard1.6) (< monotouch) (< xamarinios) (< xamarinmac)
System.Collections (>= 4.3) - restriction: || (>= dnxcore50) (&& (>= netstandard1.6) (< monotouch) (< xamarinios) (< xamarinmac))
System.Diagnostics.Debug (>= 4.3) - restriction: && (>= netstandard1.6) (< monotouch) (< xamarinios) (< xamarinmac)
System.Globalization (>= 4.3) - restriction: || (>= dnxcore50) (&& (>= netstandard1.6) (< monotouch) (< xamarinios) (< xamarinmac))
System.Globalization.Calendars (>= 4.3) - restriction: || (>= dnxcore50) (&& (>= netstandard1.6) (< monotouch) (< xamarinios) (< xamarinmac))
System.IO (>= 4.3) - restriction: || (>= dnxcore50) (&& (>= netstandard1.6) (< monotouch) (< xamarinios) (< xamarinmac))
System.IO.FileSystem (>= 4.3) - restriction: || (>= dnxcore50) (&& (>= netstandard1.6) (< monotouch) (< xamarinios) (< xamarinmac))
System.IO.FileSystem.Primitives (>= 4.3) - restriction: && (>= netstandard1.6) (< monotouch) (< xamarinios) (< xamarinmac)
System.Resources.ResourceManager (>= 4.3) - restriction: || (>= dnxcore50) (&& (>= netstandard1.6) (< monotouch) (< xamarinios) (< xamarinmac))
System.Runtime (>= 4.3) - restriction: || (&& (< net46) (>= netstandard1.3) (< netstandard1.4) (< monoandroid)) (&& (< net46) (>= netstandard1.4) (< netstandard1.6) (< monoandroid)) (>= dnxcore50) (&& (>= netstandard1.6) (< monotouch) (< xamarinios) (< xamarinmac))
System.Runtime.Extensions (>= 4.3) - restriction: || (>= dnxcore50) (&& (>= netstandard1.6) (< monotouch) (< xamarinios) (< xamarinmac))
System.Runtime.Handles (>= 4.3) - restriction: || (&& (< net46) (>= netstandard1.3) (< netstandard1.4) (< monoandroid)) (&& (< net46) (>= netstandard1.4) (< netstandard1.6) (< monoandroid)) (>= dnxcore50) (&& (>= netstandard1.6) (< monotouch) (< xamarinios) (< xamarinmac))
System.Runtime.InteropServices (>= 4.3) - restriction: || (>= dnxcore50) (&& (>= netstandard1.6) (< monotouch) (< xamarinios) (< xamarinmac))
System.Runtime.Numerics (>= 4.3) - restriction: || (>= dnxcore50) (&& (>= netstandard1.6) (< monotouch) (< xamarinios) (< xamarinmac))
System.Security.Cryptography.Algorithms (>= 4.3) - restriction: || (&& (>= net46) (< netstandard1.4)) (&& (< net46) (>= netstandard1.3) (< netstandard1.4) (< monoandroid)) (&& (< net46) (>= netstandard1.4) (< netstandard1.6) (< monoandroid)) (>= net461) (>= dnxcore50) (&& (>= netstandard1.6) (< monotouch) (< xamarinios) (< xamarinmac))
System.Security.Cryptography.Cng (>= 4.3) - restriction: || (>= dnxcore50) (&& (>= netstandard1.6) (< monotouch) (< xamarinios) (< xamarinmac))
System.Security.Cryptography.Csp (>= 4.3) - restriction: && (>= netstandard1.6) (< monotouch) (< xamarinios) (< xamarinmac)
System.Security.Cryptography.Encoding (>= 4.3) - restriction: || (&& (>= net46) (< netstandard1.4)) (&& (< net46) (>= netstandard1.3) (< netstandard1.4) (< monoandroid)) (&& (< net46) (>= netstandard1.4) (< netstandard1.6) (< monoandroid)) (>= net461) (>= dnxcore50) (&& (>= netstandard1.6) (< monotouch) (< xamarinios) (< xamarinmac))
System.Security.Cryptography.OpenSsl (>= 4.3) - restriction: && (>= netstandard1.6) (< monotouch) (< xamarinios) (< xamarinmac)
System.Security.Cryptography.Primitives (>= 4.3) - restriction: || (>= dnxcore50) (&& (>= netstandard1.6) (< monotouch) (< xamarinios) (< xamarinmac))
System.Text.Encoding (>= 4.3) - restriction: || (>= dnxcore50) (&& (>= netstandard1.6) (< monotouch) (< xamarinios) (< xamarinmac))
System.Threading (>= 4.3) - restriction: || (>= dnxcore50) (&& (>= netstandard1.6) (< monotouch) (< xamarinios) (< xamarinmac))
System.Text.Encoding (4.3) - restriction: || (&& (< net35) (>= netstandard1.3) (< monotouch) (< xamarinios) (< xamarinmac)) (&& (< net45) (>= netstandard1.1) (< netstandard1.3) (< monoandroid) (< win8) (< wpa81)) (&& (< net45) (>= netstandard1.3) (< monoandroid) (< win8) (< wpa81)) (&& (< net45) (>= netstandard1.3) (< monotouch) (< xamarinios) (< xamarinmac) (< win8) (< wpa81)) (&& (< net45) (< netstandard1.3) (>= netstandard1.5) (< monoandroid)) (&& (< net45) (>= netstandard1.5) (< monotouch) (< xamarinios) (< xamarinmac)) (&& (< net452) (>= netstandard1.1)) (&& (< net452) (>= netstandard1.3) (< monotouch) (< xamarinios) (< xamarinmac)) (&& (< net46) (>= netstandard1.5) (< monotouch) (< xamarinios) (< xamarinmac)) (&& (>= dnxcore50) (>= netstandard1.1)) (&& (>= dnxcore50) (>= netstandard1.3)) (&& (>= dnxcore50) (>= netstandard1.5)) (>= netstandard1.6)
Microsoft.NETCore.Platforms (>= 1.1) - restriction: || (&& (< net45) (>= netstandard1.0) (< netstandard1.3) (< monoandroid) (< win8) (< wp8) (< wpa81)) (&& (< net45) (>= netstandard1.3) (< monotouch) (< xamarinios) (< xamarinmac) (< win8) (< wpa81)) (>= dnxcore50)
Microsoft.NETCore.Targets (>= 1.1) - restriction: || (&& (< net45) (>= netstandard1.0) (< netstandard1.3) (< monoandroid) (< win8) (< wp8) (< wpa81)) (&& (< net45) (>= netstandard1.3) (< monotouch) (< xamarinios) (< xamarinmac) (< win8) (< wpa81)) (>= dnxcore50)
System.Runtime (>= 4.3) - restriction: || (&& (< net45) (>= netstandard1.0) (< netstandard1.3) (< monoandroid) (< win8) (< wp8) (< wpa81)) (&& (< net45) (>= netstandard1.3) (< monotouch) (< xamarinios) (< xamarinmac) (< win8) (< wpa81)) (>= dnxcore50)
System.Text.Encoding.Extensions (4.3) - restriction: || (&& (< net45) (>= netstandard1.3) (< monotouch) (< xamarinios) (< xamarinmac) (< win8) (< wpa81)) (&& (< net452) (>= netstandard1.1)) (&& (>= dnxcore50) (>= netstandard1.1)) (>= netstandard1.6)
Microsoft.NETCore.Platforms (>= 1.1) - restriction: || (&& (< net45) (>= netstandard1.0) (< netstandard1.3) (< monoandroid) (< win8) (< wp8) (< wpa81)) (&& (< net45) (>= netstandard1.3) (< monotouch) (< xamarinios) (< xamarinmac) (< win8) (< wpa81)) (>= dnxcore50)
Microsoft.NETCore.Targets (>= 1.1) - restriction: || (&& (< net45) (>= netstandard1.0) (< netstandard1.3) (< monoandroid) (< win8) (< wp8) (< wpa81)) (&& (< net45) (>= netstandard1.3) (< monotouch) (< xamarinios) (< xamarinmac) (< win8) (< wpa81)) (>= dnxcore50)
System.Runtime (>= 4.3) - restriction: || (&& (< net45) (>= netstandard1.0) (< netstandard1.3) (< monoandroid) (< win8) (< wp8) (< wpa81)) (&& (< net45) (>= netstandard1.3) (< monotouch) (< xamarinios) (< xamarinmac) (< win8) (< wpa81)) (>= dnxcore50)
System.Text.Encoding (>= 4.3) - restriction: || (&& (< net45) (>= netstandard1.0) (< netstandard1.3) (< monoandroid) (< win8) (< wp8) (< wpa81)) (&& (< net45) (>= netstandard1.3) (< monotouch) (< xamarinios) (< xamarinmac) (< win8) (< wpa81)) (>= dnxcore50)
System.Text.RegularExpressions (4.3) - restriction: || (&& (< net45) (>= netstandard1.3) (< monotouch) (< xamarinios) (< xamarinmac) (< win8) (< wpa81)) (&& (< net452) (>= netstandard1.1)) (&& (>= dnxcore50) (>= netstandard1.1)) (>= netstandard1.6)
System.Collections (>= 4.3) - restriction: || (>= dnxcore50) (&& (>= netstandard1.6) (< netcore1.1) (< monotouch) (< xamarinios) (< xamarinmac))
System.Globalization (>= 4.3) - restriction: || (>= dnxcore50) (&& (>= netstandard1.6) (< netcore1.1) (< monotouch) (< xamarinios) (< xamarinmac))
System.Resources.ResourceManager (>= 4.3) - restriction: || (>= dnxcore50) (&& (>= netstandard1.6) (< netcore1.1) (< monotouch) (< xamarinios) (< xamarinmac))
System.Runtime (>= 4.3) - restriction: || (&& (< net45) (>= netstandard1.0) (< netstandard1.3) (< monoandroid) (< win8) (< wp8) (< wpa81)) (&& (< net45) (>= netstandard1.3) (< netstandard1.6) (< monoandroid) (< win8) (< wpa81)) (>= dnxcore50) (&& (>= netstandard1.6) (< monotouch) (< xamarinios) (< xamarinmac)) (>= netcore1.1)
System.Runtime.Extensions (>= 4.3) - restriction: || (>= dnxcore50) (&& (>= netstandard1.6) (< netcore1.1) (< monotouch) (< xamarinios) (< xamarinmac))
System.Threading (>= 4.3) - restriction: || (>= dnxcore50) (&& (>= netstandard1.6) (< netcore1.1) (< monotouch) (< xamarinios) (< xamarinmac))
System.Threading (4.3) - restriction: || (&& (< net35) (>= netstandard1.3)) (&& (< net45) (>= netstandard1.1) (< monotouch) (< xamarinios) (< xamarinmac) (< win8) (< wpa81)) (&& (< net45) (>= netstandard1.3) (< monoandroid) (< win8) (< wpa81)) (&& (< net45) (>= netstandard1.3) (< monotouch) (< xamarinios) (< xamarinmac) (< win8) (< wpa81)) (&& (< net452) (>= netstandard1.1)) (&& (< net452) (>= netstandard1.3) (< monotouch) (< xamarinios) (< xamarinmac)) (&& (>= dnxcore50) (>= netstandard1.1)) (&& (>= dnxcore50) (>= netstandard1.3)) (&& (>= dnxcore50) (>= netstandard1.5)) (>= netstandard1.6)
System.Runtime (>= 4.3) - restriction: || (&& (< net45) (>= netstandard1.0) (< netstandard1.3) (< monoandroid) (< win8) (< wp8) (< wpa81)) (&& (< net45) (>= netstandard1.3) (< monotouch) (< xamarinios) (< xamarinmac) (< win8) (< wpa81)) (>= dnxcore50)
System.Threading.Tasks (>= 4.3) - restriction: || (&& (< net45) (>= netstandard1.0) (< netstandard1.3) (< monoandroid) (< win8) (< wp8) (< wpa81)) (&& (< net45) (>= netstandard1.3) (< monotouch) (< xamarinios) (< xamarinmac) (< win8) (< wpa81)) (>= dnxcore50)
System.Threading.Tasks (4.3) - restriction: || (&& (< net35) (>= netstandard1.3) (< monotouch) (< xamarinios) (< xamarinmac)) (&& (< net45) (>= netstandard1.1) (< netstandard1.3) (< monoandroid) (< win8) (< wpa81)) (&& (< net45) (>= netstandard1.3) (< monoandroid) (< win8) (< wpa81)) (&& (< net45) (>= netstandard1.3) (< monotouch) (< xamarinios) (< xamarinmac) (< win8) (< wpa81)) (&& (< net45) (< netstandard1.3) (>= netstandard1.5) (< monoandroid)) (&& (< net45) (>= netstandard1.5) (< monotouch) (< xamarinios) (< xamarinmac)) (&& (< net452) (>= netstandard1.1)) (&& (< net452) (>= netstandard1.3) (< monotouch) (< xamarinios) (< xamarinmac)) (&& (>= dnxcore50) (>= netstandard1.1)) (&& (>= dnxcore50) (>= netstandard1.3)) (&& (>= dnxcore50) (>= netstandard1.5)) (>= netstandard1.6)
Microsoft.NETCore.Platforms (>= 1.1) - restriction: || (&& (< net45) (>= netstandard1.0) (< netstandard1.3) (< monoandroid) (< win8) (< wp8) (< wpa81)) (&& (< net45) (>= netstandard1.3) (< monotouch) (< xamarinios) (< xamarinmac) (< win8) (< wpa81)) (>= dnxcore50)
Microsoft.NETCore.Targets (>= 1.1) - restriction: || (&& (< net45) (>= netstandard1.0) (< netstandard1.3) (< monoandroid) (< win8) (< wp8) (< wpa81)) (&& (< net45) (>= netstandard1.3) (< monotouch) (< xamarinios) (< xamarinmac) (< win8) (< wpa81)) (>= dnxcore50)
System.Runtime (>= 4.3) - restriction: || (&& (< net45) (>= netstandard1.0) (< netstandard1.3) (< monoandroid) (< win8) (< wp8) (< wpa81)) (&& (< net45) (>= netstandard1.3) (< monotouch) (< xamarinios) (< xamarinmac) (< win8) (< wpa81)) (>= dnxcore50)
System.Threading.Tasks.Extensions (4.3) - restriction: || (&& (< net45) (>= netstandard1.3) (< monotouch) (< xamarinios) (< xamarinmac) (< win8) (< wpa81)) (&& (>= dnxcore50) (>= netstandard1.1)) (&& (>= dnxcore50) (>= netstandard1.6)) (&& (>= netstandard1.6) (< monotouch) (< xamarinios) (< xamarinmac))
System.Collections (>= 4.3) - restriction: && (< net45) (>= netstandard1.0) (< monotouch) (< xamarinios) (< xamarinmac) (< win8) (< wp8) (< wpa81)
System.Runtime (>= 4.3) - restriction: && (< net45) (>= netstandard1.0) (< monotouch) (< xamarinios) (< xamarinmac) (< win8) (< wp8) (< wpa81)
System.Threading.Tasks (>= 4.3) - restriction: && (< net45) (>= netstandard1.0) (< monotouch) (< xamarinios) (< xamarinmac) (< win8) (< wp8) (< wpa81)
System.Threading.Tasks.Parallel (4.3) - restriction: >= netstandard1.6
System.Collections.Concurrent (>= 4.3) - restriction: || (&& (< net45) (>= netstandard1.1) (< netstandard1.3) (< monoandroid) (< win8) (< wpa81)) (&& (< net45) (>= netstandard1.3) (< monotouch) (< xamarinios) (< xamarinmac) (< win8) (< wpa81)) (>= dnxcore50)
System.Diagnostics.Debug (>= 4.3) - restriction: || (&& (< net45) (>= netstandard1.3) (< monotouch) (< xamarinios) (< xamarinmac) (< win8) (< wpa81)) (>= dnxcore50)
System.Diagnostics.Tracing (>= 4.3) - restriction: || (&& (< net45) (>= netstandard1.3) (< monotouch) (< xamarinios) (< xamarinmac) (< win8) (< wpa81)) (>= dnxcore50)
System.Resources.ResourceManager (>= 4.3) - restriction: || (&& (< net45) (>= netstandard1.3) (< monotouch) (< xamarinios) (< xamarinmac) (< win8) (< wpa81)) (>= dnxcore50)
System.Runtime (>= 4.3) - restriction: || (&& (< net45) (>= netstandard1.1) (< netstandard1.3) (< monoandroid) (< win8) (< wpa81)) (&& (< net45) (>= netstandard1.3) (< monotouch) (< xamarinios) (< xamarinmac) (< win8) (< wpa81)) (>= dnxcore50)
System.Runtime.Extensions (>= 4.3) - restriction: || (&& (< net45) (>= netstandard1.3) (< monotouch) (< xamarinios) (< xamarinmac) (< win8) (< wpa81)) (>= dnxcore50)
System.Threading (>= 4.3) - restriction: || (&& (< net45) (>= netstandard1.3) (< monotouch) (< xamarinios) (< xamarinmac) (< win8) (< wpa81)) (>= dnxcore50)
System.Threading.Tasks (>= 4.3) - restriction: || (&& (< net45) (>= netstandard1.1) (< netstandard1.3) (< monoandroid) (< win8) (< wpa81)) (&& (< net45) (>= netstandard1.3) (< monotouch) (< xamarinios) (< xamarinmac) (< win8) (< wpa81)) (>= dnxcore50)
System.Threading.Thread (4.3) - restriction: >= netstandard1.6
System.Runtime (>= 4.3) - restriction: && (< net46) (>= netstandard1.3) (< monotouch) (< xamarinios) (< xamarinmac)
System.Threading.ThreadPool (4.3) - restriction: >= netstandard1.6
System.Runtime (>= 4.3) - restriction: && (< net46) (>= netstandard1.3) (< monotouch) (< xamarinios) (< xamarinmac)
System.Runtime.Handles (>= 4.3) - restriction: && (< net46) (>= netstandard1.3) (< monotouch) (< xamarinios) (< xamarinmac)
System.Threading.Timer (4.3) - restriction: || (&& (< net452) (>= netstandard1.2)) (>= netstandard1.6)
Microsoft.NETCore.Platforms (>= 1.1) - restriction: || (&& (< net451) (>= netstandard1.2) (< monotouch) (< xamarinios) (< xamarinmac) (< win81) (< wpa81)) (>= dnxcore50)
Microsoft.NETCore.Targets (>= 1.1) - restriction: || (&& (< net451) (>= netstandard1.2) (< monotouch) (< xamarinios) (< xamarinmac) (< win81) (< wpa81)) (>= dnxcore50)
System.Runtime (>= 4.3) - restriction: || (&& (< net451) (>= netstandard1.2) (< monotouch) (< xamarinios) (< xamarinmac) (< win81) (< wpa81)) (>= dnxcore50)
System.Xml.ReaderWriter (4.3) - restriction: || (&& (< net45) (>= netstandard1.1) (< netstandard1.3) (< monoandroid) (< win8) (< wpa81)) (&& (< net45) (>= netstandard1.3) (< monotouch) (< xamarinios) (< xamarinmac) (< win8) (< wpa81)) (&& (< net452) (>= netstandard1.1)) (&& (>= dnxcore50) (>= netstandard1.1)) (>= netstandard1.6)
System.Collections (>= 4.3) - restriction: || (&& (< net45) (>= netstandard1.3) (< monotouch) (< xamarinios) (< xamarinmac) (< win8) (< wpa81)) (>= dnxcore50)
System.Diagnostics.Debug (>= 4.3) - restriction: || (&& (< net45) (>= netstandard1.3) (< monotouch) (< xamarinios) (< xamarinmac) (< win8) (< wpa81)) (>= dnxcore50)
System.Globalization (>= 4.3) - restriction: || (&& (< net45) (>= netstandard1.3) (< monotouch) (< xamarinios) (< xamarinmac) (< win8) (< wpa81)) (>= dnxcore50)
System.IO (>= 4.3) - restriction: || (&& (< net45) (>= netstandard1.0) (< netstandard1.3) (< monoandroid) (< win8) (< wp8) (< wpa81)) (&& (< net45) (>= netstandard1.3) (< monotouch) (< xamarinios) (< xamarinmac) (< win8) (< wpa81)) (>= dnxcore50)
System.IO.FileSystem (>= 4.3) - restriction: || (&& (< net45) (>= netstandard1.3) (< monotouch) (< xamarinios) (< xamarinmac) (< win8) (< wpa81)) (>= dnxcore50)
System.IO.FileSystem.Primitives (>= 4.3) - restriction: || (&& (< net45) (>= netstandard1.3) (< monotouch) (< xamarinios) (< xamarinmac) (< win8) (< wpa81)) (>= dnxcore50)
System.Resources.ResourceManager (>= 4.3) - restriction: || (&& (< net45) (>= netstandard1.3) (< monotouch) (< xamarinios) (< xamarinmac) (< win8) (< wpa81)) (>= dnxcore50)
System.Runtime (>= 4.3) - restriction: || (&& (< net45) (>= netstandard1.0) (< netstandard1.3) (< monoandroid) (< win8) (< wp8) (< wpa81)) (&& (< net45) (>= netstandard1.3) (< monotouch) (< xamarinios) (< xamarinmac) (< win8) (< wpa81)) (>= dnxcore50)
System.Runtime.Extensions (>= 4.3) - restriction: || (&& (< net45) (>= netstandard1.3) (< monotouch) (< xamarinios) (< xamarinmac) (< win8) (< wpa81)) (>= dnxcore50)
System.Runtime.InteropServices (>= 4.3) - restriction: || (&& (< net45) (>= netstandard1.3) (< monotouch) (< xamarinios) (< xamarinmac) (< win8) (< wpa81)) (>= dnxcore50)
System.Text.Encoding (>= 4.3) - restriction: || (&& (< net45) (>= netstandard1.0) (< netstandard1.3) (< monoandroid) (< win8) (< wp8) (< wpa81)) (&& (< net45) (>= netstandard1.3) (< monotouch) (< xamarinios) (< xamarinmac) (< win8) (< wpa81)) (>= dnxcore50)
System.Text.Encoding.Extensions (>= 4.3) - restriction: || (&& (< net45) (>= netstandard1.3) (< monotouch) (< xamarinios) (< xamarinmac) (< win8) (< wpa81)) (>= dnxcore50)
System.Text.RegularExpressions (>= 4.3) - restriction: || (&& (< net45) (>= netstandard1.3) (< monotouch) (< xamarinios) (< xamarinmac) (< win8) (< wpa81)) (>= dnxcore50)
System.Threading.Tasks (>= 4.3) - restriction: || (&& (< net45) (>= netstandard1.0) (< netstandard1.3) (< monoandroid) (< win8) (< wp8) (< wpa81)) (&& (< net45) (>= netstandard1.3) (< monotouch) (< xamarinios) (< xamarinmac) (< win8) (< wpa81)) (>= dnxcore50)
System.Threading.Tasks.Extensions (>= 4.3) - restriction: || (&& (< net45) (>= netstandard1.3) (< monotouch) (< xamarinios) (< xamarinmac) (< win8) (< wpa81)) (>= dnxcore50)
System.Xml.XDocument (4.3) - restriction: || (&& (< net452) (>= netstandard1.1)) (>= netstandard1.6)
System.Collections (>= 4.3) - restriction: || (&& (< net45) (>= netstandard1.3) (< monotouch) (< xamarinios) (< xamarinmac) (< win8) (< wpa81)) (>= dnxcore50)
System.Diagnostics.Debug (>= 4.3) - restriction: || (&& (< net45) (>= netstandard1.3) (< monotouch) (< xamarinios) (< xamarinmac) (< win8) (< wpa81)) (>= dnxcore50)
System.Diagnostics.Tools (>= 4.3) - restriction: || (&& (< net45) (>= netstandard1.3) (< monotouch) (< xamarinios) (< xamarinmac) (< win8) (< wpa81)) (>= dnxcore50)
System.Globalization (>= 4.3) - restriction: || (&& (< net45) (>= netstandard1.3) (< monotouch) (< xamarinios) (< xamarinmac) (< win8) (< wpa81)) (>= dnxcore50)
System.IO (>= 4.3) - restriction: || (&& (< net45) (>= netstandard1.0) (< netstandard1.3) (< monoandroid) (< win8) (< wp8) (< wpa81)) (&& (< net45) (>= netstandard1.3) (< monotouch) (< xamarinios) (< xamarinmac) (< win8) (< wpa81)) (>= dnxcore50)
System.Reflection (>= 4.3) - restriction: || (&& (< net45) (>= netstandard1.3) (< monotouch) (< xamarinios) (< xamarinmac) (< win8) (< wpa81)) (>= dnxcore50)
System.Resources.ResourceManager (>= 4.3) - restriction: || (&& (< net45) (>= netstandard1.3) (< monotouch) (< xamarinios) (< xamarinmac) (< win8) (< wpa81)) (>= dnxcore50)
System.Runtime (>= 4.3) - restriction: || (&& (< net45) (>= netstandard1.0) (< netstandard1.3) (< monoandroid) (< win8) (< wp8) (< wpa81)) (&& (< net45) (>= netstandard1.3) (< monotouch) (< xamarinios) (< xamarinmac) (< win8) (< wpa81)) (>= dnxcore50)
System.Runtime.Extensions (>= 4.3) - restriction: || (&& (< net45) (>= netstandard1.3) (< monotouch) (< xamarinios) (< xamarinmac) (< win8) (< wpa81)) (>= dnxcore50)
System.Text.Encoding (>= 4.3) - restriction: || (&& (< net45) (>= netstandard1.3) (< monotouch) (< xamarinios) (< xamarinmac) (< win8) (< wpa81)) (>= dnxcore50)
System.Threading (>= 4.3) - restriction: || (&& (< net45) (>= netstandard1.3) (< monotouch) (< xamarinios) (< xamarinmac) (< win8) (< wpa81)) (>= dnxcore50)
System.Xml.ReaderWriter (>= 4.3) - restriction: || (&& (< net45) (>= netstandard1.0) (< netstandard1.3) (< monoandroid) (< win8) (< wp8) (< wpa81)) (&& (< net45) (>= netstandard1.3) (< monotouch) (< xamarinios) (< xamarinmac) (< win8) (< wpa81)) (>= dnxcore50)
xunit.abstractions (2.0.1) - restriction: >= netstandard1.1
NETStandard.Library (>= 1.6) - restriction: && (< net35) (>= netstandard1.0)
xunit.assert (2.2)
NETStandard.Library (>= 1.6) - restriction: && (< net452) (>= netstandard1.1)
xunit.core (2.2) - restriction: >= netstandard1.6
xunit.extensibility.core (2.2)
xunit.extensibility.execution (2.2)
xunit.extensibility.core (2.2) - restriction: >= netstandard1.1
NETStandard.Library (>= 1.6) - restriction: && (< net452) (>= netstandard1.1)
xunit.abstractions (>= 2.0.1) - restriction: >= netstandard1.1
xunit.extensibility.execution (2.2)
NETStandard.Library (>= 1.6) - restriction: && (< net452) (>= netstandard1.1)
xunit.extensibility.core (2.2) - restriction: >= netstandard1.1
xunit.runner.console (2.2)

View file

@ -1,12 +1,11 @@
#region License
//
//
// The Open Toolkit Library License
//
// Copyright (c) 2006 - 2013 Stefanos Apostolopoulos for 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
// 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:
@ -24,31 +23,25 @@
// OTHER DEALINGS IN THE SOFTWARE.
//
#endregion
using System;
using System.IO;
using System.Text.RegularExpressions;
using Bind.Structures;
using Enum=Bind.Structures.Enum;
namespace Bind
{
enum WriteOptions
internal enum WriteOptions
{
Default = 0,
NoIndent = 1
}
class BindStreamWriter : IDisposable
internal class BindStreamWriter : IDisposable
{
static readonly string[] SplitStrings = new string[] { System.Environment.NewLine };
readonly StreamWriter sw;
private static readonly string[] SplitStrings = new string[] { System.Environment.NewLine };
private readonly StreamWriter sw;
public readonly string File;
bool newline = true;
int indent_level = 0;
private bool newline = true;
private int indent_level = 0;
public BindStreamWriter(string file)
{
@ -64,9 +57,11 @@ namespace Bind
public void Unindent()
{
if (indent_level > 0)
{
--indent_level;
}
}
public void Write(WriteOptions options, string value)
{
var lines = value.Split(SplitStrings, StringSplitOptions.None);
@ -143,12 +138,14 @@ namespace Bind
sw.Close();
}
void WriteIndentations(WriteOptions options)
private void WriteIndentations(WriteOptions options)
{
if (options != WriteOptions.NoIndent)
{
for (int i = indent_level; i > 0; i--)
{
sw.Write(" ");
}
}
}

View file

@ -1,15 +1,6 @@
using System;
using System.Collections.Generic;
using System.IO;
using System.Xml.XPath;
using Bind.GL2;
using Bind.Structures;
using Delegate=Bind.Structures.Delegate;
using Enum=Bind.Structures.Enum;
namespace Bind.CL
{
class CLGenerator : ES.ESGenerator
internal class CLGenerator : ES.ESGenerator
{
public CLGenerator(Settings settings)
: base(settings)

View file

@ -1,12 +1,11 @@
#region License
//
//
// The Open Toolkit Library License
//
// Copyright (c) 2006 - 2010 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
// 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:
@ -23,7 +22,6 @@
// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
// OTHER DEALINGS IN THE SOFTWARE.
//
#endregion
using System;
using System.Collections.Generic;
@ -39,12 +37,10 @@ namespace Bind
using Enum = Bind.Structures.Enum;
using Type = Bind.Structures.Type;
sealed class CSharpSpecWriter
internal sealed class CSharpSpecWriter
{
IBind Generator { get; set; }
Settings Settings { get { return Generator.Settings; } }
#region ISpecWriter Members
private IBind Generator { get; set; }
private Settings Settings { get { return Generator.Settings; } }
public void WriteBindings(IBind generator)
{
@ -52,28 +48,26 @@ namespace Bind
WriteBindings(generator.Delegates, generator.Wrappers, generator.Enums);
}
#endregion
#region Private Members
private static void ConsoleRewrite(string text)
{
int left = Console.CursorLeft;
int top = Console.CursorTop;
Console.Write(text);
for (int i = text.Length; i < 80; i++)
{
Console.Write(" ");
}
Console.WriteLine();
Console.SetCursorPosition(left, top);
}
#region WriteBindings
void WriteBindings(DelegateCollection delegates, FunctionCollection wrappers, EnumCollection enums)
private void WriteBindings(DelegateCollection delegates, FunctionCollection wrappers, EnumCollection enums)
{
Console.WriteLine("Writing bindings to {0}", Settings.OutputPath);
if (!Directory.Exists(Settings.OutputPath))
{
Directory.CreateDirectory(Settings.OutputPath);
}
string temp_enums_file = Path.GetTempFileName();
string temp_wrappers_file = Path.GetTempFileName();
@ -94,7 +88,9 @@ namespace Bind
sw.WriteLine("static partial class {0}", Settings.OutputClass);
}
else
{
sw.WriteLine("namespace {0}", Settings.EnumsOutput);
}
sw.WriteLine("{");
@ -134,20 +130,28 @@ namespace Bind
string output_core = Path.Combine(Settings.OutputPath, Settings.ImportsFile);
string output_wrappers = Path.Combine(Settings.OutputPath, Settings.WrappersFile);
if (File.Exists(output_enums)) File.Delete(output_enums);
if (File.Exists(output_delegates)) File.Delete(output_delegates);
if (File.Exists(output_core)) File.Delete(output_core);
if (File.Exists(output_wrappers)) File.Delete(output_wrappers);
if (File.Exists(output_enums))
{
File.Delete(output_enums);
}
if (File.Exists(output_delegates))
{
File.Delete(output_delegates);
}
if (File.Exists(output_core))
{
File.Delete(output_core);
}
if (File.Exists(output_wrappers))
{
File.Delete(output_wrappers);
}
File.Move(temp_enums_file, output_enums);
File.Move(temp_wrappers_file, output_wrappers);
}
#endregion
#region WriteWrappers
void WriteWrappers(BindStreamWriter sw, FunctionCollection wrappers,
private void WriteWrappers(BindStreamWriter sw, FunctionCollection wrappers,
DelegateCollection delegates, EnumCollection enums,
IDictionary<string, string> CSTypes)
{
@ -163,7 +167,7 @@ namespace Bind
sw.WriteLine("partial class {0}", Settings.OutputClass);
sw.WriteLine("{");
sw.Indent();
// Write constructor
sw.WriteLine("static {0}()", Settings.OutputClass);
sw.WriteLine("{");
@ -248,7 +252,7 @@ namespace Bind
{
sw.WriteLine("[Slot({0})]", d.Slot);
sw.WriteLine("[DllImport(Library, ExactSpelling = true, CallingConvention = CallingConvention.Winapi)]");
sw.WriteLine("static extern {0};", GetDeclarationString(d, false));
sw.WriteLine("private static extern {0};", GetDeclarationString(d, false));
current_signature++;
}
@ -258,7 +262,7 @@ namespace Bind
Console.WriteLine("Wrote {0} wrappers for {1} signatures", current_wrapper, current_signature);
}
void WriteWrapper(BindStreamWriter sw, Function f, EnumCollection enums)
private void WriteWrapper(BindStreamWriter sw, Function f, EnumCollection enums)
{
if ((Settings.Compatibility & Settings.Legacy.NoDocumentation) == 0)
{
@ -287,10 +291,10 @@ namespace Bind
sw.WriteLine("[CLSCompliant(false)]");
}
sw.WriteLine("public static {0} {{ throw new NotImplementedException(); }}", GetDeclarationString(f, Settings.Compatibility));
sw.WriteLine("public static {0} {{ throw new BindingsNotRewrittenException(); }}", GetDeclarationString(f, Settings.Compatibility));
}
void WriteDocumentation(BindStreamWriter sw, Function f)
private void WriteDocumentation(BindStreamWriter sw, Function f)
{
var docs = f.Documentation;
@ -310,9 +314,13 @@ namespace Bind
else if (!String.IsNullOrEmpty(f.Version))
{
if (f.Category.StartsWith("VERSION"))
{
category = String.Format("[requires: {0}]", "v" + f.Version);
}
else
{
category = String.Format("[requires: {0}]", "v" + f.Version + " or " + f.Category);
}
}
// Write function summary
@ -372,7 +380,7 @@ namespace Bind
}
if (!String.IsNullOrEmpty(docparam.Documentation))
{
sw.WriteLine(WriteOptions.NoIndent, " ");
sw.WriteLine(WriteOptions.NoIndent, "");
sw.WriteLine("/// {0}", docparam.Documentation);
sw.WriteLine("/// </param>");
}
@ -395,13 +403,9 @@ namespace Bind
catch (Exception e)
{
Console.WriteLine("[Warning] Error documenting function {0}: {1}", f.WrappedDelegate.Name, e.ToString());
}
}
}
#endregion
#region WriteTypes
public void WriteTypes(BindStreamWriter sw, Dictionary<string, string> CSTypes)
{
sw.WriteLine();
@ -411,11 +415,7 @@ namespace Bind
}
}
#endregion
#region WriteConstants
void WriteConstants(BindStreamWriter sw, IEnumerable<Constant> constants)
private void WriteConstants(BindStreamWriter sw, IEnumerable<Constant> constants)
{
// Make sure everything is sorted. This will avoid random changes between
// consecutive runs of the program.
@ -435,24 +435,26 @@ namespace Bind
sw.Write(str);
if (!String.IsNullOrEmpty(str))
{
sw.WriteLine(",");
}
}
}
#endregion
#region WriteEnums
void WriteEnums(BindStreamWriter sw, EnumCollection enums, FunctionCollection wrappers)
private void WriteEnums(BindStreamWriter sw, EnumCollection enums, FunctionCollection wrappers)
{
//sw.WriteLine("#pragma warning disable 3019"); // CLSCompliant attribute
//sw.WriteLine("#pragma warning disable 1591"); // Missing doc comments
//sw.WriteLine();
if ((Settings.Compatibility & Settings.Legacy.NestedEnums) != Settings.Legacy.None)
{
Trace.WriteLine(String.Format("Writing enums to:\t{0}.{1}.{2}", Settings.OutputNamespace, Settings.OutputClass, Settings.NestedEnumsClass));
}
else
{
Trace.WriteLine(String.Format("Writing enums to:\t{0}", Settings.EnumsOutput));
}
if ((Settings.Compatibility & Settings.Legacy.ConstIntEnums) == Settings.Legacy.None)
{
@ -506,11 +508,17 @@ namespace Bind
}
if (@enum.IsObsolete)
{
sw.WriteLine("[Obsolete(\"{0}\")]", @enum.Obsolete);
}
if (!@enum.CLSCompliant)
{
sw.WriteLine("[CLSCompliant(false)]");
}
if (@enum.IsFlagCollection)
{
sw.WriteLine("[Flags]");
}
sw.WriteLine("public enum " + @enum.Name + " : " + @enum.Type);
sw.WriteLine("{");
sw.Indent();
@ -548,29 +556,24 @@ namespace Bind
}
}
#endregion
#region WriteLicense
public void WriteLicense(BindStreamWriter sw)
{
sw.WriteLine(File.ReadAllText(Path.Combine(Settings.InputPath, Settings.LicenseFile)));
sw.WriteLine();
}
#endregion
// For example, if parameter foo has indirection level = 1, then it
// is consumed as 'foo*' in the fixed_statements and the call string.
readonly static string[] pointer_levels = new string[] { "", "*", "**", "***", "****" };
readonly static string[] array_levels = new string[] { "", "[]", "[,]", "[,,]", "[,,,]" };
private readonly static string[] pointer_levels = new string[] { "", "*", "**", "***", "****" };
static bool IsEnum(string s, EnumCollection enums)
private readonly static string[] array_levels = new string[] { "", "[]", "[,]", "[,,]", "[,,,]" };
private static bool IsEnum(string s, EnumCollection enums)
{
return enums.ContainsKey(s);
}
string GetDeclarationString(Constant c)
private string GetDeclarationString(Constant c)
{
if (String.IsNullOrEmpty(c.Name))
{
@ -586,13 +589,15 @@ namespace Bind
c.Value);
}
string GetDeclarationString(Delegate d, bool is_delegate)
private string GetDeclarationString(Delegate d, bool is_delegate)
{
StringBuilder sb = new StringBuilder();
sb.Append(d.Unsafe ? "unsafe " : "");
if (is_delegate)
{
sb.Append("delegate ");
}
sb.Append(GetDeclarationString(d.ReturnType, Settings.Legacy.ConstIntEnums));
sb.Append(" ");
sb.Append(Settings.FunctionPrefix);
@ -602,7 +607,7 @@ namespace Bind
return sb.ToString();
}
string GetDeclarationString(Enum e)
private string GetDeclarationString(Enum e)
{
StringBuilder sb = new StringBuilder();
List<Constant> constants = new List<Constant>(e.ConstantCollection.Values);
@ -610,12 +615,16 @@ namespace Bind
{
int ret = String.Compare(c1.Value, c2.Value);
if (ret == 0)
{
return String.Compare(c1.Name, c2.Name);
}
return ret;
});
if (e.IsFlagCollection)
{
sb.AppendLine("[Flags]");
}
sb.Append("public enum ");
sb.Append(e.Name);
sb.Append(" : ");
@ -628,14 +637,16 @@ namespace Bind
sb.Append(" ");
sb.Append(declaration);
if (!String.IsNullOrEmpty(declaration))
{
sb.AppendLine(",");
}
}
sb.Append("}");
return sb.ToString();
}
string GetDeclarationString(Function f, Settings.Legacy settings)
private string GetDeclarationString(Function f, Settings.Legacy settings)
{
StringBuilder sb = new StringBuilder();
@ -651,15 +662,13 @@ namespace Bind
if (f.Parameters.HasGenericParameters)
{
sb.Append("<");
foreach (Parameter p in f.Parameters)
foreach (Parameter p in f.Parameters.Where(p => p.Generic))
{
if (p.Generic)
{
sb.Append(p.CurrentType);
sb.Append(",");
}
sb.Append(p.CurrentType);
sb.Append(", ");
}
sb.Remove(sb.Length - 1, 1);
sb.Remove(sb.Length - 2, 2);
sb.Append(">");
}
@ -668,31 +677,70 @@ namespace Bind
if (f.Parameters.HasGenericParameters)
{
sb.AppendLine();
foreach (Parameter p in f.Parameters)
foreach (Parameter p in f.Parameters.Where(p => p.Generic))
{
if (p.Generic)
sb.AppendLine(String.Format(" where {0} : struct", p.CurrentType));
sb.AppendLine(String.Format(" where {0} : struct", p.CurrentType));
}
}
return sb.ToString();
}
string GetDeclarationString(Parameter p, bool override_unsafe_setting, Settings.Legacy settings)
private string GetDeclarationString(Parameter p, bool override_unsafe_setting, Settings.Legacy settings)
{
StringBuilder sb = new StringBuilder();
List<string> attributes = new List<string>();
if (p.Flow == FlowDirection.Out)
sb.Append("[OutAttribute] ");
{
attributes.Add("OutAttribute");
}
else if (p.Flow == FlowDirection.Undefined)
sb.Append("[InAttribute, OutAttribute] ");
{
attributes.Add("InAttribute");
attributes.Add("OutAttribute");
}
if (!String.IsNullOrEmpty(p.ComputeSize))
{
int count;
if (Int32.TryParse(p.ComputeSize, out count))
{
attributes.Add(String.Format("CountAttribute(Count = {0})", count));
}
else
{
if (p.ComputeSize.StartsWith("COMPSIZE"))
{
//remove the compsize hint, just keep comma delimited param names
var len = "COMPSIZE(".Length;
var computed = p.ComputeSize.Substring(len, (p.ComputeSize.Length - len) - 1);
attributes.Add(String.Format("CountAttribute(Computed = \"{0}\")", computed));
}
else
{
attributes.Add(String.Format("CountAttribute(Parameter = \"{0}\")", p.ComputeSize));
}
}
}
if (attributes.Count != 0)
{
sb.Append("[");
sb.Append(string.Join(", ", attributes));
sb.Append("] ");
}
if (p.Reference)
{
if (p.Flow == FlowDirection.Out)
{
sb.Append("out ");
}
else
{
sb.Append("ref ");
}
}
if (!override_unsafe_setting && ((Settings.Compatibility & Settings.Legacy.NoPublicUnsafeFunctions) != Settings.Legacy.None))
@ -719,7 +767,7 @@ namespace Bind
return sb.ToString();
}
string GetDeclarationString(ParameterCollection parameters, Settings.Legacy settings)
private string GetDeclarationString(ParameterCollection parameters, Settings.Legacy settings)
{
StringBuilder sb = new StringBuilder();
@ -741,7 +789,7 @@ namespace Bind
return sb.ToString();
}
string GetDeclarationString(Type type, Settings.Legacy settings)
private string GetDeclarationString(Type type, Settings.Legacy settings)
{
var t = type.QualifiedType;
if ((settings & Settings.Legacy.ConstIntEnums) != 0)
@ -757,7 +805,5 @@ namespace Bind
pointer_levels[type.Pointer],
array_levels[type.Array]);
}
#endregion
}
}

View file

@ -3,9 +3,7 @@ using System.Collections;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text;
using System.Text.RegularExpressions;
using System.Xml;
using System.Xml.Linq;
using System.Xml.XPath;
@ -13,32 +11,38 @@ using Bind.Structures;
namespace Bind
{
class DocProcessor
internal class DocProcessor
{
static readonly char[] numbers = "0123456789".ToCharArray();
static readonly Regex remove_mathml = new Regex(
private static readonly char[] numbers = "0123456789".ToCharArray();
private static readonly Regex remove_mathml = new Regex(
@"<(mml:math|inlineequation)[^>]*?>(?:.|\n)*?</\s*\1\s*>",
RegexOptions.Compiled | RegexOptions.Multiline | RegexOptions.IgnorePatternWhitespace);
static readonly Regex remove_doctype = new Regex(
private static readonly Regex remove_doctype = new Regex(
@"<!DOCTYPE[^>\[]*(\[.*\])?>", RegexOptions.Compiled | RegexOptions.Multiline);
static readonly Regex remove_xmlns = new Regex(
private static readonly Regex remove_xmlns = new Regex(
"xmlns=\".+\"", RegexOptions.Compiled);
readonly Dictionary<string, string> DocumentationFiles =
private readonly Dictionary<string, string> DocumentationFiles =
new Dictionary<string, string>();
readonly Dictionary<string, Documentation> DocumentationCache =
private readonly Dictionary<string, Documentation> DocumentationCache =
new Dictionary<string, Documentation>();
Documentation Cached;
string LastFile;
private Documentation Cached;
private string LastFile;
IBind Generator { get; set; }
Settings Settings { get { return Generator.Settings; } }
private IBind Generator { get; set; }
private Settings Settings { get { return Generator.Settings; } }
public DocProcessor(IBind generator)
{
if (generator == null)
{
throw new ArgumentNullException();
}
Generator = generator;
foreach (string file in Directory.GetFiles(Settings.DocPath).Concat(
@ -64,9 +68,13 @@ namespace Bind
{
var file = Settings.FunctionPrefix + f.WrappedDelegate.Name + ".xml";
if (!DocumentationFiles.ContainsKey(file))
{
file = Settings.FunctionPrefix + f.TrimmedName + ".xml";
}
if (!DocumentationFiles.ContainsKey(file))
{
file = Settings.FunctionPrefix + f.TrimmedName.TrimEnd(numbers) + ".xml";
}
docs =
(DocumentationFiles.ContainsKey(file) ? ProcessFile(DocumentationFiles[file], processor) : null) ??
@ -87,12 +95,14 @@ namespace Bind
// found in the <!-- eqn: :--> comments in the docs.
// Todo: Some simple MathML tags do not include comments, find a solution.
// Todo: Some files include more than 1 function - find a way to map these extra functions.
Documentation ProcessFile(string file, EnumProcessor processor)
private Documentation ProcessFile(string file, EnumProcessor processor)
{
string text;
if (LastFile == file)
{
return Cached;
}
LastFile = file;
text = File.ReadAllText(file);
@ -148,10 +158,12 @@ namespace Bind
}
}
Documentation ToInlineDocs(XDocument doc, EnumProcessor enum_processor)
private Documentation ToInlineDocs(XDocument doc, EnumProcessor enum_processor)
{
if (doc == null || enum_processor == null)
{
throw new ArgumentNullException();
}
var no_const_processing = Settings.Legacy.NoAdvancedEnumProcessing | Settings.Legacy.ConstIntEnums;
if (!Generator.Settings.IsEnabled(no_const_processing))
@ -190,8 +202,9 @@ namespace Bind
return inline;
}
static readonly char[] newline = new char[] { '\n' };
static string Cleanup(string text)
private static readonly char[] newline = new char[] { '\n' };
private static string Cleanup(string text)
{
return
String.Join(" ", text

View file

@ -1,16 +1,10 @@
using System;
using System.Collections.Generic;
using System.IO;
using System.Xml.XPath;
using System.IO;
using Bind.GL2;
using Bind.Structures;
using Delegate=Bind.Structures.Delegate;
using Enum=Bind.Structures.Enum;
namespace Bind.ES
{
// Generation implementation for OpenGL ES 2.0 and 3.0
class ES2Generator : Generator
internal class ES2Generator : Generator
{
public ES2Generator(Settings settings)
: base(settings)

View file

@ -1,16 +1,10 @@
using System;
using System.Collections.Generic;
using System.IO;
using System.Xml.XPath;
using System.IO;
using Bind.GL2;
using Bind.Structures;
using Delegate=Bind.Structures.Delegate;
using Enum=Bind.Structures.Enum;
namespace Bind.ES
{
// Generation implementation for OpenGL ES 3.1
class ES31Generator : Generator
internal class ES31Generator : Generator
{
public ES31Generator(Settings settings)
: base(settings)

View file

@ -1,16 +1,10 @@
using System;
using System.Collections.Generic;
using System.IO;
using System.Xml.XPath;
using System.IO;
using Bind.GL2;
using Bind.Structures;
using Delegate=Bind.Structures.Delegate;
using Enum=Bind.Structures.Enum;
namespace Bind.ES
{
// Generation implementation for OpenGL ES 3.0
class ES3Generator : Generator
internal class ES3Generator : Generator
{
public ES3Generator(Settings settings)
: base(settings)

View file

@ -1,16 +1,10 @@
using System;
using System.Collections.Generic;
using System.IO;
using System.Xml.XPath;
using System.IO;
using Bind.GL2;
using Bind.Structures;
using Delegate=Bind.Structures.Delegate;
using Enum=Bind.Structures.Enum;
namespace Bind.ES
{
// Generator implementation for OpenGL ES 1.0 and 1.1
class ESGenerator : Generator
internal class ESGenerator : Generator
{
public ESGenerator(Settings settings)
: base(settings)

View file

@ -1,12 +1,11 @@
#region License
//
//
// The Open Toolkit Library License
//
// Copyright (c) 2006 - 2010 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
// 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:
@ -23,12 +22,10 @@
// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
// OTHER DEALINGS IN THE SOFTWARE.
//
#endregion
using System;
using System.Collections.Generic;
using System.Globalization;
using System.IO;
using System.Linq;
using System.Text;
using System.Xml.XPath;
@ -37,19 +34,23 @@ using Enum = Bind.Structures.Enum;
namespace Bind
{
class EnumProcessor
internal class EnumProcessor
{
readonly IEnumerable<string> Overrides;
private readonly IEnumerable<string> Overrides;
IBind Generator { get; set; }
Settings Settings { get { return Generator.Settings; } }
private IBind Generator { get; set; }
private Settings Settings { get { return Generator.Settings; } }
public EnumProcessor(IBind generator, IEnumerable<string> overrides)
{
if (generator == null)
{
throw new ArgumentNullException("generator");
}
if (overrides == null)
{
throw new ArgumentNullException("overrides");
}
Generator = generator;
Overrides = overrides;
@ -71,7 +72,9 @@ namespace Bind
public static string GetOverridesPath(string apiname, string enumeration)
{
if (enumeration == null)
{
throw new ArgumentNullException("enumeration");
}
var path = new StringBuilder();
path.Append("/signatures/replace");
@ -87,9 +90,7 @@ namespace Bind
return path.ToString();
}
#region Private Members
EnumCollection ProcessNames(EnumCollection enums, XPathNavigator nav, string apiname)
private EnumCollection ProcessNames(EnumCollection enums, XPathNavigator nav, string apiname)
{
EnumCollection processed_enums = new EnumCollection();
foreach (var e in enums.Values)
@ -125,7 +126,7 @@ namespace Bind
return processed_enums;
}
static string ReplaceName(XPathNavigator nav, string apiname, string name)
private static string ReplaceName(XPathNavigator nav, string apiname, string name)
{
var enum_override = nav.SelectSingleNode(GetOverridesPath(apiname, name));
if (enum_override != null)
@ -139,7 +140,7 @@ namespace Bind
return name;
}
static bool IsAlreadyProcessed(string name)
private static bool IsAlreadyProcessed(string name)
{
string extension = Utilities.GetExtension(name, true);
bool unprocessed = false;
@ -153,15 +154,21 @@ namespace Bind
public string TranslateEnumName(string name)
{
if (String.IsNullOrEmpty(name))
{
return name;
}
if (Utilities.CSharpKeywords.Contains(name))
{
return name;
}
if (!IsAlreadyProcessed(name))
{
if (Char.IsDigit(name[0]))
{
name = Settings.ConstantPrefix + name;
}
StringBuilder translator = new StringBuilder(name);
@ -198,11 +205,17 @@ namespace Bind
}
if (is_after_underscore_or_number)
{
char_to_add = Char.ToUpper(c);
}
else if (is_previous_uppercase)
{
char_to_add = Char.ToLower(c);
}
else
{
char_to_add = c;
}
translator.Append(char_to_add);
@ -210,7 +223,7 @@ namespace Bind
is_after_underscore_or_number = false;
}
// First letter should always be uppercase in order
// First letter should always be uppercase in order
// to conform to .Net style guidelines.
translator[0] = Char.ToUpper(translator[0]);
@ -223,13 +236,15 @@ namespace Bind
name = translator.ToString();
if (name.StartsWith(Settings.EnumPrefix))
{
name = name.Substring(Settings.EnumPrefix.Length);
}
}
return name;
}
EnumCollection ProcessConstants(EnumCollection enums, XPathNavigator nav, string apiname)
private EnumCollection ProcessConstants(EnumCollection enums, XPathNavigator nav, string apiname)
{
foreach (var e in enums.Values)
{
@ -262,7 +277,7 @@ namespace Bind
return enums;
}
static void ReplaceConstant(XPathNavigator enum_override, Constant c)
private static void ReplaceConstant(XPathNavigator enum_override, Constant c)
{
if (enum_override != null)
{
@ -286,7 +301,9 @@ namespace Bind
public string TranslateConstantName(string s, bool isValue)
{
if (String.IsNullOrEmpty(s))
{
return s;
}
StringBuilder translator = new StringBuilder(s.Length);
@ -306,7 +323,9 @@ namespace Bind
bool is_after_digit = false;
if (!isValue && Char.IsDigit(s[0]))
{
s = Settings.ConstantPrefix + s;
}
foreach (char c in s)
{
@ -337,7 +356,9 @@ namespace Bind
translator[0] = Char.ToUpper(translator[0]);
}
else
{
translator.Append(s);
}
}
return translator.ToString();
@ -350,14 +371,20 @@ namespace Bind
{
// Trim the unsigned or long specifiers used in C constants ('u' or 'ull').
if (value.ToLower().EndsWith("ull"))
{
value = value.Substring(0, value.Length - 3);
}
if (value.ToLower().EndsWith("u"))
{
value = value.Substring(0, value.Length - 1);
}
}
// Strip the prefix, if any.
if (value.StartsWith(Settings.ConstantPrefix))
{
value = value.Substring(Settings.ConstantPrefix.Length);
}
return TranslateConstantName(value, IsValue(value));
}
@ -366,7 +393,7 @@ namespace Bind
// (e.g. FOG_COORD_ARRAY_TYPE = GL_FOG_COORDINATE_ARRAY_TYPE)
// In this case try searching all enums for the correct constant to alias (stupid opengl specs).
// This turns every bare alias into a normal alias that is processed afterwards.
static void ResolveBareAlias(Constant c, EnumCollection enums)
private static void ResolveBareAlias(Constant c, EnumCollection enums)
{
// Constants are considered bare aliases when they don't have a reference and
// their values are non-numeric.
@ -387,7 +414,7 @@ namespace Bind
// Resolve 'use' tokens by searching and replacing the correct
// value from the enum collection.
// Tokens that can't be resolved are removed.
static void ResolveAliases(Enum e, EnumCollection enums)
private static void ResolveAliases(Enum e, EnumCollection enums)
{
// Note that we have the removal must be a separate step, since
// we cannot modify a collection while iterating with foreach.
@ -401,7 +428,7 @@ namespace Bind
}
}
static bool IsValue(string test)
private static bool IsValue(string test)
{
// Check if the result is a number.
long number;
@ -420,7 +447,5 @@ namespace Bind
}
return is_number;
}
#endregion
}
}

View file

@ -1,12 +1,11 @@
#region License
//
//
// The Open Toolkit Library License
//
// Copyright (c) 2006 - 2013 Stefanos Apostolopoulos for 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
// 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:
@ -23,12 +22,10 @@
// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
// OTHER DEALINGS IN THE SOFTWARE.
//
#endregion
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.IO;
using System.Linq;
using System.Text;
using System.Text.RegularExpressions;
@ -38,33 +35,38 @@ using Delegate = Bind.Structures.Delegate;
namespace Bind
{
using Enum = Bind.Structures.Enum;
using Type = Bind.Structures.Type;
class FuncProcessor
internal class FuncProcessor
{
static readonly Regex Endings = new Regex(
private static readonly Regex Endings = new Regex(
@"([fd]v?|u?[isb](64)?v?|v|i_v|fi)$",
RegexOptions.Compiled);
static readonly Regex EndingsNotToTrim = new Regex(
private static readonly Regex EndingsNotToTrim = new Regex(
"(sh|ib|[tdrey]s|[eE]n[vd]|bled" +
"|Attrib|Access|Boolean|Coord|Depth|Feedbacks|Finish|Flag" +
"|Groups|IDs|Indexed|Instanced|Pixels|Queries|Status|Tess|Through" +
"|Uniforms|Varyings|Weight|Width)$",
RegexOptions.Compiled);
static readonly Regex EndingsAddV = new Regex("^0", RegexOptions.Compiled);
readonly IEnumerable<string> Overrides;
private static readonly Regex EndingsAddV = new Regex("^0", RegexOptions.Compiled);
IBind Generator { get; set; }
Settings Settings { get { return Generator.Settings; } }
private readonly IEnumerable<string> Overrides;
private IBind Generator { get; set; }
private Settings Settings { get { return Generator.Settings; } }
public FuncProcessor(IBind generator, IEnumerable<string> overrides)
{
if (generator == null)
{
throw new ArgumentNullException("generator");
}
if (overrides == null)
{
throw new ArgumentNullException("overrides");
}
Generator = generator;
Overrides = overrides;
@ -141,9 +143,7 @@ namespace Bind
return wrappers;
}
#region Private Members
void GenerateDocumentation(FunctionCollection wrappers,
private void GenerateDocumentation(FunctionCollection wrappers,
EnumProcessor enum_processor, DocProcessor doc_processor)
{
foreach (var list in wrappers)
@ -156,14 +156,14 @@ namespace Bind
}
}
void GenerateAddressTable(DelegateCollection delegates)
private void GenerateAddressTable(DelegateCollection delegates)
{
// We allocate one slot per entry point. Rules:
// - All extensions get a slot
// - Core functions get a slot, unless UseDllImports is enabled
// - On Windows, core functions with version > 1.1 must be treated as extensions.
// This is controlled via the UseWindowsCompatibleGL setting.
// Entry points without a slot are assigned the magic slot index -1.
// Entry points without a slot are assigned the magic slot index -1.
// Generator.Rewrite detects this and generates a static DllImport call
// instead of a calli instruction for these functions.
@ -189,13 +189,13 @@ namespace Bind
}
}
}
// When we have a list of overloaded delegates, make sure that
// all generated wrappers use the first (original) delegate, not
// the overloaded ones. This allows us to reduce the amount
// of delegates we need to generate (1 per entry point instead
// of 1 per overload), which improves loading times.
static void RemoveOverloadedDelegates(DelegateCollection delegates, FunctionCollection wrappers)
private static void RemoveOverloadedDelegates(DelegateCollection delegates, FunctionCollection wrappers)
{
foreach (var w in wrappers.Values.SelectMany(w => w))
{
@ -204,7 +204,7 @@ namespace Bind
}
}
static string GetPath(string apipath, string apiname, string apiversion, string function, string extension)
private static string GetPath(string apipath, string apiname, string apiversion, string function, string extension)
{
var path = new StringBuilder();
path.Append("/signatures/");
@ -250,17 +250,17 @@ namespace Bind
return path.ToString();
}
static string GetOverloadsPath(string apiname, string apiversion, string function, string extension)
private static string GetOverloadsPath(string apiname, string apiversion, string function, string extension)
{
return GetPath("overload", apiname, apiversion, function, extension);
}
static string GetOverridesPath(string apiname, string apiversion, string function, string extension)
private static string GetOverridesPath(string apiname, string apiversion, string function, string extension)
{
return GetPath("replace", apiname, apiversion, function, extension);
}
void TranslateType(Bind.Structures.Type type,
private void TranslateType(Bind.Structures.Type type,
XPathNavigator function_override, XPathNavigator overrides,
EnumProcessor enum_processor, EnumCollection enums,
string category, string apiname)
@ -353,15 +353,23 @@ namespace Bind
{
// For consistency - many overrides use string instead of String.
if (enum_override.Value == "string")
{
type.QualifiedType = "String";
}
else if (enum_override.Value == "StringBuilder")
type.QualifiedType = "StringBuilder";
{
throw new NotSupportedException("StringBuilder enum overrides are no longer supported");
}
else
{
type.CurrentType = enum_override.Value;
}
}
if (type.CurrentType == "IntPtr" && String.IsNullOrEmpty(type.PreviousType))
{
type.Pointer = 0;
}
if (type.Pointer >= 3)
{
@ -379,7 +387,7 @@ namespace Bind
}
}
static string TranslateExtension(string extension)
private static string TranslateExtension(string extension)
{
extension = extension.ToUpper();
if (extension.Length > 2)
@ -389,12 +397,12 @@ namespace Bind
return extension;
}
void TranslateExtension(Delegate d)
private void TranslateExtension(Delegate d)
{
d.Extension = TranslateExtension(d.Extension);
}
static string GetTrimmedExtension(string name, string extension)
private static string GetTrimmedExtension(string name, string extension)
{
// Extensions are always uppercase
int index = name.LastIndexOf(extension.ToUpper());
@ -406,7 +414,7 @@ namespace Bind
}
// Trims unecessary suffices from the specified OpenGL function name.
static string GetTrimmedName(Delegate d)
private static string GetTrimmedName(Delegate d)
{
string name = d.Name;
string extension = d.Extension;
@ -445,7 +453,7 @@ namespace Bind
return trimmed_name;
}
static XPathNodeIterator GetFuncOverload(XPathNavigator nav, Delegate d, string apiname, string apiversion)
private static XPathNodeIterator GetFuncOverload(XPathNavigator nav, Delegate d, string apiname, string apiversion)
{
// Try a few different extension variations that appear in the overrides xml file
string[] extensions = { d.Extension, TranslateExtension(d.Extension), d.Extension.ToUpper() };
@ -457,18 +465,24 @@ namespace Bind
string extensionless_name = GetTrimmedExtension(d.Name, ext);
function_overload = nav.Select(GetOverloadsPath(apiname, apiversion, d.Name, ext));
if (function_overload.Count != 0)
{
break;
}
function_overload = nav.Select(GetOverloadsPath(apiname, apiversion, extensionless_name, ext));
if (function_overload.Count != 0)
{
break;
}
function_overload = nav.Select(GetOverloadsPath(apiname, apiversion, trimmed_name, ext));
if (function_overload.Count != 0)
{
break;
}
}
return function_overload;
}
static XPathNavigator GetFuncOverride(XPathNavigator nav, Delegate d, string apiname, string apiversion)
private static XPathNavigator GetFuncOverride(XPathNavigator nav, Delegate d, string apiname, string apiversion)
{
// Try a few different extension variations that appear in the overrides xml file
string[] extensions = { d.Extension, TranslateExtension(d.Extension), d.Extension.ToUpper() };
@ -491,12 +505,12 @@ namespace Bind
return function_override;
}
void TrimName(Function f)
private void TrimName(Function f)
{
f.TrimmedName = GetTrimmedName(f);
}
static void ApplyParameterReplacement(Delegate d, XPathNavigator function_override)
private static void ApplyParameterReplacement(Delegate d, XPathNavigator function_override)
{
if (function_override != null)
{
@ -522,9 +536,16 @@ namespace Bind
d.Parameters[i].Flow = Parameter.GetFlowDirection((string)node.TypedValue);
break;
case "count":
d.Parameters[i].ComputeSize = node.Value.Trim();
int count;
if (Int32.TryParse(node.Value, out count))
if (Int32.TryParse(d.Parameters[i].ComputeSize, out count))
{
d.Parameters[i].ElementCount = count;
}
else
{
d.Parameters[i].ElementCount = 0;
}
break;
}
}
@ -533,7 +554,7 @@ namespace Bind
}
}
static void ApplyReturnTypeReplacement(Delegate d, XPathNavigator function_override)
private static void ApplyReturnTypeReplacement(Delegate d, XPathNavigator function_override)
{
if (function_override != null)
{
@ -554,7 +575,7 @@ namespace Bind
// 3) A generic object or void* (translates to IntPtr)
// 4) A GLenum (translates to int on Legacy.Tao or GL.Enums.GLenum otherwise).
// Return types must always be CLS-compliant, because .Net does not support overloading on return types.
void TranslateReturnType(Delegate d,
private void TranslateReturnType(Delegate d,
XPathNavigator function_override, XPathNavigator nav,
EnumProcessor enum_processor, EnumCollection enums,
string apiname, string apiversion)
@ -585,10 +606,14 @@ namespace Bind
if (d.ReturnType.CurrentType.Contains("GLenum"))
{
if ((Settings.Compatibility & Settings.Legacy.ConstIntEnums) == Settings.Legacy.None)
{
d.ReturnType.QualifiedType = String.Format("{0}{1}{2}",
Settings.EnumsOutput, Settings.NamespaceSeparator, Settings.CompleteEnumName);
}
else
{
d.ReturnType.QualifiedType = "int";
}
}
if (d.ReturnType.CurrentType.ToLower().Contains("bool"))
@ -600,7 +625,7 @@ namespace Bind
d.ReturnType.CurrentType = GetCLSCompliantType(d.ReturnType);
}
Delegate GetCLSCompliantDelegate(Delegate d)
private Delegate GetCLSCompliantDelegate(Delegate d)
{
Delegate f = new Delegate(d);
@ -614,7 +639,7 @@ namespace Bind
return f;
}
void TranslateParameters(Delegate d,
private void TranslateParameters(Delegate d,
XPathNavigator function_override, XPathNavigator nav,
EnumProcessor enum_processor, EnumCollection enums,
string apiname, string apiversion)
@ -625,11 +650,29 @@ namespace Bind
{
TranslateParameter(d.Parameters[i], function_override, nav, enum_processor, enums, d.Category, apiname);
if (d.Parameters[i].CurrentType == "UInt16" && d.Name.Contains("LineStipple"))
{
d.Parameters[i].WrapperType |= WrapperTypes.UncheckedParameter;
}
if (function_override != null)
{
XPathNavigator param_override = function_override.SelectSingleNode(String.Format(
"param[@name='{0}' or @index='{1}']",
d.Parameters[i].RawName,
i));
if (param_override != null)
{
var legacyArrayParameter = param_override.GetAttribute("legacyArrayParameter", String.Empty);
if (!String.IsNullOrEmpty(legacyArrayParameter))
{
d.Parameters[i].WrapperType |= WrapperTypes.LegacyArrayParameter;
}
}
}
}
}
void TranslateParameter(Parameter p,
private void TranslateParameter(Parameter p,
XPathNavigator function_override, XPathNavigator overrides,
EnumProcessor enum_processor, EnumCollection enums,
string category, string apiname)
@ -695,14 +738,16 @@ namespace Bind
}
if (Utilities.CSharpKeywords.Contains(p.Name))
{
p.Name = Settings.KeywordEscapeCharacter + p.Name;
}
// This causes problems with bool arrays
//if (CurrentType.ToLower().Contains("bool"))
// WrapperType = WrapperTypes.BoolParameter;
}
void TranslateAttributes(Delegate d,
private void TranslateAttributes(Delegate d,
XPathNavigator function_override, XPathNavigator nav,
string apiname, string apiversion)
{
@ -734,7 +779,7 @@ namespace Bind
}
}
FunctionCollection CreateWrappers(DelegateCollection delegates, EnumCollection enums)
private FunctionCollection CreateWrappers(DelegateCollection delegates, EnumCollection enums)
{
var wrappers = new FunctionCollection();
foreach (var d in delegates.Values.SelectMany(v => v))
@ -769,7 +814,7 @@ namespace Bind
return wrappers;
}
FunctionCollection CreateCLSCompliantWrappers(FunctionCollection functions, EnumCollection enums)
private FunctionCollection CreateCLSCompliantWrappers(FunctionCollection functions, EnumCollection enums)
{
// If the function is not CLS-compliant (e.g. it contains unsigned parameters)
// we need to create a CLS-Compliant overload. However, we should only do this
@ -795,7 +840,9 @@ namespace Bind
{
cls.Parameters[i].CurrentType = GetCLSCompliantType(cls.Parameters[i]);
if (cls.Parameters[i].CurrentType != f.Parameters[i].CurrentType)
{
modified = true;
}
}
// Only add a cls-compliant overload if we have
@ -810,13 +857,13 @@ namespace Bind
return wrappers;
}
static FunctionCollection MarkCLSCompliance(FunctionCollection collection)
private static FunctionCollection MarkCLSCompliance(FunctionCollection collection)
{
//foreach (var w in
// (from list in collection
// from w1 in list.Value
// from w2 in list.Value
// where
// where
// w1.TrimmedName == w2.TrimmedName &&
// w1.Parameters.Count == w2.Parameters.Count &&
// ParametersDifferOnlyInReference(w1.Parameters, w2.Parameters)
@ -842,21 +889,33 @@ namespace Bind
for (k = 0; k < wrappers[i].Parameters.Count; k++)
{
if (wrappers[i].Parameters[k].CurrentType != wrappers[j].Parameters[k].CurrentType)
{
break;
}
if (wrappers[i].Parameters[k].DiffersOnlyOnReference(wrappers[j].Parameters[k]))
{
if (wrappers[i].Parameters[k].Reference)
{
function_i_is_problematic = true;
}
else
{
function_j_is_problematic = true;
}
}
}
if (k == wrappers[i].Parameters.Count)
{
if (function_i_is_problematic)
{
must_remove.Add(i);
}
if (function_j_is_problematic)
{
must_remove.Add(j);
}
}
}
}
@ -876,12 +935,14 @@ namespace Bind
return collection;
}
string GetCLSCompliantType(Type type)
private string GetCLSCompliantType(Type type)
{
if (!type.CLSCompliant)
{
if (type.Pointer != 0 && Settings.Compatibility == Settings.Legacy.Tao)
{
return "IntPtr";
}
switch (type.CurrentType)
{
@ -905,7 +966,7 @@ namespace Bind
return type.CurrentType;
}
IEnumerable<Function> CreateNormalWrappers(Delegate d, EnumCollection enums)
private IEnumerable<Function> CreateNormalWrappers(Delegate d, EnumCollection enums)
{
Function f = new Function(d);
TrimName(f);
@ -917,7 +978,7 @@ namespace Bind
}
}
IEnumerable<Function> CreateConvenienceOverloads(FunctionCollection wrappers)
private IEnumerable<Function> CreateConvenienceOverloads(FunctionCollection wrappers)
{
var convenience_wrappers = new List<Function>();
foreach (var d in wrappers.Values.SelectMany(w => w))
@ -988,7 +1049,7 @@ namespace Bind
return convenience_wrappers;
}
static Function CreateReturnTypeConvenienceWrapper(Function d)
private static Function CreateReturnTypeConvenienceWrapper(Function d)
{
var f = new Function(d);
f.ReturnType = new Type(f.Parameters.Last());
@ -1008,7 +1069,7 @@ namespace Bind
return f;
}
static Function CreateArrayReturnTypeConvenienceWrapper(Function d)
private static Function CreateArrayReturnTypeConvenienceWrapper(Function d)
{
var f = new Function(d);
var p_array = f.Parameters.Last();
@ -1025,7 +1086,7 @@ namespace Bind
return f;
}
List<Function> GetWrapper(IDictionary<WrapperTypes, List<Function>> dictionary, WrapperTypes key, Function raw)
private List<Function> GetWrapper(IDictionary<WrapperTypes, List<Function>> dictionary, WrapperTypes key, Function raw)
{
if (!dictionary.ContainsKey(key))
{
@ -1057,6 +1118,17 @@ namespace Bind
// Generics are handled in a second pass.
if ((parameter.WrapperType & WrapperTypes.GenericParameter) == 0)
{
if ((parameter.WrapperType & WrapperTypes.LegacyArrayParameter) != 0)
{
foreach (var wrapper in GetWrapper(wrappers, WrapperTypes.LegacyArrayParameter, func))
{
wrapper.Obsolete = "Use out overload instead";
var p = wrapper.Parameters[i];
p.Array++;
p.Pointer--;
}
}
if ((parameter.WrapperType & WrapperTypes.ArrayParameter) != 0)
{
foreach (var wrapper in GetWrapper(wrappers, WrapperTypes.ArrayParameter, func))
@ -1197,13 +1269,10 @@ namespace Bind
var p = wrapper.Parameters[i];
if ((p.WrapperType & WrapperTypes.StringParameter) != 0)
{
p.QualifiedType = "String";
if (p.Flow == FlowDirection.Out)
{
p.QualifiedType = "StringBuilder";
}
else
{
p.QualifiedType = "String";
p.Reference = true;
}
}
@ -1230,7 +1299,7 @@ namespace Bind
}
}
static void WrapReturnType(Function func)
private static void WrapReturnType(Function func)
{
if ((func.ReturnType.WrapperType & WrapperTypes.StringReturnType) != 0)
{
@ -1248,7 +1317,5 @@ namespace Bind
func.ReturnType.QualifiedType = "bool";
}
}
#endregion
}
}

View file

@ -1,4 +1,3 @@
#region License
//
// GL2Generator.cs
//
@ -25,15 +24,12 @@
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
// THE SOFTWARE.
//
#endregion
using System;
using System.IO;
namespace Bind.GL2
{
class GL2Generator : Generator
internal class GL2Generator : Generator
{
public GL2Generator(Settings settings)
: base(settings)

View file

@ -1,4 +1,3 @@
#region License
//
// The Open Toolkit Library License
//
@ -6,7 +5,7 @@
//
// 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
// 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:
@ -23,17 +22,12 @@
// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
// OTHER DEALINGS IN THE SOFTWARE.
//
#endregion
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text;
namespace Bind.GL2
{
class GL4Generator : Generator
internal class GL4Generator : Generator
{
public GL4Generator(Settings settings)
: base(settings)

View file

@ -1,27 +1,18 @@
#region --- License ---
/* Copyright (c) 2006, 2007 Stefanos Apostolopoulos
* See license.txt for license info
*/
#endregion
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.IO;
using System.Linq;
using System.Text.RegularExpressions;
using System.Xml.XPath;
using Bind.Structures;
using Delegate=Bind.Structures.Delegate;
using Enum=Bind.Structures.Enum;
using Type=Bind.Structures.Type;
namespace Bind.GL2
{
abstract class Generator : IBind
internal abstract class Generator : IBind
{
#region Fields
protected string glTypemap = "GL2/gl.tm";
protected string csTypemap = "csharp.tm";
protected string enumSpec = "GL2/enum.spec";
@ -56,14 +47,12 @@ namespace Bind.GL2
public Settings Settings { get; protected set; }
#endregion
#region Constructors
public Generator(Settings settings)
{
if (settings == null)
{
throw new ArgumentNullException("settings");
}
Settings = settings.Clone();
@ -86,11 +75,7 @@ namespace Bind.GL2
SpecReader = new XmlSpecReader(Settings);
}
#endregion
#region Private Members
IEnumerable<string> GetFiles(string path)
private IEnumerable<string> GetFiles(string path)
{
path = Path.Combine(Settings.InputPath, path);
if ((File.GetAttributes(path) & FileAttributes.Directory) != 0)
@ -107,10 +92,6 @@ namespace Bind.GL2
}
}
#endregion
#region IBind Members
public DelegateCollection Delegates { get; private set; }
public EnumCollection Enums { get; private set; }
public FunctionCollection Wrappers { get; private set; }
@ -146,7 +127,5 @@ namespace Bind.GL2
Wrappers = func_processor.Process(enum_processor, doc_processor,
Delegates, Enums, Profile, Version);
}
#endregion
}
}

View file

@ -14,7 +14,7 @@
<DefaultHTMLPageLayout>Grid</DefaultHTMLPageLayout>
<DefaultTargetSchema>IE50</DefaultTargetSchema>
<DelaySign>false</DelaySign>
<TargetFrameworkVersion>v3.5</TargetFrameworkVersion>
<TargetFrameworkVersion>v4.6.1</TargetFrameworkVersion>
<OutputType>Exe</OutputType>
<AppDesignerFolder>
</AppDesignerFolder>
@ -40,12 +40,16 @@
<IsWebBootstrapper>false</IsWebBootstrapper>
<UseApplicationTrust>false</UseApplicationTrust>
<BootstrapperEnabled>true</BootstrapperEnabled>
<Deterministic>true</Deterministic>
<RunCodeAnalysis>true</RunCodeAnalysis>
<CodeAnalysisRuleSet>..\..\stylecop.ruleset</CodeAnalysisRuleSet>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
<BaseAddress>285212672</BaseAddress>
<ConfigurationOverrideFile>
</ConfigurationOverrideFile>
<DefineConstants>DEBUG;TRACE;</DefineConstants>
<DocumentationFile>bin\Debug\Bind.xml</DocumentationFile>
<DebugSymbols>True</DebugSymbols>
<FileAlignment>4096</FileAlignment>
<Optimize>False</Optimize>
@ -53,7 +57,6 @@
<RegisterForComInterop>False</RegisterForComInterop>
<RemoveIntegerChecks>False</RemoveIntegerChecks>
<WarningLevel>4</WarningLevel>
<CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet>
<DebugType>full</DebugType>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
@ -61,13 +64,13 @@
<ConfigurationOverrideFile>
</ConfigurationOverrideFile>
<DefineConstants>TRACE;</DefineConstants>
<DocumentationFile>bin\Release\Bind.xml</DocumentationFile>
<FileAlignment>4096</FileAlignment>
<Optimize>True</Optimize>
<OutputPath>bin\Release\</OutputPath>
<RegisterForComInterop>False</RegisterForComInterop>
<RemoveIntegerChecks>False</RemoveIntegerChecks>
<WarningLevel>4</WarningLevel>
<CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet>
<DebugType>none</DebugType>
</PropertyGroup>
<PropertyGroup>
@ -211,7 +214,9 @@
</Compile>
<Compile Include="GL2\GL2Generator.cs" />
<Compile Include="Structures\Documentation.cs" />
<None Include="Specifications\GL2\overrides.xml" />
<None Include="Specifications\GL2\overrides.xml">
<SubType>Designer</SubType>
</None>
<None Include="Specifications\GL2\GL\4.5\ARB_direct_state_access.xml" />
<None Include="Specifications\GL2\ES\3.1\KHR_compute_shader.xml" />
<None Include="Specifications\GL2\ES\3.1\KHR_separate_shader_objects.xml" />
@ -238,6 +243,14 @@
<SubType>Designer</SubType>
</None>
</ItemGroup>
<ItemGroup>
<AdditionalFiles Include="$(SolutionDir)\stylecop.json">
<Link>stylecop.json</Link>
</AdditionalFiles>
<AdditionalFiles Include="$(SolutionDir)\stylecop.ruleset">
<Link>stylecop.ruleset</Link>
</AdditionalFiles>
</ItemGroup>
<Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" />
<PropertyGroup>
<PreBuildEvent>
@ -262,4 +275,12 @@
<ItemGroup>
<Folder Include="Specifications\Docs\" />
</ItemGroup>
<ItemGroup>
<Analyzer Include="..\..\packages\StyleCop.Analyzers\analyzers\dotnet\cs\StyleCop.Analyzers.CodeFixes.dll">
<Paket>True</Paket>
</Analyzer>
<Analyzer Include="..\..\packages\StyleCop.Analyzers\analyzers\dotnet\cs\StyleCop.Analyzers.dll">
<Paket>True</Paket>
</Analyzer>
</ItemGroup>
</Project>

View file

@ -1,15 +1,13 @@
#region --- License ---
/* Copyright (c) 2006, 2007 Stefanos Apostolopoulos
/* Copyright (c) 2006, 2007 Stefanos Apostolopoulos
* See license.txt for license info
*/
#endregion
using Bind.Structures;
using System.Collections.Generic;
namespace Bind
{
interface IBind
internal interface IBind
{
DelegateCollection Delegates { get; }
EnumCollection Enums { get; }

View file

@ -1,16 +1,13 @@
#region --- License ---
/* Copyright (c) 2006, 2007 Stefanos Apostolopoulos
/* Copyright (c) 2006, 2007 Stefanos Apostolopoulos
* See license.txt for license info
*/
#endregion
using System.Collections.Generic;
using System.IO;
using Bind.Structures;
namespace Bind
{
interface ISpecReader
internal interface ISpecReader
{
void ReadDelegates(string file, DelegateCollection delegates, string apiname, string apiversion);
void ReadEnums(string file, EnumCollection enums, string apiname, string apiversion);

View file

@ -1,14 +1,10 @@
#region --- License ---
/* Copyright (c) 2006, 2007 Stefanos Apostolopoulos
* See license.txt for license info
*/
#endregion
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.IO;
using System.Linq;
using System.Reflection;
using System.Security;
using System.Text.RegularExpressions;
@ -18,7 +14,7 @@ using Bind.GL2;
namespace Bind
{
enum GeneratorMode
internal enum GeneratorMode
{
All = 0,
Default = All,
@ -33,13 +29,13 @@ namespace Bind
CL10,
}
static class MainClass
internal static class MainClass
{
static GeneratorMode mode = GeneratorMode.Default;
private static GeneratorMode mode = GeneratorMode.Default;
static internal List<IBind> Generators = new List<IBind>();
static Settings Settings = new Settings();
private static Settings Settings = new Settings();
static void Main(string[] arguments)
private static void Main(string[] arguments)
{
Debug.Listeners.Clear();
Debug.Listeners.Add(new TextWriterTraceListener(Console.Out));
@ -52,7 +48,7 @@ namespace Bind
Assembly.GetExecutingAssembly().GetName().Version.ToString());
Console.WriteLine("For comments, bugs and suggestions visit http://github.com/opentk/opentk");
Console.WriteLine();
try
{
var split = new Regex(@"-\w+", RegexOptions.Compiled);
@ -101,7 +97,9 @@ namespace Bind
val = val.ToLower();
bool enable = !opt.StartsWith("-");
if (val.StartsWith("+") || val.StartsWith("-"))
{
val = val.Substring(1);
}
var settings = Settings.Legacy.None;
switch (val)
@ -172,11 +170,11 @@ namespace Bind
case GeneratorMode.ES10:
Generators.Add(new ESGenerator(Settings));
break;
case GeneratorMode.ES11:
Generators.Add(new ESGenerator(Settings));
break;
case GeneratorMode.ES20:
Generators.Add(new ES2Generator(Settings));
break;
@ -192,7 +190,7 @@ namespace Bind
case GeneratorMode.CL10:
Generators.Add(new CLGenerator(Settings));
break;
default:
Console.WriteLine("Please specify a generator mode (use '-mode:gl2/gl4/es10/es11/es20/es30')");
return;
@ -212,7 +210,7 @@ namespace Bind
Console.WriteLine();
Console.WriteLine("Bindings generated in {0} seconds.", ticks / (double)10000000.0);
}
Console.WriteLine();
if (Debugger.IsAttached)
{
@ -243,7 +241,7 @@ namespace Bind
case "gl3":
case "gl4":
mode = GeneratorMode.GL4;
mode = GeneratorMode.GL4;
break;
case "es10":

View file

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

View file

@ -1,8 +1,6 @@
#region --- License ---
/* Copyright (c) 2006, 2007 Stefanos Apostolopoulos
* See license.txt for license info
*/
#endregion
using System;
using System.Collections.Generic;
@ -13,18 +11,18 @@ using System.Runtime.Serialization.Formatters.Binary;
namespace Bind
{
[Serializable]
class Settings
internal class Settings
{
public Settings()
{
OverridesFiles = new List<string>();
}
public string DefaultInputPath = "../../../Source/Bind/Specifications";
public string DefaultOutputPath = "../../../Source/OpenTK/Graphics/OpenGL";
public string DefaultInputPath = "src/Generator.Bind/Specifications";
public string DefaultOutputPath = "src/OpenTK/Graphics/OpenGL";
public string DefaultOutputNamespace = "OpenTK.Graphics.OpenGL";
public string DefaultDocPath = "../../../Source/Bind/Specifications/Docs";
public string DefaultFallbackDocPath = "../../../Source/Bind/Specifications/Docs/GL";
public string DefaultDocPath = "src/Generator.Bind/Specifications/Docs";
public string DefaultFallbackDocPath = "src/Generator.Bind/Specifications/Docs/GL";
public string DefaultLicenseFile = "License.txt";
public string DefaultLanguageTypeMapFile = "csharp.tm";
public string DefaultKeywordEscapeCharacter = "@";
@ -34,10 +32,11 @@ namespace Bind
public string DefaultWrappersFile = "GL.cs";
public Legacy DefaultCompatibility = Legacy.NoDropMultipleTokens;
string inputPath, outputPath, outputNamespace, docPath, fallbackDocPath, licenseFile,
private string inputPath, outputPath, outputNamespace, docPath, fallbackDocPath, licenseFile,
languageTypeMapFile, keywordEscapeCharacter, importsFile, delegatesFile, enumsFile,
wrappersFile;
Nullable<Legacy> compatibility;
private Nullable<Legacy> compatibility;
public string InputPath { get { return inputPath ?? DefaultInputPath; } set { inputPath = value; } }
public string OutputPath { get { return outputPath ?? DefaultOutputPath; } set { outputPath = value; } }
public string OutputNamespace { get { return outputNamespace ?? DefaultOutputNamespace; } set { outputNamespace = value; } }
@ -74,8 +73,8 @@ namespace Bind
normalEnumsClassOverride;
}
}
public string AuxEnumsClass
public string AuxEnumsClass
{
get { return GLClass + NamespaceSeparator + NestedEnumsClass; }
}
@ -85,9 +84,13 @@ namespace Bind
get
{
if ((Compatibility & Legacy.NestedEnums) != Legacy.None)
{
return OutputNamespace + NamespaceSeparator + OutputClass + NamespaceSeparator + NestedEnumsClass;
}
else
{
return String.IsNullOrEmpty(EnumsNamespace) ? OutputNamespace : OutputNamespace + NamespaceSeparator + EnumsNamespace;
}
}
}
@ -96,14 +99,18 @@ namespace Bind
get
{
if ((Compatibility & Legacy.NestedEnums) != Legacy.None)
{
return OutputNamespace + NamespaceSeparator + GLClass + NamespaceSeparator + NestedEnumsClass;
}
else
{
return OutputNamespace + NamespaceSeparator + EnumsNamespace;
}
}
}
// New enums namespace (don't use a nested class).
public string EnumsNamespace = null;// = "Enums";
public string EnumsNamespace = null; // = "Enums";
public string DelegatesClass = "Delegates";
public string ImportsClass = "Core";
@ -198,11 +205,19 @@ namespace Bind
/// <summary>True if multiple tokens should be dropped (e.g. FooARB, FooEXT and FooSGI).</summary>
public bool DropMultipleTokens
{
get { return (Compatibility & Legacy.NoDropMultipleTokens) == Legacy.None; }
set { if (value) Compatibility |= Legacy.NoDropMultipleTokens; else Compatibility &= ~Legacy.NoDropMultipleTokens; }
{
get { return (Compatibility & Legacy.NoDropMultipleTokens) == Legacy.None; }
set { if (value)
{
Compatibility |= Legacy.NoDropMultipleTokens;
}
else
{
Compatibility &= ~Legacy.NoDropMultipleTokens;
}
}
}
public string WindowsGDI = "OpenTK.Platform.Windows.API";
public Settings Clone()

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

View file

@ -5,7 +5,7 @@
//
// 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
// 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:

View file

@ -111,6 +111,14 @@ GLfixed, int
GLeglImageOES, IntPtr
# External egl buffer type added in OpenGL 4.6
GLeglClientBufferEXT, IntPtr
# nVidia vulkan entry point, added by NV_draw_vulkan_image extension
GLVULKANPROCNV, IntPtr
# OpenCL types.
_cl_context, IntPtr
_cl_event, IntPtr

View file

@ -1,40 +1,25 @@
#region --- License ---
/* Copyright (c) 2006, 2007 Stefanos Apostolopoulos
* See license.txt for license info
*/
#endregion
using System;
using System.Diagnostics;
using System.Globalization;
using System.Linq;
using System.Text;
namespace Bind.Structures
{
/// <summary>
/// Represents an opengl constant in C# format. Both the constant name and value
/// can be retrieved or set. The value can be either a number, another constant
/// or an alias to a constant
/// or an alias to a constant
/// </summary>
class Constant : IComparable<Constant>
internal class Constant : IComparable<Constant>
{
#region PreviousName
string original_name;
// Gets the name prior to translation.
public string OriginalName
{
get { return original_name; }
private set { original_name = value; }
}
public string OriginalName { get; private set; }
#endregion
#region public string Name
string _name;
private string _name;
/// <summary>
/// Gets or sets the name of the opengl constant (eg. GL_LINES).
@ -43,23 +28,23 @@ namespace Bind.Structures
public string Name
{
get { return _name; }
set
set
{
if (String.IsNullOrEmpty(value))
{
throw new ArgumentNullException("value");
}
if (OriginalName == null)
{
OriginalName = _name;
}
_name = value;
}
}
#endregion
#region public string Value
string _value;
private string _value;
/// <summary>
/// Gets or sets the value of the opengl constant (eg. 0x00000001).
@ -73,34 +58,19 @@ namespace Bind.Structures
set
{
if (String.IsNullOrEmpty(value))
{
throw new ArgumentNullException("value");
}
_value = value;
}
}
#endregion
#region public string Reference
string _reference;
/// <summary>
/// Gets or sets a string indicating the OpenGL enum reference by this constant.
/// Can be null.
/// </summary>
public string Reference
{
get { return _reference; }
set
{
_reference = value;
}
}
#endregion
#region public bool Unchecked
public string Reference { get; set; }
public bool Unchecked
{
@ -111,14 +81,10 @@ namespace Bind.Structures
string test = Value;
return UInt64.TryParse(test.ToLower().Replace("0x", String.Empty),
NumberStyles.AllowHexSpecifier, null, out number) &&
number > Int32.MaxValue;
number > Int32.MaxValue;
}
}
#endregion
#region Constructors
/// <summary>
/// Creates an empty Constant.
/// </summary>
@ -137,21 +103,22 @@ namespace Bind.Structures
Value = value;
}
#endregion
/// <summary>
/// Replces the Value of the given constant with the value referenced by the [c.Reference, c.Value] pair.
/// </summary>
/// <param name="c">The Constant to translate</param>
/// <param name="enums">The list of enums to check.</param>
/// <param name="auxEnums">The list of auxilliary enums to check.</param>
/// <returns>True if the reference was found; false otherwise.</returns>
public static bool TranslateConstantWithReference(Constant c, EnumCollection enums)
{
if (c == null)
{
throw new ArgumentNullException("c");
}
if (enums == null)
{
throw new ArgumentNullException("enums");
}
if (!String.IsNullOrEmpty(c.Reference))
{
@ -192,8 +159,6 @@ namespace Bind.Structures
return true;
}
#region ToString
public override string ToString()
{
return
@ -204,18 +169,14 @@ namespace Bind.Structures
Value);
}
#endregion
#region IComparable <Constant>Members
public int CompareTo(Constant other)
{
int ret = Value.CompareTo(other.Value);
if (ret == 0)
{
return Name.CompareTo(other.Name);
}
return ret;
}
#endregion
}
}

View file

@ -1,17 +1,12 @@
#region --- License ---
/* Copyright (c) 2006, 2007 Stefanos Apostolopoulos
* See license.txt for license info
*/
#endregion
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.IO;
using System.Linq;
using System.Text;
using System.Text.RegularExpressions;
using System.Xml.XPath;
namespace Bind.Structures
{
@ -19,22 +14,20 @@ namespace Bind.Structures
/// Represents an opengl function.
/// The return value, function name, function parameters and opengl version can be retrieved or set.
/// </summary>
class Delegate : IComparable<Delegate>, IEquatable<Delegate>
internal class Delegate : IComparable<Delegate>, IEquatable<Delegate>
{
//internal static DelegateCollection Delegates;
bool? cls_compliance_overriden;
private bool? cls_compliance_overriden;
protected static Regex endings = new Regex(@"((((d|f|fi)|u?[isb])_?v?)|v)", RegexOptions.Compiled | RegexOptions.RightToLeft);
protected static Regex endingsNotToTrim = new Regex("(ib|[tdrey]s|[eE]n[vd]|bled|Flag|Tess|Status|Pixels|Instanced|Indexed|Varyings|Boolean|IDs)", RegexOptions.Compiled | RegexOptions.RightToLeft);
// Add a trailing v to functions matching this regex. Used to differntiate between overloads taking both
// a 'type' and a 'ref type' (such overloads are not CLS Compliant).
// The default Regex matches no functions. Create a new Regex in Bind.Generator classes to override the default behavior.
// The default Regex matches no functions. Create a new Regex in Bind.Generator classes to override the default behavior.
internal static Regex endingsAddV = new Regex("^0", RegexOptions.Compiled);
#region --- Constructors ---
public Delegate()
{
Parameters = new ParameterCollection();
@ -57,12 +50,6 @@ namespace Bind.Structures
Slot = d.Slot;
}
#endregion
#region --- Properties ---
#region public bool CLSCompliant
/// <summary>
/// Gets the CLSCompliant property. True if the delegate is not CLSCompliant.
/// </summary>
@ -71,18 +58,26 @@ namespace Bind.Structures
get
{
if (cls_compliance_overriden != null)
{
return (bool)cls_compliance_overriden;
}
if (Unsafe)
{
return false;
}
if (!ReturnType.CLSCompliant)
{
return false;
}
foreach (Parameter p in Parameters)
{
if (!p.CLSCompliant)
{
return false;
}
}
return true;
}
@ -92,21 +87,7 @@ namespace Bind.Structures
}
}
#endregion
#region public string Category
private string _category;
public string Category
{
get { return _category; }
set { _category = value; }
}
#endregion
#region public bool NeedsWrapper
public string Category { get; set; }
/// <summary>
/// Gets a value that indicates whether this function needs to be wrapped with a Marshaling function.
@ -120,22 +101,22 @@ namespace Bind.Structures
// TODO: Add special cases for (Get)ShaderSource.
if (ReturnType.WrapperType != WrapperTypes.None)
{
return true;
}
foreach (Parameter p in Parameters)
{
if (p.WrapperType != WrapperTypes.None)
{
return true;
}
}
return false;
}
}
#endregion
#region public virtual bool Unsafe
/// <summary>
/// True if the delegate must be declared as 'unsafe'.
/// </summary>
@ -149,7 +130,9 @@ namespace Bind.Structures
// return false;
if (ReturnType.Pointer != 0)
{
return true;
}
foreach (Parameter p in Parameters)
{
@ -163,28 +146,12 @@ namespace Bind.Structures
}
}
#endregion
#region public Parameter ReturnType
Type _return_type = new Type();
/// <summary>
/// Gets or sets the return value of the opengl function.
/// </summary>
public Type ReturnType
{
get { return _return_type; }
set
{
_return_type = value;
}
}
public Type ReturnType { get; set; } = new Type();
#endregion
#region public virtual string Name
string _name;
private string _name;
/// <summary>
/// Gets or sets the name of the opengl function.
/// </summary>
@ -200,36 +167,12 @@ namespace Bind.Structures
}
}
#endregion
#region public ParameterCollection Parameters
ParameterCollection _parameters;
public ParameterCollection Parameters
{
get { return _parameters; }
set { _parameters = value; }
}
#endregion
#region public string Version
string _version;
public ParameterCollection Parameters { get; set; }
/// <summary>
/// Defines the opengl version that introduced this function.
/// </summary>
public string Version
{
get { return _version; }
set { _version = value; }
}
#endregion
#region public bool Extension
public string Version { get; set; }
public string Extension
{
@ -237,8 +180,6 @@ namespace Bind.Structures
set;
}
#endregion
public bool Deprecated { get; set; }
public string DeprecatedVersion { get; set; }
public string EntryPoint { get; set; }
@ -247,8 +188,6 @@ namespace Bind.Structures
// Slot index in the address table
public int Slot { get; set; }
#endregion
// This method should only be used for debugging purposes, not for code generation!
// Returns a string representing the full delegate declaration without decorations.
// (ie "(unsafe) void delegate glXxxYyy(int a, float b, IntPtr c)"
@ -266,22 +205,20 @@ namespace Bind.Structures
return sb.ToString();
}
#region IComparable<Delegate> Members
public int CompareTo(Delegate other)
{
int ret = Name.CompareTo(other.Name);
if (ret == 0)
{
ret = Parameters.CompareTo(other.Parameters);
}
if (ret == 0)
{
ret = ReturnType.CompareTo(other.ReturnType);
}
return ret;
}
#endregion
#region IEquatable<Delegate> Members
public bool Equals(Delegate other)
{
return
@ -289,15 +226,11 @@ namespace Bind.Structures
Parameters.Equals(other.Parameters) &&
ReturnType.Equals(other.ReturnType);
}
#endregion
}
#region DelegateCollection
class DelegateCollection : IDictionary<string, List<Delegate>>
internal class DelegateCollection : IDictionary<string, List<Delegate>>
{
readonly SortedDictionary<string, List<Delegate>> Delegates =
private readonly SortedDictionary<string, List<Delegate>> Delegates =
new SortedDictionary<string, List<Delegate>>();
public void Add(Delegate d)
@ -348,8 +281,6 @@ namespace Bind.Structures
}
}
#region IDictionary Members
public void Add(string key, List<Delegate> value)
{
Delegates.Add(key, value.ToList());
@ -398,10 +329,6 @@ namespace Bind.Structures
}
}
#endregion
#region ICollection implementation
public void Add(KeyValuePair<string, List<Delegate>> item)
{
Delegates.Add(item.Key, item.Value.ToList());
@ -443,26 +370,14 @@ namespace Bind.Structures
}
}
#endregion
#region IEnumerable implementation
public IEnumerator<KeyValuePair<string, List<Delegate>>> GetEnumerator()
{
return Delegates.GetEnumerator();
}
#endregion
#region IEnumerable implementation
System.Collections.IEnumerator System.Collections.IEnumerable.GetEnumerator()
{
return Delegates.GetEnumerator();
}
#endregion
}
#endregion
}

View file

@ -1,5 +1,4 @@
#region License
//
//
// Documentation.cs
//
// Author:
@ -25,20 +24,18 @@
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
// THE SOFTWARE.
//
#endregion
using System;
using System.Collections.Generic;
namespace Bind.Structures
{
class Documentation
internal class Documentation
{
public string Summary { get; set; }
public List<DocumentationParameter> Parameters { get; set; }
}
class DocumentationParameter
internal class DocumentationParameter
{
public string Name { get; set; }
public string Documentation { get; set; }

View file

@ -1,23 +1,16 @@
#region --- License ---
/* Copyright (c) 2006, 2007 Stefanos Apostolopoulos
* See license.txt for license info
*/
#endregion
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text;
using System.Xml.XPath;
namespace Bind.Structures
{
#region class Enum
class Enum
internal class Enum
{
string _name, _type;
private string _name, _type;
public Enum()
{
@ -43,7 +36,7 @@ namespace Bind.Structures
set { _type = value; }
}
SortedDictionary<string, Constant> _constant_collection = new SortedDictionary<string, Constant>();
private SortedDictionary<string, Constant> _constant_collection = new SortedDictionary<string, Constant>();
public IDictionary<string, Constant> ConstantCollection
{
@ -51,8 +44,10 @@ namespace Bind.Structures
set
{
if (value == null)
{
throw new ArgumentNullException("value");
}
_constant_collection.Clear();
foreach (var item in value)
{
@ -81,46 +76,50 @@ namespace Bind.Structures
public bool CLSCompliant { get; set; }
}
#endregion
#region class EnumCollection
class EnumCollection : IDictionary<string, Enum>
internal class EnumCollection : IDictionary<string, Enum>
{
SortedDictionary<string, Enum> Enumerations = new SortedDictionary<string, Enum>();
private SortedDictionary<string, Enum> Enumerations = new SortedDictionary<string, Enum>();
// Return -1 for ext1, 1 for ext2 or 0 if no preference.
int OrderOfPreference(string ext1, string ext2)
private int OrderOfPreference(string ext1, string ext2)
{
// If one is empty and the other not, prefer the empty one (empty == core)
// Otherwise check for Arb and Ext. To reuse the logic for the
// empty check, let's try to remove first Arb, then Ext from the strings.
int ret = PreferEmpty(ext1, ext2);
if (ret != 0)
{
return ret;
}
ext1 = ext1.Replace("Arb", ""); ext2 = ext2.Replace("Arb", "");
ret = PreferEmpty(ext1, ext2);
if (ret != 0)
{
return ret;
}
ext1 = ext1.Replace("Ext", ""); ext2 = ext2.Replace("Ext", "");
return PreferEmpty(ext1, ext2);
}
// Prefer the empty string over the non-empty.
int PreferEmpty(string ext1, string ext2)
private int PreferEmpty(string ext1, string ext2)
{
if (String.IsNullOrEmpty(ext1) && !String.IsNullOrEmpty(ext2))
{
return -1;
}
else if (String.IsNullOrEmpty(ext2) && !String.IsNullOrEmpty(ext1))
{
return 1;
}
else
{
return 0;
}
}
#region Public Members
public void Add(Enum e)
{
Add(e.Name, e);
@ -134,10 +133,6 @@ namespace Bind.Structures
}
}
#endregion
#region IDictionary<string, Enum> Members
public void Add(string key, Enum value)
{
if (ContainsKey(key))
@ -235,9 +230,5 @@ namespace Bind.Structures
{
return Enumerations.GetEnumerator();
}
#endregion
}
#endregion
}

View file

@ -1,4 +1,3 @@
#region License
//
// The Open Toolkit Library License
//
@ -6,7 +5,7 @@
//
// 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
// 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:
@ -23,18 +22,28 @@
// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
// OTHER DEALINGS IN THE SOFTWARE.
//
#endregion
namespace Bind.Structures
{
/// <summary>
/// Enumarates the possible flows of a parameter (ie. is this parameter
/// used as input or as output?)
/// </summary>
public enum FlowDirection
{
/// <summary>
/// Enumarates the possible flows of a parameter (ie. is this parameter
/// used as input or as output?)
/// No defined flow.
/// </summary>
public enum FlowDirection
{
Undefined = 0,
In,
Out
}
Undefined = 0,
/// <summary>
/// Input parameter.
/// </summary>
In,
/// <summary>
/// Output parameter, typically decorated with the out keyword.
/// </summary>
Out
}
}

View file

@ -1,8 +1,6 @@
#region --- License ---
/* Copyright (c) 2006, 2007 Stefanos Apostolopoulos
/* Copyright (c) 2006, 2007 Stefanos Apostolopoulos
* See license.txt for license info
*/
#endregion
using System;
using System.Collections.Generic;
@ -12,16 +10,8 @@ using System.Text.RegularExpressions;
namespace Bind.Structures
{
class Function : Delegate, IEquatable<Function>, IComparable<Function>
internal class Function : Delegate, IEquatable<Function>, IComparable<Function>
{
#region Fields
Delegate wrapped_delegate;
#endregion
#region --- Constructors ---
public Function(Delegate d)
: base(d)
{
@ -42,19 +32,7 @@ namespace Bind.Structures
Body.AddRange(f.Body);
}
#endregion
#region public Delegate WrappedDelegate
public Delegate WrappedDelegate
{
get { return wrapped_delegate; }
set { wrapped_delegate = value; }
}
#endregion
#region public void TurnVoidPointersToIntPtr()
public Delegate WrappedDelegate { get; set; }
public void TurnVoidPointersToIntPtr()
{
@ -68,10 +46,6 @@ namespace Bind.Structures
}
}
#endregion
#region public override bool Unsafe
public override bool Unsafe
{
get
@ -80,34 +54,12 @@ namespace Bind.Structures
}
}
#endregion
#region public FunctionBody Body
FunctionBody _body;
public FunctionBody Body
{
get { return _body; }
set { _body = value; }
}
#endregion
#region public string TrimmedName
public FunctionBody Body { get; set; }
public string TrimmedName { get; set; }
#endregion
#region Documentation
public Documentation Documentation { get; set; }
#endregion
#region ToString
public override string ToString()
{
return String.Format("{0} {1}{2}",
@ -116,10 +68,6 @@ namespace Bind.Structures
Parameters);
}
#endregion
#region IEquatable<Function> Members
public bool Equals(Function other)
{
bool result =
@ -129,31 +77,38 @@ namespace Bind.Structures
return result;
}
#endregion
#region IComparable<Function> Members
public int CompareTo(Function other)
{
int ret = Name.CompareTo(other.Name);
if (ret == 0)
{
ret = Parameters.CompareTo(other.Parameters);
}
if (ret == 0)
{
ret = ReturnType.CompareTo(other.ReturnType);
}
return ret;
}
#endregion
}
#region class FunctionBody : List<string>
/// <summary>
/// The <see cref="FunctionBody"/> class acts as a wrapper around a block of source code that makes up the body
/// of a function.
/// </summary>
public class FunctionBody : List<string>
{
/// <summary>
/// Initializes an empty <see cref="FunctionBody"/>.
/// </summary>
public FunctionBody()
{
}
/// <summary>
/// Initializes a <see cref="FunctionBody"/> from an existing FunctionBody.
/// </summary>
/// <param name="fb">The body to copy from.</param>
public FunctionBody(FunctionBody fb)
{
foreach (string s in fb)
@ -164,24 +119,42 @@ namespace Bind.Structures
private string indent = "";
/// <summary>
/// Indents this <see cref="FunctionBody"/> another level.
/// </summary>
public void Indent()
{
indent += " ";
}
/// <summary>
/// Removes a level of indentation from this <see cref="FunctionBody"/>.
/// </summary>
public void Unindent()
{
if (indent.Length > 4)
{
indent = indent.Substring(4);
}
else
{
indent = String.Empty;
}
}
/// <summary>
/// Adds a line of source code to the body at the current indentation level.
/// </summary>
/// <param name="s">The line to add.</param>
new public void Add(string s)
{
base.Add(indent + s.TrimEnd('\r', '\n'));
}
/// <summary>
/// Adds a range of source code lines to the body at the current indentation level.
/// </summary>
/// <param name="collection"></param>
new public void AddRange(IEnumerable<string> collection)
{
foreach (string t in collection)
@ -190,10 +163,16 @@ namespace Bind.Structures
}
}
/// <summary>
/// Builds the contents of the function body into a string and encloses it with braces.
/// </summary>
/// <returns>The body, enclosed in braces.</returns>
public override string ToString()
{
if (Count == 0)
{
return String.Empty;
}
StringBuilder sb = new StringBuilder(Count);
@ -208,15 +187,11 @@ namespace Bind.Structures
}
}
#endregion
#region class FunctionCollection : SortedDictionary<string, List<Function>>
class FunctionCollection : SortedDictionary<string, List<Function>>
internal class FunctionCollection : SortedDictionary<string, List<Function>>
{
Regex unsignedFunctions = new Regex(@".+(u[dfisb]v?)", RegexOptions.Compiled);
private Regex unsignedFunctions = new Regex(@".+(u[dfisb]v?)", RegexOptions.Compiled);
void Add(Function f)
private void Add(Function f)
{
if (!ContainsKey(f.Extension))
{
@ -276,6 +251,4 @@ namespace Bind.Structures
}
}
}
#endregion
}

View file

@ -1,31 +1,25 @@
#region --- License ---
/* Copyright (c) 2006, 2007 Stefanos Apostolopoulos
* See license.txt for license info
*/
#endregion
using System;
using System.Collections.Generic;
using System.Runtime.InteropServices;
using System.Text;
using System.Xml.XPath;
namespace Bind.Structures
{
/// <summary>
/// Represents a single parameter of an opengl function.
/// </summary>
class Parameter : Type, IComparable<Parameter>, IEquatable<Parameter>
internal class Parameter : Type, IComparable<Parameter>, IEquatable<Parameter>
{
string cache;
#region Constructors
private string cache;
/// <summary>
/// Creates a new Parameter without type and name.
/// </summary>
public Parameter()
:base()
{
}
@ -37,7 +31,9 @@ namespace Bind.Structures
: base(p)
{
if (p == null)
{
return;
}
Name = p.Name;
Unchecked = p.Unchecked;
@ -49,10 +45,6 @@ namespace Bind.Structures
//this.rebuild = false;
}
#endregion
#region RawName
/// <summary>
/// Gets or sets the raw name of the parameter.
/// </summary>
@ -62,10 +54,6 @@ namespace Bind.Structures
private set;
}
#endregion
#region Name
/// <summary>
/// Gets the name of the parameter. If the name matches a keyword of the current language,
/// then it is escaped with <see cref="Settings.KeywordEscapeCharacter"/>.
@ -90,11 +78,7 @@ namespace Bind.Structures
}
}
#endregion
#region UnmanagedType
UnmanagedType _unmanaged_type;
private UnmanagedType _unmanaged_type;
/// <summary>
/// Gets or sets the name of the parameter.
/// </summary>
@ -110,11 +94,7 @@ namespace Bind.Structures
}
}
#endregion
#region public FlowDirection Flow
FlowDirection _flow;
private FlowDirection _flow;
/// <summary>
/// Gets or sets the flow of the parameter.
@ -131,10 +111,6 @@ namespace Bind.Structures
}
}
#endregion
#region public bool NeedsPin
public bool NeedsPin
{
get
@ -144,10 +120,6 @@ namespace Bind.Structures
}
}
#endregion
#region public bool Unchecked
private bool _unchecked;
public bool Unchecked
@ -162,20 +134,7 @@ namespace Bind.Structures
}
}
#endregion
#region public bool Generic
bool generic;
public bool Generic
{
get { return generic; }
set { generic = value; }
}
#endregion
#region public bool DiffersOnlyOnReference
public bool Generic { get; set; }
// Returns true if this parameter differs only on reference compared to another parameter, i.e:
// returns true for 'int' & 'ref int'
@ -191,20 +150,7 @@ namespace Bind.Structures
other.Reference && !(Reference || Array > 0 || Pointer != 0));
}
#endregion
#region public string ComputeSize
string computeSize;
public string ComputeSize
{
get { return computeSize; }
set { computeSize = value; }
}
#endregion
#region Static Members
public string ComputeSize { get; set; }
// Returns the FlowDirection that matches the specified string
// ("out" or "in", otherwise undefined).
@ -212,37 +158,28 @@ namespace Bind.Structures
{
return direction == "out" ? FlowDirection.Out : direction == "in" ? FlowDirection.In : FlowDirection.Undefined;
}
#endregion
#region IComparable<Parameter> Members
public int CompareTo(Parameter other)
{
int result = base.CompareTo(other);
if (result == 0)
{
result = Name.CompareTo(other.Name);
}
return result;
}
#endregion
#region ToString
public override string ToString()
{
return String.Format("{2}{0} {1}",
base.ToString(),
Name,
Reference ?
Reference ?
Flow == FlowDirection.Out ? "out " : "ref " :
String.Empty);
}
#endregion
#region IEquatable<Parameter> Members
public bool Equals(Parameter other)
{
bool result =
@ -251,26 +188,22 @@ namespace Bind.Structures
return result;
}
#endregion
}
/// <summary>
/// Holds the parameter list of an opengl function.
/// </summary>
class ParameterCollection : IList<Parameter>, IComparable<ParameterCollection>, IEquatable<ParameterCollection>
internal class ParameterCollection : IList<Parameter>, IComparable<ParameterCollection>, IEquatable<ParameterCollection>
{
readonly List<Parameter> Parameters = new List<Parameter>();
private readonly List<Parameter> Parameters = new List<Parameter>();
bool hasPointerParameters;
bool hasReferenceParameters;
bool hasUnsignedParameters;
bool hasGenericParameters;
private bool hasPointerParameters;
private bool hasReferenceParameters;
private bool hasUnsignedParameters;
private bool hasGenericParameters;
public bool Rebuild { get; set; }
Settings Settings { get; set; }
#region Constructors
private Settings Settings { get; set; }
public ParameterCollection()
{
@ -287,23 +220,17 @@ namespace Bind.Structures
public ParameterCollection(IEnumerable<Parameter> parameters)
{
foreach (Parameter p in parameters)
{
Add(new Parameter(p));
}
}
#endregion
#region BuildCache
void BuildCache()
private void BuildCache()
{
BuildReferenceAndPointerParametersCache();
Rebuild = false;
}
#endregion
#region public bool HasPointerParameters
public bool HasPointerParameters
{
get
@ -317,10 +244,6 @@ namespace Bind.Structures
}
}
#endregion
#region public bool HasReferenceParameters
public bool HasReferenceParameters
{
get
@ -334,10 +257,6 @@ namespace Bind.Structures
}
}
#endregion
#region public bool HasUnsignedParameters
public bool HasUnsignedParameters
{
get
@ -351,10 +270,6 @@ namespace Bind.Structures
}
}
#endregion
#region public bool HasGenericParameters
public bool HasGenericParameters
{
get
@ -367,33 +282,34 @@ namespace Bind.Structures
return hasGenericParameters;
}
}
#endregion
#region void BuildReferenceAndPointerParametersCache()
void BuildReferenceAndPointerParametersCache()
private void BuildReferenceAndPointerParametersCache()
{
foreach (Parameter p in this)
{
if (p.Pointer != 0 || p.CurrentType.Contains("IntPtr"))
{
hasPointerParameters = true;
}
if (p.Reference)
{
hasReferenceParameters = true;
}
if (p.Unsigned)
{
hasUnsignedParameters = true;
}
if (p.Generic)
{
hasGenericParameters = true;
}
}
}
#endregion
#region ToString
// Only use for debugging, not for code generation!
public override string ToString()
{
@ -409,27 +325,25 @@ namespace Bind.Structures
sb.Replace(", ", ")", sb.Length - 2, 2);
}
else
{
sb.Append(")");
}
return sb.ToString();
}
#endregion
#region ContainsType
public bool ContainsType(string type)
{
foreach (Parameter p in this)
{
if (p.CurrentType == type)
{
return true;
}
}
return false;
}
#endregion
#region IList<Parameter> Members
public void Add(Parameter p)
{
Parameters.Add(p);
@ -511,10 +425,6 @@ namespace Bind.Structures
}
}
#endregion
#region IComparable<ParameterCollection> Members
public int CompareTo(ParameterCollection other)
{
if (Count < other.Count)
@ -531,20 +441,20 @@ namespace Bind.Structures
{
int result = this[i].CompareTo(other[i]);
if (result != 0)
{
return result;
}
}
return 0;
}
}
#endregion
#region IEquatable<ParameterCollection> Members
public bool Equals(ParameterCollection other)
{
if (Count != other.Count)
{
return false;
}
bool result = true;
for (int i = 0; i < Count && result; i++)
@ -553,7 +463,5 @@ namespace Bind.Structures
}
return result;
}
#endregion
}
}

View file

@ -1,23 +1,14 @@
#region --- License ---
/* Copyright (c) 2006, 2007 Stefanos Apostolopoulos
/* Copyright (c) 2006, 2007 Stefanos Apostolopoulos
* See license.txt for license info
*/
#endregion
using System;
using System.Collections.Generic;
using System.IO;
using System.Text;
using System.Xml.XPath;
namespace Bind.Structures
{
class Type : IComparable<Type>, IEquatable<Type>
internal class Type : IComparable<Type>, IEquatable<Type>
{
string current_qualifier = String.Empty;
string previous_qualifier = String.Empty;
#region --- Constructors ---
private string current_qualifier = String.Empty;
public Type()
{
@ -39,25 +30,13 @@ namespace Bind.Structures
}
}
#endregion
#region Private Members
string CurrentQualifier
private string CurrentQualifier
{
get { return current_qualifier; }
set { PreviousQualifier = CurrentQualifier; current_qualifier = value; }
}
string PreviousQualifier
{
get { return previous_qualifier; }
set { previous_qualifier = value; }
}
#endregion
#region Public Members
private string PreviousQualifier { get; set; } = String.Empty;
public string QualifiedType
{
@ -71,7 +50,9 @@ namespace Bind.Structures
set
{
if (String.IsNullOrEmpty(value))
{
throw new ArgumentNullException();
}
int qualifier_end = value.LastIndexOf('.');
if (qualifier_end > -1)
@ -87,9 +68,7 @@ namespace Bind.Structures
}
}
#region public string CurrentType
string type;
private string type;
/// <summary>
/// Gets the type of the parameter.
/// </summary>
@ -102,12 +81,18 @@ namespace Bind.Structures
set
{
if (String.IsNullOrEmpty(value))
{
throw new ArgumentException();
}
if (!String.IsNullOrEmpty(type))
{
PreviousType = type;
}
if (!String.IsNullOrEmpty(value))
{
type = value.Trim();
}
while (type.EndsWith("*"))
{
@ -117,35 +102,11 @@ namespace Bind.Structures
}
}
#endregion
public string PreviousType { get; private set; }
#region public string PreviousType
public bool Reference { get; set; }
private string _previous_type;
public string PreviousType
{
get { return _previous_type; }
private set { _previous_type = value; }
}
#endregion
#region public bool Reference
bool reference;
public bool Reference
{
get { return reference; }
set { reference = value; }
}
#endregion
#region public int Array
int array;
private int array;
public int Array
{
@ -153,11 +114,7 @@ namespace Bind.Structures
set { array = value > 0 ? value : 0; }
}
#endregion
#region public int ElementCount
int element_count;
private int element_count;
// If the type is an array and ElementCount > 0, then ElemenCount defines the expected array length.
public int ElementCount
@ -166,11 +123,7 @@ namespace Bind.Structures
set { element_count = value > 0 ? value : 0; }
}
#endregion
#region public int Pointer
int pointer;
private int pointer;
public int Pointer
{
@ -178,12 +131,9 @@ namespace Bind.Structures
set { pointer = value > 0 ? value : 0; }
}
#endregion
// Set to true if parameter is an enum.
public bool IsEnum { get; set; }
#region public bool CLSCompliant
public bool CLSCompliant
{
@ -238,10 +188,6 @@ namespace Bind.Structures
}
}
#endregion
#region public bool Unsigned
public bool Unsigned
{
get
@ -250,23 +196,9 @@ namespace Bind.Structures
}
}
#endregion
public WrapperTypes WrapperType { get; set; } = WrapperTypes.None;
#region public WrapperTypes WrapperType
private WrapperTypes _wrapper_type = WrapperTypes.None;
public WrapperTypes WrapperType
{
get { return _wrapper_type; }
set { _wrapper_type = value; }
}
#endregion
#region public override string ToString()
static readonly string[] PointerLevels =
private static readonly string[] PointerLevels =
{
"",
"*",
@ -275,7 +207,7 @@ namespace Bind.Structures
"****"
};
static readonly string[] ArrayLevels =
private static readonly string[] ArrayLevels =
{
"",
"[]",
@ -292,12 +224,6 @@ namespace Bind.Structures
ArrayLevels[Array]);
}
#endregion
#endregion
#region IComparable<Type> Members
public int CompareTo(Type other)
{
// Make sure that Pointer parameters are sorted last to avoid bug [#1098].
@ -306,26 +232,32 @@ namespace Bind.Structures
// DelegateCollection.Add that depends on this fact.
int result = this.CurrentType.CompareTo(other.CurrentType);
if (result == 0)
{
result = Pointer.CompareTo(other.Pointer); // Must come after array/ref, see issue [#1098]
}
if (result == 0)
{
result = Reference.CompareTo(other.Reference);
}
if (result == 0)
{
result = Array.CompareTo(other.Array);
}
// Note: CLS-compliance and element counts
// are used for comparison calculations, in order
// to maintain a stable sorting order, even though
// they are not used in equality calculations.
if (result == 0)
{
result = CLSCompliant.CompareTo(other.CLSCompliant);
}
if (result == 0)
{
result = ElementCount.CompareTo(other.ElementCount);
}
return result;
}
#endregion
#region IEquatable<Type> Members
public bool Equals(Type other)
{
bool result =
@ -341,7 +273,5 @@ namespace Bind.Structures
// redefinition errors in the generated bindings.
return result;
}
#endregion
}
}

View file

@ -1,8 +1,6 @@
#region --- License ---
/* Copyright (c) 2006, 2007 Stefanos Apostolopoulos
/* Copyright (c) 2006, 2007 Stefanos Apostolopoulos
* See license.txt for license info
*/
#endregion
using System;
using System.Collections.Generic;
@ -15,8 +13,10 @@ using Enum=Bind.Structures.Enum;
namespace Bind
{
#region WrapperTypes enum
/// <summary>
/// Defines different types of parameter wrapper identifiers, which are used for hinting at how the method
/// signatures should be generated.
/// </summary>
[Flags]
public enum WrapperTypes
{
@ -94,11 +94,13 @@ namespace Bind
/// Add an int32 overload for convenience.
/// </summary>
SizeParameter = 1 << 14,
/// <summary>
/// Function takes a ref but we emit a legacy array overload to maintain backwards compatability.
/// </summary>
LegacyArrayParameter = 1 << 15,
}
#endregion
static class Utilities
internal static class Utilities
{
public static readonly char[] Separators = { ' ', '\n', ',', '(', ')', ';', '#' };
public static Regex Extensions { get; private set; }
@ -109,9 +111,9 @@ namespace Bind
// Note: REMOVING THESE WILL BREAK BINARY-COMPATIBILITY WITH OPENTK 1.0,
// WRT THE ES 1.1 API.
// You have been warned.
static List<string> extension_names = new List<string>
private static List<string> extension_names = new List<string>
{
"SGI", "SGIS", "SGIX", "IBM", "AMD", "INTEL",
"SGI", "SGIS", "SGIX", "IBM", "AMD", "INTEL",
};
public static void AddExtensions(IEnumerable<string> extensions)
@ -149,12 +151,12 @@ namespace Bind
}
}
#region internal StreamReader OpenSpecFile(string file)
internal static StreamReader OpenSpecFile(string folder, string file)
{
if (String.IsNullOrEmpty(folder) || String.IsNullOrEmpty(file))
{
return null;
}
Console.WriteLine(folder);
Console.WriteLine(file);
@ -163,10 +165,6 @@ namespace Bind
return new StreamReader(path);
}
#endregion
#region Keywords
public static readonly List<string> CSharpKeywords = new List<string>(
new string[]
{
@ -193,10 +191,6 @@ namespace Bind
}
);
#endregion
#region Merge
// Merges the specified enum collections.
internal static void Merge(EnumCollection enums, EnumCollection new_enums)
{
@ -245,7 +239,7 @@ namespace Bind
else
{
// Tried to add a constant that already exists. If one constant
// is like: 'Foo = 0x5' and the other like: 'Foo = Bar.Foo', then
// is like: 'Foo = 0x5' and the other like: 'Foo = Bar.Foo', then
// keep the first one.
if (!String.IsNullOrEmpty(s.ConstantCollection[t.Name].Reference))
{
@ -256,10 +250,6 @@ namespace Bind
return s;
}
#endregion
#region internal static string GetGL2Extension(string name)
internal static string GetGL2Extension(string name)
{
return GetExtension(name, false);
@ -286,26 +276,16 @@ namespace Bind
}
}
#endregion
#region private static bool IsGL2Extension(string function)
private static bool IsGL2Extension(string function)
{
return !String.IsNullOrEmpty(GetGL2Extension(function));
}
#endregion
#region internal static string StripGL2Extension(string p)
internal static string StripGL2Extension(string p)
{
return p.Substring(0, p.Length - GetGL2Extension(p).Length);
}
#endregion
public static bool RequiresSlot(this Delegate d, Settings settings)
{
double version;

View file

@ -1,12 +1,11 @@
#region License
//
//
// The Open Toolkit Library License
//
// Copyright (c) 2006 - 2013 Stefanos Apostolopoulos for 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
// 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:
@ -23,14 +22,10 @@
// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
// OTHER DEALINGS IN THE SOFTWARE.
//
#endregion
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text;
using System.Xml.Linq;
using System.Xml.XPath;
using Bind.Structures;
@ -39,23 +34,19 @@ namespace Bind
using Delegate = Bind.Structures.Delegate;
using Enum = Bind.Structures.Enum;
class XmlSpecReader : ISpecReader
internal class XmlSpecReader : ISpecReader
{
Settings Settings { get; set; }
#region Constructors
private Settings Settings { get; set; }
public XmlSpecReader(Settings settings)
{
if (settings == null)
{
throw new ArgumentNullException("settings");
}
Settings = settings;
}
#endregion
#region ISpecReader Members
public void ReadDelegates(string file, DelegateCollection delegates, string apiname, string apiversions)
{
var specs = new XPathDocument(file);
@ -79,7 +70,9 @@ namespace Bind
foreach (XPathNavigator nav in specs.CreateNavigator().Select(xpath_delete))
{
foreach (XPathNavigator node in nav.SelectChildren("function", String.Empty))
{
delegates.Remove(node.GetAttribute("name", String.Empty));
}
}
foreach (XPathNavigator nav in specs.CreateNavigator().Select(xpath_add))
{
@ -113,7 +106,9 @@ namespace Bind
foreach (XPathNavigator nav in specs.CreateNavigator().Select(xpath_delete))
{
foreach (XPathNavigator node in nav.SelectChildren("enum", String.Empty))
{
enums.Remove(node.GetAttribute("name", String.Empty));
}
}
foreach (XPathNavigator nav in specs.CreateNavigator().Select(xpath_add))
{
@ -130,14 +125,18 @@ namespace Bind
Dictionary<string, string> GLTypes = new Dictionary<string, string>();
if (sr == null)
{
return GLTypes;
}
do
{
string line = sr.ReadLine();
if (String.IsNullOrEmpty(line) || line.StartsWith("#"))
{
continue;
}
string[] words = line.Split(" ,*\t".ToCharArray(), StringSplitOptions.RemoveEmptyEntries);
@ -198,14 +197,20 @@ namespace Bind
{
string line = sr.ReadLine();
if (String.IsNullOrEmpty(line) || line.StartsWith("#"))
{
continue;
}
string[] words = line.Split(" ,\t".ToCharArray(), StringSplitOptions.RemoveEmptyEntries);
if (words.Length < 2)
{
continue;
}
if (((Settings.Compatibility & Settings.Legacy.NoBoolParameters) != Settings.Legacy.None) && words[1] == "bool")
{
words[1] = "Int32";
}
CSTypes.Add(words[0], words[1]);
}
@ -214,11 +219,7 @@ namespace Bind
}
}
#endregion
#region Private Members
static void GetSignaturePaths(string apiname, string apiversion, out string xpath_add, out string xpath_delete)
private static void GetSignaturePaths(string apiname, string apiversion, out string xpath_add, out string xpath_delete)
{
xpath_add = "/signatures/add";
xpath_delete = "/signatures/delete";
@ -230,7 +231,7 @@ namespace Bind
"(contains(concat('|', @version, '|'), '|{1}|') or not(boolean(@version)))]",
apiname,
apiversion);
xpath_add += match;
xpath_add += match;
xpath_delete += match;
}
else if (!String.IsNullOrEmpty(apiname))
@ -241,7 +242,7 @@ namespace Bind
}
}
string GetSpecVersion(XPathDocument specs)
private string GetSpecVersion(XPathDocument specs)
{
var version =
specs.CreateNavigator().SelectSingleNode("/signatures")
@ -253,7 +254,7 @@ namespace Bind
return version;
}
DelegateCollection ReadDelegates(XPathNavigator specs, string apiversion)
private DelegateCollection ReadDelegates(XPathNavigator specs, string apiversion)
{
DelegateCollection delegates = new DelegateCollection();
var extensions = new List<string>();
@ -269,7 +270,9 @@ namespace Bind
// so we add them anyway (which is desirable).
if (!String.IsNullOrEmpty(version) && !String.IsNullOrEmpty(apiversion) &&
Decimal.Parse(version) > Decimal.Parse(apiversion))
{
continue;
}
// Check whether we are adding to an existing delegate or creating a new one.
var d = new Delegate
@ -284,7 +287,9 @@ namespace Bind
Obsolete = node.GetAttribute("obsolete", String.Empty).Trim()
};
if (!extensions.Contains(d.Extension))
{
extensions.Add(d.Extension);
}
foreach (XPathNavigator param in node.SelectChildren(XPathNodeType.Element))
{
@ -299,26 +304,12 @@ namespace Bind
p.CurrentType = param.GetAttribute("type", String.Empty).Trim();
p.Name = param.GetAttribute("name", String.Empty).Trim();
string element_count = param.GetAttribute("elementcount", String.Empty).Trim();
if (String.IsNullOrEmpty(element_count))
{
element_count = param.GetAttribute("count", String.Empty).Trim();
if (!String.IsNullOrEmpty(element_count))
{
int count;
if (Int32.TryParse(element_count, out count))
{
p.ElementCount = count;
}
}
}
p.ComputeSize = param.GetAttribute("count", String.Empty).Trim();
if (p.ComputeSize.StartsWith("COMPSIZE"))
int elementCount;
if (Int32.TryParse(p.ComputeSize, out elementCount))
{
//remove the compsize hint, just keep comma delimited param names
var len = "COMPSIZE(".Length;
p.ComputeSize = p.ComputeSize.Substring(len, (p.ComputeSize.Length - len) - 1);
p.ElementCount = elementCount;
}
p.Flow = Parameter.GetFlowDirection(param.GetAttribute("flow", String.Empty).Trim());
@ -335,7 +326,7 @@ namespace Bind
return delegates;
}
EnumCollection ReadEnums(XPathNavigator nav)
private EnumCollection ReadEnums(XPathNavigator nav)
{
EnumCollection enums = new EnumCollection();
Enum all = new Enum() { Name = Settings.CompleteEnumName };
@ -356,7 +347,9 @@ namespace Bind
e.Obsolete = node.GetAttribute("obsolete", String.Empty).Trim();
if (String.IsNullOrEmpty(e.Name))
{
throw new InvalidOperationException(String.Format("Empty name for enum element {0}", node.ToString()));
}
// It seems that all flag collections contain "Mask" in their names.
// This looks like a heuristic, but it holds 100% in practice
@ -466,7 +459,5 @@ restart:
Utilities.Merge(enums, all);
return enums;
}
#endregion
}
}

View file

@ -0,0 +1 @@
StyleCop.Analyzers

View file

@ -1,4 +1,3 @@
#region License
//
// The Open Toolkit Library License
//
@ -6,7 +5,7 @@
//
// 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
// 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:
@ -23,7 +22,6 @@
// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
// OTHER DEALINGS IN THE SOFTWARE.
//
#endregion
using System;
using System.Collections.Generic;
@ -34,7 +32,7 @@ using System.Xml.Linq;
namespace OpenTK.Convert
{
static class Extension
internal static class Extension
{
public static string ValueOrDefault(this XAttribute a)
{
@ -42,13 +40,11 @@ namespace OpenTK.Convert
}
}
class GLXmlParser : Parser
internal class GLXmlParser : XmlParser
{
static readonly Regex ExtensionRegex = new Regex(
private static readonly Regex ExtensionRegex = new Regex(
@"3DFX|(?!(?<=[1-4])D)[A-Z]{2,}$",
RegexOptions.Compiled);
string EnumPrefix { get { return Prefix.ToUpper() + "_"; } }
string FuncPrefix { get { return Prefix; } }
public GLXmlParser()
{
@ -65,15 +61,19 @@ namespace OpenTK.Convert
var version = (e.Attribute("version") ?? new XAttribute("version", String.Empty)).Value;
var key = name + version;
if (!elements.ContainsKey(key))
{
elements.Add(key, e);
}
else
{
elements[key].Add(e.Elements());
}
}
return elements.Values;
}
static string[] GetApiNames(XElement feature)
private static string[] GetApiNames(XElement feature)
{
string[] apinames = null;
switch (feature.Name.LocalName)
@ -111,7 +111,7 @@ namespace OpenTK.Convert
return apinames;
}
IEnumerable<XElement> ParseEnums(XDocument input)
private IEnumerable<XElement> ParseEnums(XDocument input)
{
var features = input.Root.Elements("feature");
var extensions = input.Root.Elements("extensions").Elements("extension");
@ -128,7 +128,9 @@ namespace OpenTK.Convert
{
var api = (e.Attribute("api") ?? new XAttribute("api", "default")).Value;
if (!enums.ContainsKey(api))
{
enums.Add(api, new SortedDictionary<string, string>());
}
enums[api].Add(
TrimName(e.Attribute("name").Value),
@ -155,12 +157,14 @@ namespace OpenTK.Convert
{
var key = apiname + version;
if (!APIs.ContainsKey(key))
{
APIs.Add(
key,
new XElement(
"api",
new XAttribute("name", apiname),
String.IsNullOrEmpty(version) ? null : new XAttribute("version", version)));
}
var api = APIs[key];
var enum_name = TrimName(feature.Attribute("name").Value);
@ -228,7 +232,7 @@ namespace OpenTK.Convert
return APIs.Values;
}
IEnumerable<XElement> ParseFunctions(XDocument input)
private IEnumerable<XElement> ParseFunctions(XDocument input)
{
// Go through the list of commands and build OpenTK functions out of those.
// Every function has a number of attributes that define which API version and
@ -256,7 +260,7 @@ namespace OpenTK.Convert
{
var category = TrimName(feature.Attribute("name").Value);
var apinames = GetApiNames(feature);
var version =
(feature.Attribute("number") != null ? feature.Attribute("number").Value : "")
.Split('|');
@ -271,12 +275,14 @@ namespace OpenTK.Convert
var key = apiname + cmd_version;
if (!APIs.ContainsKey(key))
{
APIs.Add(
key,
new XElement(
"api",
new XAttribute("name", apiname),
new XAttribute("version", cmd_version)));
"api",
new XAttribute("name", apiname),
new XAttribute("version", cmd_version)));
}
var api = APIs[key];
foreach (var command in feature.Elements("require").Elements("command"))
@ -286,13 +292,17 @@ namespace OpenTK.Convert
ExtensionRegex.Match(cmd_name).Value ??
(feature.Name == "extension" ? category.Substring(0, category.IndexOf("_")) : "Core");
if (String.IsNullOrEmpty(cmd_extension))
{
cmd_extension = "Core";
}
XElement function = TranslateCommand(commands[cmd_name]);
function.Add(new XAttribute("category", cmd_category));
function.Add(new XAttribute("extension", cmd_extension));
if (!String.IsNullOrEmpty(cmd_version))
{
function.Add(new XAttribute("version", cmd_version));
}
Merge(api, function);
}
@ -349,8 +359,9 @@ namespace OpenTK.Convert
// Sanity check: one function cannot belong to two different extensions
if (f.Attribute("extension").Value != function.Attribute("extension").Value)
{
throw new InvalidOperationException("Different extensions for the same function");
}
}
else
{
@ -408,19 +419,19 @@ namespace OpenTK.Convert
return function;
}
string FunctionName(XElement e)
private string FunctionName(XElement e)
{
return TrimName(e.Element("proto").Element("name").Value);
}
string FunctionParameterType(XElement e)
private string FunctionParameterType(XElement e)
{
// Parse the C-like <proto> element. Possible instances:
// Return types:
// - <proto>void <name>glGetSharpenTexFuncSGIS</name></proto>
// -> <returns>void</returns>
// - <proto group="String">const <ptype>GLubyte</ptype> *<name>glGetString</name></proto>
// -> <returns>String</returns>
// -> <returns>String</returns>
// Note: group attribute takes precedence if it exists. This matches the old .spec file format.
// Parameter types:
// - <param><ptype>GLenum</ptype> <name>shadertype</name></param>
@ -438,9 +449,13 @@ namespace OpenTK.Convert
{
var words = ret.Split(" ".ToCharArray(), StringSplitOptions.RemoveEmptyEntries);
if (words[0] == "struct" || words[0] == "const")
{
words[1] = group.Value;
}
else
{
words[0] = group.Value;
}
ret = String.Join(" ", words);
}
@ -448,29 +463,27 @@ namespace OpenTK.Convert
return ret;
}
string TrimName(string name)
{
if (name.StartsWith(EnumPrefix))
return name.Remove(0, EnumPrefix.Length);
else if (name.StartsWith(FuncPrefix))
return name.Remove(0, FuncPrefix.Length);
else
return name;
}
static string Join(string left, string right)
private static string Join(string left, string right)
{
if (!String.IsNullOrEmpty(left) && !String.IsNullOrEmpty(right))
{
return left + "|" + right;
}
else if (!String.IsNullOrEmpty(left))
{
return left;
}
else if (!String.IsNullOrEmpty(right))
{
return right;
}
else
{
return String.Empty;
}
}
static XAttribute Lookup(IDictionary<string, XElement> categories, string cmd_name, string attribute)
private static XAttribute Lookup(IDictionary<string, XElement> categories, string cmd_name, string attribute)
{
if (categories.ContainsKey(cmd_name))
{

View file

@ -14,7 +14,7 @@
<DefaultHTMLPageLayout>Grid</DefaultHTMLPageLayout>
<DefaultTargetSchema>IE50</DefaultTargetSchema>
<DelaySign>false</DelaySign>
<TargetFrameworkVersion>v3.5</TargetFrameworkVersion>
<TargetFrameworkVersion>v4.6.1</TargetFrameworkVersion>
<OutputType>Exe</OutputType>
<AppDesignerFolder>
</AppDesignerFolder>
@ -39,12 +39,16 @@
<ApplicationVersion>1.0.0.%2a</ApplicationVersion>
<UseApplicationTrust>false</UseApplicationTrust>
<BootstrapperEnabled>true</BootstrapperEnabled>
<Deterministic>true</Deterministic>
<RunCodeAnalysis>true</RunCodeAnalysis>
<CodeAnalysisRuleSet>..\..\stylecop.ruleset</CodeAnalysisRuleSet>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
<BaseAddress>285212672</BaseAddress>
<ConfigurationOverrideFile>
</ConfigurationOverrideFile>
<DefineConstants>DEBUG;TRACE;</DefineConstants>
<DocumentationFile>bin\Debug\Convert.xml</DocumentationFile>
<DebugSymbols>True</DebugSymbols>
<FileAlignment>4096</FileAlignment>
<Optimize>False</Optimize>
@ -52,7 +56,6 @@
<RegisterForComInterop>False</RegisterForComInterop>
<RemoveIntegerChecks>False</RemoveIntegerChecks>
<WarningLevel>4</WarningLevel>
<CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet>
<DebugType>full</DebugType>
<Commandlineparameters>-p:gl -v:4.5 -t:xml -o:../../../Source/Bind/Specifications/GL2/signatures.xml https://cvs.khronos.org/svn/repos/ogl/trunk/doc/registry/public/api/gl.xml</Commandlineparameters>
</PropertyGroup>
@ -61,13 +64,13 @@
<ConfigurationOverrideFile>
</ConfigurationOverrideFile>
<DefineConstants>TRACE;</DefineConstants>
<DocumentationFile>bin\Release\Convert.xml</DocumentationFile>
<FileAlignment>4096</FileAlignment>
<Optimize>True</Optimize>
<OutputPath>bin\Release\</OutputPath>
<RegisterForComInterop>False</RegisterForComInterop>
<RemoveIntegerChecks>False</RemoveIntegerChecks>
<WarningLevel>4</WarningLevel>
<CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet>
<DebugType>none</DebugType>
</PropertyGroup>
<PropertyGroup>
@ -94,10 +97,8 @@
<Compile Include="Main.cs">
<SubType>Code</SubType>
</Compile>
<Compile Include="Options.cs">
<SubType>Code</SubType>
</Compile>
<Compile Include="Parser.cs">
<Compile Include="Options.cs" />
<Compile Include="XmlParser.cs">
<SubType>Code</SubType>
</Compile>
<Compile Include="Properties\AssemblyInfo.cs">
@ -109,10 +110,17 @@
<None Include="paket.references" />
<None Include="XML schema notes.txt">
</None>
<None Include="Readme.txt">
</None>
<Content Include="README.md" />
<Compile Include="GLXmlParser.cs" />
</ItemGroup>
<ItemGroup>
<AdditionalFiles Include="$(SolutionDir)\stylecop.json">
<Link>stylecop.json</Link>
</AdditionalFiles>
<AdditionalFiles Include="$(SolutionDir)\stylecop.ruleset">
<Link>stylecop.ruleset</Link>
</AdditionalFiles>
</ItemGroup>
<Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" />
<PropertyGroup>
<PreBuildEvent>
@ -120,4 +128,600 @@
<PostBuildEvent>
</PostBuildEvent>
</PropertyGroup>
<Choose>
<When Condition="$(TargetFrameworkIdentifier) == '.NETFramework' And ($(TargetFrameworkVersion) == 'v4.0' Or $(TargetFrameworkVersion) == 'v4.0.3')">
<ItemGroup>
<Reference Include="CommandLine">
<HintPath>..\..\packages\CommandLineParser\lib\net40\CommandLine.dll</HintPath>
<Private>True</Private>
<Paket>True</Paket>
</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' Or $(TargetFrameworkVersion) == 'v4.7')">
<ItemGroup>
<Reference Include="CommandLine">
<HintPath>..\..\packages\CommandLineParser\lib\net45\CommandLine.dll</HintPath>
<Private>True</Private>
<Paket>True</Paket>
</Reference>
</ItemGroup>
</When>
<When Condition="($(TargetFrameworkIdentifier) == '.NETStandard' And ($(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')) Or ($(TargetFrameworkIdentifier) == 'MonoAndroid' And ($(TargetFrameworkVersion) == 'v7.0' Or $(TargetFrameworkVersion) == 'v7.1')) Or ($(TargetFrameworkIdentifier) == 'MonoTouch') Or ($(TargetFrameworkIdentifier) == 'Xamarin.tvOS') Or ($(TargetFrameworkIdentifier) == 'Xamarin.watchOS') Or ($(TargetFrameworkIdentifier) == 'Xamarin.iOS') Or ($(TargetFrameworkIdentifier) == 'Xamarin.Mac')">
<ItemGroup>
<Reference Include="CommandLine">
<HintPath>..\..\packages\CommandLineParser\lib\netstandard1.5\CommandLine.dll</HintPath>
<Private>True</Private>
<Paket>True</Paket>
</Reference>
</ItemGroup>
</When>
</Choose>
<ItemGroup>
<Analyzer Include="..\..\packages\StyleCop.Analyzers\analyzers\dotnet\cs\StyleCop.Analyzers.CodeFixes.dll">
<Paket>True</Paket>
</Analyzer>
<Analyzer Include="..\..\packages\StyleCop.Analyzers\analyzers\dotnet\cs\StyleCop.Analyzers.dll">
<Paket>True</Paket>
</Analyzer>
</ItemGroup>
<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')) Or ($(TargetFrameworkIdentifier) == '.NETCoreApp' And ($(TargetFrameworkVersion) == 'v1.0' Or $(TargetFrameworkVersion) == 'v1.1' 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) == '.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.Console">
<HintPath>..\..\packages\System.Console\lib\net46\System.Console.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')) Or ($(TargetFrameworkIdentifier) == '.NETCoreApp' And ($(TargetFrameworkVersion) == 'v1.0' Or $(TargetFrameworkVersion) == 'v1.1' Or $(TargetFrameworkVersion) == 'v2.0'))">
<ItemGroup>
<Reference Include="System.Console">
<HintPath>..\..\packages\System.Console\ref\netstandard1.3\System.Console.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.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')) Or ($(TargetFrameworkIdentifier) == '.NETCoreApp' And ($(TargetFrameworkVersion) == 'v1.0' Or $(TargetFrameworkVersion) == 'v1.1' 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) == '.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')) Or ($(TargetFrameworkIdentifier) == '.NETCoreApp' And ($(TargetFrameworkVersion) == 'v1.0' Or $(TargetFrameworkVersion) == 'v1.1' 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')) Or ($(TargetFrameworkIdentifier) == '.NETCoreApp' And ($(TargetFrameworkVersion) == 'v1.0' Or $(TargetFrameworkVersion) == 'v1.1' 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.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.1' Or $(TargetFrameworkVersion) == 'v1.2' Or $(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5')">
<ItemGroup>
<Reference Include="System.Linq">
<HintPath>..\..\packages\System.Linq\ref\netstandard1.0\System.Linq.dll</HintPath>
<Private>False</Private>
<Paket>True</Paket>
</Reference>
</ItemGroup>
</When>
<When Condition="($(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.6' Or $(TargetFrameworkVersion) == 'v2.0')) Or ($(TargetFrameworkIdentifier) == '.NETCoreApp' And ($(TargetFrameworkVersion) == 'v1.0' Or $(TargetFrameworkVersion) == 'v1.1' Or $(TargetFrameworkVersion) == 'v2.0')) Or ($(TargetFrameworkIdentifier) == 'MonoAndroid' And ($(TargetFrameworkVersion) == 'v7.0' Or $(TargetFrameworkVersion) == 'v7.1'))">
<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>
<When Condition="($(TargetFrameworkIdentifier) == '.NETStandard' And ($(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="System.Linq">
<HintPath>..\..\packages\System.Linq\ref\netstandard1.6\System.Linq.dll</HintPath>
<Private>False</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.Expressions">
<HintPath>..\..\packages\System.Linq.Expressions\lib\net463\System.Linq.Expressions.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.Linq.Expressions">
<HintPath>..\..\packages\System.Linq.Expressions\ref\netstandard1.0\System.Linq.Expressions.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')">
<ItemGroup>
<Reference Include="System.Linq.Expressions">
<HintPath>..\..\packages\System.Linq.Expressions\ref\netstandard1.3\System.Linq.Expressions.dll</HintPath>
<Private>False</Private>
<Paket>True</Paket>
</Reference>
</ItemGroup>
</When>
<When Condition="($(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.6' Or $(TargetFrameworkVersion) == 'v2.0')) Or ($(TargetFrameworkIdentifier) == '.NETCoreApp' And ($(TargetFrameworkVersion) == 'v1.0' Or $(TargetFrameworkVersion) == 'v1.1' Or $(TargetFrameworkVersion) == 'v2.0')) Or ($(TargetFrameworkIdentifier) == 'MonoAndroid' And ($(TargetFrameworkVersion) == 'v7.0' Or $(TargetFrameworkVersion) == 'v7.1'))">
<ItemGroup>
<Reference Include="System.Linq.Expressions">
<HintPath>..\..\packages\System.Linq.Expressions\lib\netstandard1.6\System.Linq.Expressions.dll</HintPath>
<Private>True</Private>
<Paket>True</Paket>
</Reference>
</ItemGroup>
</When>
<When Condition="($(TargetFrameworkIdentifier) == '.NETStandard' And ($(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="System.Linq.Expressions">
<HintPath>..\..\packages\System.Linq.Expressions\ref\netstandard1.6\System.Linq.Expressions.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.ObjectModel">
<HintPath>..\..\packages\System.ObjectModel\ref\netstandard1.0\System.ObjectModel.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')) Or ($(TargetFrameworkIdentifier) == '.NETCoreApp' And ($(TargetFrameworkVersion) == 'v1.0' Or $(TargetFrameworkVersion) == 'v1.1' Or $(TargetFrameworkVersion) == 'v2.0')) Or ($(TargetFrameworkIdentifier) == 'MonoAndroid' And ($(TargetFrameworkVersion) == 'v7.0' Or $(TargetFrameworkVersion) == 'v7.1'))">
<ItemGroup>
<Reference Include="System.ObjectModel">
<HintPath>..\..\packages\System.ObjectModel\lib\netstandard1.3\System.ObjectModel.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')) Or ($(TargetFrameworkIdentifier) == '.NETCoreApp' And ($(TargetFrameworkVersion) == 'v1.0' Or $(TargetFrameworkVersion) == 'v1.1' Or $(TargetFrameworkVersion) == 'v2.0'))">
<ItemGroup>
<Reference Include="System.ObjectModel">
<HintPath>..\..\packages\System.ObjectModel\ref\netstandard1.3\System.ObjectModel.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.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')) Or ($(TargetFrameworkIdentifier) == '.NETCoreApp' And ($(TargetFrameworkVersion) == 'v1.0' Or $(TargetFrameworkVersion) == 'v1.1' 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) == '.NETStandard' And ($(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="System.Reflection.Emit">
<HintPath>..\..\packages\System.Reflection.Emit\ref\netstandard1.1\System.Reflection.Emit.dll</HintPath>
<Private>False</Private>
<Paket>True</Paket>
</Reference>
</ItemGroup>
</When>
<When Condition="($(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.6' Or $(TargetFrameworkVersion) == 'v2.0')) Or ($(TargetFrameworkIdentifier) == '.NETCoreApp' And ($(TargetFrameworkVersion) == 'v1.0' Or $(TargetFrameworkVersion) == 'v1.1' Or $(TargetFrameworkVersion) == 'v2.0')) Or ($(TargetFrameworkIdentifier) == 'MonoAndroid' And ($(TargetFrameworkVersion) == 'v7.0' Or $(TargetFrameworkVersion) == 'v7.1'))">
<ItemGroup>
<Reference Include="System.Reflection.Emit">
<HintPath>..\..\packages\System.Reflection.Emit\lib\netstandard1.3\System.Reflection.Emit.dll</HintPath>
<Private>True</Private>
<Paket>True</Paket>
</Reference>
</ItemGroup>
</When>
</Choose>
<Choose>
<When Condition="($(TargetFrameworkIdentifier) == '.NETStandard' And ($(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="System.Reflection.Emit.ILGeneration">
<HintPath>..\..\packages\System.Reflection.Emit.ILGeneration\ref\netstandard1.0\System.Reflection.Emit.ILGeneration.dll</HintPath>
<Private>False</Private>
<Paket>True</Paket>
</Reference>
</ItemGroup>
</When>
<When Condition="($(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.6' Or $(TargetFrameworkVersion) == 'v2.0')) Or ($(TargetFrameworkIdentifier) == '.NETCoreApp' And ($(TargetFrameworkVersion) == 'v1.0' Or $(TargetFrameworkVersion) == 'v1.1' Or $(TargetFrameworkVersion) == 'v2.0')) Or ($(TargetFrameworkIdentifier) == 'MonoAndroid' And ($(TargetFrameworkVersion) == 'v7.0' Or $(TargetFrameworkVersion) == 'v7.1'))">
<ItemGroup>
<Reference Include="System.Reflection.Emit.ILGeneration">
<HintPath>..\..\packages\System.Reflection.Emit.ILGeneration\lib\netstandard1.3\System.Reflection.Emit.ILGeneration.dll</HintPath>
<Private>True</Private>
<Paket>True</Paket>
</Reference>
</ItemGroup>
</When>
</Choose>
<Choose>
<When Condition="($(TargetFrameworkIdentifier) == '.NETStandard' And ($(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="System.Reflection.Emit.Lightweight">
<HintPath>..\..\packages\System.Reflection.Emit.Lightweight\ref\netstandard1.0\System.Reflection.Emit.Lightweight.dll</HintPath>
<Private>False</Private>
<Paket>True</Paket>
</Reference>
</ItemGroup>
</When>
<When Condition="($(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.6' Or $(TargetFrameworkVersion) == 'v2.0')) Or ($(TargetFrameworkIdentifier) == '.NETCoreApp' And ($(TargetFrameworkVersion) == 'v1.0' Or $(TargetFrameworkVersion) == 'v1.1' Or $(TargetFrameworkVersion) == 'v2.0')) Or ($(TargetFrameworkIdentifier) == 'MonoAndroid' And ($(TargetFrameworkVersion) == 'v7.0' Or $(TargetFrameworkVersion) == 'v7.1'))">
<ItemGroup>
<Reference Include="System.Reflection.Emit.Lightweight">
<HintPath>..\..\packages\System.Reflection.Emit.Lightweight\lib\netstandard1.3\System.Reflection.Emit.Lightweight.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' Or $(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="System.Reflection.Extensions">
<HintPath>..\..\packages\System.Reflection.Extensions\ref\netstandard1.0\System.Reflection.Extensions.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' Or $(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="System.Reflection.Primitives">
<HintPath>..\..\packages\System.Reflection.Primitives\ref\netstandard1.0\System.Reflection.Primitives.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.Reflection.TypeExtensions">
<HintPath>..\..\packages\System.Reflection.TypeExtensions\lib\net462\System.Reflection.TypeExtensions.dll</HintPath>
<Private>True</Private>
<Paket>True</Paket>
</Reference>
</ItemGroup>
</When>
<When Condition="($(TargetFrameworkIdentifier) == '.NETStandard' And ($(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')) Or ($(TargetFrameworkIdentifier) == 'MonoAndroid' And ($(TargetFrameworkVersion) == 'v7.0' Or $(TargetFrameworkVersion) == 'v7.1'))">
<ItemGroup>
<Reference Include="System.Reflection.TypeExtensions">
<HintPath>..\..\packages\System.Reflection.TypeExtensions\lib\netstandard1.5\System.Reflection.TypeExtensions.dll</HintPath>
<Private>True</Private>
<Paket>True</Paket>
</Reference>
</ItemGroup>
</When>
<When Condition="($(TargetFrameworkIdentifier) == '.NETStandard' And ($(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="System.Reflection.TypeExtensions">
<HintPath>..\..\packages\System.Reflection.TypeExtensions\ref\netstandard1.5\System.Reflection.TypeExtensions.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' Or $(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="System.Resources.ResourceManager">
<HintPath>..\..\packages\System.Resources.ResourceManager\ref\netstandard1.0\System.Resources.ResourceManager.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')">
<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')) Or ($(TargetFrameworkIdentifier) == '.NETCoreApp' And ($(TargetFrameworkVersion) == 'v1.0' Or $(TargetFrameworkVersion) == 'v1.1' 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')) Or ($(TargetFrameworkIdentifier) == '.NETCoreApp' And ($(TargetFrameworkVersion) == 'v1.0' Or $(TargetFrameworkVersion) == 'v1.1' 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.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')) Or ($(TargetFrameworkIdentifier) == '.NETCoreApp' And ($(TargetFrameworkVersion) == 'v1.0' Or $(TargetFrameworkVersion) == 'v1.1' 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.1' Or $(TargetFrameworkVersion) == 'v1.2')">
<ItemGroup>
<Reference Include="System.Threading">
<HintPath>..\..\packages\System.Threading\ref\netstandard1.0\System.Threading.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')) Or ($(TargetFrameworkIdentifier) == '.NETCoreApp' And ($(TargetFrameworkVersion) == 'v1.0' Or $(TargetFrameworkVersion) == 'v1.1' Or $(TargetFrameworkVersion) == 'v2.0')) Or ($(TargetFrameworkIdentifier) == 'MonoAndroid' And ($(TargetFrameworkVersion) == 'v7.0' Or $(TargetFrameworkVersion) == 'v7.1'))">
<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>
<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="System.Threading">
<HintPath>..\..\packages\System.Threading\ref\netstandard1.3\System.Threading.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.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')) Or ($(TargetFrameworkIdentifier) == '.NETCoreApp' And ($(TargetFrameworkVersion) == 'v1.0' Or $(TargetFrameworkVersion) == 'v1.1' 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>

View file

@ -8,10 +8,10 @@
// 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
@ -28,11 +28,11 @@ using System.IO;
using System.Linq;
using System.Xml;
using System.Xml.Linq;
using Mono.Options;
using CommandLine;
namespace OpenTK.Convert
{
class EnumTokenComparer : IEqualityComparer<XNode>
internal class EnumTokenComparer : IEqualityComparer<XNode>
{
public bool Equals(XNode a, XNode b)
{
@ -59,51 +59,22 @@ namespace OpenTK.Convert
}
}
}
class EntryPoint
internal class EntryPoint
{
static void Main(string[] args)
private static Options CLIOptions;
private static void Main(string[] args)
{
Parser.Default.ParseArguments<Options>(args)
.WithParsed(result => CLIOptions = result)
.WithNotParsed(error => Environment.Exit(-1));
try
{
bool showHelp = false;
string prefix = "gl";
string version = null;
string path = null;
OptionSet opts = new OptionSet
{
{ "p=", "The {PREFIX} to remove from parsed functions and constants. " +
"Defaults to \"" + prefix + "\".",
v => prefix = v },
{ "v:", "The {VERSION} of the specification being parsed.",
v => version = v },
{ "o:", "The {PATH} to the output file.",
v => path = v },
{ "?|h|help", "Show this message and exit.",
v => showHelp = v != null },
};
var headers = opts.Parse(args);
var app = Path.GetFileName(Environment.GetCommandLineArgs()[0]);
if (showHelp)
{
Console.WriteLine("usage: {0} -p:PREFIX -v:VERSION SPECIFICATIONS", app);
Console.WriteLine();
Console.WriteLine("Options:");
opts.WriteOptionDescriptions(Console.Out);
Console.WriteLine();
Console.WriteLine("SPECIFICATIONS are the Khronos XML files to parse into OpenTK XML.");
return;
}
if (prefix == null)
{
Console.WriteLine("{0}: missing required parameter -p.", app);
Console.WriteLine("Use '{0} --help' for usage.", app);
return;
}
XmlParser xmlParser = new GLXmlParser { Prefix = CLIOptions.Prefix };
Parser parser = new GLXmlParser { Prefix = prefix, Version = version };
var sigs = headers.Select(h => parser.Parse(h)).ToList();
var sigs = CLIOptions.InputFiles.Select(h => xmlParser.Parse(h)).ToList();
// Merge any duplicate enum entries (in case an enum is declared
// in multiple files with different entries in each file).
@ -115,14 +86,14 @@ namespace OpenTK.Convert
settings.Encoding = System.Text.Encoding.UTF8;
TextWriter out_stream = null;
if (path == null)
if (CLIOptions.OutputFile == null)
{
out_stream = Console.Out;
Console.OutputEncoding = System.Text.Encoding.UTF8;
}
else
{
out_stream = new StreamWriter(path, false);
out_stream = new StreamWriter(CLIOptions.OutputFile, false);
}
using (var writer = XmlWriter.Create(out_stream, settings))
@ -165,7 +136,9 @@ namespace OpenTK.Convert
foreach (var e in entries)
{
if (e.Value.Name.LocalName != "enum")
{
continue;
}
var tokens = e.Value.Elements()
.OrderBy(t => (string)t.Attribute("name"))
.ToList();

File diff suppressed because it is too large Load diff

View file

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

View file

@ -0,0 +1,24 @@
### Introduction
This is a simple tool to convert Khronos XML to OpenTK XML files.
### Usage
```
Converting local files:
Convert.exe --input-files gl.xml --output-file signatures.xml --prefix gl
Converting latest remote specification:
Convert.exe --input-files https://cvs.khronos.org/svn/repos/ogl/trunk/doc/registry/public/api/gl.xml --output-file signatures.xml --prefix gl
-p, --prefix Required. (Default: gl) The prefix to remove from parsed functions and constants.
-o, --output-file The path to the output file. Defaults to stdout if no path is provided.
-i, --input-files Required. A list of the Khronos XML files to parse into OpenTK XML. Remote resources in the form of URLs are supported.
--help Display this help screen.
--version Display version information.
```
### Support
If you encounter a bug, please file an issue report at the OpenTK [issue tracker](http://github.com/opentk/opentk/issues).

View file

@ -1,24 +0,0 @@
[Introduction]
This is a simple tool to convert Khronos XML to OpenTK XML files.
[Examples]
To download and convert the XML API registry from Khronos:
Convert.exe -p:gl -o:../../../Source/Bind/Specifications/GL2/signatures.xml https://cvs.khronos.org/svn/repos/ogl/trunk/doc/registry/public/api/gl.xml
The line above will download the latest .xml files from the public Khronos repository and update signatures.xml for the binding generator.
[Usage]
Convert.exe -p:{PREFIX} -v:{VERSION} -t:{TYPE} -o:{OUT} {INPUT1} ... {INPUTn}
{PREFIX} is a simple string that defines the a common prefix for functions and constants in this header. This prefix will be removed from the generated XML file.
{VERSION} is a string that defines that version that will be used for functions in the generated XML file. Specific input files may override this setting.
{OUT} is the output filename (optional). If no output file is specified, output will be directed to the console.
{INPUT1..n} is a space-separated list of input files.
Despite what the help says, prefix and version parameters are necessary at the moment.
[Support]
If you encounter a bug, please file an issue report at http://github.com/opentk/opentk/issues

View file

@ -8,10 +8,10 @@
// 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
@ -29,13 +29,12 @@ using System.Xml.Linq;
namespace OpenTK.Convert
{
// The base class for a parser.
abstract class Parser
internal abstract class XmlParser
{
// Defines a prefix that should be removed from methods and tokens in the XML files, e.g. "gl", "cl", etc.
public string Prefix { get; set; }
// Defines the version of the spec files (optional).
public string Version { get; set; }
public string EnumPrefix { get { return Prefix.ToUpper() + "_"; } }
public string FuncPrefix { get { return Prefix; } }
// Implements the parsing logic for a specific input file.
public abstract IEnumerable<XElement> Parse(string[] lines);
@ -82,5 +81,21 @@ namespace OpenTK.Convert
return Parse(contents);
}
public string TrimName(string name)
{
if (name.StartsWith(EnumPrefix))
{
return name.Remove(0, EnumPrefix.Length);
}
else if (name.StartsWith(FuncPrefix))
{
return name.Remove(0, FuncPrefix.Length);
}
else
{
return name;
}
}
}
}

View file

@ -0,0 +1,2 @@
CommandLineParser
StyleCop.Analyzers

View file

@ -0,0 +1,10 @@

namespace OpenTK.Rewrite
{
internal class CountAttribute
{
public int Count;
public string Parameter;
public string Computed;
}
}

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="definition">The definition of the generated variable.</param>
/// <param name="name">The name of the generated variable.</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(definition));
}
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;
}
}
}

File diff suppressed because it is too large Load diff

View file

@ -0,0 +1,39 @@
using CommandLine;
using CommandLine.Text;
namespace OpenTK.Rewrite
{
/// <summary>
/// A container class used by <see cref="CommandLine.Parser"/> to parse command line arguments.
/// </summary>
public class Options
{
/// <summary>
/// Gets or sets the path to the target assembly that should be rewritten.
/// </summary>
[Option('a', "assembly", Required = true,
HelpText = "The path to the target assembly that should be rewritten.")]
public string TargetAssembly { get; set; }
/// <summary>
/// Get or sets the path to the strong name key which should be used to sign or resign the assembly.
/// </summary>
[Option('k', "signing-key",
HelpText = "The path to the strong name key which should be used to sign or resign the assembly.")]
public string StrongNameKey { get; set; }
/// <summary>
/// Gets or sets a value indicating whether calls to GL.GetError() are wrapped around each native call.
/// </summary>
[Option('d', "debug", Default = false,
HelpText = "Enable calls to GL.GetError(), wrapped around each native call.")]
public bool EnableDebugCalls { get; set; }
/// <summary>
/// Gets or sets a value indicating whether native calls are forced to use DllImport instead of GetProcAddress.
/// </summary>
[Option("dllimport", Default = false,
HelpText = "Force native calls to use DllImport instead of GetProcAddress.")]
public bool UseDLLImport { get; set; }
}
}

View file

@ -18,8 +18,7 @@ using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text;
using CommandLine;
using Mono.Cecil;
using Mono.Cecil.Cil;
using Mono.Cecil.Rocks;
@ -28,69 +27,64 @@ namespace OpenTK.Rewrite
{
// Replaces OpenTK.InteropHelper method instances
// with the s IL instructions.
class Program
internal class Program
{
static void Main(string[] args)
private static Options Options;
private static void Main(string[] args)
{
if (args.Length == 0)
Parser.Default.ParseArguments<Options>(args)
.WithParsed(result => Options = result)
.WithNotParsed(error => Environment.Exit(-1));
// Argument error checking
if (!File.Exists(Options.TargetAssembly))
{
Console.WriteLine("Usage: rewrite [file.dll] [file.snk] [options]");
Console.WriteLine("[options] is:");
Console.WriteLine(" -debug (enable calls to GL.GetError())");
Console.WriteLine(" -dllimport (force calls to use DllImport instead of GetProcAddress)");
return;
Console.Error.WriteLine($"Target assembly not found. \n" +
$"Please check the given path ({Options.TargetAssembly}).");
}
if (!File.Exists(Path.ChangeExtension(Options.TargetAssembly, "pdb")))
{
Console.Error.WriteLine("Debugging symbols for target assembly not found. \n" +
"Please make sure that debugging symbols are being generated.");
}
var program = new Program();
var file = args[0];
var key = args[1];
var options = args.Where(a => a.StartsWith("-") || a.StartsWith("/"));
program.Rewrite(file, key, options);
program.Rewrite();
}
// mscorlib types
static AssemblyDefinition mscorlib;
static TypeDefinition TypeMarshal;
static TypeDefinition TypeStringBuilder;
static TypeDefinition TypeVoid;
static TypeDefinition TypeIntPtr;
static TypeDefinition TypeInt32;
private static AssemblyDefinition mscorlib;
private static TypeDefinition TypeMarshal;
private static TypeDefinition TypeVoid;
private static TypeDefinition TypeIntPtr;
private static TypeDefinition TypeInt32;
// OpenTK.BindingsBase
static TypeDefinition TypeBindingsBase;
private static TypeDefinition TypeBindingsBase;
static bool dllimport;
void Rewrite(string file, string keyfile, IEnumerable<string> options)
private void Rewrite()
{
dllimport = options.Contains("-dllimport");
// Specify assembly read and write parameters
// We want to keep a valid symbols file (pdb or mdb)
var read_params = new ReaderParameters();
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.ReadWrite = true;
write_params.WriteSymbols = true;
if (!String.IsNullOrEmpty(keyfile) && File.Exists(keyfile))
if (!String.IsNullOrEmpty(Options.StrongNameKey) && File.Exists(Options.StrongNameKey))
{
keyfile = Path.GetFullPath(keyfile);
var fs = new FileStream(keyfile, FileMode.Open, FileAccess.Read);
var keypair = new System.Reflection.StrongNameKeyPair(fs);
fs.Close();
write_params.StrongNameKeyPair = keypair;
string absoluteKeyFilePath = Path.GetFullPath(Options.StrongNameKey);
using (var fs = new FileStream(absoluteKeyFilePath, FileMode.Open, FileAccess.Read))
{
var keypair = new System.Reflection.StrongNameKeyPair(fs);
write_params.StrongNameKeyPair = keypair;
}
}
else
{
@ -98,70 +92,79 @@ namespace OpenTK.Rewrite
}
// Load assembly and process all modules
var assembly = AssemblyDefinition.ReadAssembly(file, read_params);
var rewritten = assembly.CustomAttributes.FirstOrDefault(a => a.AttributeType.Name == "RewrittenAttribute");
if (rewritten == null)
try
{
foreach (var module in assembly.Modules)
using (AssemblyDefinition assembly = AssemblyDefinition.ReadAssembly(Options.TargetAssembly, 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);
if (reference.Name == "mscorlib")
foreach (var reference in module.AssemblyReferences)
{
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");
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);
}
}
}
}
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)
else
{
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.");
Console.WriteLine(inex);
}
// Save rewritten assembly
assembly.Write(file, write_params);
}
void Rewrite(TypeDefinition type, IEnumerable<string> options)
private void Rewrite(TypeDefinition type)
{
var entry_points = type.Fields.FirstOrDefault(f => f.Name == "EntryPoints");
if (entry_points != null)
{
// Build list of entry point signatures (one per entry point)
// Build list of entry point signatures (one per entry point)
var entry_signatures = new List<MethodDefinition>();
entry_signatures.AddRange(type.Methods
.Where(t => t.CustomAttributes.Any(a => a.AttributeType.Name == "SlotAttribute")));
Rewrite(type, entry_points, entry_signatures, options);
Rewrite(type, entry_points, entry_signatures);
RemoveNativeSignatures(type, entry_signatures);
}
@ -171,16 +174,18 @@ namespace OpenTK.Rewrite
var rewritten_constructor = type.GetConstructors().First();
var rewritten = new CustomAttribute(rewritten_constructor);
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);
}
}
int GetSlot(MethodDefinition signature)
private static int GetSlot(MethodDefinition signature)
{
// Pretend there is no slots if we want to force everything to work through DllImport (Android & iOS)
if (dllimport)
if (Options.UseDLLImport)
{
return -1;
}
var slot_attribute = signature.CustomAttributes
.FirstOrDefault(a => a.AttributeType.Name == "SlotAttribute");
@ -192,8 +197,8 @@ namespace OpenTK.Rewrite
return slot;
}
void Rewrite(TypeDefinition type, FieldDefinition entry_points,
List<MethodDefinition> entry_signatures, IEnumerable<string> options)
private void Rewrite(TypeDefinition type, FieldDefinition entry_points,
List<MethodDefinition> entry_signatures)
{
// Rewrite all wrapper methods
var wrapper_signatures = new List<MethodDefinition>();
@ -203,15 +208,15 @@ namespace OpenTK.Rewrite
foreach (var wrapper in wrapper_signatures)
{
var autogenerated = wrapper.CustomAttributes
.Where(a => a.AttributeType.Name == "AutoGeneratedAttribute");
if (autogenerated.Count() > 0)
.Where(a => a.AttributeType.Name == "AutoGeneratedAttribute").ToList();
if (autogenerated.Any())
{
var signature_name = (string)autogenerated.First()
.Fields.First(f => f.Name == "EntryPoint").Argument.Value;
var signature = entry_signatures.FirstOrDefault(s => s.Name == signature_name);
int slot = GetSlot(signature);
ProcessMethod(wrapper, signature, slot, entry_points, options);
ProcessMethod(wrapper, signature, slot, entry_points);
}
}
@ -221,12 +226,12 @@ namespace OpenTK.Rewrite
{
foreach (var nested_type in type.NestedTypes)
{
Rewrite(nested_type, entry_points, entry_signatures, options);
Rewrite(nested_type, entry_points, entry_signatures);
}
}
}
void RemoveNativeSignatures(TypeDefinition type, List<MethodDefinition> methods)
private static void RemoveNativeSignatures(TypeDefinition type, IEnumerable<MethodDefinition> methods)
{
// Remove all DllImports for functions called through calli, since
// their signatures are embedded directly into the calli callsite.
@ -237,7 +242,7 @@ namespace OpenTK.Rewrite
}
}
void RemoveSupportingAttributes(TypeDefinition type)
private static void RemoveSupportingAttributes(TypeDefinition type)
{
foreach (var method in type.Methods)
{
@ -250,12 +255,25 @@ namespace OpenTK.Rewrite
i--;
}
}
foreach (var parameter in method.Parameters)
{
var pattr = parameter.CustomAttributes;
for (int i = 0; i < pattr.Count; i++)
{
if (pattr[i].AttributeType.Name == "CountAttribute")
{
pattr.RemoveAt(i);
i--;
}
}
}
}
}
// Create body for method
static void ProcessMethod(MethodDefinition wrapper, MethodDefinition native, int slot,
FieldDefinition entry_points, IEnumerable<string> options)
private static void ProcessMethod(MethodDefinition wrapper, MethodDefinition native, int slot,
FieldDefinition entry_points)
{
var body = wrapper.Body;
var il = body.GetILProcessor();
@ -266,23 +284,29 @@ namespace OpenTK.Rewrite
// and push each parameter on the stack
DebugVariables vars = null;
if (options.Contains("-debug"))
if (Options.EnableDebugCalls)
{
vars = EmitDebugPrologue(wrapper, il);
}
// Patch convenience wrappers
List<GeneratedVariableIdentifier> generatedVariables = new List<GeneratedVariableIdentifier>();
if (wrapper.Parameters.Count == native.Parameters.Count)
{
EmitParameters(wrapper, native, body, il);
generatedVariables = EmitParameters(wrapper, native, body, il);
}
else
{
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 || Options.UseDLLImport)
{
// issue DllImport call
EmitCall(il, native);
}
else
{
// push the entry point address on the stack
EmitEntryPoint(entry_points, il, slot);
@ -290,20 +314,15 @@ namespace OpenTK.Rewrite
// issue calli
EmitCalli(il, native);
}
else
{
// issue DllImport call
EmitCall(il, native);
}
if (wrapper.ReturnType.Name != "Void")
{
EmitReturnTypeWrapper(wrapper, native, body, il);
}
EmitParameterEpilogues(wrapper, native, body, il);
EmitParameterEpilogues(wrapper, native, body, il, generatedVariables);
if (options.Contains("-debug"))
if (Options.EnableDebugCalls)
{
EmitDebugEpilogue(wrapper, il, vars);
}
@ -320,7 +339,7 @@ namespace OpenTK.Rewrite
body.OptimizeMacros();
}
class DebugVariables
private class DebugVariables
{
public TypeDefinition ErrorHelperType;
public VariableDefinition ErrorHelperLocal;
@ -329,17 +348,17 @@ namespace OpenTK.Rewrite
public Instruction BeginTry;
}
static DebugVariables EmitDebugPrologue(MethodDefinition wrapper, ILProcessor il)
private static DebugVariables EmitDebugPrologue(MethodDefinition wrapper, ILProcessor il)
{
DebugVariables vars = null;
if (il.Body.Method.Name != "GetError")
{
// Pull out the namespace name, method fullname will look
// Pull out the namespace name, method fullname will look
// something like "type namespace.class::method(type arg)"
var module = il.Body.Method.FullName;
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('.'));
// Only works for Graphics modules due to hardcoded use of
@ -413,7 +432,7 @@ namespace OpenTK.Rewrite
return vars;
}
static void EmitDebugEpilogue(MethodDefinition wrapper, ILProcessor il, DebugVariables vars)
private static void EmitDebugEpilogue(MethodDefinition wrapper, ILProcessor il, DebugVariables vars)
{
if (vars != null)
{
@ -479,7 +498,7 @@ namespace OpenTK.Rewrite
// String return-type wrapper
// 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 =>
{
return
@ -487,7 +506,7 @@ namespace OpenTK.Rewrite
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 =>
{
var p = m.Parameters;
@ -521,169 +540,233 @@ namespace OpenTK.Rewrite
}
}
static void EmitParameterEpilogues(MethodDefinition wrapper, MethodDefinition native, MethodBody body, ILProcessor il)
private static void EmitParameterEpilogues(MethodDefinition wrapper, MethodDefinition native, MethodBody body, ILProcessor il,
List<GeneratedVariableIdentifier> generatedVariables)
{
foreach (var p in wrapper.Parameters)
{
if (p.ParameterType.Name == "StringBuilder")
if (!p.ParameterType.IsArray && p.ParameterType.Name == "String&")
{
EmitStringBuilderEpilogue(wrapper, native, p, body, il);
EmitStringOutEpilogue(wrapper, native, p, body, il, GetGeneratedVariable(generatedVariables, p.Name + "_string_ptr", body));
}
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")
{
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>
private static GeneratedVariableIdentifier GetGeneratedVariable(IEnumerable<GeneratedVariableIdentifier> variableIdentifiers, string name, MethodBody body)
{
var p = parameter.ParameterType;
return variableIdentifiers.FirstOrDefault(v => v.Name == name && v.Body == body &&
body.Variables.Contains(v.Definition));
}
// void GetShaderInfoLog(..., StringBuilder foo)
// IntPtr foo_sb_ptr;
private static GeneratedVariableIdentifier EmitStringOutParameter(MethodDefinition method, ParameterDefinition parameter, MethodBody body, ILProcessor il)
{
// void GetShaderInfoLog(..., out String foo)
// IntPtr foo_string_ptr;
// try {
// foo_sb_ptr = Marshal.AllocHGlobal(sb.Capacity + 1);
// glGetShaderInfoLog(..., foo_sb_ptr);
// MarshalPtrToStringBuilder(foo_sb_ptr, sb);
// foo_string_ptr = Marshal.AllocHGlobal(count + 1);
// glGetShaderInfoLog(..., foo_string_ptr);
// foo = MarshalPtrToString(foo_string_ptr);
// }
// finally {
// Marshal.FreeHGlobal(sb_ptr);
// Marshal.FreeHGlobal(foo_string_ptr);
// }
// 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 alloc_hglobal = method.Module.Import(TypeMarshal.Methods.First(m => m.Name == "AllocHGlobal"));
// Pop off the string parameter that would of just been loaded
il.Emit(OpCodes.Pop);
// Make sure we have imported Marshal::AllocHGlobal
var alloc_hglobal = method.Module.ImportReference(TypeMarshal.Methods.First(m => m.Name == "AllocHGlobal"));
// IntPtr ptr;
var variable_name = parameter.Name + " _sb_ptr";
body.Variables.Add(new VariableDefinition(variable_name, TypeIntPtr));
int index = body.Variables.Count - 1;
var variableDefinition = new VariableDefinition(TypeIntPtr);
body.Variables.Add(variableDefinition);
int stringPtrIndex = body.Variables.Count - 1;
// ptr = Marshal.AllocHGlobal(sb.Capacity + 1);
il.Emit(OpCodes.Callvirt, sb_get_capacity);
GeneratedVariableIdentifier stringPtrVar = new GeneratedVariableIdentifier(body, variableDefinition, parameter.Name + "_string_ptr");
// ptr = Marshal.AllocHGlobal(count + 1);
var count = GetCountAttribute(parameter);
if (count == null)
{
// We need a count attribute so we know what size to make the
// string buffer. Currently every string out parameter has a
// count attribute but this check is in place to make things
// clearer if this case is ever hit.
throw new InvalidOperationException(string.Format("{0}({1}) doesn't have a count attribute", method.Name, parameter.Name));
}
if (count.Count != 0)
{
// Fixed size
il.Emit(OpCodes.Ldc_I4, count.Count);
}
else if (count.Parameter != null)
{
// Parameter sized
var countVariable = EmitCountVariable(method, body, il, count.Parameter);
il.Emit(OpCodes.Ldloc, countVariable.Index);
}
else if (count.Computed != null)
{
if (method.Name == "GetActiveVarying")
{
// GetActiveVaryingNV's name parameter has a count of "COMPSIZE(program,index,bufSize)" but really it should be bufSize.
var countVariable = EmitCountVariable(method, body, il, "bufSize");
il.Emit(OpCodes.Ldloc, countVariable.Index);
}
else
{
// Computed counts are hard and require manual reading of the specification for each one.
throw new NotSupportedException(string.Format("{0}({1}) requires a computed count: {2}", method.Name, parameter.Name, count.Computed));
}
}
il.Emit(OpCodes.Ldc_I4, 1);
il.Emit(OpCodes.Add);
il.Emit(OpCodes.Call, alloc_hglobal);
il.Emit(OpCodes.Stloc, index);
il.Emit(OpCodes.Ldloc, index);
il.Emit(OpCodes.Stloc, stringPtrIndex);
il.Emit(OpCodes.Ldloc, stringPtrIndex);
// We'll emit the try-finally block in the epilogue implementation,
// because we haven't yet emitted all necessary instructions here.
return stringPtrVar;
}
static void EmitStringBuilderEpilogue(MethodDefinition wrapper, MethodDefinition native, ParameterDefinition parameter, MethodBody body, ILProcessor il)
private static void EmitStringOutEpilogue(MethodDefinition wrapper, MethodDefinition native,
ParameterDefinition parameter, MethodBody body, ILProcessor il, GeneratedVariableIdentifier generatedPtrVar)
{
var p = parameter.ParameterType;
if (p.Name == "StringBuilder")
if (generatedPtrVar == null)
{
// void GetShaderInfoLog(..., StringBuilder foo)
// try {
// foo_sb_ptr = Marshal.AllocHGlobal(sb.Capacity + 1); -- already emitted
// glGetShaderInfoLog(..., foo_sb_ptr); -- already emitted
// MarshalPtrToStringBuilder(foo_sb_ptr, foo);
// }
// finally {
// Marshal.FreeHGlobal(foo_sb_ptr);
// }
// 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 free_hglobal = wrapper.Module.Import(TypeMarshal.Methods.First(m => m.Name == "FreeHGlobal"));
var block = new ExceptionHandler(ExceptionHandlerType.Finally);
block.TryStart = body.Instructions[0];
var variable_name = parameter.Name + " _sb_ptr";
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.Call, ptr_to_sb);
block.TryEnd = body.Instructions.Last();
block.HandlerStart = body.Instructions.Last();
il.Emit(OpCodes.Ldloc, v.Index);
il.Emit(OpCodes.Call, free_hglobal);
block.HandlerEnd = body.Instructions.Last();
throw new ArgumentNullException(nameof(generatedPtrVar));
}
// void GetShaderInfoLog(..., out String foo)
// IntPtr foo_string_ptr;
// try {
// foo_string_ptr = Marshal.AllocHGlobal(count + 1);
// glGetShaderInfoLog(..., foo_string_ptr);
// foo = MarshalPtrToString(foo_string_ptr);
// }
// finally {
// Marshal.FreeHGlobal(foo_string_ptr);
// }
// Make sure we have imported BindingsBase::MasrhalPtrToString and Marshal::FreeHGlobal
var ptr_to_str = wrapper.Module.ImportReference(TypeBindingsBase.Methods.First(m => m.Name == "MarshalPtrToString"));
var free_hglobal = wrapper.Module.ImportReference(TypeMarshal.Methods.First(m => m.Name == "FreeHGlobal"));
var block = new ExceptionHandler(ExceptionHandlerType.Finally);
block.TryStart = body.Instructions[0];
il.Emit(OpCodes.Ldarg, parameter.Index);
il.Emit(OpCodes.Ldloc, generatedPtrVar.Definition.Index);
il.Emit(OpCodes.Call, ptr_to_str);
il.Emit(OpCodes.Stind_Ref);
block.TryEnd = body.Instructions.Last();
block.HandlerStart = body.Instructions.Last();
il.Emit(OpCodes.Ldloc, generatedPtrVar.Definition.Index);
il.Emit(OpCodes.Call, free_hglobal);
block.HandlerEnd = body.Instructions.Last();
}
static void EmitStringParameter(MethodDefinition wrapper, ParameterDefinition parameter, MethodBody body, ILProcessor il)
private static GeneratedVariableIdentifier EmitStringParameter(MethodDefinition wrapper, ParameterDefinition parameter, MethodBody body,
ILProcessor il)
{
var p = parameter.ParameterType;
// string marshaling:
// IntPtr ptr = MarshalStringToPtr(str);
// try { calli }
// 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;
var variable_name = parameter.Name + "_string_ptr";
body.Variables.Add(new VariableDefinition(variable_name, TypeIntPtr));
int index = body.Variables.Count - 1;
var variableDefinition = new VariableDefinition(TypeIntPtr);
body.Variables.Add(variableDefinition);
int generatedPointerVarIndex = body.Variables.Count - 1;
GeneratedVariableIdentifier stringPtrVar = new GeneratedVariableIdentifier(body, variableDefinition, parameter.Name + "_string_ptr");
// ptr = Marshal.StringToHGlobalAnsi(str);
il.Emit(OpCodes.Call, marshal_str_to_ptr);
il.Emit(OpCodes.Stloc, index);
il.Emit(OpCodes.Ldloc, index);
il.Emit(OpCodes.Stloc, generatedPointerVarIndex);
il.Emit(OpCodes.Ldloc, generatedPointerVarIndex);
// The finally block will be emitted in the function epilogue
return stringPtrVar;
}
static void EmitStringEpilogue(MethodDefinition wrapper, ParameterDefinition parameter, MethodBody body, ILProcessor il)
private static void EmitStringEpilogue(MethodDefinition wrapper, ParameterDefinition parameter, MethodBody body,
ILProcessor il, GeneratedVariableIdentifier generatedPtrVar)
{
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)
var variable_name = parameter.Name + "_string_ptr";
var v = body.Variables.First(m => m.Name == variable_name);
il.Emit(OpCodes.Ldloc, v.Index);
il.Emit(OpCodes.Ldloc, generatedPtrVar.Definition.Index);
il.Emit(OpCodes.Call, free);
}
static void EmitStringArrayParameter(MethodDefinition wrapper, ParameterDefinition parameter, MethodBody body, ILProcessor il)
private static GeneratedVariableIdentifier EmitStringArrayParameter(MethodDefinition wrapper, ParameterDefinition parameter, MethodBody body,
ILProcessor il)
{
var p = parameter.ParameterType;
// string[] masrhaling:
// IntPtr ptr = MarshalStringArrayToPtr(strings);
// try { calli }
// 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;
var variable_name = parameter.Name + "_string_array_ptr";
body.Variables.Add(new VariableDefinition(variable_name, TypeIntPtr));
int index = body.Variables.Count - 1;
var variableDefinition = new VariableDefinition(TypeIntPtr);
body.Variables.Add(variableDefinition);
int generatedPointerVarIndex = body.Variables.Count - 1;
GeneratedVariableIdentifier stringArrayPtrVar = new GeneratedVariableIdentifier(body, variableDefinition, parameter.Name + "_string_array_ptr");
// ptr = MarshalStringArrayToPtr(strings);
il.Emit(OpCodes.Call, marshal_str_array_to_ptr);
il.Emit(OpCodes.Stloc, index);
il.Emit(OpCodes.Ldloc, index);
il.Emit(OpCodes.Stloc, generatedPointerVarIndex);
il.Emit(OpCodes.Ldloc, generatedPointerVarIndex);
// The finally block will be emitted in the function epilogue
return stringArrayPtrVar;
}
static void EmitStringArrayEpilogue(MethodDefinition wrapper, ParameterDefinition parameter, MethodBody body, ILProcessor il)
private 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).
// We do not (and will probably never) support 2d or higher string arrays
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)
var variable_name = parameter.Name + "_string_array_ptr";
var v = body.Variables.First(m => m.Name == variable_name);
// load string_array_ptr
il.Emit(OpCodes.Ldloc, v.Index);
il.Emit(OpCodes.Ldloc, generatedPtrVar.Definition.Index);
// load string_array.Length
il.Emit(OpCodes.Ldarg, parameter.Index);
@ -694,7 +777,7 @@ namespace OpenTK.Rewrite
il.Emit(OpCodes.Call, free);
}
static void EmitConvenienceWrapper(MethodDefinition wrapper,
private static List<GeneratedVariableIdentifier> EmitConvenienceWrapper(MethodDefinition wrapper,
MethodDefinition native, int difference, MethodBody body, ILProcessor il)
{
if (wrapper.Parameters.Count > 2)
@ -703,6 +786,8 @@ namespace OpenTK.Rewrite
throw new NotImplementedException();
}
List<GeneratedVariableIdentifier> generatedVariables = new List<GeneratedVariableIdentifier>();
if (wrapper.ReturnType.Name != "Void")
{
if (difference == 2)
@ -729,7 +814,8 @@ namespace OpenTK.Rewrite
// return result;
// }
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);
}
else
@ -755,15 +841,84 @@ namespace OpenTK.Rewrite
Console.Error.WriteLine("Unknown wrapper type for ({0})", native.Name);
}
}
return generatedVariables;
}
static int EmitParameters(MethodDefinition method, MethodDefinition native, MethodBody body, ILProcessor il)
private static object GetAttributeField(CustomAttribute attribute, string name)
{
int i;
for (i = 0; i < method.Parameters.Count; i++)
try
{
var field = attribute.Fields.First(f => f.Name == name);
return field.Argument.Value;
}
catch (InvalidOperationException)
{
return null;
}
}
private static CountAttribute GetCountAttribute(ParameterDefinition parameter)
{
var attribute = parameter.CustomAttributes
.FirstOrDefault(a => a.AttributeType.Name == "CountAttribute");
CountAttribute count = null;
if (attribute != null)
{
count = new CountAttribute();
count.Count = (int)(GetAttributeField(attribute, "Count") ?? 0);
count.Parameter = (string)(GetAttributeField(attribute, "Parameter"));
count.Computed = (string)(GetAttributeField(attribute, "Computed"));
}
return count;
}
private static VariableDefinition EmitCountVariable(MethodDefinition method, MethodBody body, ILProcessor il, string countParameter)
{
var countVariable = new VariableDefinition(TypeInt32);
body.Variables.Add(countVariable);
// Parameter will either by a simple name, a dereference of a name
// like "*name" or an expression like "name*5"
var parameter = method.Parameters.FirstOrDefault(
param => param.Name == countParameter);
if (parameter != null)
{
il.Emit(OpCodes.Ldarg, parameter.Index);
il.Emit(OpCodes.Stloc, countVariable.Index);
}
else if (countParameter[0] == '*')
{
var pointerParam = method.Parameters.FirstOrDefault(
param => param.Name == countParameter.Substring(1));
il.Emit(OpCodes.Ldarg, pointerParam.Index);
il.Emit(OpCodes.Ldind_I4);
}
else
{
var operands = countParameter.Split('*');
parameter = method.Parameters.FirstOrDefault(
param => param.Name == operands[0]);
var scale = int.Parse(operands[1]);
il.Emit(OpCodes.Ldarg, parameter.Index);
il.Emit(OpCodes.Ldc_I4, scale);
il.Emit(OpCodes.Mul);
il.Emit(OpCodes.Stloc, countVariable.Index);
}
return countVariable;
}
private static List<GeneratedVariableIdentifier> EmitParameters(MethodDefinition method, MethodDefinition native, MethodBody body, ILProcessor il)
{
List<GeneratedVariableIdentifier> generatedVariables = new List<GeneratedVariableIdentifier>();
for (int i = 0; i < method.Parameters.Count; 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);
if (p.Name.Contains("Int32") && native.Parameters[i].ParameterType.Name.Contains("IntPtr"))
@ -772,13 +927,13 @@ namespace OpenTK.Rewrite
// We need to convert the loaded argument to IntPtr.
il.Emit(OpCodes.Conv_I);
}
else if (p.Name == "StringBuilder")
else if (p.Name == "String&" && !p.IsArray)
{
EmitStringBuilderParameter(method, parameter, body, il);
generatedVariables.Add(EmitStringOutParameter(method, parameter, body, il));
}
else if (p.Name == "String" && !p.IsArray)
{
EmitStringParameter(method, parameter, body, il);
generatedVariables.Add(EmitStringParameter(method, parameter, body, il));
}
else if (p.IsByReference)
{
@ -790,7 +945,7 @@ namespace OpenTK.Rewrite
}
else if (p.IsArray)
{
if (p.Name != method.Module.Import(typeof(string[])).Name)
if (p.Name != "String[]")
{
// .Net treats 1d arrays differently than higher rank arrays.
// 1d arrays are directly supported by instructions such as ldlen and ldelema.
@ -834,7 +989,7 @@ namespace OpenTK.Rewrite
}
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"));
il.Emit(OpCodes.Callvirt, get_length);
}
@ -880,21 +1035,22 @@ namespace OpenTK.Rewrite
}
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)
private static void EmitEntryPoint(FieldDefinition entry_points, ILProcessor il, int slot)
{
il.Emit(OpCodes.Ldsfld, entry_points);
il.Emit(OpCodes.Ldc_I4, slot);
il.Emit(OpCodes.Ldelem_I);
}
static void EmitCalli(ILProcessor il, MethodReference reference)
private static void EmitCalli(ILProcessor il, MethodReference reference)
{
var signature = new CallSite(reference.ReturnType)
{
@ -911,7 +1067,7 @@ namespace OpenTK.Rewrite
il.Emit(OpCodes.Calli, signature);
}
static void EmitCall(ILProcessor il, MethodReference reference)
private static void EmitCall(ILProcessor il, MethodReference reference)
{
il.Emit(OpCodes.Call, reference);
}

View file

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

View file

@ -1 +1,3 @@
Mono.Cecil
Mono.Cecil
StyleCop.Analyzers
CommandLineParser

View file

@ -1,4 +1,3 @@
#region License
//
// The Open Toolkit Library License
//
@ -23,7 +22,6 @@
// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
// OTHER DEALINGS IN THE SOFTWARE.
//
#endregion
// Created by Erik Ylvisaker on 3/17/08.
@ -35,7 +33,7 @@ using System.Runtime.InteropServices;
namespace OpenTK.Platform.MacOS
{
#pragma warning disable 0169
/*
** Macintosh device type.
*/
@ -56,18 +54,17 @@ namespace OpenTK.Platform.MacOS
using GLenum = UInt32;
unsafe static partial class Agl
internal unsafe static partial class Agl
{
const string agl = "/System/Library/Frameworks/AGL.framework/Versions/Current/AGL";
private const string agl = "/System/Library/Frameworks/AGL.framework/Versions/Current/AGL";
/*
** AGL API version.
*/
const int AGL_VERSION_2_0 = 1;
private const int AGL_VERSION_2_0 = 1;
/************************************************************************/
/*
** Attribute names for aglChoosePixelFormat and aglDescribePixelFormat.
*/
@ -196,7 +193,7 @@ namespace OpenTK.Platform.MacOS
AGL_SURFACE_BACKING_SIZE = 304, /* 2 params. Width/height of surface backing size */
AGL_ENABLE_SURFACE_BACKING_SIZE = 305, /* Enable or disable surface backing size override */
AGL_SURFACE_VOLATILE = 306, /* Flag surface to candidate for deletion */
}
}
/*
** Option names for aglConfigure.
*/
@ -278,7 +275,7 @@ namespace OpenTK.Platform.MacOS
internal enum AglError
{
NoError = 0, /* no error */
BadAttribute = 10000, /* invalid pixel format attribute */
BadProperty = 10001, /* invalid renderer property */
BadPixelFormat = 10002, /* invalid pixel format */
@ -299,7 +296,7 @@ namespace OpenTK.Platform.MacOS
BadConnection = 10017, /* invalid CoreGraphics connection */
}
/************************************************************************/
/*
** Pixel format functions
*/
@ -319,56 +316,62 @@ namespace OpenTK.Platform.MacOS
[DllImport(agl)] internal static extern void aglDestroyPixelFormat(AGLPixelFormat pix);
[DllImport(agl)] internal static extern AGLPixelFormat aglNextPixelFormat(AGLPixelFormat pix);
[DllImport(agl)] internal static extern bool aglDescribePixelFormat(AGLPixelFormat pix, PixelFormatAttribute attrib, out int value);
[Obsolete("Use aglDisplaysOfPixelFormat instead.")]
[DllImport(agl)] static extern AGLDevice *aglDevicesOfPixelFormat(AGLPixelFormat pix, int *ndevs);
/*
** Renderer information functions
*/
[DllImport(agl)] static extern AGLRendererInfo aglQueryRendererInfo(AGLDevice[] gdevs, int ndev);
[DllImport(agl)] static extern void aglDestroyRendererInfo(AGLRendererInfo rend);
[DllImport(agl)] static extern AGLRendererInfo aglNextRendererInfo(AGLRendererInfo rend);
[DllImport(agl)] static extern byte aglDescribeRenderer(AGLRendererInfo rend, int prop, out int value);
[DllImport(agl)]
private static extern AGLRendererInfo aglQueryRendererInfo(AGLDevice[] gdevs, int ndev);
[DllImport(agl)]
private static extern void aglDestroyRendererInfo(AGLRendererInfo rend);
[DllImport(agl)]
private static extern AGLRendererInfo aglNextRendererInfo(AGLRendererInfo rend);
[DllImport(agl)]
private static extern byte aglDescribeRenderer(AGLRendererInfo rend, int prop, out int value);
/*
** Context functions
*/
[DllImport(agl)] internal static extern AGLContext aglCreateContext(AGLPixelFormat pix, AGLContext share);
[DllImport(agl,EntryPoint="aglDestroyContext")] static extern byte _aglDestroyContext(AGLContext ctx);
[DllImport(agl,EntryPoint="aglDestroyContext")]
private static extern byte _aglDestroyContext(AGLContext ctx);
internal static bool aglDestroyContext(AGLContext context)
{
return (_aglDestroyContext(context) != 0) ? true : false;
}
[DllImport(agl)] static extern byte aglCopyContext(AGLContext src, AGLContext dst, uint mask);
[DllImport(agl)]
private static extern byte aglCopyContext(AGLContext src, AGLContext dst, uint mask);
[DllImport(agl)] internal static extern byte aglUpdateContext(AGLContext ctx);
/*
** Current state functions
*/
#region --- aglSetCurrentContext ---
[DllImport(agl,EntryPoint="aglSetCurrentContext")] static extern byte _aglSetCurrentContext(AGLContext ctx);
[DllImport(agl,EntryPoint="aglSetCurrentContext")]
private static extern byte _aglSetCurrentContext(AGLContext ctx);
internal static bool aglSetCurrentContext(IntPtr context)
{
byte retval = _aglSetCurrentContext(context);
if (retval != 0)
{
return true;
}
else
{
return false;
}
}
#endregion
[DllImport(agl)] internal static extern AGLContext aglGetCurrentContext();
/*
** Drawable Functions
*/
[DllImport(agl,EntryPoint="aglSetDrawable")]
static extern byte _aglSetDrawable(AGLContext ctx, AGLDrawable draw);
[DllImport(agl,EntryPoint="aglSetDrawable")]
private static extern byte _aglSetDrawable(AGLContext ctx, AGLDrawable draw);
internal static void aglSetDrawable(AGLContext ctx, AGLDrawable draw)
{
@ -380,11 +383,13 @@ namespace OpenTK.Platform.MacOS
throw new Exception(ErrorString(err));
}
}
[DllImport(agl)] static extern byte aglSetOffScreen(AGLContext ctx, int width, int height, int rowbytes, IntPtr baseaddr);
[DllImport(agl)] static extern AGLDrawable aglGetDrawable(AGLContext ctx);
[DllImport(agl)]
private static extern byte aglSetOffScreen(AGLContext ctx, int width, int height, int rowbytes, IntPtr baseaddr);
[DllImport(agl)]
private static extern AGLDrawable aglGetDrawable(AGLContext ctx);
[DllImport(agl, EntryPoint = "aglSetFullScreen")]
static extern byte _aglSetFullScreen(AGLContext ctx, int width, int height, int freq, int device);
private static extern byte _aglSetFullScreen(AGLContext ctx, int width, int height, int freq, int device);
internal static void aglSetFullScreen(AGLContext ctx, int width, int height, int freq, int device)
{
byte retval = _aglSetFullScreen(ctx, width, height, freq, device);
@ -403,24 +408,28 @@ namespace OpenTK.Platform.MacOS
/*
** Virtual screen functions
*/
[DllImport(agl)] static extern byte aglSetVirtualScreen(AGLContext ctx, int screen);
[DllImport(agl)] static extern int aglGetVirtualScreen(AGLContext ctx);
[DllImport(agl)]
private static extern byte aglSetVirtualScreen(AGLContext ctx, int screen);
[DllImport(agl)]
private static extern int aglGetVirtualScreen(AGLContext ctx);
/*
** Obtain version numbers
*/
[DllImport(agl)] static extern void aglGetVersion(int *major, int *minor);
[DllImport(agl)]
private static extern void aglGetVersion(int *major, int *minor);
/*
** Global library options
*/
[DllImport(agl)] static extern byte aglConfigure(GLenum pname, uint param);
[DllImport(agl)]
private static extern byte aglConfigure(GLenum pname, uint param);
/*
** Swap functions
*/
[DllImport(agl)] internal static extern void aglSwapBuffers(AGLContext ctx);
/*
** Per context options
*/
@ -429,7 +438,7 @@ namespace OpenTK.Platform.MacOS
[DllImport(agl)]
internal static extern bool aglDisable(AGLContext ctx, ParameterNames pname);
[DllImport(agl)]
static extern bool aglIsEnabled(AGLContext ctx, GLenum pname);
private static extern bool aglIsEnabled(AGLContext ctx, GLenum pname);
[DllImport(agl)]
internal static extern bool aglSetInteger(AGLContext ctx, ParameterNames pname, ref int param);
[DllImport(agl)]
@ -443,47 +452,59 @@ namespace OpenTK.Platform.MacOS
** Font function
*/
// TODO: face parameter should be of type StyleParameter in QuickDraw.
[DllImport(agl)] static extern byte aglUseFont(AGLContext ctx, int fontID, int face, int size, int first, int count, int @base);
[DllImport(agl)]
private static extern byte aglUseFont(AGLContext ctx, int fontID, int face, int size, int first, int count, int @base);
/*
** Error functions
*/
[DllImport(agl,EntryPoint="aglGetError")] internal static extern AglError GetError();
[DllImport(agl,EntryPoint="aglErrorString")] static extern IntPtr _aglErrorString(AglError code);
[DllImport(agl,EntryPoint="aglErrorString")]
private static extern IntPtr _aglErrorString(AglError code);
internal static string ErrorString(AglError code)
{
return Marshal.PtrToStringAnsi(_aglErrorString(code));
}
/*
** Soft reset function
*/
[DllImport(agl)] static extern void aglResetLibrary();
[DllImport(agl)]
private static extern void aglResetLibrary();
/*
** Surface texture function
*/
[DllImport(agl)] static extern void aglSurfaceTexture (AGLContext context, GLenum target, GLenum internalformat, AGLContext surfacecontext) ;
[DllImport(agl)]
private static extern void aglSurfaceTexture (AGLContext context, GLenum target, GLenum internalformat, AGLContext surfacecontext) ;
/*
** PBuffer functions
*/
[DllImport(agl)] static extern byte aglCreatePBuffer (int width, int height, GLenum target, GLenum internalFormat, long max_level, AGLPbuffer *pbuffer);
[DllImport(agl)] static extern byte aglDestroyPBuffer (AGLPbuffer pbuffer);
[DllImport(agl)] static extern byte aglDescribePBuffer (AGLPbuffer pbuffer, int *width, int *height, GLenum *target, GLenum *internalFormat, int *max_level);
[DllImport(agl)] static extern byte aglTexImagePBuffer (AGLContext ctx, AGLPbuffer pbuffer, int source);
[DllImport(agl)]
private static extern byte aglCreatePBuffer (int width, int height, GLenum target, GLenum internalFormat, long max_level, AGLPbuffer *pbuffer);
[DllImport(agl)]
private static extern byte aglDestroyPBuffer (AGLPbuffer pbuffer);
[DllImport(agl)]
private static extern byte aglDescribePBuffer (AGLPbuffer pbuffer, int *width, int *height, GLenum *target, GLenum *internalFormat, int *max_level);
[DllImport(agl)]
private static extern byte aglTexImagePBuffer (AGLContext ctx, AGLPbuffer pbuffer, int source);
/*
** Pbuffer Drawable Functions
*/
[DllImport(agl)] static extern byte aglSetPBuffer (AGLContext ctx, AGLPbuffer pbuffer, int face, int level, int screen) ;
[DllImport(agl)] static extern byte aglGetPBuffer (AGLContext ctx, AGLPbuffer *pbuffer, int *face, int *level, int *screen) ;
[DllImport(agl)]
private static extern byte aglSetPBuffer (AGLContext ctx, AGLPbuffer pbuffer, int face, int level, int screen) ;
[DllImport(agl)]
private static extern byte aglGetPBuffer (AGLContext ctx, AGLPbuffer *pbuffer, int *face, int *level, int *screen) ;
/*
** CGL functions
*/
[DllImport(agl)] static extern byte aglGetCGLContext(AGLContext ctx, void **cgl_ctx) ;
[DllImport(agl)] static extern byte aglGetCGLPixelFormat(AGLPixelFormat pix, void **cgl_pix);
[DllImport(agl)]
private static extern byte aglGetCGLContext(AGLContext ctx, void **cgl_ctx) ;
[DllImport(agl)]
private static extern byte aglGetCGLPixelFormat(AGLPixelFormat pix, void **cgl_pix);
#pragma warning restore 0169
}

View file

@ -1,4 +1,3 @@
#region License
//
// The Open Toolkit Library License
//
@ -6,7 +5,7 @@
//
// 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
// 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:
@ -23,14 +22,12 @@
// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
// OTHER DEALINGS IN THE SOFTWARE.
//
#endregion
// Created by Erik Ylvisaker on 3/17/08.
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Runtime.InteropServices;
namespace OpenTK.Platform.MacOS
{
@ -45,17 +42,13 @@ namespace OpenTK.Platform.MacOS
/// <summary>
/// AGL context implementation for WinForms compatibility.
/// </summary>
class AglContext : IGraphicsContext, IGraphicsContextInternal
internal class AglContext : IGraphicsContext, IGraphicsContextInternal
{
ContextHandle Handle;
GraphicsMode mode;
IWindowInfo carbonWindow;
IGraphicsContext dummyContext; // for extension loading
bool disposed;
bool error_checking;
private IWindowInfo carbonWindow;
private IGraphicsContext dummyContext; // for extension loading
readonly GetInt XOffset;
readonly GetInt YOffset;
private readonly GetInt XOffset;
private readonly GetInt YOffset;
public AglContext(GraphicsMode mode, IWindowInfo window, IGraphicsContext shareContext,
GetInt xoffset, GetInt yoffset)
@ -71,7 +64,7 @@ namespace OpenTK.Platform.MacOS
if (shareContext is AglContext)
{
shareContextRef = ((AglContext)shareContext).Handle.Handle;
shareContextRef = ((AglContext)shareContext).Context.Handle;
}
else if (shareContext is GraphicsContext)
{
@ -102,7 +95,7 @@ namespace OpenTK.Platform.MacOS
aglAttributes.Add(value);
}
void CreateContext(GraphicsMode mode, IWindowInfo carbonWindow, IntPtr shareContextRef, bool fullscreen)
private void CreateContext(GraphicsMode mode, IWindowInfo carbonWindow, IntPtr shareContextRef, bool fullscreen)
{
Debug.Print("AGL pixel format attributes:");
@ -118,7 +111,7 @@ namespace OpenTK.Platform.MacOS
Debug.Print("Creating AGL context. Sharing with {0}", shareContextRef);
// create the context and share it with the share reference.
Handle = new ContextHandle(Agl.aglCreateContext(pixelformat, shareContextRef));
Context = new ContextHandle(Agl.aglCreateContext(pixelformat, shareContextRef));
MyAGLReportError("aglCreateContext");
// Free the pixel format from memory.
@ -130,9 +123,9 @@ namespace OpenTK.Platform.MacOS
Update(carbonWindow);
MakeCurrent(carbonWindow);
Debug.Print("context: {0}", Handle.Handle);
Debug.Print("context: {0}", Context.Handle);
dummyContext = new GraphicsContext(Handle,
dummyContext = new GraphicsContext(Context,
GetAddress,
delegate()
{
@ -140,7 +133,7 @@ namespace OpenTK.Platform.MacOS
});
}
void SetBufferRect(IWindowInfo carbonWindow)
private void SetBufferRect(IWindowInfo carbonWindow)
{
Rect rect = API.GetControlBounds(carbonWindow.Handle);
@ -149,28 +142,36 @@ namespace OpenTK.Platform.MacOS
int[] glrect = new int[4];
if (XOffset != null)
{
glrect[0] = rect.X + XOffset();
}
else
{
glrect[0] = rect.X;
}
if (YOffset != null)
{
glrect[1] = rect.Y + YOffset();
}
else
{
glrect[1] = rect.Y;
}
glrect[2] = rect.Width;
glrect[3] = rect.Height;
Agl.aglSetInteger(Handle.Handle, Agl.ParameterNames.AGL_BUFFER_RECT, glrect);
Agl.aglSetInteger(Context.Handle, Agl.ParameterNames.AGL_BUFFER_RECT, glrect);
MyAGLReportError("aglSetInteger");
Agl.aglEnable(Handle.Handle, Agl.ParameterNames.AGL_BUFFER_RECT);
Agl.aglEnable(Context.Handle, Agl.ParameterNames.AGL_BUFFER_RECT);
MyAGLReportError("aglEnable");
}
void SetDrawable(IWindowInfo carbonWindow)
private void SetDrawable(IWindowInfo carbonWindow)
{
IntPtr windowPort = GetWindowPortForWindowInfo(carbonWindow);
//Debug.Print("Setting drawable for context {0} to window port: {1}", Handle.Handle, windowPort);
Agl.aglSetDrawable(Handle.Handle, windowPort);
Agl.aglSetDrawable(Context.Handle, windowPort);
MyAGLReportError("aglSetDrawable");
}
@ -188,22 +189,22 @@ namespace OpenTK.Platform.MacOS
SetDrawable(window);
SetBufferRect(window);
Agl.aglUpdateContext(Handle.Handle);
Agl.aglUpdateContext(Context.Handle);
}
void MyAGLReportError(string function)
private void MyAGLReportError(string function)
{
Agl.AglError err = Agl.GetError();
if (err != Agl.AglError.NoError)
{
throw new Exception(String.Format(
"AGL Error from function {0}: {1} {2}",
function, err, Agl.ErrorString(err)));
}
}
#region IGraphicsContext Members
bool firstSwap = true;
private bool firstSwap = true;
public void SwapBuffers()
{
// this is part of the hack to avoid dropping the first frame when
@ -216,19 +217,21 @@ namespace OpenTK.Platform.MacOS
Update(carbonWindow);
}
Agl.aglSwapBuffers(Handle.Handle);
Agl.aglSwapBuffers(Context.Handle);
MyAGLReportError("aglSwapBuffers");
}
public void MakeCurrent(IWindowInfo window)
{
if (Agl.aglSetCurrentContext(Handle.Handle) == false)
if (Agl.aglSetCurrentContext(Context.Handle) == false)
{
MyAGLReportError("aglSetCurrentContext");
}
}
public bool IsCurrent
{
get { return (Handle.Handle == Agl.aglGetCurrentContext()); }
get { return (Context.Handle == Agl.aglGetCurrentContext()); }
}
public int SwapInterval
@ -236,7 +239,7 @@ namespace OpenTK.Platform.MacOS
get
{
int swap_interval = 0;
if (Agl.aglGetInteger(Handle.Handle, Agl.ParameterNames.AGL_SWAP_INTERVAL, out swap_interval))
if (Agl.aglGetInteger(Context.Handle, Agl.ParameterNames.AGL_SWAP_INTERVAL, out swap_interval))
{
return swap_interval;
}
@ -248,36 +251,21 @@ namespace OpenTK.Platform.MacOS
}
set
{
if (!Agl.aglSetInteger(Handle.Handle, Agl.ParameterNames.AGL_SWAP_INTERVAL, ref value))
if (!Agl.aglSetInteger(Context.Handle, Agl.ParameterNames.AGL_SWAP_INTERVAL, ref value))
{
MyAGLReportError("aglSetInteger");
}
}
}
public GraphicsMode Mode
{
get
{
return mode;
}
set
{
mode = value;
}
}
public GraphicsMode Mode { get; set; }
public void LoadAll()
{
dummyContext.LoadAll();
}
public bool IsDisposed
{
get
{
return disposed;
}
}
public bool IsDisposed { get; private set; }
public bool VSync
{
@ -295,25 +283,11 @@ namespace OpenTK.Platform.MacOS
{
get
{
return mode;
return Mode;
}
}
public bool ErrorChecking
{
get
{
return error_checking;
}
set
{
error_checking = value;
}
}
#endregion
#region IDisposable Members
public bool ErrorChecking { get; set; }
~AglContext()
{
@ -325,10 +299,12 @@ namespace OpenTK.Platform.MacOS
Dispose(true);
}
void Dispose(bool disposing)
private void Dispose(bool disposing)
{
if (IsDisposed || Handle.Handle == IntPtr.Zero)
if (IsDisposed || Context.Handle == IntPtr.Zero)
{
return;
}
Debug.Print("Disposing of AGL context.");
Agl.aglSetCurrentContext(IntPtr.Zero);
@ -343,10 +319,10 @@ namespace OpenTK.Platform.MacOS
// Actually, it seems to crash the mono runtime. -AMK 2013
Debug.Print("Destroying context");
if (Agl.aglDestroyContext(Handle.Handle) == true)
if (Agl.aglDestroyContext(Context.Handle) == true)
{
Debug.Print("Context destruction completed successfully.");
Handle = ContextHandle.Zero;
Context = ContextHandle.Zero;
return;
}
@ -360,13 +336,9 @@ namespace OpenTK.Platform.MacOS
throw new Exception(Agl.ErrorString(Agl.GetError()));
}
disposed = true;
IsDisposed = true;
}
#endregion
#region IGraphicsContextInternal Members
public IntPtr GetAddress(string function)
{
return NS.GetAddress(function);
@ -385,14 +357,6 @@ namespace OpenTK.Platform.MacOS
}
}
public ContextHandle Context
{
get
{
return Handle;
}
}
#endregion
public ContextHandle Context { get; private set; }
}
}

View file

@ -1,4 +1,3 @@
#region License
//
// The Open Toolkit Library License
//
@ -6,7 +5,7 @@
//
// 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
// 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:
@ -23,17 +22,15 @@
// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
// OTHER DEALINGS IN THE SOFTWARE.
//
#endregion
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Text;
using OpenTK.Graphics;
namespace OpenTK.Platform.MacOS
{
class AglGraphicsMode
internal class AglGraphicsMode
{
public GraphicsMode SelectGraphicsMode(ColorFormat color, int depth, int stencil,
int samples, ColorFormat accum, int buffers, bool stereo, out IntPtr pixelformat)
@ -58,9 +55,7 @@ namespace OpenTK.Platform.MacOS
return GetGraphicsModeFromPixelFormat(pixelformat);
}
#region Internal Members
static bool RelaxGraphicsMode(ref ColorFormat color, ref int depth, ref int stencil, ref int samples, ref ColorFormat accum, ref int buffers, ref bool stereo)
private static bool RelaxGraphicsMode(ref ColorFormat color, ref int depth, ref int stencil, ref int samples, ref ColorFormat accum, ref int buffers, ref bool stereo)
{
// Parameters are relaxed in order of importance.
// - Accumulator buffers are way outdated as a concept,
@ -128,7 +123,7 @@ namespace OpenTK.Platform.MacOS
return false;
}
GraphicsMode GetGraphicsModeFromPixelFormat(IntPtr pixelformat)
private GraphicsMode GetGraphicsModeFromPixelFormat(IntPtr pixelformat)
{
int r, g, b, a;
Agl.aglDescribePixelFormat(pixelformat, Agl.PixelFormatAttribute.AGL_RED_SIZE, out r);
@ -151,13 +146,13 @@ namespace OpenTK.Platform.MacOS
depth, stencil, samples, new ColorFormat(ar, ag, ab, aa), buffers + 1, stereo != 0);
}
IntPtr SelectPixelFormat(ColorFormat color, int depth, int stencil, int samples,
private IntPtr SelectPixelFormat(ColorFormat color, int depth, int stencil, int samples,
ColorFormat accum, int buffers, bool stereo)
{
List<int> attribs = new List<int>();
Debug.Print("Bits per pixel: {0}", color.BitsPerPixel);
if (color.BitsPerPixel > 0)
{
if (!color.IsIndexed)
@ -224,7 +219,5 @@ namespace OpenTK.Platform.MacOS
IntPtr pixelformat = Agl.aglChoosePixelFormat(IntPtr.Zero, 0, attribs.ToArray());
return pixelformat;
}
#endregion
}
}

View file

@ -68,10 +68,10 @@ namespace OpenTK.Platform.MacOS.Carbon
[StructLayout(LayoutKind.Sequential)]
internal struct Rect
{
short top;
short left;
short bottom;
short right;
private short top;
private short left;
private short bottom;
private short right;
internal Rect(int left, int top, int width, int height)
: this((short)left, (short)top, (short)width, (short)height)
@ -132,16 +132,16 @@ namespace OpenTK.Platform.MacOS.Carbon
}
}
class API
internal class API
{
const string carbon = "/System/Library/Frameworks/Carbon.framework/Versions/Current/Carbon";
private const string carbon = "/System/Library/Frameworks/Carbon.framework/Versions/Current/Carbon";
[DllImport(carbon)]
internal unsafe static extern OSStatus DMGetGDeviceByDisplayID(
IntPtr displayID, out IntPtr displayDevice, Boolean failToMain);
[DllImport(carbon)]
static extern IntPtr GetControlBounds(IntPtr control, out Rect bounds);
private static extern IntPtr GetControlBounds(IntPtr control, out Rect bounds);
internal static Rect GetControlBounds(IntPtr control)
{

View file

@ -1,4 +1,3 @@
#region License
//
// The Open Toolkit Library License
//
@ -6,7 +5,7 @@
//
// 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
// 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:
@ -23,11 +22,7 @@
// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
// OTHER DEALINGS IN THE SOFTWARE.
//
#endregion
using System;
using System.Collections.Generic;
using System.Text;
using System.Windows.Forms;
using OpenTK.Graphics;
@ -36,18 +31,17 @@ using OpenTK.Platform.MacOS;
namespace OpenTK
{
class CarbonGLControl : IGLControl
internal class CarbonGLControl : IGLControl
{
GraphicsMode mode;
Control control;
IWindowInfo window_info;
private GraphicsMode mode;
private Control control;
internal CarbonGLControl(GraphicsMode mode, Control owner)
{
this.mode = mode;
this.control = owner;
window_info = Utilities.CreateMacOSCarbonWindowInfo(control.Handle, false, true);
WindowInfo = Utilities.CreateMacOSCarbonWindowInfo(control.Handle, false, true);
}
private int GetXOffset()
@ -57,7 +51,7 @@ namespace OpenTK
private int GetYOffset()
{
if (control.TopLevelControl != null)
if (control.TopLevelControl != null)
{
System.Drawing.Point offset = control.PointToScreen (control.Location);
System.Drawing.Point windowOffset = control.TopLevelControl.PointToScreen (System.Drawing.Point.Empty);
@ -67,8 +61,6 @@ namespace OpenTK
return control.Location.Y;
}
#region IGLControl Members
public IGraphicsContext CreateContext(int major, int minor, GraphicsContextFlags flags)
{
// AGL does not support OpenGL profiles
@ -76,24 +68,16 @@ namespace OpenTK
}
// TODO: Fix this
bool lastIsIdle = false;
private bool lastIsIdle = false;
public bool IsIdle
{
get
{
get
{
lastIsIdle = !lastIsIdle;
return lastIsIdle;
}
}
public IWindowInfo WindowInfo
{
get
{
return window_info;
}
}
#endregion
public IWindowInfo WindowInfo { get; }
}
}

View file

@ -1,12 +1,11 @@
#region License
//
//
// The Open Toolkit Library License
//
// Copyright (c) 2006 - 2009 the Open Toolkit library, except where noted.
//
// 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
// 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:
@ -23,7 +22,6 @@
// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
// OTHER DEALINGS IN THE SOFTWARE.
//
#endregion
using System;
using OpenTK.Graphics;
@ -31,10 +29,8 @@ using OpenTK.Platform;
namespace OpenTK
{
class DummyGLControl : IGLControl
internal class DummyGLControl : IGLControl
{
#region IGLControl Members
public IGraphicsContext CreateContext(int major, int minor, GraphicsContextFlags flags)
{
return new DummyContext();
@ -50,22 +46,11 @@ namespace OpenTK
get { return Utilities.CreateDummyWindowInfo(); }
}
#endregion
#region class DummyContext
class DummyContext : IGraphicsContext, IGraphicsContextInternal
private class DummyContext : IGraphicsContext, IGraphicsContextInternal
{
static int instance_count;
private static int instance_count;
readonly ContextHandle handle = new ContextHandle(new IntPtr(
System.Threading.Interlocked.Increment(ref instance_count)));
IWindowInfo current_window;
bool is_disposed;
int swap_interval;
#region IGraphicsContext Members
private IWindowInfo current_window;
public void SwapBuffers()
{
@ -81,10 +66,7 @@ namespace OpenTK
get { return current_window != null; }
}
public bool IsDisposed
{
get { return is_disposed; }
}
public bool IsDisposed { get; private set; }
public bool VSync
{
@ -98,17 +80,7 @@ namespace OpenTK
}
}
public int SwapInterval
{
get
{
return swap_interval;
}
set
{
swap_interval = value;
}
}
public int SwapInterval { get; set; }
public void Update(IWindowInfo window)
{
@ -136,17 +108,11 @@ namespace OpenTK
public void Dispose()
{
is_disposed = true;
IsDisposed = true;
}
#endregion
#region IGraphicsContextInternal
public ContextHandle Context
{
get { return handle; }
}
public ContextHandle Context { get; } = new ContextHandle(new IntPtr(
System.Threading.Interlocked.Increment(ref instance_count)));
public IntPtr GetAddress(IntPtr function)
{
@ -162,10 +128,6 @@ namespace OpenTK
{
get { return this; }
}
#endregion
}
#endregion
}
}

View file

@ -2,12 +2,12 @@
{
partial class GLControl
{
/// <summary>
/// <summary>
/// Required designer variable.
/// </summary>
private System.ComponentModel.IContainer components = null;
/// <summary>
/// <summary>
/// Clean up any resources being used.
/// </summary>
/// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
@ -20,18 +20,16 @@
base.Dispose(disposing);
}
#region Component Designer generated code
/// <summary>
/// Required method for Designer support - do not modify
/// <summary>
/// Required method for Designer support - do not modify
/// the contents of this method with the code editor.
/// </summary>
private void InitializeComponent()
{
this.SuspendLayout();
//
//
// NewGLControl
//
//
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.BackColor = System.Drawing.Color.Black;
@ -39,7 +37,5 @@
this.ResumeLayout(false);
}
#endregion
}
}

View file

@ -1,12 +1,11 @@
#region License
//
//
// The Open Toolkit Library License
//
// Copyright (c) 2006 - 2009 the Open Toolkit library, except where noted.
//
// 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
// 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:
@ -23,20 +22,14 @@
// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
// OTHER DEALINGS IN THE SOFTWARE.
//
#endregion
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Diagnostics;
using System.Drawing;
using System.Data;
using System.Text;
using System.Windows.Forms;
using OpenTK.Platform;
using OpenTK.Graphics;
using OpenTK.Graphics.OpenGL;
namespace OpenTK
{
@ -48,23 +41,22 @@ namespace OpenTK
/// </summary>
public partial class GLControl : UserControl
{
IGraphicsContext context;
IGLControl implementation;
GraphicsMode format;
int major, minor;
GraphicsContextFlags flags;
bool? initial_vsync_value;
private IGraphicsContext context;
private IGLControl implementation;
private GraphicsMode format;
private int major, minor;
private GraphicsContextFlags flags;
private bool? initial_vsync_value;
// Indicates that OnResize was called before OnHandleCreated.
// To avoid issues with missing OpenGL contexts, we suppress
// the premature Resize event and raise it as soon as the handle
// is ready.
bool resize_event_suppressed;
private bool resize_event_suppressed;
// Indicates whether the control is in design mode. Due to issues
// wiith the DesignMode property and nested controls,we need to
// evaluate this in the constructor.
readonly bool design_mode;
#region --- Constructors ---
private readonly bool design_mode;
/// <summary>
/// Constructs a new instance.
@ -91,7 +83,9 @@ namespace OpenTK
public GLControl(GraphicsMode mode, int major, int minor, GraphicsContextFlags flags)
{
if (mode == null)
{
throw new ArgumentNullException("mode");
}
// SDL does not currently support embedding
// on external windows. If Open.Toolkit is not yet
@ -104,7 +98,7 @@ namespace OpenTK
{
Backend = PlatformBackend.PreferNative
});
SetStyle(ControlStyles.Opaque, true);
SetStyle(ControlStyles.UserPaint, true);
SetStyle(ControlStyles.AllPaintingInWmPaint, true);
@ -125,11 +119,7 @@ namespace OpenTK
InitializeComponent();
}
#endregion
#region --- Private Methods ---
IGLControl Implementation
private IGLControl Implementation
{
get
{
@ -140,7 +130,7 @@ namespace OpenTK
}
[Conditional("DEBUG")]
void ValidateContext(string message)
private void ValidateContext(string message)
{
if (!Context.IsCurrent)
{
@ -148,22 +138,24 @@ namespace OpenTK
}
}
void ValidateState()
private void ValidateState()
{
if (IsDisposed)
{
throw new ObjectDisposedException(GetType().Name);
}
if (!IsHandleCreated)
{
CreateControl();
}
if (implementation == null || context == null || context.IsDisposed)
{
RecreateHandle();
}
}
#endregion
#region --- Protected Methods ---
/// <summary>
/// Gets the <c>CreateParams</c> instance for this <c>GLControl</c>
/// </summary>
@ -190,21 +182,31 @@ namespace OpenTK
protected override void OnHandleCreated(EventArgs e)
{
if (context != null)
{
context.Dispose();
}
if (implementation != null)
{
implementation.WindowInfo.Dispose();
}
if (design_mode)
{
implementation = new DummyGLControl();
}
else
{
implementation = new GLControlFactory().CreateGLControl(format, this);
}
context = implementation.CreateContext(major, minor, flags);
MakeCurrent();
if (!design_mode)
{
((IGraphicsContextInternal)Context).LoadAll();
}
// Deferred setting of vsync mode. See VSync property for more information.
if (initial_vsync_value.HasValue)
@ -253,7 +255,9 @@ namespace OpenTK
ValidateState();
if (design_mode)
{
e.Graphics.Clear(BackColor);
}
base.OnPaint(e);
}
@ -273,13 +277,15 @@ namespace OpenTK
return;
}
if (Configuration.RunningOnMacOS)
if (Configuration.RunningOnMacOS)
{
DelayUpdate delay = PerformContextUpdate;
BeginInvoke(delay); //Need the native window to resize first otherwise our control will be in the wrong place.
}
else if (context != null)
{
context.Update (Implementation.WindowInfo);
}
base.OnResize(e);
}
@ -294,7 +300,9 @@ namespace OpenTK
public void PerformContextUpdate()
{
if (context != null)
{
context.Update (Implementation.WindowInfo);
}
}
/// <summary>
@ -304,17 +312,13 @@ namespace OpenTK
protected override void OnParentChanged(EventArgs e)
{
if (context != null)
{
context.Update(Implementation.WindowInfo);
}
base.OnParentChanged(e);
}
#endregion
#region --- Public Methods ---
#region public void SwapBuffers()
/// <summary>
/// Swaps the front and back buffers, presenting the rendered scene to the screen.
/// This method will have no effect on a single-buffered <c>GraphicsMode</c>.
@ -325,10 +329,6 @@ namespace OpenTK
Context.SwapBuffers();
}
#endregion
#region public void MakeCurrent()
/// <summary>
/// <para>
/// Makes <see cref="GLControl.Context"/> current in the calling thread.
@ -350,10 +350,6 @@ namespace OpenTK
Context.MakeCurrent(Implementation.WindowInfo);
}
#endregion
#region public bool IsIdle
/// <summary>
/// Gets a value indicating whether the current thread contains pending system messages.
/// </summary>
@ -367,10 +363,6 @@ namespace OpenTK
}
}
#endregion
#region public IGraphicsContext Context
/// <summary>
/// Gets the <c>IGraphicsContext</c> instance that is associated with the <c>GLControl</c>.
/// The associated <c>IGraphicsContext</c> is updated whenever the <c>GLControl</c>
@ -390,10 +382,6 @@ namespace OpenTK
private set { context = value; }
}
#endregion
#region public float AspectRatio
/// <summary>
/// Gets the aspect ratio of this GLControl.
/// </summary>
@ -407,10 +395,6 @@ namespace OpenTK
}
}
#endregion
#region public bool VSync
/// <summary>
/// Gets or sets a value indicating whether vsync is active for this <c>GLControl</c>.
/// When using multiple <c>GLControl</c>s, ensure that <see cref="Context"/>
@ -451,10 +435,6 @@ namespace OpenTK
}
}
#endregion
#region public GraphicsMode GraphicsMode
/// <summary>
/// Gets the <c>GraphicsMode</c> of the <c>IGraphicsContext</c> associated with
/// this <c>GLControl</c>. If you wish to change <c>GraphicsMode</c>, you must
@ -469,10 +449,6 @@ namespace OpenTK
}
}
#endregion
#region WindowInfo
/// <summary>
/// Gets the <see cref="OpenTK.Platform.IWindowInfo"/> for this instance.
/// </summary>
@ -480,41 +456,5 @@ namespace OpenTK
{
get { return implementation.WindowInfo; }
}
#endregion
#region public Bitmap GrabScreenshot()
/// <summary>
/// Grabs a screenshot of the frontbuffer contents.
/// When using multiple <c>GLControl</c>s, ensure that <see cref="Context"/>
/// is current before accessing this property.
/// <seealso cref="Context"/>
/// <seealso cref="MakeCurrent"/>
/// </summary>
/// <returns>A System.Drawing.Bitmap, containing the contents of the frontbuffer.</returns>
/// <exception cref="OpenTK.Graphics.GraphicsContextException">
/// Occurs when no OpenTK.Graphics.GraphicsContext is current in the calling thread.
/// </exception>
[Obsolete("This method will not work correctly with OpenGL|ES. Please use GL.ReadPixels to capture the contents of the framebuffer (refer to http://www.opentk.com/doc/graphics/save-opengl-rendering-to-disk for more information).")]
public Bitmap GrabScreenshot()
{
ValidateState();
ValidateContext("GrabScreenshot()");
Bitmap bmp = new Bitmap(this.ClientSize.Width, this.ClientSize.Height);
System.Drawing.Imaging.BitmapData data =
bmp.LockBits(this.ClientRectangle, System.Drawing.Imaging.ImageLockMode.WriteOnly,
System.Drawing.Imaging.PixelFormat.Format24bppRgb);
GL.ReadPixels(0, 0, this.ClientSize.Width, this.ClientSize.Height, PixelFormat.Bgr, PixelType.UnsignedByte,
data.Scan0);
bmp.UnlockBits(data);
bmp.RotateFlip(RotateFlipType.RotateNoneFlipY);
return bmp;
}
#endregion
#endregion
}
}

View file

@ -1,12 +1,11 @@
#region License
//
//
// The Open Toolkit Library License
//
// Copyright (c) 2006 - 2009 the Open Toolkit library, except where noted.
//
// 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
// 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:
@ -23,31 +22,47 @@
// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
// OTHER DEALINGS IN THE SOFTWARE.
//
#endregion
using System;
using System.Collections.Generic;
using System.Text;
using System.Windows.Forms;
using OpenTK.Graphics;
namespace OpenTK
{
// Constructs GLControls.
class GLControlFactory
internal class GLControlFactory
{
public IGLControl CreateGLControl(GraphicsMode mode, Control control)
{
if (mode == null)
{
throw new ArgumentNullException("mode");
}
if (control == null)
{
throw new ArgumentNullException("control");
}
if (Configuration.RunningOnSdl2) return new Sdl2GLControl(mode, control);
else if (Configuration.RunningOnWindows) return new WinGLControl(mode, control);
else if (Configuration.RunningOnMacOS) return new CarbonGLControl(mode, control);
else if (Configuration.RunningOnX11) return new X11GLControl(mode, control);
else throw new PlatformNotSupportedException();
if (Configuration.RunningOnSdl2)
{
return new Sdl2GLControl(mode, control);
}
else if (Configuration.RunningOnWindows)
{
return new WinGLControl(mode, control);
}
else if (Configuration.RunningOnMacOS)
{
return new CarbonGLControl(mode, control);
}
else if (Configuration.RunningOnX11)
{
return new X11GLControl(mode, control);
}
else
{
throw new PlatformNotSupportedException();
}
}
}
}

View file

@ -1,12 +1,11 @@
#region License
//
//
// The Open Toolkit Library License
//
// Copyright (c) 2006 - 2009 the Open Toolkit library, except where noted.
//
// 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
// 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:
@ -23,11 +22,6 @@
// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
// OTHER DEALINGS IN THE SOFTWARE.
//
#endregion
using System;
using System.Collections.Generic;
using System.Text;
using OpenTK.Graphics;
using OpenTK.Platform;

View file

@ -1,4 +1,3 @@
#region License
//
// NS.cs
//
@ -26,8 +25,6 @@
// THE SOFTWARE.
//
#endregion
using System;
using System.Runtime.InteropServices;
@ -35,18 +32,18 @@ namespace OpenTK.Platform.MacOS
{
internal class NS
{
const string Library = "libdl.dylib";
private const string Library = "libdl.dylib";
[DllImport(Library, EntryPoint = "NSIsSymbolNameDefined")]
static extern bool NSIsSymbolNameDefined(string s);
private static extern bool NSIsSymbolNameDefined(string s);
[DllImport(Library, EntryPoint = "NSIsSymbolNameDefined")]
static extern bool NSIsSymbolNameDefined(IntPtr s);
private static extern bool NSIsSymbolNameDefined(IntPtr s);
[DllImport(Library, EntryPoint = "NSLookupAndBindSymbol")]
static extern IntPtr NSLookupAndBindSymbol(string s);
private static extern IntPtr NSLookupAndBindSymbol(string s);
[DllImport(Library, EntryPoint = "NSLookupAndBindSymbol")]
static extern IntPtr NSLookupAndBindSymbol(IntPtr s);
private static extern IntPtr NSLookupAndBindSymbol(IntPtr s);
[DllImport(Library, EntryPoint = "NSAddressOfSymbol")]
static extern IntPtr NSAddressOfSymbol(IntPtr symbol);
private static extern IntPtr NSAddressOfSymbol(IntPtr symbol);
[DllImport(Library)]
private static extern IntPtr dlopen(String fileName, int flags);
[DllImport(Library)]
@ -88,7 +85,9 @@ namespace OpenTK.Platform.MacOS
{
symbol = NSLookupAndBindSymbol(function);
if (symbol != IntPtr.Zero)
{
symbol = NSAddressOfSymbol(symbol);
}
}
return symbol;
}

View file

@ -40,6 +40,8 @@
<IsWebBootstrapper>false</IsWebBootstrapper>
<UseApplicationTrust>false</UseApplicationTrust>
<BootstrapperEnabled>true</BootstrapperEnabled>
<Deterministic>true</Deterministic>
<RunCodeAnalysis>true</RunCodeAnalysis>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
<AllowUnsafeBlocks>True</AllowUnsafeBlocks>
@ -55,7 +57,7 @@
<RegisterForComInterop>False</RegisterForComInterop>
<RemoveIntegerChecks>False</RemoveIntegerChecks>
<WarningLevel>4</WarningLevel>
<CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet>
<CodeAnalysisRuleSet>..\..\stylecop.ruleset</CodeAnalysisRuleSet>
<DebugType>full</DebugType>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
@ -71,8 +73,8 @@
<RegisterForComInterop>False</RegisterForComInterop>
<RemoveIntegerChecks>False</RemoveIntegerChecks>
<WarningLevel>4</WarningLevel>
<CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet>
<DebugType>none</DebugType>
<CodeAnalysisRuleSet>..\..\stylecop.ruleset</CodeAnalysisRuleSet>
<DebugType>pdbonly</DebugType>
</PropertyGroup>
<PropertyGroup>
<SignAssembly>True</SignAssembly>
@ -158,6 +160,14 @@
<None Include="paket.references" />
<None Include="paket.template" />
</ItemGroup>
<ItemGroup>
<AdditionalFiles Include="$(SolutionDir)\stylecop.json">
<Link>stylecop.json</Link>
</AdditionalFiles>
<AdditionalFiles Include="$(SolutionDir)\stylecop.ruleset">
<Link>stylecop.ruleset</Link>
</AdditionalFiles>
</ItemGroup>
<Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" />
<PropertyGroup>
<PreBuildEvent>

View file

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

View file

@ -1,12 +1,11 @@
#region License
//
//
// The Open Toolkit Library License
//
// Copyright (c) 2006 - 2013 Stefanos Apostolopoulos
//
// 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
// 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:
@ -23,27 +22,22 @@
// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
// OTHER DEALINGS IN THE SOFTWARE.
//
#endregion
using System;
using System.Collections.Generic;
using System.Runtime.InteropServices;
using System.Text;
using System.Windows.Forms;
using OpenTK.Graphics;
using OpenTK.Platform;
namespace OpenTK
{
class Sdl2GLControl : IGLControl
internal class Sdl2GLControl : IGLControl
{
IWindowInfo window_info;
GraphicsMode mode;
private GraphicsMode mode;
public Sdl2GLControl(GraphicsMode mode, Control control)
{
this.mode = mode;
window_info = Utilities.CreateSdl2WindowInfo(control.Handle);
WindowInfo = Utilities.CreateSdl2WindowInfo(control.Handle);
// Fixme: SDL2 will refuse to create an OpenGL context on
// a window with the SDL_WINDOW_FOREIGN flag (i.e. windows
// that are passed to SDL2 through SDL_CreateWindowFrom).
@ -52,7 +46,7 @@ namespace OpenTK
public Graphics.IGraphicsContext CreateContext(int major, int minor, Graphics.GraphicsContextFlags flags)
{
return new GraphicsContext(mode, window_info, major, minor, flags);
return new GraphicsContext(mode, WindowInfo, major, minor, flags);
}
public bool IsIdle
@ -60,12 +54,9 @@ namespace OpenTK
get { return NativeMethods.SDL_HasEvents(0, 0xffff); }
}
public Platform.IWindowInfo WindowInfo
{
get { return window_info; }
}
public Platform.IWindowInfo WindowInfo { get; }
static class NativeMethods
private static class NativeMethods
{
[DllImport("SDL2.dll", CallingConvention = CallingConvention.Cdecl)]
public static extern bool SDL_HasEvents(int minType, int maxType);

View file

@ -1,12 +1,11 @@
#region License
//
//
// The Open Toolkit Library License
//
// Copyright (c) 2006 - 2009 the Open Toolkit library, except where noted.
//
// 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
// 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:
@ -23,11 +22,8 @@
// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
// OTHER DEALINGS IN THE SOFTWARE.
//
#endregion
using System;
using System.Collections.Generic;
using System.Text;
using System.Windows.Forms;
using OpenTK.Graphics;
@ -35,13 +31,9 @@ using OpenTK.Platform;
namespace OpenTK
{
class WinGLControl : IGLControl
internal class WinGLControl : IGLControl
{
#region P/Invoke declarations
#region Message
struct MSG
private struct MSG
{
public IntPtr HWnd;
public uint Message;
@ -57,11 +49,7 @@ namespace OpenTK
}
}
#endregion
#region Point
struct POINT
private struct POINT
{
public int X;
public int Y;
@ -83,46 +71,23 @@ namespace OpenTK
}
}
#endregion
#region PeekMessage
[System.Security.SuppressUnmanagedCodeSecurity]
[System.Runtime.InteropServices.DllImport("User32.dll")]
static extern bool PeekMessage(ref MSG msg, IntPtr hWnd, int messageFilterMin, int messageFilterMax, int flags);
private static extern bool PeekMessage(ref MSG msg, IntPtr hWnd, int messageFilterMin, int messageFilterMax, int flags);
#endregion
#region
#endregion
#endregion
#region Fields
MSG msg = new MSG();
IWindowInfo window_info;
GraphicsMode mode;
#endregion
#region Constructors
private MSG msg = new MSG();
private GraphicsMode mode;
public WinGLControl(GraphicsMode mode, Control control)
{
this.mode = mode;
window_info = Utilities.CreateWindowsWindowInfo(control.Handle);
WindowInfo = Utilities.CreateWindowsWindowInfo(control.Handle);
}
#endregion
#region IGLControl Members
public IGraphicsContext CreateContext(int major, int minor, GraphicsContextFlags flags)
{
return new GraphicsContext(mode, window_info, major, minor, flags);
return new GraphicsContext(mode, WindowInfo, major, minor, flags);
}
public bool IsIdle
@ -130,15 +95,6 @@ namespace OpenTK
get { return !PeekMessage(ref msg, IntPtr.Zero, 0, 0, 0); }
}
public IWindowInfo WindowInfo
{
get
{
// This method forces the creation of the control. Beware of this side-effect!
return window_info;
}
}
#endregion
public IWindowInfo WindowInfo { get; }
}
}

View file

@ -1,14 +1,10 @@
#region --- License ---
/* Licensed under the MIT/X11 license.
/* Licensed under the MIT/X11 license.
* Copyright (c) 2006-2008 the OpenTK Team.
* This notice may not be removed from any source distribution.
* See license.txt for licensing detailed licensing details.
*/
#endregion
using System;
using System.Collections.Generic;
using System.Text;
using System.Windows.Forms;
using System.Runtime.InteropServices;
@ -17,26 +13,24 @@ using OpenTK.Platform;
namespace OpenTK
{
class X11GLControl : IGLControl
internal class X11GLControl : IGLControl
{
#region P/Invokes
[DllImport("libX11")]
static extern IntPtr XCreateColormap(IntPtr display, IntPtr window, IntPtr visual, int alloc);
private static extern IntPtr XCreateColormap(IntPtr display, IntPtr window, IntPtr visual, int alloc);
[DllImport("libX11", EntryPoint = "XGetVisualInfo")]
static extern IntPtr XGetVisualInfoInternal(IntPtr display, IntPtr vinfo_mask, ref XVisualInfo template, out int nitems);
private static extern IntPtr XGetVisualInfoInternal(IntPtr display, IntPtr vinfo_mask, ref XVisualInfo template, out int nitems);
static IntPtr XGetVisualInfo(IntPtr display, int vinfo_mask, ref XVisualInfo template, out int nitems)
private static IntPtr XGetVisualInfo(IntPtr display, int vinfo_mask, ref XVisualInfo template, out int nitems)
{
return XGetVisualInfoInternal(display, (IntPtr)vinfo_mask, ref template, out nitems);
}
[DllImport("libX11")]
extern static int XPending(IntPtr diplay);
private extern static int XPending(IntPtr diplay);
[StructLayout(LayoutKind.Sequential)]
struct XVisualInfo
private struct XVisualInfo
{
public IntPtr Visual;
public IntPtr VisualID;
@ -56,26 +50,23 @@ namespace OpenTK
}
}
#endregion
#region Fields
GraphicsMode mode;
IWindowInfo window_info;
IntPtr display;
IntPtr rootWindow;
private GraphicsMode mode;
private IntPtr display;
private IntPtr rootWindow;
// Use reflection to retrieve the necessary values from Mono's Windows.Forms implementation.
Type xplatui = Type.GetType("System.Windows.Forms.XplatUIX11, System.Windows.Forms");
#endregion
private Type xplatui = Type.GetType("System.Windows.Forms.XplatUIX11, System.Windows.Forms");
internal X11GLControl(GraphicsMode mode, Control control)
{
if (mode == null)
{
throw new ArgumentNullException("mode");
}
if (control == null)
{
throw new ArgumentNullException("control");
}
// Note: the X11 window is created with a default XVisualInfo,
// that is not necessarily compatible with the desired GraphicsMode.
@ -94,19 +85,20 @@ namespace OpenTK
mode.Buffers,
mode.Stereo);
if (xplatui == null) throw new PlatformNotSupportedException(
if (xplatui == null)
{
throw new PlatformNotSupportedException(
"System.Windows.Forms.XplatUIX11 missing. Unsupported platform or Mono runtime version, aborting.");
}
// get the required handles from the X11 API.
display = (IntPtr)GetStaticFieldValue(xplatui, "DisplayHandle");
rootWindow = (IntPtr)GetStaticFieldValue(xplatui, "RootWindow");
int screen = (int)GetStaticFieldValue(xplatui, "ScreenNo");
window_info = Utilities.CreateX11WindowInfo(display, screen, control.Handle, rootWindow, IntPtr.Zero);
WindowInfo = Utilities.CreateX11WindowInfo(display, screen, control.Handle, rootWindow, IntPtr.Zero);
}
#region IGLControl Members
public IGraphicsContext CreateContext(int major, int minor, GraphicsContextFlags flags)
{
GraphicsContext context = new GraphicsContext(mode, this.WindowInfo, major, minor, flags);
@ -133,30 +125,18 @@ namespace OpenTK
get { return XPending(display) == 0; }
}
public IWindowInfo WindowInfo
{
get
{
return window_info;
}
}
public IWindowInfo WindowInfo { get; }
#endregion
#region Private Members
static object GetStaticFieldValue(Type type, string fieldName)
private static object GetStaticFieldValue(Type type, string fieldName)
{
return type.GetField(fieldName,
System.Reflection.BindingFlags.Static | System.Reflection.BindingFlags.NonPublic).GetValue(null);
}
static void SetStaticFieldValue(Type type, string fieldName, object value)
private static void SetStaticFieldValue(Type type, string fieldName, object value)
{
type.GetField(fieldName,
System.Reflection.BindingFlags.Static | System.Reflection.BindingFlags.NonPublic).SetValue(null, value);
}
#endregion
}
}

View file

@ -2,7 +2,7 @@ type project
id OpenTK.GLControl
owners
opentk thefiddler
authors
authors
The Open Toolkit Team
projectUrl
http://www.opentk.com
@ -19,5 +19,8 @@ tags
summary
A set of fast, low-level C# bindings for OpenGL, OpenGL ES and OpenAL.
description
The Open Toolkit is set of fast, low-level C# bindings for OpenGL, OpenGL ES and OpenAL. It runs on all major platforms and powers hundreds of apps, games and scientific research.
The Open Toolkit is set of fast, low-level C# bindings for OpenGL, OpenGL ES and OpenAL. It runs on all major platforms and powers hundreds of apps, games and scientific research.
OpenTK provides several utility libraries, including a math/linear algebra package, a windowing system, and input handling.
include-pdbs true
excludeddependencies
StyleCop.Analyzers

View file

@ -1,166 +1,155 @@
#region License
//
// The Open Toolkit Library License
//
// Copyright (c) 2006 - 2009 the Open Toolkit library, except where noted.
//
// 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 System.Collections.Generic;
using System.Runtime.InteropServices;
using System.Security;
using System;
using System.Threading;
using System.ComponentModel;
using Gdk;
using OpenTK.Graphics;
using OpenTK.Platform;
using OpenTK;
using Gtk;
namespace OpenTK
{
/// <summary>
/// The <see cref="GLWidget"/> is a GTK widget for which an OpenGL context can be used to draw arbitrary graphics.
/// </summary>
[CLSCompliant(false)]
[ToolboxItem(true)]
public class GLWidget: DrawingArea, IDisposable
public class GLWidget : GLArea
{
private static int _GraphicsContextCount;
private static bool _SharedContextInitialized = false;
#region Static attrs.
private IGraphicsContext _GraphicsContext;
private bool _Initialized = false;
static int _GraphicsContextCount;
static bool _SharedContextInitialized = false;
/// <summary>
/// The previous frame time reported by GTK.
/// </summary>
private double? _PreviousFrameTime;
#endregion
/// <summary>
/// Gets the time taken to render the last frame (in seconds).
/// </summary>
public double DeltaTime { get; private set; }
#region Attributes
/// <summary>
/// The set <see cref="ContextFlags"/> for this widget.
/// </summary>
public GraphicsContextFlags ContextFlags { get; }
IGraphicsContext _GraphicsContext;
IWindowInfo _WindowInfo;
GraphicsContextFlags _GraphicsContextFlags;
bool _Initialized = false;
#endregion
#region Properties
/// <summary>Use a single buffer versus a double buffer.</summary>
[Browsable(true)]
public bool SingleBuffer { get; set; }
/// <summary>Color Buffer Bits-Per-Pixel</summary>
public int ColorBPP { get; set; }
/// <summary>Accumulation Buffer Bits-Per-Pixel</summary>
public int AccumulatorBPP { get; set; }
/// <summary>Depth Buffer Bits-Per-Pixel</summary>
public int DepthBPP { get; set; }
/// <summary>Stencil Buffer Bits-Per-Pixel</summary>
public int StencilBPP { get; set; }
/// <summary>Number of samples</summary>
public int Samples { get; set; }
/// <summary>Indicates if steropic renderering is enabled</summary>
public bool Stereo { get; set; }
/// <summary>The major version of OpenGL to use.</summary>
public int GlVersionMajor { get; set; }
/// <summary>The minor version of OpenGL to use.</summary>
public int GlVersionMinor { get; set; }
public GraphicsContextFlags GraphicsContextFlags
{
get
{
return _GraphicsContextFlags;
}
set
{
_GraphicsContextFlags = value;
}
}
#endregion
#region Construction/Destruction
/// <summary>Constructs a new GLWidget.</summary>
/// <summary>
/// Initializes a new instance of the <see cref="GLWidget"/> class.
/// </summary>
public GLWidget()
: this(GraphicsMode.Default)
{
{
}
/// <summary>Constructs a new GLWidget using a given GraphicsMode</summary>
public GLWidget(GraphicsMode graphicsMode)
: this(graphicsMode, 1, 0, GraphicsContextFlags.Default)
{
}
/// <summary>Constructs a new GLWidget</summary>
public GLWidget(GraphicsMode graphicsMode, int glVersionMajor, int glVersionMinor, GraphicsContextFlags graphicsContextFlags)
{
this.DoubleBuffered = false;
SingleBuffer = graphicsMode.Buffers == 1;
ColorBPP = graphicsMode.ColorFormat.BitsPerPixel;
AccumulatorBPP = graphicsMode.AccumulatorFormat.BitsPerPixel;
DepthBPP = graphicsMode.Depth;
StencilBPP = graphicsMode.Stencil;
Samples = graphicsMode.Samples;
Stereo = graphicsMode.Stereo;
GlVersionMajor = glVersionMajor;
GlVersionMinor = glVersionMinor;
GraphicsContextFlags = graphicsContextFlags;
}
/// <summary>
/// Initializes a new instance of the <see cref="GLWidget"/> class.
/// </summary>
/// <param name="graphicsMode">The <see cref="GraphicsMode"/> which the widget should be constructed with.</param>
/// <param name="glVersionMajor">The major OpenGL version to attempt to initialize.</param>
/// <param name="glVersionMinor">The minor OpenGL version to attempt to initialize.</param>
/// <param name="contextFlags">
/// Any flags which should be used during initialization of the <see cref="GraphicsContext"/>.
/// </param>
public GLWidget(GraphicsMode graphicsMode, int glVersionMajor, int glVersionMinor, GraphicsContextFlags contextFlags)
{
ContextFlags = contextFlags;
AddTickCallback(UpdateFrameTime);
SetRequiredVersion(glVersionMajor, glVersionMinor);
if (graphicsMode.Depth > 0)
{
HasDepthBuffer = true;
}
if (graphicsMode.Stencil > 0)
{
HasStencilBuffer = true;
}
if (graphicsMode.ColorFormat.Alpha > 0)
{
HasAlpha = true;
}
}
/// <summary>
/// Updates the time delta with a new value from the last frame.
/// </summary>
/// <param name="widget">The sending widget.</param>
/// <param name="frameClock">The relevant frame clock.</param>
/// <returns>true if the callback should be called again; otherwise, false.</returns>
private bool UpdateFrameTime(Widget widget, FrameClock frameClock)
{
var frameTimeµSeconds = frameClock.FrameTime;
if (!_PreviousFrameTime.HasValue)
{
_PreviousFrameTime = frameTimeµSeconds;
return true;
}
var frameTimeSeconds = (frameTimeµSeconds - _PreviousFrameTime) / 10e6;
DeltaTime = (float)frameTimeSeconds;
_PreviousFrameTime = frameTimeµSeconds;
return true;
}
/// <inheritdoc />
protected override GLContext OnCreateContext()
{
var gdkGLContext = Window.CreateGlContext();
GetRequiredVersion(out var major, out var minor);
gdkGLContext.SetRequiredVersion(major, minor);
gdkGLContext.DebugEnabled = ContextFlags.HasFlag(GraphicsContextFlags.Debug);
gdkGLContext.ForwardCompatible = ContextFlags.HasFlag(GraphicsContextFlags.ForwardCompatible);
gdkGLContext.Realize();
return gdkGLContext;
}
/// <summary>
/// Destructs this object.
/// </summary>
~GLWidget()
{
Dispose(false);
{
Dispose(false);
}
#if GTK3
public override void Destroy() {
#else
public override void Dispose()
/// <summary>
/// Destroys this <see cref="Widget"/>, disposing it and destroying it in the context of GTK.
/// </summary>
public override void Destroy()
{
#endif
GC.SuppressFinalize(this);
Dispose(true);
#if GTK3
base.Destroy();
#else
base.Dispose();
#endif
}
public virtual void Dispose(bool disposing)
/// <summary>
/// Disposes the current object, releasing any native resources it was using.
/// </summary>
/// <param name="disposing"></param>
protected override void Dispose(bool disposing)
{
if (disposing)
{
_GraphicsContext.MakeCurrent(_WindowInfo);
MakeCurrent();
OnShuttingDown();
if (GraphicsContext.ShareContexts && (Interlocked.Decrement(ref _GraphicsContextCount) == 0))
{
@ -171,142 +160,107 @@ namespace OpenTK
}
}
#endregion
#region New Events
// Called when the first GraphicsContext is created in the case of GraphicsContext.ShareContexts == True;
/// <summary>
/// Called when the first <see cref="GraphicsContext"/> is created in the case where
/// GraphicsContext.ShareContexts == true;
/// </summary>
public static event EventHandler GraphicsContextInitialized;
static void OnGraphicsContextInitialized()
/// <summary>
/// Invokes the <see cref="GraphicsContextInitialized"/> event.
/// </summary>
private static void OnGraphicsContextInitialized()
{
if (GraphicsContextInitialized != null)
GraphicsContextInitialized(null, EventArgs.Empty);
{
GraphicsContextInitialized(null, EventArgs.Empty);
}
}
// Called when the first GraphicsContext is being destroyed in the case of GraphicsContext.ShareContexts == True;
/// <summary>
/// Called when the first <see cref="GraphicsContext"/> is being destroyed in the case where
/// GraphicsContext.ShareContext == true;
/// </summary>
public static event EventHandler GraphicsContextShuttingDown;
static void OnGraphicsContextShuttingDown()
{
/// <summary>
/// Invokes the <see cref="GraphicsContextShuttingDown"/> event.
/// </summary>
private static void OnGraphicsContextShuttingDown()
{
if (GraphicsContextShuttingDown != null)
GraphicsContextShuttingDown(null, EventArgs.Empty);
{
GraphicsContextShuttingDown(null, EventArgs.Empty);
}
}
// Called when this GLWidget has a valid GraphicsContext
/// <summary>
/// Called when this <see cref="GLWidget"/> has finished initializing and has a valid
/// <see cref="GraphicsContext"/>.
/// </summary>
public event EventHandler Initialized;
/// <summary>
/// Invokes the <see cref="Initialized"/> event.
/// </summary>
protected virtual void OnInitialized()
{
{
if (Initialized != null)
Initialized(this, EventArgs.Empty);
{
Initialized(this, EventArgs.Empty);
}
}
// Called when this GLWidget needs to render a frame
public event EventHandler RenderFrame;
protected virtual void OnRenderFrame()
{
if (RenderFrame != null)
RenderFrame(this, EventArgs.Empty);
}
// Called when this GLWidget is being Disposed
/// <summary>
/// Called when this <see cref="GLWidget"/> is being disposed.
/// </summary>
public event EventHandler ShuttingDown;
/// <summary>
/// Invokes the <see cref="ShuttingDown"/> event.
/// </summary>
protected virtual void OnShuttingDown()
{
{
if (ShuttingDown != null)
ShuttingDown(this, EventArgs.Empty);
{
ShuttingDown(this, EventArgs.Empty);
}
}
#endregion
// Called when a widget is realized. (window handles and such are valid)
// protected override void OnRealized() { base.OnRealized(); }
// Called when the widget needs to be (fully or partially) redrawn.
#if GTK3
/// <summary>
/// Called when the widget needs to be (fully or partially) redrawn.
/// </summary>
/// <param name="cr"></param>
/// <returns></returns>
protected override bool OnDrawn(Cairo.Context cr)
#else
protected override bool OnExposeEvent(Gdk.EventExpose evnt)
#endif
{
if (!_Initialized)
{
Initialize();
else
_GraphicsContext.MakeCurrent(_WindowInfo);
}
#if GTK3
var result = base.OnDrawn(cr);
#else
bool result = base.OnExposeEvent(evnt);
#endif
OnRenderFrame();
#if !GTK3
evnt.Window.Display.Sync(); // Add Sync call to fix resize rendering problem (Jay L. T. Cornwall) - How does this affect VSync?
#endif
_GraphicsContext.SwapBuffers();
return result;
}
// Called on Resize
protected override bool OnConfigureEvent(Gdk.EventConfigure evnt)
{
bool result = base.OnConfigureEvent(evnt);
if (_GraphicsContext != null)
_GraphicsContext.Update(_WindowInfo);
return result;
}
void Initialize()
/// <summary>
/// Initializes the <see cref="GLWidget"/> with its given values and creates a <see cref="GraphicsContext"/>.
/// </summary>
private void Initialize()
{
_Initialized = true;
// If this looks uninitialized... initialize.
if (ColorBPP == 0)
// Make the GDK GL context current
MakeCurrent();
// Create a dummy context that will grab the GdkGLContext that is current on the thread
_GraphicsContext = new GraphicsContext(ContextHandle.Zero, null);
if (ContextFlags.HasFlag(GraphicsContextFlags.Debug))
{
ColorBPP = 32;
if (DepthBPP == 0)
DepthBPP = 16;
_GraphicsContext.ErrorChecking = true;
}
ColorFormat colorBufferColorFormat = new ColorFormat(ColorBPP);
ColorFormat accumulationColorFormat = new ColorFormat(AccumulatorBPP);
int buffers = 2;
if (SingleBuffer)
buffers--;
GraphicsMode graphicsMode = new GraphicsMode(colorBufferColorFormat, DepthBPP, StencilBPP, Samples, accumulationColorFormat, buffers, Stereo);
if (Configuration.RunningOnWindows)
Console.WriteLine("OpenTK running on windows");
else if (Configuration.RunningOnMacOS)
Console.WriteLine("OpenTK running on OSX");
else
Console.WriteLine("OpenTK running on X11");
// IWindowInfo
if (Configuration.RunningOnWindows)
_WindowInfo = InitializeWindows();
else if (Configuration.RunningOnMacOS)
_WindowInfo = InitializeOSX();
else
_WindowInfo = InitializeX(graphicsMode);
// GraphicsContext
_GraphicsContext = new GraphicsContext(graphicsMode, _WindowInfo, GlVersionMajor, GlVersionMinor, _GraphicsContextFlags);
_GraphicsContext.MakeCurrent(_WindowInfo);
if (GraphicsContext.ShareContexts)
{
Interlocked.Increment(ref _GraphicsContextCount);
@ -326,250 +280,5 @@ namespace OpenTK
OnInitialized();
}
#region Windows Specific initalization
IWindowInfo InitializeWindows()
{
IntPtr windowHandle = gdk_win32_drawable_get_handle(GdkWindow.Handle);
return Utilities.CreateWindowsWindowInfo(windowHandle);
}
[SuppressUnmanagedCodeSecurity, DllImport("libgdk-win32-2.0-0.dll")]
public static extern IntPtr gdk_win32_drawable_get_handle(IntPtr d);
#endregion
#region OSX Specific Initialization
IWindowInfo InitializeOSX()
{
IntPtr windowHandle = gdk_quartz_window_get_nswindow(this.GdkWindow.Handle);
IntPtr viewHandle = gdk_quartz_window_get_nsview(this.GdkWindow.Handle);
return Utilities.CreateMacOSWindowInfo(windowHandle, viewHandle);
}
[SuppressUnmanagedCodeSecurity, DllImport("libgdk-quartz-2.0.0.dylib")]
static extern IntPtr gdk_quartz_window_get_nswindow(IntPtr handle);
[SuppressUnmanagedCodeSecurity, DllImport("libgdk-quartz-2.0.0.dylib")]
static extern IntPtr gdk_quartz_window_get_nsview(IntPtr handle);
#endregion
#region X Specific Initialization
#if GTK3
const string UnixLibGdkName = "libgdk-3.so.0";
#else
const string UnixLibGdkName = "libgdk-x11-2.0.so.0";
#endif
const string UnixLibX11Name = "libX11.so.6";
const string UnixLibGLName = "libGL.so.1";
const int GLX_NONE = 0;
const int GLX_USE_GL = 1;
const int GLX_BUFFER_SIZE = 2;
const int GLX_LEVEL = 3;
const int GLX_RGBA = 4;
const int GLX_DOUBLEBUFFER = 5;
const int GLX_STEREO = 6;
const int GLX_AUX_BUFFERS = 7;
const int GLX_RED_SIZE = 8;
const int GLX_GREEN_SIZE = 9;
const int GLX_BLUE_SIZE = 10;
const int GLX_ALPHA_SIZE = 11;
const int GLX_DEPTH_SIZE = 12;
const int GLX_STENCIL_SIZE = 13;
const int GLX_ACCUM_RED_SIZE = 14;
const int GLX_ACCUM_GREEN_SIZE = 15;
const int GLX_ACCUM_BLUE_SIZE = 16;
const int GLX_ACCUM_ALPHA_SIZE = 17;
public enum XVisualClass
{
StaticGray = 0,
GrayScale = 1,
StaticColor = 2,
PseudoColor = 3,
TrueColor = 4,
DirectColor = 5,
}
[StructLayout(LayoutKind.Sequential)]
struct XVisualInfo
{
public IntPtr Visual;
public IntPtr VisualID;
public int Screen;
public int Depth;
public XVisualClass Class;
public long RedMask;
public long GreenMask;
public long blueMask;
public int ColormapSize;
public int BitsPerRgb;
public override string ToString()
{
return String.Format("id ({0}), screen ({1}), depth ({2}), class ({3})",
VisualID, Screen, Depth, Class);
}
}
[Flags]
internal enum XVisualInfoMask
{
No = 0x0,
ID = 0x1,
Screen = 0x2,
Depth = 0x4,
Class = 0x8,
Red = 0x10,
Green = 0x20,
Blue = 0x40,
ColormapSize = 0x80,
BitsPerRGB = 0x100,
All = 0x1FF,
}
IWindowInfo InitializeX(GraphicsMode mode)
{
IntPtr display = gdk_x11_display_get_xdisplay(Display.Handle);
int screen = Screen.Number;
#if GTK3
IntPtr windowHandle = gdk_x11_window_get_xid(GdkWindow.Handle);
IntPtr rootWindow = gdk_x11_window_get_xid(RootWindow.Handle);
#else
IntPtr windowHandle = gdk_x11_drawable_get_xid(GdkWindow.Handle);
IntPtr rootWindow = gdk_x11_drawable_get_xid(RootWindow.Handle);
#endif
IWindowInfo retval;
IntPtr visualInfo;
if (mode.Index.HasValue)
{
XVisualInfo info = new XVisualInfo();
info.VisualID = mode.Index.Value;
int dummy;
visualInfo = XGetVisualInfo(display, XVisualInfoMask.ID, ref info, out dummy);
}
else
visualInfo = GetVisualInfo(display);
retval = Utilities.CreateX11WindowInfo(display, screen, windowHandle, rootWindow, visualInfo);
XFree(visualInfo);
return retval;
}
static IntPtr XGetVisualInfo(IntPtr display, XVisualInfoMask vinfo_mask, ref XVisualInfo template, out int nitems)
{
return XGetVisualInfoInternal(display, (IntPtr)(int)vinfo_mask, ref template, out nitems);
}
IntPtr GetVisualInfo(IntPtr display)
{
try
{
int[] attributes = AttributeList.ToArray();
return glXChooseVisual(display, Screen.Number, attributes);
}
catch (DllNotFoundException e)
{
throw new DllNotFoundException("OpenGL dll not found!", e);
}
catch (EntryPointNotFoundException enf)
{
throw new EntryPointNotFoundException("Glx entry point not found!", enf);
}
}
List<int> AttributeList
{
get
{
List<int> attributeList = new List<int>(24);
attributeList.Add(GLX_RGBA);
if (!SingleBuffer)
attributeList.Add(GLX_DOUBLEBUFFER);
if (Stereo)
attributeList.Add(GLX_STEREO);
attributeList.Add(GLX_RED_SIZE);
attributeList.Add(ColorBPP / 4); // TODO support 16-bit
attributeList.Add(GLX_GREEN_SIZE);
attributeList.Add(ColorBPP / 4); // TODO support 16-bit
attributeList.Add(GLX_BLUE_SIZE);
attributeList.Add(ColorBPP / 4); // TODO support 16-bit
attributeList.Add(GLX_ALPHA_SIZE);
attributeList.Add(ColorBPP / 4); // TODO support 16-bit
attributeList.Add(GLX_DEPTH_SIZE);
attributeList.Add(DepthBPP);
attributeList.Add(GLX_STENCIL_SIZE);
attributeList.Add(StencilBPP);
//attributeList.Add(GLX_AUX_BUFFERS);
//attributeList.Add(Buffers);
attributeList.Add(GLX_ACCUM_RED_SIZE);
attributeList.Add(AccumulatorBPP / 4);// TODO support 16-bit
attributeList.Add(GLX_ACCUM_GREEN_SIZE);
attributeList.Add(AccumulatorBPP / 4);// TODO support 16-bit
attributeList.Add(GLX_ACCUM_BLUE_SIZE);
attributeList.Add(AccumulatorBPP / 4);// TODO support 16-bit
attributeList.Add(GLX_ACCUM_ALPHA_SIZE);
attributeList.Add(AccumulatorBPP / 4);// TODO support 16-bit
attributeList.Add(GLX_NONE);
return attributeList;
}
}
[DllImport(UnixLibX11Name, EntryPoint = "XGetVisualInfo")]
static extern IntPtr XGetVisualInfoInternal(IntPtr display, IntPtr vinfo_mask, ref XVisualInfo template, out int nitems);
[SuppressUnmanagedCodeSecurity, DllImport(UnixLibX11Name)]
static extern void XFree(IntPtr handle);
/// <summary> Returns the X resource (window or pixmap) belonging to a GdkDrawable. </summary>
/// <remarks> XID gdk_x11_drawable_get_xid(GdkDrawable *drawable); </remarks>
/// <param name="gdkDisplay"> The GdkDrawable. </param>
/// <returns> The ID of drawable's X resource. </returns>
[SuppressUnmanagedCodeSecurity, DllImport(UnixLibGdkName)]
static extern IntPtr gdk_x11_drawable_get_xid(IntPtr gdkDisplay);
/// <summary> Returns the X resource (window or pixmap) belonging to a GdkDrawable. </summary>
/// <remarks> XID gdk_x11_drawable_get_xid(GdkDrawable *drawable); </remarks>
/// <param name="gdkDisplay"> The GdkDrawable. </param>
/// <returns> The ID of drawable's X resource. </returns>
[SuppressUnmanagedCodeSecurity, DllImport(UnixLibGdkName)]
static extern IntPtr gdk_x11_window_get_xid(IntPtr gdkDisplay);
/// <summary> Returns the X display of a GdkDisplay. </summary>
/// <remarks> Display* gdk_x11_display_get_xdisplay(GdkDisplay *display); </remarks>
/// <param name="gdkDisplay"> The GdkDrawable. </param>
/// <returns> The X Display of the GdkDisplay. </returns>
[SuppressUnmanagedCodeSecurity, DllImport(UnixLibGdkName)]
static extern IntPtr gdk_x11_display_get_xdisplay(IntPtr gdkDisplay);
[SuppressUnmanagedCodeSecurity, DllImport(UnixLibGLName)]
static extern IntPtr glXChooseVisual(IntPtr display, int screen, int[] attr);
#endregion
}
}

View file

@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003" ToolsVersion="4.0">
<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003" ToolsVersion="14.0">
<PropertyGroup>
<ProjectType>Local</ProjectType>
<ProductVersion>8.0.30703</ProductVersion>
@ -41,13 +41,17 @@
<BootstrapperEnabled>true</BootstrapperEnabled>
<TargetFrameworkVersion>v4.5</TargetFrameworkVersion>
<TargetFrameworkProfile />
<Deterministic>true</Deterministic>
<LangVersion>7</LangVersion>
<RunCodeAnalysis>true</RunCodeAnalysis>
<CodeAnalysisRuleSet>..\..\stylecop.ruleset</CodeAnalysisRuleSet>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
<AllowUnsafeBlocks>True</AllowUnsafeBlocks>
<BaseAddress>285212672</BaseAddress>
<ConfigurationOverrideFile>
</ConfigurationOverrideFile>
<DefineConstants>DEBUG;TRACE;</DefineConstants>
<DefineConstants>DEBUG;TRACE;GTK3;</DefineConstants>
<DocumentationFile>bin\Debug\OpenTK.GLWidget.xml</DocumentationFile>
<DebugSymbols>True</DebugSymbols>
<FileAlignment>4096</FileAlignment>
@ -56,7 +60,6 @@
<RegisterForComInterop>False</RegisterForComInterop>
<RemoveIntegerChecks>False</RemoveIntegerChecks>
<WarningLevel>4</WarningLevel>
<CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet>
<DebugType>full</DebugType>
<Prefer32Bit>false</Prefer32Bit>
</PropertyGroup>
@ -65,7 +68,7 @@
<BaseAddress>285212672</BaseAddress>
<ConfigurationOverrideFile>
</ConfigurationOverrideFile>
<DefineConstants>TRACE;</DefineConstants>
<DefineConstants>TRACE;GTK3;</DefineConstants>
<DocumentationFile>bin\Release\OpenTK.GLWidget.xml</DocumentationFile>
<FileAlignment>4096</FileAlignment>
<Optimize>True</Optimize>
@ -73,8 +76,7 @@
<RegisterForComInterop>False</RegisterForComInterop>
<RemoveIntegerChecks>False</RemoveIntegerChecks>
<WarningLevel>4</WarningLevel>
<CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet>
<DebugType>none</DebugType>
<DebugType>pdbonly</DebugType>
<Prefer32Bit>false</Prefer32Bit>
</PropertyGroup>
<PropertyGroup>
@ -87,12 +89,6 @@
<Reference Include="System">
<Name>System</Name>
</Reference>
<Reference Include="atk-sharp, Version=2.12.0.0, Culture=neutral, PublicKeyToken=35e10195dab3c99f" />
<Reference Include="gdk-sharp, Version=2.12.0.0, Culture=neutral, PublicKeyToken=35e10195dab3c99f" />
<Reference Include="glib-sharp, Version=2.12.0.0, Culture=neutral, PublicKeyToken=35e10195dab3c99f" />
<Reference Include="glade-sharp, Version=2.12.0.0, Culture=neutral, PublicKeyToken=35e10195dab3c99f" />
<Reference Include="gtk-sharp, Version=2.12.0.0, Culture=neutral, PublicKeyToken=35e10195dab3c99f" />
<Reference Include="pango-sharp, Version=2.12.0.0, Culture=neutral, PublicKeyToken=35e10195dab3c99f" />
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\OpenTK\OpenTK.csproj">
@ -111,35 +107,78 @@
<None Include="paket.references" />
<None Include="paket.template" />
</ItemGroup>
<ItemGroup>
<AdditionalFiles Include="$(SolutionDir)\stylecop.json">
<Link>stylecop.json</Link>
</AdditionalFiles>
<AdditionalFiles Include="$(SolutionDir)\stylecop.ruleset">
<Link>stylecop.ruleset</Link>
</AdditionalFiles>
</ItemGroup>
<Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" />
<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')">
<PropertyGroup>
<__paket__GtkSharp_targets>net45\GtkSharp</__paket__GtkSharp_targets>
</PropertyGroup>
</When>
</Choose>
<PropertyGroup>
<PreBuildEvent>
</PreBuildEvent>
<PostBuildEvent>
</PostBuildEvent>
</PropertyGroup>
<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')">
<When Condition="($(DefineConstants.Contains('GTK3')) And ($(TargetFrameworkVersion) == 'v4.0' Or $(TargetFrameworkVersion) == 'v4.0.3' 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="cairo-sharp">
<HintPath>..\..\packages\GtkSharp\lib\net45\cairo-sharp.dll</HintPath>
<HintPath>..\..\packages\gtk-sharp3\lib\net40\cairo-sharp.dll</HintPath>
<Private>True</Private>
<Paket>True</Paket>
</Reference>
<Reference Include="gio-sharp">
<HintPath>..\..\packages\GtkSharp\lib\net45\gio-sharp.dll</HintPath>
<HintPath>..\..\packages\gtk-sharp3\lib\net40\gio-sharp.dll</HintPath>
<Private>True</Private>
<Paket>True</Paket>
</Reference>
<Reference Include="gtk-dotnet">
<HintPath>..\..\packages\gtk-sharp3\lib\net40\gtk-dotnet.dll</HintPath>
<Private>True</Private>
<Paket>True</Paket>
</Reference>
<Reference Include="atk-sharp">
<HintPath>..\..\packages\gtk-sharp3\lib\net40\atk-sharp.dll</HintPath>
<Private>True</Private>
<Paket>True</Paket>
</Reference>
<Reference Include="gdk-sharp">
<HintPath>..\..\packages\gtk-sharp3\lib\net40\gdk-sharp.dll</HintPath>
<Private>True</Private>
<Paket>True</Paket>
</Reference>
<Reference Include="glib-sharp">
<HintPath>..\..\packages\gtk-sharp3\lib\net40\glib-sharp.dll</HintPath>
<Private>True</Private>
<Paket>True</Paket>
</Reference>
<Reference Include="gtk-sharp">
<HintPath>..\..\packages\gtk-sharp3\lib\net40\gtk-sharp.dll</HintPath>
<Private>True</Private>
<Paket>True</Paket>
</Reference>
<Reference Include="pango-sharp">
<HintPath>..\..\packages\gtk-sharp3\lib\net40\pango-sharp.dll</HintPath>
<Private>True</Private>
<Paket>True</Paket>
</Reference>
</ItemGroup>
</When>
<Otherwise>
<ItemGroup>
<Reference Include="atk-sharp, Version=2.12.0.0, Culture=neutral, PublicKeyToken=35e10195dab3c99f" />
<Reference Include="gdk-sharp, Version=2.12.0.0, Culture=neutral, PublicKeyToken=35e10195dab3c99f" />
<Reference Include="glib-sharp, Version=2.12.0.0, Culture=neutral, PublicKeyToken=35e10195dab3c99f" />
<Reference Include="glade-sharp, Version=2.12.0.0, Culture=neutral, PublicKeyToken=35e10195dab3c99f" />
<Reference Include="gtk-sharp, Version=2.12.0.0, Culture=neutral, PublicKeyToken=35e10195dab3c99f" />
<Reference Include="pango-sharp, Version=2.12.0.0, Culture=neutral, PublicKeyToken=35e10195dab3c99f" />
</ItemGroup>
</Otherwise>
</Choose>
<Import Project="..\..\packages\GtkSharp\build\$(__paket__GtkSharp_targets).targets" Condition="Exists('..\..\packages\GtkSharp\build\$(__paket__GtkSharp_targets).targets')" Label="Paket" />
<Import Project="..\..\packages\gtk-sharp3\build\gtk-sharp3.targets" Condition="Exists('..\..\packages\gtk-sharp3\build\gtk-sharp3.targets')" Label="Paket" />
<ItemGroup>
<Analyzer Include="..\..\packages\StyleCop.Analyzers\analyzers\dotnet\cs\StyleCop.Analyzers.CodeFixes.dll">
<Paket>True</Paket>
</Analyzer>
<Analyzer Include="..\..\packages\StyleCop.Analyzers\analyzers\dotnet\cs\StyleCop.Analyzers.dll">
<Paket>True</Paket>
</Analyzer>
</ItemGroup>
</Project>

View file

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

View file

@ -1 +1,2 @@
GtkSharp
gtk-sharp3
StyleCop.Analyzers

View file

@ -2,7 +2,7 @@ type project
id OpenTK.GLWidget
owners
opentk thefiddler
authors
authors
The Open Toolkit Team
projectUrl
http://www.opentk.com
@ -19,5 +19,8 @@ tags
summary
A set of fast, low-level C# bindings for OpenGL, OpenGL ES and OpenAL.
description
The Open Toolkit is set of fast, low-level C# bindings for OpenGL, OpenGL ES and OpenAL. It runs on all major platforms and powers hundreds of apps, games and scientific research.
The Open Toolkit is set of fast, low-level C# bindings for OpenGL, OpenGL ES and OpenAL. It runs on all major platforms and powers hundreds of apps, games and scientific research.
OpenTK provides several utility libraries, including a math/linear algebra package, a windowing system, and input handling.
include-pdbs true
excludeddependencies
StyleCop.Analyzers

View file

@ -1,4 +1,3 @@
#region License
//
// The Open Toolkit Library License
//
@ -6,7 +5,7 @@
//
// 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
// 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:
@ -23,7 +22,6 @@
// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
// OTHER DEALINGS IN THE SOFTWARE.
//
#endregion
using System;
using System.Collections.Generic;
@ -41,20 +39,11 @@ namespace OpenTK.Audio
/// </summary>
public sealed class AudioCapture : IDisposable
{
#region Fields
// This must stay private info so the end-user cannot call any Alc commands for the recording device.
IntPtr Handle;
private IntPtr Handle;
// Alc.CaptureStop should be called prior to device shutdown, this keeps track of Alc.CaptureStart/Stop calls.
bool _isrecording = false;
ALFormat sample_format;
int sample_frequency;
#endregion
#region Constructors
static AudioCapture()
{
@ -80,27 +69,33 @@ namespace OpenTK.Audio
public AudioCapture(string deviceName, int frequency, ALFormat sampleFormat, int bufferSize)
{
if (!AudioDeviceEnumerator.IsOpenALSupported)
{
throw new DllNotFoundException("openal32.dll");
}
if (frequency <= 0)
{
throw new ArgumentOutOfRangeException("frequency");
}
if (bufferSize <= 0)
{
throw new ArgumentOutOfRangeException("bufferSize");
}
// Try to open specified device. If it fails, try to open default device.
device_name = deviceName;
CurrentDevice = deviceName;
Handle = Alc.CaptureOpenDevice(deviceName, frequency, sampleFormat, bufferSize);
if (Handle == IntPtr.Zero)
{
Debug.WriteLine(ErrorMessage(deviceName, frequency, sampleFormat, bufferSize));
device_name = "IntPtr.Zero";
CurrentDevice = "IntPtr.Zero";
Handle = Alc.CaptureOpenDevice(null, frequency, sampleFormat, bufferSize);
}
if (Handle == IntPtr.Zero)
{
Debug.WriteLine(ErrorMessage("IntPtr.Zero", frequency, sampleFormat, bufferSize));
device_name = AudioDeviceEnumerator.DefaultRecordingDevice;
CurrentDevice = AudioDeviceEnumerator.DefaultRecordingDevice;
Handle = Alc.CaptureOpenDevice(AudioDeviceEnumerator.DefaultRecordingDevice, frequency, sampleFormat, bufferSize);
}
@ -108,7 +103,7 @@ namespace OpenTK.Audio
{
// Everything we tried failed. Capture may not be supported, bail out.
Debug.WriteLine(ErrorMessage(AudioDeviceEnumerator.DefaultRecordingDevice, frequency, sampleFormat, bufferSize));
device_name = "None";
CurrentDevice = "None";
throw new AudioDeviceException("All attempts to open capture devices returned IntPtr.Zero. See debug log for verbose list.");
}
@ -120,28 +115,10 @@ namespace OpenTK.Audio
SampleFrequency = frequency;
}
#endregion Constructor
#region Public Members
#region CurrentDevice
private string device_name;
/// <summary>
/// The name of the device associated with this instance.
/// </summary>
public string CurrentDevice
{
get
{
return device_name;
}
}
#endregion
#region AvailableDevices
public string CurrentDevice { get; }
/// <summary>
/// Returns a list of strings containing all known recording devices.
@ -154,10 +131,6 @@ namespace OpenTK.Audio
}
}
#endregion
#region DefaultDevice
/// <summary>
/// Returns the name of the device that will be used as recording default.
/// </summary>
@ -169,10 +142,6 @@ namespace OpenTK.Audio
}
}
#endregion
#region CheckErrors
/// <summary>
/// Checks for ALC error conditions.
/// </summary>
@ -185,10 +154,6 @@ namespace OpenTK.Audio
new AudioDeviceErrorChecker(Handle).Dispose();
}
#endregion
#region CurrentError
/// <summary>Returns the ALC error code for this device.</summary>
public AlcError CurrentError
{
@ -198,10 +163,6 @@ namespace OpenTK.Audio
}
}
#endregion
#region Start & Stop
/// <summary>
/// Start recording samples.
/// The number of available samples can be obtained through the <see cref="AvailableSamples"/> property.
@ -210,20 +171,16 @@ namespace OpenTK.Audio
public void Start()
{
Alc.CaptureStart(Handle);
_isrecording = true;
IsRunning = true;
}
/// <summary>Stop recording samples. This will not clear previously recorded samples.</summary>
public void Stop()
{
Alc.CaptureStop(Handle);
_isrecording = false;
IsRunning = false;
}
#endregion Start & Stop Capture
#region AvailableSamples
/// <summary>Returns the number of available samples for capture.</summary>
public int AvailableSamples
{
@ -237,10 +194,6 @@ namespace OpenTK.Audio
}
}
#endregion Available samples property
#region ReadSamples
/// <summary>Fills the specified buffer with samples from the internal capture ring-buffer. This method does not block: it is an error to specify a sampleCount larger than AvailableSamples.</summary>
/// <param name="buffer">A pointer to a previously initialized and pinned array.</param>
/// <param name="sampleCount">The number of samples to be written to the buffer.</param>
@ -258,7 +211,9 @@ namespace OpenTK.Audio
where TBuffer : struct
{
if (buffer == null)
{
throw new ArgumentNullException("buffer");
}
int buffer_size = BlittableValueType<TBuffer>.Stride * buffer.Length;
// This is more of a heuristic than a 100% valid check. However, it will work
@ -267,56 +222,33 @@ namespace OpenTK.Audio
// be produced with compressed sample formats (which are very rare).
// Still, this is better than no check at all.
if (sampleCount * GetSampleSize(SampleFormat) > buffer_size)
{
throw new ArgumentOutOfRangeException("sampleCount");
}
GCHandle buffer_ptr = GCHandle.Alloc(buffer, GCHandleType.Pinned);
try { ReadSamples(buffer_ptr.AddrOfPinnedObject(), sampleCount); }
finally { buffer_ptr.Free(); }
}
#endregion
#region SampleFormat & SampleFrequency
/// <summary>
/// Gets the OpenTK.Audio.ALFormat for this instance.
/// </summary>
public ALFormat SampleFormat
{
get { return sample_format; }
private set { sample_format = value; }
}
public ALFormat SampleFormat { get; private set; }
/// <summary>
/// Gets the sampling rate for this instance.
/// </summary>
public int SampleFrequency
{
get { return sample_frequency; }
private set { sample_frequency = value; }
}
#endregion
#region IsRunning
public int SampleFrequency { get; private set; }
/// <summary>
/// Gets a value indicating whether this instance is currently capturing samples.
/// </summary>
public bool IsRunning
{
get { return _isrecording; }
}
#endregion
#endregion
#region Private Members
public bool IsRunning { get; private set; } = false;
// Retrieves the sample size in bytes for various ALFormats.
// Compressed formats always return 1.
static int GetSampleSize(ALFormat format)
private static int GetSampleSize(ALFormat format)
{
switch (format)
{
@ -350,7 +282,7 @@ namespace OpenTK.Audio
}
// Converts an error code to an error string with additional information.
string ErrorMessage(string devicename, int frequency, ALFormat bufferformat, int buffersize)
private string ErrorMessage(string devicename, int frequency, ALFormat bufferformat, int buffersize)
{
string alcerrmsg;
AlcError alcerrcode = CurrentError;
@ -374,10 +306,6 @@ namespace OpenTK.Audio
"\nBuffer Size: " + buffersize;
}
#endregion
#region IDisposable Members
/// <summary>
/// Finalizes this instance.
/// </summary>
@ -401,15 +329,15 @@ namespace OpenTK.Audio
{
if (this.Handle != IntPtr.Zero)
{
if (this._isrecording)
if (this.IsRunning)
{
this.Stop();
}
Alc.CaptureCloseDevice(this.Handle);
}
this.IsDisposed = true;
}
}
#endregion Destructor
}
}

View file

@ -1,12 +1,11 @@
#region License
//
//
// The Open Toolkit Library License
//
// Copyright (c) 2006 - 2009 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
// 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:
@ -23,14 +22,10 @@
// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
// OTHER DEALINGS IN THE SOFTWARE.
//
#endregion
using System;
using System.Collections.Generic;
using System.Text;
using System.Diagnostics;
using OpenTK.Audio.OpenAL;
namespace OpenTK.Audio
@ -41,23 +36,14 @@ namespace OpenTK.Audio
/// </summary>
public sealed class AudioContext : IDisposable
{
#region --- Fields ---
private bool disposed;
private bool is_processing, is_synchronized;
private ContextHandle context_handle;
private bool context_exists;
bool disposed;
bool is_processing, is_synchronized;
IntPtr device_handle;
ContextHandle context_handle;
bool context_exists;
string device_name;
static object audio_context_lock = new object();
static Dictionary<ContextHandle, AudioContext> available_contexts = new Dictionary<ContextHandle, AudioContext>();
#endregion
#region --- Constructors ---
#region static AudioContext()
private string device_name;
private static object audio_context_lock = new object();
private static Dictionary<ContextHandle, AudioContext> available_contexts = new Dictionary<ContextHandle, AudioContext>();
/// \internal
/// <summary>
@ -69,28 +55,16 @@ namespace OpenTK.Audio
{ }
}
#endregion static AudioContext()
#region public AudioContext()
/// <summary>Constructs a new AudioContext, using the default audio device.</summary>
public AudioContext()
: this(null, 0, 0, false, true, MaxAuxiliarySends.UseDriverDefault) { }
#endregion
#region public AudioContext(string device)
/// <summary>
/// Constructs a new AudioContext instance.
/// </summary>
/// <param name="device">The device name that will host this instance.</param>
public AudioContext(string device) : this(device, 0, 0, false, true, MaxAuxiliarySends.UseDriverDefault) { }
#endregion
#region public AudioContext(string device, int freq)
/// <summary>Constructs a new AudioContext, using the specified audio device and device parameters.</summary>
/// <param name="device">The name of the audio device to use.</param>
/// <param name="freq">Frequency for mixing output buffer, in units of Hz. Pass 0 for driver default.</param>
@ -100,10 +74,6 @@ namespace OpenTK.Audio
/// </remarks>
public AudioContext(string device, int freq) : this(device, freq, 0, false, true, MaxAuxiliarySends.UseDriverDefault) { }
#endregion
#region public AudioContext(string device, int freq, int refresh)
/// <summary>Constructs a new AudioContext, using the specified audio device and device parameters.</summary>
/// <param name="device">The name of the audio device to use.</param>
/// <param name="freq">Frequency for mixing output buffer, in units of Hz. Pass 0 for driver default.</param>
@ -115,10 +85,6 @@ namespace OpenTK.Audio
public AudioContext(string device, int freq, int refresh)
: this(device, freq, refresh, false, true, MaxAuxiliarySends.UseDriverDefault) { }
#endregion
#region public AudioContext(string device, int freq, int refresh, bool sync)
/// <summary>Constructs a new AudioContext, using the specified audio device and device parameters.</summary>
/// <param name="device">The name of the audio device to use.</param>
/// <param name="freq">Frequency for mixing output buffer, in units of Hz. Pass 0 for driver default.</param>
@ -131,10 +97,6 @@ namespace OpenTK.Audio
public AudioContext(string device, int freq, int refresh, bool sync)
: this(AudioDeviceEnumerator.AvailablePlaybackDevices[0], freq, refresh, sync, true) { }
#endregion
#region public AudioContext(string device, int freq, int refresh, bool sync, bool enableEfx)
/// <summary>Creates the audio context using the specified device and device parameters.</summary>
/// <param name="device">The device descriptor obtained through AudioContext.AvailableDevices.</param>
/// <param name="freq">Frequency for mixing output buffer, in units of Hz. Pass 0 for driver default.</param>
@ -165,10 +127,6 @@ namespace OpenTK.Audio
CreateContext(device, freq, refresh, sync, enableEfx, MaxAuxiliarySends.UseDriverDefault);
}
#endregion
#region public AudioContext(string device, int freq, int refresh, bool sync, bool enableEfx, MaxAuxiliarySends efxMaxAuxSends)
/// <summary>Creates the audio context using the specified device and device parameters.</summary>
/// <param name="device">The device descriptor obtained through AudioContext.AvailableDevices.</param>
/// <param name="freq">Frequency for mixing output buffer, in units of Hz. Pass 0 for driver default.</param>
@ -200,14 +158,6 @@ namespace OpenTK.Audio
CreateContext(device, freq, refresh, sync, enableEfx, efxMaxAuxSends);
}
#endregion
#endregion --- Constructors ---
#region --- Private Methods ---
#region CreateContext
/// <summary>May be passed at context construction time to indicate the number of desired auxiliary effect slot sends per source.</summary>
public enum MaxAuxiliarySends:int
{
@ -249,34 +199,47 @@ namespace OpenTK.Audio
/// Values higher than supported will be clamped by the driver.
/// </para>
/// </remarks>
void CreateContext(string device, int freq, int refresh, bool sync, bool enableEfx, MaxAuxiliarySends efxAuxiliarySends)
private void CreateContext(string device, int freq, int refresh, bool sync, bool enableEfx, MaxAuxiliarySends efxAuxiliarySends)
{
if (!AudioDeviceEnumerator.IsOpenALSupported)
{
throw new DllNotFoundException("openal32.dll");
}
if (AudioDeviceEnumerator.Version == AudioDeviceEnumerator.AlcVersion.Alc1_1 && AudioDeviceEnumerator.AvailablePlaybackDevices.Count == 0) // Alc 1.0 does not support device enumeration.
{
throw new NotSupportedException("No audio hardware is available.");
if (context_exists) throw new NotSupportedException("Multiple AudioContexts are not supported.");
if (freq < 0) throw new ArgumentOutOfRangeException("freq", freq, "Should be greater than zero.");
if (refresh < 0) throw new ArgumentOutOfRangeException("refresh", refresh, "Should be greater than zero.");
}
if (context_exists)
{
throw new NotSupportedException("Multiple AudioContexts are not supported.");
}
if (freq < 0)
{
throw new ArgumentOutOfRangeException("freq", freq, "Should be greater than zero.");
}
if (refresh < 0)
{
throw new ArgumentOutOfRangeException("refresh", refresh, "Should be greater than zero.");
}
if (!String.IsNullOrEmpty(device))
{
device_name = device;
device_handle = Alc.OpenDevice(device); // try to open device by name
Device = Alc.OpenDevice(device); // try to open device by name
}
if (device_handle == IntPtr.Zero)
if (Device == IntPtr.Zero)
{
device_name = "IntPtr.Zero (null string)";
device_handle = Alc.OpenDevice(null); // try to open unnamed default device
Device = Alc.OpenDevice(null); // try to open unnamed default device
}
if (device_handle == IntPtr.Zero)
if (Device == IntPtr.Zero)
{
device_name = AudioContext.DefaultDevice;
device_handle = Alc.OpenDevice(AudioContext.DefaultDevice); // try to open named default device
Device = Alc.OpenDevice(AudioContext.DefaultDevice); // try to open named default device
}
if (device_handle == IntPtr.Zero)
if (Device == IntPtr.Zero)
{
device_name = "None";
throw new AudioDeviceException(String.Format("Audio device '{0}' does not exist or is tied up by another application.",
@ -303,7 +266,7 @@ namespace OpenTK.Audio
attributes.Add((int)AlcContextAttributes.Sync);
attributes.Add(sync ? 1 : 0);
if (enableEfx && Alc.IsExtensionPresent(device_handle, "ALC_EXT_EFX"))
if (enableEfx && Alc.IsExtensionPresent(Device, "ALC_EXT_EFX"))
{
int num_slots;
switch (efxAuxiliarySends)
@ -316,20 +279,20 @@ namespace OpenTK.Audio
break;
default:
case MaxAuxiliarySends.UseDriverDefault:
Alc.GetInteger(device_handle, AlcGetInteger.EfxMaxAuxiliarySends, 1, out num_slots);
Alc.GetInteger(Device, AlcGetInteger.EfxMaxAuxiliarySends, 1, out num_slots);
break;
}
attributes.Add((int)AlcContextAttributes.EfxMaxAuxiliarySends);
attributes.Add(num_slots);
}
attributes.Add(0);
context_handle = Alc.CreateContext(device_handle, attributes.ToArray());
context_handle = Alc.CreateContext(Device, attributes.ToArray());
if (context_handle == ContextHandle.Zero)
{
Alc.CloseDevice(device_handle);
Alc.CloseDevice(Device);
throw new AudioContextException("The audio context could not be created with the specified parameters.");
}
@ -339,12 +302,14 @@ namespace OpenTK.Audio
// an old OpenAL version is detect - it may affect outdated OpenAL versions different than OpenAL SI,
// but it looks like a good compromise for now.
if (AudioDeviceEnumerator.AvailablePlaybackDevices.Count > 0)
{
MakeCurrent();
}
CheckErrors();
device_name = Alc.GetString(device_handle, AlcGetString.DeviceSpecifier);
device_name = Alc.GetString(Device, AlcGetString.DeviceSpecifier);
lock (audio_context_lock)
{
@ -353,10 +318,6 @@ namespace OpenTK.Audio
}
}
#endregion --- Private Methods ---
#region static void MakeCurrent(AudioContext context)
/// \internal
/// <summary>Makes the specified AudioContext current in the calling thread.</summary>
/// <param name="context">The OpenTK.Audio.AudioContext to make current, or null.</param>
@ -366,21 +327,19 @@ namespace OpenTK.Audio
/// <exception cref="AudioContextException">
/// Occurs when the AudioContext could not be made current.
/// </exception>
static void MakeCurrent(AudioContext context)
private static void MakeCurrent(AudioContext context)
{
lock (audio_context_lock)
{
if (!Alc.MakeContextCurrent(context != null ? context.context_handle : ContextHandle.Zero))
{
throw new AudioContextException(String.Format("ALC {0} error detected at {1}.",
Alc.GetError(context != null ? (IntPtr)context.context_handle : IntPtr.Zero).ToString(),
context != null ? context.ToString() : "null"));
}
}
}
#endregion
#region internal bool IsCurrent
/// <summary>
/// Gets or sets a System.Boolean indicating whether the AudioContext
/// is current.
@ -396,7 +355,9 @@ namespace OpenTK.Audio
lock (audio_context_lock)
{
if (available_contexts.Count == 0)
{
return false;
}
else
{
return AudioContext.CurrentContext == this;
@ -405,24 +366,18 @@ namespace OpenTK.Audio
}
set
{
if (value) AudioContext.MakeCurrent(this);
else AudioContext.MakeCurrent(null);
if (value)
{
AudioContext.MakeCurrent(this);
}
else
{
AudioContext.MakeCurrent(null);
}
}
}
#endregion
#region IntPtr Device
IntPtr Device { get { return device_handle; } }
#endregion
#endregion
#region --- Public Members ---
#region CheckErrors
private IntPtr Device { get; set; }
/// <summary>
/// Checks for ALC error conditions.
@ -434,15 +389,13 @@ namespace OpenTK.Audio
public void CheckErrors()
{
if (disposed)
{
throw new ObjectDisposedException(this.GetType().FullName);
}
new AudioDeviceErrorChecker(device_handle).Dispose();
new AudioDeviceErrorChecker(Device).Dispose();
}
#endregion
#region CurrentError
/// <summary>
/// Returns the ALC error code for this instance.
/// </summary>
@ -451,16 +404,14 @@ namespace OpenTK.Audio
get
{
if (disposed)
{
throw new ObjectDisposedException(this.GetType().FullName);
}
return Alc.GetError(device_handle);
return Alc.GetError(Device);
}
}
#endregion
#region MakeCurrent
/// <summary>Makes the AudioContext current in the calling thread.</summary>
/// <exception cref="ObjectDisposedException">
/// Occurs if this function is called after the AudioContext has been disposed.
@ -475,15 +426,13 @@ namespace OpenTK.Audio
public void MakeCurrent()
{
if (disposed)
{
throw new ObjectDisposedException(this.GetType().FullName);
}
AudioContext.MakeCurrent(this);
}
#endregion
#region IsProcessing
/// <summary>
/// Gets a System.Boolean indicating whether the AudioContext is
/// currently processing audio events.
@ -495,17 +444,15 @@ namespace OpenTK.Audio
get
{
if (disposed)
{
throw new ObjectDisposedException(this.GetType().FullName);
}
return is_processing;
}
private set { is_processing = value; }
}
#endregion
#region IsSynchronized
/// <summary>
/// Gets a System.Boolean indicating whether the AudioContext is
/// synchronized.
@ -516,17 +463,15 @@ namespace OpenTK.Audio
get
{
if (disposed)
{
throw new ObjectDisposedException(this.GetType().FullName);
}
return is_synchronized;
}
private set { is_synchronized = value; }
}
#endregion
#region public void Process
/// <summary>
/// Processes queued audio events.
/// </summary>
@ -548,16 +493,14 @@ namespace OpenTK.Audio
public void Process()
{
if (disposed)
{
throw new ObjectDisposedException(this.GetType().FullName);
}
Alc.ProcessContext(this.context_handle);
IsProcessing = true;
}
#endregion
#region public void Suspend
/// <summary>
/// Suspends processing of audio events.
/// </summary>
@ -581,16 +524,14 @@ namespace OpenTK.Audio
public void Suspend()
{
if (disposed)
{
throw new ObjectDisposedException(this.GetType().FullName);
}
Alc.SuspendContext(this.context_handle);
IsProcessing = false;
}
#endregion
#region public bool SupportsExtension(string extension)
/// <summary>
/// Checks whether the specified OpenAL extension is supported.
/// </summary>
@ -599,15 +540,13 @@ namespace OpenTK.Audio
public bool SupportsExtension(string extension)
{
if (disposed)
{
throw new ObjectDisposedException(this.GetType().FullName);
}
return Alc.IsExtensionPresent(this.Device, extension);
}
#endregion
#region CurrentDevice
/// <summary>
/// Gets a System.String with the name of the device used in this context.
/// </summary>
@ -616,20 +555,14 @@ namespace OpenTK.Audio
get
{
if (disposed)
{
throw new ObjectDisposedException(this.GetType().FullName);
}
return device_name;
}
}
#endregion
#endregion --- Public Members ---
#region --- Static Members ---
#region public static AudioContext CurrentContext
/// <summary>
/// Gets the OpenTK.Audio.AudioContext which is current in the application.
/// </summary>
@ -644,7 +577,9 @@ namespace OpenTK.Audio
lock (audio_context_lock)
{
if (available_contexts.Count == 0)
{
return null;
}
else
{
AudioContext context;
@ -657,10 +592,6 @@ namespace OpenTK.Audio
}
}
#endregion
#region AvailableDevices
/// <summary>
/// Returns a list of strings containing all known playback devices.
/// </summary>
@ -671,10 +602,6 @@ namespace OpenTK.Audio
return AudioDeviceEnumerator.AvailablePlaybackDevices;
}
}
#endregion public static IList<string> AvailablePlaybackDevices
#region DefaultDevice
/// <summary>
/// Returns the name of the device that will be used as playback default.
/// </summary>
@ -686,12 +613,6 @@ namespace OpenTK.Audio
}
}
#endregion
#endregion
#region --- IDisposable Members ---
/// <summary>
/// Disposes of the AudioContext, cleaning up all resources consumed by it.
/// </summary>
@ -701,12 +622,14 @@ namespace OpenTK.Audio
GC.SuppressFinalize(this);
}
void Dispose(bool manual)
private void Dispose(bool manual)
{
if (!disposed)
{
if (this.IsCurrent)
{
this.IsCurrent = false;
}
if (context_handle != ContextHandle.Zero)
{
@ -714,8 +637,10 @@ namespace OpenTK.Audio
Alc.DestroyContext(context_handle);
}
if (device_handle != IntPtr.Zero)
Alc.CloseDevice(device_handle);
if (Device != IntPtr.Zero)
{
Alc.CloseDevice(Device);
}
if (manual)
{
@ -732,10 +657,6 @@ namespace OpenTK.Audio
this.Dispose(false);
}
#endregion
#region --- Overrides ---
/// <summary>
/// Calculates the hash code for this instance.
/// </summary>
@ -762,9 +683,7 @@ namespace OpenTK.Audio
public override string ToString()
{
return String.Format("{0} (handle: {1}, device: {2})",
this.device_name, this.context_handle, this.device_handle);
this.device_name, this.context_handle, this.Device);
}
#endregion
}
}

View file

@ -1,12 +1,11 @@
#region License
//
//
// The Open Toolkit Library License
//
// Copyright (c) 2006 - 2009 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
// 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:
@ -23,13 +22,8 @@
// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
// OTHER DEALINGS IN THE SOFTWARE.
//
#endregion
using System;
using System.Collections.Generic;
using System.Text;
namespace OpenTK.Audio
{
/// <summary>Represents exceptions related to an OpenTK.Audio.AudioContext.</summary>

View file

@ -1,4 +1,3 @@
#region License
//
// The Open Toolkit Library License
//
@ -6,7 +5,7 @@
//
// 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
// 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:
@ -23,11 +22,9 @@
// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
// OTHER DEALINGS IN THE SOFTWARE.
//
#endregion
using System;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Diagnostics;
using OpenTK.Audio.OpenAL;
@ -36,8 +33,6 @@ namespace OpenTK.Audio
{
internal static class AudioDeviceEnumerator
{
#region All device strings
private static readonly List<string> available_playback_devices = new List<string>();
private static readonly List<string> available_recording_devices = new List<string>();
@ -56,44 +51,11 @@ namespace OpenTK.Audio
}
}
#endregion All device strings
internal static string DefaultPlaybackDevice { get; }
#region Default device strings
internal static string DefaultRecordingDevice { get; }
private static string default_playback_device;
internal static string DefaultPlaybackDevice
{
get
{
return default_playback_device;
}
}
private static string default_recording_device;
internal static string DefaultRecordingDevice
{
get
{
return default_recording_device;
}
}
#endregion Default device strings
#region Is OpenAL supported?
private static bool openal_supported = true;
internal static bool IsOpenALSupported
{
get
{
return openal_supported;
}
}
#endregion Is OpenAL supported?
#region Alc Version number
internal static bool IsOpenALSupported { get; } = true;
internal enum AlcVersion
{
@ -101,18 +63,7 @@ namespace OpenTK.Audio
Alc1_1
}
private static AlcVersion version;
internal static AlcVersion Version
{
get
{
return version;
}
}
#endregion Alc Version number
#region Constructors
internal static AlcVersion Version { get; }
// Loads all available audio devices into the available_*_devices lists.
static AudioDeviceEnumerator()
@ -141,32 +92,34 @@ namespace OpenTK.Audio
// Get a list of all known playback devices, using best extension available
if (Alc.IsExtensionPresent(IntPtr.Zero, "ALC_ENUMERATION_EXT"))
{
version = AlcVersion.Alc1_1;
Version = AlcVersion.Alc1_1;
if (Alc.IsExtensionPresent(IntPtr.Zero, "ALC_ENUMERATE_ALL_EXT"))
{
available_playback_devices.AddRange(Alc.GetString(IntPtr.Zero, AlcGetStringList.AllDevicesSpecifier));
default_playback_device = Alc.GetString(IntPtr.Zero, AlcGetString.DefaultAllDevicesSpecifier);
DefaultPlaybackDevice = Alc.GetString(IntPtr.Zero, AlcGetString.DefaultAllDevicesSpecifier);
}
else
{
available_playback_devices.AddRange(Alc.GetString(IntPtr.Zero, AlcGetStringList.DeviceSpecifier));
default_playback_device = Alc.GetString(IntPtr.Zero, AlcGetString.DefaultDeviceSpecifier);
DefaultPlaybackDevice = Alc.GetString(IntPtr.Zero, AlcGetString.DefaultDeviceSpecifier);
}
}
else
{
version = AlcVersion.Alc1_0;
Version = AlcVersion.Alc1_0;
Debug.Print("Device enumeration extension not available. Failed to enumerate playback devices.");
}
AlcError playback_err = Alc.GetError(dummy_device);
if (playback_err != AlcError.NoError)
{
throw new AudioContextException("Alc Error occured when querying available playback devices. " + playback_err.ToString());
}
// Get a list of all known recording devices, at least ALC_ENUMERATION_EXT is needed too
if (version == AlcVersion.Alc1_1 && Alc.IsExtensionPresent(IntPtr.Zero, "ALC_EXT_CAPTURE"))
if (Version == AlcVersion.Alc1_1 && Alc.IsExtensionPresent(IntPtr.Zero, "ALC_EXT_CAPTURE"))
{
available_recording_devices.AddRange(Alc.GetString(IntPtr.Zero, AlcGetStringList.CaptureDeviceSpecifier));
default_recording_device = Alc.GetString(IntPtr.Zero, AlcGetString.CaptureDefaultDeviceSpecifier);
DefaultRecordingDevice = Alc.GetString(IntPtr.Zero, AlcGetString.CaptureDefaultDeviceSpecifier);
}
else
{
@ -174,55 +127,63 @@ namespace OpenTK.Audio
}
AlcError record_err = Alc.GetError(dummy_device);
if (record_err != AlcError.NoError)
{
throw new AudioContextException("Alc Error occured when querying available recording devices. " + record_err.ToString());
}
#if DEBUG
Debug.WriteLine("Found playback devices:");
foreach (string s in available_playback_devices)
{
Debug.WriteLine(s);
}
Debug.WriteLine("Default playback device: " + default_playback_device);
Debug.WriteLine("Default playback device: " + DefaultPlaybackDevice);
Debug.WriteLine("Found recording devices:");
foreach (string s in available_recording_devices)
{
Debug.WriteLine(s);
}
Debug.WriteLine("Default recording device: " + default_recording_device);
Debug.WriteLine("Default recording device: " + DefaultRecordingDevice);
#endif
}
catch (DllNotFoundException e)
{
Trace.WriteLine(e.ToString());
openal_supported = false;
IsOpenALSupported = false;
}
catch (AudioContextException ace)
{
Trace.WriteLine(ace.ToString());
openal_supported = false;
IsOpenALSupported = false;
}
finally
{
Debug.Unindent();
if (openal_supported)
if (IsOpenALSupported)
{
try
{
// clean up the dummy context
Alc.MakeContextCurrent(ContextHandle.Zero);
if (dummy_context != ContextHandle.Zero && dummy_context.Handle != IntPtr.Zero)
{
Alc.DestroyContext(dummy_context);
}
if (dummy_device != IntPtr.Zero)
{
Alc.CloseDevice(dummy_device);
}
}
catch
{
openal_supported = false;
IsOpenALSupported = false;
}
}
}
}
#endregion
}
}

View file

@ -1,12 +1,11 @@
#region License
//
//
// The Open Toolkit Library License
//
// Copyright (c) 2006 - 2009 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
// 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:
@ -23,39 +22,27 @@
// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
// OTHER DEALINGS IN THE SOFTWARE.
//
#endregion
using System;
using System.Collections.Generic;
using System.Text;
using OpenTK.Audio.OpenAL;
namespace OpenTK.Audio
{
struct AudioDeviceErrorChecker : IDisposable
internal struct AudioDeviceErrorChecker : IDisposable
{
#region Fields
readonly IntPtr Device;
static readonly string ErrorString = "Device {0} reported {1}.";
#endregion
#region Constructors
private readonly IntPtr Device;
private static readonly string ErrorString = "Device {0} reported {1}.";
public AudioDeviceErrorChecker(IntPtr device)
{
if (device == IntPtr.Zero)
{
throw new AudioDeviceException();
}
Device = device;
}
#endregion
#region IDisposable Members
public void Dispose()
{
AlcError err = Alc.GetError(Device);
@ -63,23 +50,21 @@ namespace OpenTK.Audio
{
case AlcError.OutOfMemory:
throw new OutOfMemoryException(String.Format(ErrorString, Device, err));
case AlcError.InvalidValue:
throw new AudioValueException(String.Format(ErrorString, Device, err));
case AlcError.InvalidDevice:
throw new AudioDeviceException(String.Format(ErrorString, Device, err));
case AlcError.InvalidContext:
throw new AudioContextException(String.Format(ErrorString, Device, err));
case AlcError.NoError:
default:
// everything went fine, do nothing
break;
}
}
#endregion
}
}

View file

@ -1,12 +1,11 @@
#region License
//
//
// The Open Toolkit Library License
//
// Copyright (c) 2006 - 2009 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
// 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:
@ -23,13 +22,8 @@
// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
// OTHER DEALINGS IN THE SOFTWARE.
//
#endregion
using System;
using System.Collections.Generic;
using System.Text;
namespace OpenTK.Audio
{
/// <summary>Represents exceptions related to an OpenTK.Audio device.</summary>

View file

@ -1,12 +1,11 @@
#region License
//
//
// The Open Toolkit Library License
//
// Copyright (c) 2006 - 2009 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
// 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:
@ -23,12 +22,9 @@
// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
// OTHER DEALINGS IN THE SOFTWARE.
//
#endregion
using System;
using System.Collections.Generic;
using System.Text;
namespace OpenTK.Audio
{
@ -39,6 +35,6 @@ namespace OpenTK.Audio
public AudioException() : base() { }
/// <summary>Constructs a new AudioException with the specified error message.</summary>
/// <param name="message">The error message of the AudioException.</param>
public AudioException(string message) : base(message) { }
public AudioException(string message) : base(message) { }
}
}

View file

@ -1,12 +1,11 @@
#region License
//
//
// The Open Toolkit Library License
//
// Copyright (c) 2006 - 2009 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
// 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:
@ -23,11 +22,6 @@
// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
// OTHER DEALINGS IN THE SOFTWARE.
//
#endregion
using System;
using System.Collections.Generic;
using System.Text;
namespace OpenTK.Audio
{

View file

@ -1,64 +1,60 @@
#region --- OpenTK.OpenAL License ---
/* AlFunctions.cs
/* AlFunctions.cs
* C header: \OpenAL 1.1 SDK\include\Al.h
* Spec: http://www.openal.org/openal_webstf/specs/OpenAL11Specification.pdf
* Copyright (c) 2008 Christoph Brandtner and Stefanos Apostolopoulos
* See license.txt for license details
* http://www.OpenTK.net */
#endregion
using System;
using System.Runtime.InteropServices;
using System.Security;
using OpenTK;
/* Type Mapping
// 8-bit boolean
// 8-bit boolean
typedef char ALboolean;
* bool
// character
// character
typedef char ALchar;
* byte
// signed 8-bit 2's complement integer
// signed 8-bit 2's complement integer
typedef char ALbyte;
* byte
// unsigned 8-bit integer
// unsigned 8-bit integer
typedef unsigned char ALubyte;
* byte
// signed 16-bit 2's complement integer
// signed 16-bit 2's complement integer
typedef short ALshort;
* short
// unsigned 16-bit integer
// unsigned 16-bit integer
typedef unsigned short ALushort;
* ushort
// unsigned 32-bit integer
// unsigned 32-bit integer
typedef unsigned int ALuint;
* uint
// signed 32-bit 2's complement integer
// signed 32-bit 2's complement integer
typedef int ALint;
* int
// non-negative 32-bit binary integer size
// non-negative 32-bit binary integer size
typedef int ALsizei;
* int
// enumerated 32-bit value
typedef int ALenum;
* int
// 32-bit IEEE754 floating-point
// 32-bit IEEE754 floating-point
typedef float ALfloat;
* float
// 64-bit IEEE754 floating-point
// 64-bit IEEE754 floating-point
typedef double ALdouble;
* double
// void type (for opaque pointers only)
// void type (for opaque pointers only)
typedef void ALvoid;
* void
*/
@ -71,15 +67,9 @@ namespace OpenTK.Audio.OpenAL
public static partial class AL
{
#region Constants
internal const string Lib = "openal32.dll";
private const CallingConvention Style = CallingConvention.Cdecl;
#endregion Constants
#region Renderer State management
/// <summary>This function enables a feature of the OpenAL driver. There are no capabilities defined in OpenAL 1.1 to be used with this function, but it may be used by an extension.</summary>
/// <param name="capability">The name of a capability to enable.</param>
[DllImport(AL.Lib, EntryPoint = "alEnable", ExactSpelling = true, CallingConvention = AL.Style), SuppressUnmanagedCodeSecurity()]
@ -90,18 +80,14 @@ namespace OpenTK.Audio.OpenAL
/// <param name="capability">The name of a capability to disable.</param>
[DllImport(AL.Lib, EntryPoint = "alDisable", ExactSpelling = true, CallingConvention = AL.Style), SuppressUnmanagedCodeSecurity()]
public static extern void Disable(ALCapability capability);
// AL_API void AL_APIENTRY alDisable( ALenum capability );
// AL_API void AL_APIENTRY alDisable( ALenum capability );
/// <summary>This function returns a boolean indicating if a specific feature is enabled in the OpenAL driver.</summary>
/// <param name="capability">The name of a capability to enable.</param>
/// <returns>True if enabled, False if disabled.</returns>
[DllImport(AL.Lib, EntryPoint = "alIsEnabled", ExactSpelling = true, CallingConvention = AL.Style), SuppressUnmanagedCodeSecurity()]
public static extern bool IsEnabled(ALCapability capability);
// AL_API ALboolean AL_APIENTRY alIsEnabled( ALenum capability );
#endregion Renderer State management
#region State retrieval
// AL_API ALboolean AL_APIENTRY alIsEnabled( ALenum capability );
[DllImport(AL.Lib, EntryPoint = "alGetString", ExactSpelling = true, CallingConvention = AL.Style, CharSet = CharSet.Ansi), SuppressUnmanagedCodeSecurity()]
private static extern IntPtr GetStringPrivate(ALGetString param); // accepts the enums AlError, AlContextString
@ -168,10 +154,6 @@ namespace OpenTK.Audio.OpenAL
public static extern ALError GetError();
// AL_API ALenum AL_APIENTRY alGetError( void );
#endregion State retrieval
#region Extension support.
///<summary>This function tests if a specific Extension is available for the OpenAL driver.</summary>
/// <param name="extname">A string naming the desired extension. Example: "EAX-RAM"</param>
/// <returns>Returns True if the Extension is available or False if not available.</returns>
@ -193,12 +175,10 @@ namespace OpenTK.Audio.OpenAL
public static extern int GetEnumValue([In] string ename);
// AL_API ALenum AL_APIENTRY alGetEnumValue( const ALchar* ename );
#endregion Extension support.
/* Listener
* Listener represents the location and orientation of the
* 'user' in 3D-space.
*
*
* Properties include: -
*
* Gain AL_GAIN ALfloat
@ -207,8 +187,6 @@ namespace OpenTK.Audio.OpenAL
* Orientation AL_ORIENTATION ALfloat[6] (Forward then Up vectors)
*/
#region Set Listener parameters
/// <summary>This function sets a floating-point property for the listener.</summary>
/// <param name="param">The name of the attribute to be set: ALListenerf.Gain</param>
/// <param name="value">The float value to set the attribute to.</param>
@ -281,10 +259,6 @@ namespace OpenTK.Audio.OpenAL
// AL_API void AL_APIENTRY alListener3i( ALenum param, ALint value1, ALint value2, ALint value3 );
// AL_API void AL_APIENTRY alListeneriv( ALenum param, const ALint* values );
#endregion Set Listener parameters
#region Get Listener parameters
/// <summary>This function retrieves a floating-point property of the listener.</summary>
/// <param name="param">the name of the attribute to be retrieved: ALListenerf.Gain</param>
/// <param name="value">a pointer to the floating-point value being retrieved.</param>
@ -345,24 +319,22 @@ namespace OpenTK.Audio.OpenAL
// AL_API void AL_APIENTRY alGetListener3i( ALenum param, ALint *value1, ALint *value2, ALint *value3 );
// AL_API void AL_APIENTRY alGetListeneriv( ALenum param, ALint* values );
#endregion Get Listener parameters
/* Source
* Sources represent individual sound objects in 3D-space.
* Sources take the PCM buffer provided in the specified Buffer,
* apply Source-specific modifications, and then
* submit them to be mixed according to spatial arrangement etc.
*
*
* Properties include: -
*
* Position AL_POSITION ALfloat[3]
* Velocity AL_VELOCITY ALfloat[3]
* Direction AL_DIRECTION ALfloat[3]
* Head Relative Mode AL_SOURCE_RELATIVE ALint (AL_TRUE or AL_FALSE)
* Looping AL_LOOPING ALint (AL_TRUE or AL_FALSE)
*
*
* Reference Distance AL_REFERENCE_DISTANCE ALfloat
* Max Distance AL_MAX_DISTANCE ALfloat
* RollOff Factor AL_ROLLOFF_FACTOR ALfloat
@ -372,22 +344,18 @@ namespace OpenTK.Audio.OpenAL
* Max Gain AL_MAX_GAIN ALfloat
* Inner Angle AL_CONE_INNER_ANGLE ALint or ALfloat
* Outer Angle AL_CONE_OUTER_ANGLE ALint or ALfloat
* Cone Outer Gain AL_CONE_OUTER_GAIN ALint or ALfloat
*
* Cone Outer Gain AL_CONE_OUTER_GAIN ALint or ALfloat
*
* MS Offset AL_MSEC_OFFSET ALint or ALfloat
* Byte Offset AL_BYTE_OFFSET ALint or ALfloat
* Sample Offset AL_SAMPLE_OFFSET ALint or ALfloat
* Attached Buffer AL_BUFFER ALint
*
*
* State (Query only) AL_SOURCE_STATE ALint
* Buffers Queued (Query only) AL_BUFFERS_QUEUED ALint
* Buffers Processed (Query only) AL_BUFFERS_PROCESSED ALint
*/
#region Create Source objects
#region GenSources()
[DllImport(AL.Lib, EntryPoint = "alGenSources", ExactSpelling = true, CallingConvention = AL.Style), SuppressUnmanagedCodeSecurity()]
unsafe private static extern void GenSourcesPrivate(int n, [Out] uint* sources);
// AL_API void AL_APIENTRY alGenSources( ALsizei n, ALuint* Sources );
@ -465,16 +433,12 @@ namespace OpenTK.Audio.OpenAL
GenSources(1, out source);
}
#endregion GenSources()
#region DeleteSources()
/// <summary>This function deletes one or more sources.</summary>
/// <param name="n">The number of sources to be deleted.</param>
/// <param name="sources">Pointer to an array of source names identifying the sources to be deleted.</param>
[CLSCompliant(false)]
[DllImport(AL.Lib, EntryPoint = "alDeleteSources", ExactSpelling = true, CallingConvention = AL.Style), SuppressUnmanagedCodeSecurity()]
unsafe public static extern void DeleteSources(int n, [In] uint* sources); // Delete Source objects
unsafe public static extern void DeleteSources(int n, [In] uint* sources); // Delete Source objects
// AL_API void AL_APIENTRY alDeleteSources( ALsizei n, const ALuint* Sources );
/// <summary>This function deletes one or more sources.</summary>
@ -495,8 +459,14 @@ namespace OpenTK.Audio.OpenAL
[CLSCompliant(false)]
public static void DeleteSources(uint[] sources)
{
if (sources == null) throw new ArgumentNullException();
if (sources.Length == 0) throw new ArgumentOutOfRangeException();
if (sources == null)
{
throw new ArgumentNullException();
}
if (sources.Length == 0)
{
throw new ArgumentOutOfRangeException();
}
DeleteBuffers(sources.Length, ref sources[0]);
}
@ -504,8 +474,14 @@ namespace OpenTK.Audio.OpenAL
/// <param name="sources">An array of source names identifying the sources to be deleted.</param>
public static void DeleteSources(int[] sources)
{
if (sources == null) throw new ArgumentNullException();
if (sources.Length == 0) throw new ArgumentOutOfRangeException();
if (sources == null)
{
throw new ArgumentNullException();
}
if (sources.Length == 0)
{
throw new ArgumentOutOfRangeException();
}
DeleteBuffers(sources.Length, ref sources[0]);
}
@ -524,10 +500,6 @@ namespace OpenTK.Audio.OpenAL
DeleteSources(1, ref source);
}
#endregion DeleteSources()
#region IsSource()
/// <summary>This function tests if a source name is valid, returning True if valid and False if not.</summary>
/// <param name="sid">A source name to be tested for validity</param>
/// <returns>Success.</returns>
@ -543,14 +515,6 @@ namespace OpenTK.Audio.OpenAL
return IsSource((uint)sid);
}
#endregion IsSource()
#endregion Create Source objects
#region Set Source parameters
#region Sourcef
/// <summary>This function sets a floating-point property of a source.</summary>
/// <param name="sid">Source name whose attribute is being set</param>
/// <param name="param">The name of the attribute to set: ALSourcef.Pitch, Gain, MinGain, MaxGain, MaxDistance, RolloffFactor, ConeOuterGain, ConeInnerAngle, ConeOuterAngle, ReferenceDistance, EfxAirAbsorptionFactor, EfxRoomRolloffFactor, EfxConeOuterGainHighFrequency.</param>
@ -568,10 +532,6 @@ namespace OpenTK.Audio.OpenAL
Source((uint)sid, param, value);
}
#endregion Sourcef
#region Source3f
/// <summary>This function sets a source property requiring three floating-point values.</summary>
/// <param name="sid">Source name whose attribute is being set.</param>
/// <param name="param">The name of the attribute to set: ALSource3f.Position, Velocity, Direction.</param>
@ -612,17 +572,13 @@ namespace OpenTK.Audio.OpenAL
Source((uint)sid, param, values.X, values.Y, values.Z);
}
#endregion Source3f
#region Sourcei
/// <summary>This function sets an integer property of a source.</summary>
/// <param name="sid">Source name whose attribute is being set.</param>
/// <param name="param">The name of the attribute to set: ALSourcei.SourceRelative, ConeInnerAngle, ConeOuterAngle, Looping, Buffer, SourceState.</param>
/// <param name="value">The value to set the attribute to.</param>
[CLSCompliant(false), DllImport(AL.Lib, EntryPoint = "alSourcei", ExactSpelling = true, CallingConvention = AL.Style), SuppressUnmanagedCodeSecurity()]
public static extern void Source(uint sid, ALSourcei param, int value);
// AL_API void AL_APIENTRY alSourcei( ALuint sid, ALenum param, ALint value );
// AL_API void AL_APIENTRY alSourcei( ALuint sid, ALenum param, ALint value );
/// <summary>This function sets an integer property of a source.</summary>
/// <param name="sid">Source name whose attribute is being set.</param>
@ -669,10 +625,6 @@ namespace OpenTK.Audio.OpenAL
Source((uint)source, ALSourcei.Buffer, buffer);
}
#endregion Sourcei
#region Source3i
/// <summary>This function sets 3 integer properties of a source. This property is used to establish connections between Sources and Auxiliary Effect Slots.</summary>
/// <param name="sid">Source name whose attribute is being set.</param>
/// <param name="param">The name of the attribute to set: EfxAuxiliarySendFilter</param>
@ -681,7 +633,7 @@ namespace OpenTK.Audio.OpenAL
///<param name="value3">The value to set the attribute to. (EFX Extension) optional Filter ID.</param>
[CLSCompliant(false), DllImport(AL.Lib, EntryPoint = "alSource3i", ExactSpelling = true, CallingConvention = AL.Style), SuppressUnmanagedCodeSecurity()]
public static extern void Source(uint sid, ALSource3i param, int value1, int value2, int value3);
// AL_API void AL_APIENTRY alSource3i( ALuint sid, ALenum param, ALint value1, ALint value2, ALint value3 );
// AL_API void AL_APIENTRY alSource3i( ALuint sid, ALenum param, ALint value1, ALint value2, ALint value3 );
/// <summary>This function sets 3 integer properties of a source. This property is used to establish connections between Sources and Auxiliary Effect Slots.</summary>
/// <param name="sid">Source name whose attribute is being set.</param>
@ -694,18 +646,10 @@ namespace OpenTK.Audio.OpenAL
Source((uint)sid, param, value1, value2, value3);
}
#endregion Source3i
// Not used by any Enum:
// AL_API void AL_APIENTRY alSourcefv( ALuint sid, ALenum param, const ALfloat* values );
// AL_API void AL_APIENTRY alSourceiv( ALuint sid, ALenum param, const ALint* values );
#endregion Set Source parameters
#region Get Source parameters
#region GetSourcef
/// <summary>This function retrieves a floating-point property of a source.</summary>
/// <param name="sid">Source name whose attribute is being retrieved.</param>
/// <param name="param">The name of the attribute to set: ALSourcef.Pitch, Gain, MinGain, MaxGain, MaxDistance, RolloffFactor, ConeOuterGain, ConeInnerAngle, ConeOuterAngle, ReferenceDistance, EfxAirAbsorptionFactor, EfxRoomRolloffFactor, EfxConeOuterGainHighFrequency.</param>
@ -723,10 +667,6 @@ namespace OpenTK.Audio.OpenAL
GetSource((uint)sid, param, out value);
}
#endregion GetSourcef
#region GetSource3f
/// <summary>This function retrieves three floating-point values representing a property of a source.</summary>
/// <param name="sid">Source name whose attribute is being retrieved.</param>
/// <param name="param">the name of the attribute being retrieved: ALSource3f.Position, Velocity, Direction.</param>
@ -767,10 +707,6 @@ namespace OpenTK.Audio.OpenAL
GetSource((uint)sid, param, out values.X, out values.Y, out values.Z);
}
#endregion GetSource3f
#region GetSourcei
/// <summary>This function retrieves an integer property of a source.</summary>
/// <param name="sid">Source name whose attribute is being retrieved.</param>
/// <param name="param">The name of the attribute to retrieve: ALSourcei.SourceRelative, Buffer, SourceState, BuffersQueued, BuffersProcessed.</param>
@ -811,19 +747,11 @@ namespace OpenTK.Audio.OpenAL
value = result != 0;
}
#endregion GetSourcei
// Not used by any Enum:
// AL_API void AL_APIENTRY alGetSource3i( ALuint sid, ALenum param, ALint* value1, ALint* value2, ALint* value3);
// AL_API void AL_APIENTRY alGetSourcefv( ALuint sid, ALenum param, ALfloat* values );
// AL_API void AL_APIENTRY alGetSourceiv( ALuint sid, ALenum param, ALint* values );
#endregion Get Source parameters
#region Source vector based playback calls
#region SourcePlay
/// <summary>This function plays a set of sources. The playing sources will have their state changed to ALSourceState.Playing. When called on a source which is already playing, the source will restart at the beginning. When the attached buffer(s) are done playing, the source will progress to the ALSourceState.Stopped state.</summary>
/// <param name="ns">The number of sources to be played.</param>
/// <param name="sids">A pointer to an array of sources to be played.</param>
@ -874,10 +802,6 @@ namespace OpenTK.Audio.OpenAL
}
}
#endregion SourcePlay
#region SourceStop
/// <summary>This function stops a set of sources. The stopped sources will have their state changed to ALSourceState.Stopped.</summary>
/// <param name="ns">The number of sources to stop.</param>
/// <param name="sids">A pointer to an array of sources to be stopped.</param>
@ -928,10 +852,6 @@ namespace OpenTK.Audio.OpenAL
}
}
#endregion SourceStop
#region SourceRewind
/// <summary>This function stops a set of sources and sets all their states to ALSourceState.Initial.</summary>
/// <param name="ns">The number of sources to be rewound.</param>
/// <param name="sids">A pointer to an array of sources to be rewound.</param>
@ -982,10 +902,6 @@ namespace OpenTK.Audio.OpenAL
}
}
#endregion SourceRewind
#region SourcePause
/// <summary>This function pauses a set of sources. The paused sources will have their state changed to ALSourceState.Paused.</summary>
/// <param name="ns">The number of sources to be paused.</param>
/// <param name="sids">A pointer to an array of sources to be paused.</param>
@ -1035,14 +951,6 @@ namespace OpenTK.Audio.OpenAL
}
}
#endregion SourcePause
#endregion Source vector based playback calls
#region Source based playback calls
#region SourcePlay
/// <summary>This function plays, replays or resumes a source. The playing source will have it's state changed to ALSourceState.Playing. When called on a source which is already playing, the source will restart at the beginning. When the attached buffer(s) are done playing, the source will progress to the ALSourceState.Stopped state.</summary>
/// <param name="sid">The name of the source to be played.</param>
[CLSCompliant(false), DllImport(AL.Lib, EntryPoint = "alSourcePlay", ExactSpelling = true, CallingConvention = AL.Style), SuppressUnmanagedCodeSecurity()]
@ -1056,10 +964,6 @@ namespace OpenTK.Audio.OpenAL
SourcePlay((uint)sid);
}
#endregion SourcePlay
#region SourceStop
/// <summary>This function stops a source. The stopped source will have it's state changed to ALSourceState.Stopped.</summary>
/// <param name="sid">The name of the source to be stopped.</param>
[CLSCompliant(false), DllImport(AL.Lib, EntryPoint = "alSourceStop", ExactSpelling = true, CallingConvention = AL.Style), SuppressUnmanagedCodeSecurity()]
@ -1073,10 +977,6 @@ namespace OpenTK.Audio.OpenAL
SourceStop((uint)sid);
}
#endregion SourceStop
#region SourceRewind
/// <summary>This function stops the source and sets its state to ALSourceState.Initial.</summary>
/// <param name="sid">The name of the source to be rewound.</param>
[CLSCompliant(false), DllImport(AL.Lib, EntryPoint = "alSourceRewind", ExactSpelling = true, CallingConvention = AL.Style), SuppressUnmanagedCodeSecurity()]
@ -1090,10 +990,6 @@ namespace OpenTK.Audio.OpenAL
SourceRewind((uint)sid);
}
#endregion SourceRewind
#region SourcePause
/// <summary>This function pauses a source. The paused source will have its state changed to ALSourceState.Paused.</summary>
/// <param name="sid">The name of the source to be paused.</param>
[CLSCompliant(false), DllImport(AL.Lib, EntryPoint = "alSourcePause", ExactSpelling = true, CallingConvention = AL.Style), SuppressUnmanagedCodeSecurity()]
@ -1107,14 +1003,6 @@ namespace OpenTK.Audio.OpenAL
SourcePause((uint)sid);
}
#endregion SourcePause
#endregion Source based playback calls
#region Source Queuing
#region SourceQueueBuffers
/// <summary>This function queues a set of buffers on a source. All buffers attached to a source will be played in sequence, and the number of processed buffers can be detected using AL.GetSource with parameter ALGetSourcei.BuffersProcessed. When first created, a source will be of type ALSourceType.Undetermined. A successful AL.SourceQueueBuffers call will change the source type to ALSourceType.Streaming.</summary>
/// <param name="sid">The name of the source to queue buffers onto.</param>
/// <param name="numEntries">The number of buffers to be queued.</param>
@ -1177,10 +1065,6 @@ namespace OpenTK.Audio.OpenAL
unsafe { AL.SourceQueueBuffers((uint)source, 1, (uint*)&buffer); }
}
#endregion SourceQueueBuffers
#region SourceUnqueueBuffers
/// <summary>This function unqueues a set of buffers attached to a source. The number of processed buffers can be detected using AL.GetSource with parameter ALGetSourcei.BuffersProcessed, which is the maximum number of buffers that can be unqueued using this call. The unqueue operation will only take place if all n buffers can be removed from the queue.</summary>
/// <param name="sid">The name of the source to unqueue buffers from.</param>
/// <param name="numEntries">The number of buffers to be unqueued.</param>
@ -1233,16 +1117,15 @@ namespace OpenTK.Audio.OpenAL
/// <param name="numEntries">The number of buffers to be unqueued.</param>
public static int[] SourceUnqueueBuffers(int sid, int numEntries)
{
if (numEntries <= 0) throw new ArgumentOutOfRangeException("numEntries", "Must be greater than zero.");
if (numEntries <= 0)
{
throw new ArgumentOutOfRangeException("numEntries", "Must be greater than zero.");
}
int[] buf = new int[numEntries];
SourceUnqueueBuffers(sid, numEntries, buf);
return buf;
}
#endregion SourceUnqueueBuffers
#endregion Source Queuing
/*
* Buffer
* Buffer objects are storage space for sample buffer.
@ -1257,10 +1140,6 @@ namespace OpenTK.Audio.OpenAL
* Channels (Query only) AL_CHANNELS ALint
*/
#region Buffer objects
#region GenBuffers
/// <summary>This function generates one or more buffers, which contain audio buffer (see AL.BufferData). References to buffers are uint values, which are used wherever a buffer reference is needed (in calls such as AL.DeleteBuffers, AL.Source with parameter ALSourcei, AL.SourceQueueBuffers, and AL.SourceUnqueueBuffers).</summary>
/// <param name="n">The number of buffers to be generated.</param>
/// <param name="buffers">Pointer to an array of uint values which will store the names of the new buffers.</param>
@ -1332,10 +1211,6 @@ namespace OpenTK.Audio.OpenAL
GenBuffers(1, out buffer);
}
#endregion GenBuffers
#region DeleteBuffers
/// <summary>This function deletes one or more buffers, freeing the resources used by the buffer. Buffers which are attached to a source can not be deleted. See AL.Source (ALSourcei) and AL.SourceUnqueueBuffers for information on how to detach a buffer from a source.</summary>
/// <param name="n">The number of buffers to be deleted.</param>
/// <param name="buffers">Pointer to an array of buffer names identifying the buffers to be deleted.</param>
@ -1385,8 +1260,14 @@ namespace OpenTK.Audio.OpenAL
[CLSCompliant(false)]
public static void DeleteBuffers(uint[] buffers)
{
if (buffers == null) throw new ArgumentNullException();
if (buffers.Length == 0) throw new ArgumentOutOfRangeException();
if (buffers == null)
{
throw new ArgumentNullException();
}
if (buffers.Length == 0)
{
throw new ArgumentOutOfRangeException();
}
DeleteBuffers(buffers.Length, ref buffers[0]);
}
@ -1394,8 +1275,14 @@ namespace OpenTK.Audio.OpenAL
/// <param name="buffers">Pointer to an array of buffer names identifying the buffers to be deleted.</param>
public static void DeleteBuffers(int[] buffers)
{
if (buffers == null) throw new ArgumentNullException();
if (buffers.Length == 0) throw new ArgumentOutOfRangeException();
if (buffers == null)
{
throw new ArgumentNullException();
}
if (buffers.Length == 0)
{
throw new ArgumentOutOfRangeException();
}
DeleteBuffers(buffers.Length, ref buffers[0]);
}
@ -1414,10 +1301,6 @@ namespace OpenTK.Audio.OpenAL
DeleteBuffers(1, ref buffer);
}
#endregion DeleteBuffers
#region IsBuffer
/// <summary>This function tests if a buffer name is valid, returning True if valid, False if not.</summary>
/// <param name="bid">A buffer Handle previously allocated with <see cref="GenBuffers(int)"/>.</param>
/// <returns>Success.</returns>
@ -1434,10 +1317,6 @@ namespace OpenTK.Audio.OpenAL
return IsBuffer(temp);
}
#endregion IsBuffer
#region BufferData
/// <summary>This function fills a buffer with audio buffer. All the pre-defined formats are PCM buffer, but this function may be used by extensions to load other buffer types as well.</summary>
/// <param name="bid">buffer Handle/Name to be filled with buffer.</param>
/// <param name="format">Format type from among the following: ALFormat.Mono8, ALFormat.Mono16, ALFormat.Stereo8, ALFormat.Stereo16.</param>
@ -1469,19 +1348,15 @@ namespace OpenTK.Audio.OpenAL
where TBuffer : struct
{
if (!BlittableValueType.Check(buffer))
{
throw new ArgumentException("buffer");
}
GCHandle handle = GCHandle.Alloc(buffer, GCHandleType.Pinned);
try { BufferData(bid, format, handle.AddrOfPinnedObject(), size, freq); }
finally { handle.Free(); }
}
#endregion BufferData
#endregion Buffer objects
#region Set Buffer parameters (currently parameters can only be read)
/*
Remarks (from Manual)
* There are no relevant buffer properties defined in OpenAL 1.1 which can be affected by this call,
@ -1504,12 +1379,6 @@ namespace OpenTK.Audio.OpenAL
Buffer3f( bid, param, values.X, values.Y, values.Z );
}*/
#endregion Set Buffer parameters
#region Get Buffer parameters
#region GetBufferi
/// <summary>This function retrieves an integer property of a buffer.</summary>
/// <param name="bid">Buffer name whose attribute is being retrieved</param>
/// <param name="param">The name of the attribute to be retrieved: ALGetBufferi.Frequency, Bits, Channels, Size, and the currently hidden AL_DATA (dangerous).</param>
@ -1527,18 +1396,12 @@ namespace OpenTK.Audio.OpenAL
GetBuffer((uint)bid, param, out value);
}
#endregion GetBufferi
// AL_API void AL_APIENTRY alGetBufferf( ALuint bid, ALenum param, ALfloat* value );
// AL_API void AL_APIENTRY alGetBuffer3f( ALuint bid, ALenum param, ALfloat* value1, ALfloat* value2, ALfloat* value3);
// AL_API void AL_APIENTRY alGetBufferfv( ALuint bid, ALenum param, ALfloat* values );
// AL_API void AL_APIENTRY alGetBuffer3i( ALuint bid, ALenum param, ALint* value1, ALint* value2, ALint* value3);
// AL_API void AL_APIENTRY alGetBufferiv( ALuint bid, ALenum param, ALint* values );
#endregion Get Buffer parameters
#region Global Parameters
/// <summary>AL.DopplerFactor is a simple scaling of source and listener velocities to exaggerate or deemphasize the Doppler (pitch) shift resulting from the calculation.</summary>
/// <param name="value">A negative value will result in an error, the command is then ignored. The default value is 1f. The current setting can be queried using AL.Get with parameter ALGetFloat.SpeedOfSound.</param>
[DllImport(AL.Lib, EntryPoint = "alDopplerFactor", ExactSpelling = true, CallingConvention = AL.Style), SuppressUnmanagedCodeSecurity()]
@ -1561,29 +1424,29 @@ namespace OpenTK.Audio.OpenAL
/// <remarks>
/// The ALDistanceModel .InverseDistance model works according to the following formula:
/// gain = ALSourcef.ReferenceDistance / (ALSourcef.ReferenceDistance + ALSourcef.RolloffFactor * (distance ALSourcef.ReferenceDistance));
///
///
/// The ALDistanceModel .InverseDistanceClamped model works according to the following formula:
/// distance = max(distance,ALSourcef.ReferenceDistance);
/// distance = min(distance,ALSourcef.MaxDistance);
/// gain = ALSourcef.ReferenceDistance / (ALSourcef.ReferenceDistance + ALSourcef.RolloffFactor * (distance ALSourcef.ReferenceDistance));
///
/// The ALDistanceModel.LinearDistance model works according to the following formula:
///
/// The ALDistanceModel.LinearDistance model works according to the following formula:
/// distance = min(distance, ALSourcef.MaxDistance) // avoid negative gain
/// gain = (1 ALSourcef.RolloffFactor * (distance ALSourcef.ReferenceDistance) / (ALSourcef.MaxDistance ALSourcef.ReferenceDistance))
///
///
/// The ALDistanceModel.LinearDistanceClamped model works according to the following formula:
/// distance = max(distance, ALSourcef.ReferenceDistance)
/// distance = min(distance, ALSourcef.MaxDistance)
/// gain = (1 ALSourcef.RolloffFactor * (distance ALSourcef.ReferenceDistance) / (ALSourcef.MaxDistance ALSourcef.ReferenceDistance))
///
///
/// The ALDistanceModel.ExponentDistance model works according to the following formula:
/// gain = (distance / ALSourcef.ReferenceDistance) ^ (- ALSourcef.RolloffFactor)
///
/// gain = (distance / ALSourcef.ReferenceDistance) ^ (- ALSourcef.RolloffFactor)
///
/// The ALDistanceModel.ExponentDistanceClamped model works according to the following formula:
/// distance = max(distance, ALSourcef.ReferenceDistance)
/// distance = min(distance, ALSourcef.MaxDistance)
/// gain = (distance / ALSourcef.ReferenceDistance) ^ (- ALSourcef.RolloffFactor)
///
///
/// The ALDistanceModel.None model works according to the following formula:
/// gain = 1f;
/// </remarks>
@ -1592,10 +1455,6 @@ namespace OpenTK.Audio.OpenAL
public static extern void DistanceModel(ALDistanceModel distancemodel);
// AL_API void AL_APIENTRY alDistanceModel( ALenum distanceModel );
#endregion Global Parameters
#region Helpers
/// <summary>(Helper) Returns Source state information.</summary>
/// <param name="sid">The source to be queried.</param>
/// <returns>state information from OpenAL.</returns>
@ -1646,7 +1505,5 @@ namespace OpenTK.Audio.OpenAL
{
return (ALDistanceModel)AL.Get(ALGetInteger.DistanceModel);
}
#endregion Helpers
}
}

View file

@ -1,13 +1,9 @@
#region --- OpenTK.OpenAL License ---
/* AlTokens.cs
/* AlTokens.cs
* C header: \OpenAL 1.1 SDK\include\Al.h
* Spec: http://www.openal.org/openal_webstf/specs/OpenAL11Specification.pdf
* Copyright (c) 2008 Christoph Brandtner and Stefanos Apostolopoulos
* See license.txt for license details
* http://www.OpenTK.net */
#endregion
using System;
namespace OpenTK.Audio.OpenAL
{

View file

@ -1,11 +1,9 @@
#region --- OpenTK.OpenAL License ---
/* EfxFunctions.cs
/* EfxFunctions.cs
* C headers: \OpenAL 1.1 SDK\include\ "efx.h", "efx-creative.h", "Efx-Util.h"
* Spec: Effects Extension Guide.pdf (bundled with OpenAL SDK)
* Copyright (c) 2008 Christoph Brandtner and Stefanos Apostolopoulos
* See license.txt for license details
* http://www.OpenTK.net */
#endregion
using System;
using System.Diagnostics;
@ -19,10 +17,6 @@ namespace OpenTK.Audio.OpenAL
/// </summary>
public partial class EffectsExtension
{
#region Helpers
#region BindEffect
/// <summary>(Helper) Selects the Effect type used by this Effect handle.</summary>
/// <param name="eid">Effect id returned from a successful call to GenEffects.</param>
/// <param name="type">Effect type.</param>
@ -41,10 +35,6 @@ namespace OpenTK.Audio.OpenAL
Imported_alEffecti((uint)eid, EfxEffecti.EffectType, (int)type);
}
#endregion BindEffect
#region BindFilterToSource
/// <summary>(Helper) reroutes the output of a Source through a Filter.</summary>
/// <param name="source">A valid Source handle.</param>
/// <param name="filter">A valid Filter handle.</param>
@ -63,10 +53,6 @@ namespace OpenTK.Audio.OpenAL
AL.Source((uint)source, ALSourcei.EfxDirectFilter, (int)filter);
}
#endregion BindFilterToSource
#region BindEffectToAuxiliarySlot
/// <summary>(Helper) Attaches an Effect to an Auxiliary Effect Slot.</summary>
/// <param name="auxiliaryeffectslot">The slot handle to attach the Effect to.</param>
/// <param name="effect">The Effect handle that is being attached.</param>
@ -85,10 +71,6 @@ namespace OpenTK.Audio.OpenAL
AuxiliaryEffectSlot((uint)auxiliaryeffectslot, EfxAuxiliaryi.EffectslotEffect, (int)effect);
}
#endregion BindEffectToAuxiliarySlot
#region BindSourceToAuxiliarySlot
/// <summary>(Helper) Reroutes a Source's output into an Auxiliary Effect Slot.</summary>
/// <param name="source">The Source handle who's output is forwarded.</param>
/// <param name="slot">The Auxiliary Effect Slot handle that receives input from the Source.</param>
@ -111,14 +93,6 @@ namespace OpenTK.Audio.OpenAL
AL.Source((uint)source, ALSource3i.EfxAuxiliarySendFilter, (int)slot, (int)slotnumber, (int)filter);
}
#endregion BindSourceToAuxiliarySlot
#endregion Helpers
#region Effect Object
#region alGenEffects
//[CLSCompliant(false)]
unsafe private delegate void Delegate_alGenEffects(int n, [Out] uint* effects);
// typedef void (__cdecl *LPALGENEFFECTS)( ALsizei n, ALuint* effects );
@ -167,7 +141,10 @@ namespace OpenTK.Audio.OpenAL
/// </remarks>
public int[] GenEffects(int n)
{
if (n <= 0) throw new ArgumentOutOfRangeException("n", "Must be higher than 0.");
if (n <= 0)
{
throw new ArgumentOutOfRangeException("n", "Must be higher than 0.");
}
int[] effects = new int[n];
GenEffects(n, out effects[0]);
return effects;
@ -202,10 +179,6 @@ namespace OpenTK.Audio.OpenAL
}
#endregion alGenEffects
#region alDeleteEffects
//[CLSCompliant(false)]
unsafe private delegate void Delegate_alDeleteEffects(int n, [In] uint* effects);
// typedef void (__cdecl *LPALDELETEEFFECTS)( ALsizei n, ALuint* effects );
@ -246,7 +219,10 @@ namespace OpenTK.Audio.OpenAL
/// <param name="effects">Pointer to n Effect object identifiers.</param>
public void DeleteEffects(int[] effects)
{
if (effects == null) throw new ArgumentNullException("effects");
if (effects == null)
{
throw new ArgumentNullException("effects");
}
DeleteEffects(effects.Length, ref effects[0]);
}
@ -255,7 +231,10 @@ namespace OpenTK.Audio.OpenAL
[CLSCompliant(false)]
public void DeleteEffects(uint[] effects)
{
if (effects == null) throw new ArgumentNullException("effects");
if (effects == null)
{
throw new ArgumentNullException("effects");
}
DeleteEffects(effects.Length, ref effects[0]);
}
@ -280,10 +259,6 @@ namespace OpenTK.Audio.OpenAL
}
}
#endregion alDeleteEffects
#region alIsEffect
//[CLSCompliant(false)]
private delegate bool Delegate_alIsEffect(uint eid);
// typedef ALboolean (__cdecl *LPALISEFFECT)( ALuint eid );
@ -309,13 +284,9 @@ namespace OpenTK.Audio.OpenAL
return Imported_alIsEffect((uint)eid);
}
#endregion alIsEffect
#region alEffecti
//[CLSCompliant(false)]
private delegate void Delegate_alEffecti(uint eid, EfxEffecti param, int value);
// typedef void (__cdecl *LPALEFFECTI)( ALuint eid, ALenum param, ALint value);
// typedef void (__cdecl *LPALEFFECTI)( ALuint eid, ALenum param, ALint value);
//[CLSCompliant(false)]
private Delegate_alEffecti Imported_alEffecti;
@ -340,10 +311,6 @@ namespace OpenTK.Audio.OpenAL
Imported_alEffecti((uint)eid, param, value);
}
#endregion alEffecti
#region alEffectf
//[CLSCompliant(false)]
private delegate void Delegate_alEffectf(uint eid, EfxEffectf param, float value);
// typedef void (__cdecl *LPALEFFECTF)( ALuint eid, ALenum param, ALfloat value);
@ -371,13 +338,9 @@ namespace OpenTK.Audio.OpenAL
Imported_alEffectf((uint)eid, param, value);
}
#endregion alEffectf
#region alEffectfv
//[CLSCompliant(false)]
unsafe private delegate void Delegate_alEffectfv(uint eid, EfxEffect3f param, [In] float* values);
// typedef void (__cdecl *LPALEFFECTFV)( ALuint eid, ALenum param, ALfloat* values );
// typedef void (__cdecl *LPALEFFECTFV)( ALuint eid, ALenum param, ALfloat* values );
//[CLSCompliant(false)]
private Delegate_alEffectfv Imported_alEffectfv;
@ -408,10 +371,6 @@ namespace OpenTK.Audio.OpenAL
Effect((uint)eid, param, ref values);
}
#endregion alEffectfv
#region alGetEffecti
//[CLSCompliant(false)]
unsafe private delegate void Delegate_alGetEffecti(uint eid, EfxEffecti pname, [Out] int* value);
// typedef void (__cdecl *LPALGETEFFECTI)( ALuint eid, ALenum pname, ALint* value );
@ -445,10 +404,6 @@ namespace OpenTK.Audio.OpenAL
GetEffect((uint)eid, pname, out value);
}
#endregion alGetEffecti
#region alGetEffectf
//[CLSCompliant(false)]
unsafe private delegate void Delegate_alGetEffectf(uint eid, EfxEffectf pname, [Out]float* value);
// typedef void (__cdecl *LPALGETEFFECTF)( ALuint eid, ALenum pname, ALfloat* value );
@ -482,10 +437,6 @@ namespace OpenTK.Audio.OpenAL
GetEffect((uint)eid, pname, out value);
}
#endregion alGetEffectf
#region alGetEffectfv
//[CLSCompliant(false)]
unsafe private delegate void Delegate_alGetEffectfv(uint eid, EfxEffect3f param, [Out] float* values);
// typedef void (__cdecl *LPALGETEFFECTFV)( ALuint eid, ALenum pname, ALfloat* values );
@ -522,21 +473,13 @@ namespace OpenTK.Audio.OpenAL
GetEffect((uint)eid, param, out values);
}
#endregion alGetEffectfv
// Not used:
// typedef void (__cdecl *LPALEFFECTIV)( ALuint eid, ALenum param, ALint* values );
// typedef void (__cdecl *LPALEFFECTIV)( ALuint eid, ALenum param, ALint* values );
// typedef void (__cdecl *LPALGETEFFECTIV)( ALuint eid, ALenum pname, ALint* values );
#endregion Effect Object
#region Filter Object
#region alGenFilters
//[CLSCompliant(false)]
unsafe private delegate void Delegate_alGenFilters(int n, [Out] uint* filters);
// typedef void (__cdecl *LPALGENFILTERS)( ALsizei n, ALuint* filters );
// typedef void (__cdecl *LPALGENFILTERS)( ALsizei n, ALuint* filters );
//[CLSCompliant(false)]
private Delegate_alGenFilters Imported_alGenFilters;
@ -582,7 +525,10 @@ namespace OpenTK.Audio.OpenAL
public int[] GenFilters(int n)
{
if (n <= 0) throw new ArgumentOutOfRangeException("n", "Must be higher than 0.");
if (n <= 0)
{
throw new ArgumentOutOfRangeException("n", "Must be higher than 0.");
}
int[] filters = new int[n];
GenFilters(filters.Length, out filters[0]);
return filters;
@ -612,10 +558,6 @@ namespace OpenTK.Audio.OpenAL
}
}
#endregion alGenFilters
#region alDeleteFilters
//[CLSCompliant(false)]
unsafe private delegate void Delegate_alDeleteFilters(int n, [In] uint* filters);
// typedef void (__cdecl *LPALDELETEFILTERS)( ALsizei n, ALuint* filters );
@ -657,7 +599,10 @@ namespace OpenTK.Audio.OpenAL
[CLSCompliant(false)]
public void DeleteFilters(uint[] filters)
{
if (filters == null) throw new ArgumentNullException("filters");
if (filters == null)
{
throw new ArgumentNullException("filters");
}
DeleteFilters(filters.Length, ref filters[0]);
}
@ -665,7 +610,10 @@ namespace OpenTK.Audio.OpenAL
/// <param name="filters">Pointer to an filter name/handle identifying the Filter Object to be deleted.</param>
public void DeleteFilters(int[] filters)
{
if (filters == null) throw new ArgumentNullException("filters");
if (filters == null)
{
throw new ArgumentNullException("filters");
}
DeleteFilters(filters.Length, ref filters[0]);
}
@ -690,10 +638,6 @@ namespace OpenTK.Audio.OpenAL
}
}
#endregion alDeleteFilters
#region alIsFilter
//[CLSCompliant(false)]
private delegate bool Delegate_alIsFilter(uint fid);
// typedef ALboolean (__cdecl *LPALISFILTER)( ALuint fid );
@ -719,10 +663,6 @@ namespace OpenTK.Audio.OpenAL
return Imported_alIsFilter((uint)fid);
}
#endregion alIsFilter
#region alFilteri
//[CLSCompliant(false)]
private delegate void Delegate_alFilteri(uint fid, EfxFilteri param, int value);
// typedef void (__cdecl *LPALFILTERI)( ALuint fid, ALenum param, ALint value );
@ -750,10 +690,6 @@ namespace OpenTK.Audio.OpenAL
Imported_alFilteri((uint)fid, param, value);
}
#endregion alFilteri
#region alFilterf
//[CLSCompliant(false)]
private delegate void Delegate_alFilterf(uint fid, EfxFilterf param, float value);
// typedef void (__cdecl *LPALFILTERF)( ALuint fid, ALenum param, ALfloat value);
@ -781,10 +717,6 @@ namespace OpenTK.Audio.OpenAL
Imported_alFilterf((uint)fid, param, value);
}
#endregion alFilterf
#region alGetFilteri
//[CLSCompliant(false)]
unsafe private delegate void Delegate_alGetFilteri(uint fid, EfxFilteri pname, [Out] int* value);
// typedef void (__cdecl *LPALGETFILTERI)( ALuint fid, ALenum pname, ALint* value );
@ -818,10 +750,6 @@ namespace OpenTK.Audio.OpenAL
GetFilter((uint)fid, pname, out value);
}
#endregion alGetFilteri
#region alGetFilterf
//[CLSCompliant(false)]
unsafe private delegate void Delegate_alGetFilterf(uint fid, EfxFilterf pname, [Out] float* value);
// typedef void (__cdecl *LPALGETFILTERF)( ALuint fid, ALenum pname, ALfloat* value );
@ -855,20 +783,12 @@ namespace OpenTK.Audio.OpenAL
GetFilter((uint)fid, pname, out value);
}
#endregion alGetFilterf
// Not used:
// typedef void (__cdecl *LPALFILTERIV)( ALuint fid, ALenum param, ALint* values );
// typedef void (__cdecl *LPALFILTERFV)( ALuint fid, ALenum param, ALfloat* values );
// typedef void (__cdecl *LPALFILTERIV)( ALuint fid, ALenum param, ALint* values );
// typedef void (__cdecl *LPALFILTERFV)( ALuint fid, ALenum param, ALfloat* values );
// typedef void (__cdecl *LPALGETFILTERIV)( ALuint fid, ALenum pname, ALint* values );
// typedef void (__cdecl *LPALGETFILTERFV)( ALuint fid, ALenum pname, ALfloat* values );
#endregion Filter Object
#region Auxiliary Effect Slot Object
#region alGenAuxiliaryEffectSlots
//[CLSCompliant(false)]
unsafe private delegate void Delegate_alGenAuxiliaryEffectSlots(int n, [Out] uint* slots);
// typedef void (__cdecl *LPALGENAUXILIARYEFFECTSLOTS)( ALsizei n, ALuint* slots );
@ -915,7 +835,10 @@ namespace OpenTK.Audio.OpenAL
/// <returns>Pointer addressing sufficient memory to store n Effect Slot object identifiers.</returns>
public int[] GenAuxiliaryEffectSlots(int n)
{
if (n <= 0) throw new ArgumentOutOfRangeException("n", "Must be higher than 0.");
if (n <= 0)
{
throw new ArgumentOutOfRangeException("n", "Must be higher than 0.");
}
int[] slots = new int[n];
GenAuxiliaryEffectSlots(slots.Length, out slots[0]);
return slots;
@ -945,10 +868,6 @@ namespace OpenTK.Audio.OpenAL
}
}
#endregion alGenAuxiliaryEffectSlots
#region DeleteAuxiliaryEffectSlots
unsafe private delegate void Delegate_alDeleteAuxiliaryEffectSlots(int n, [In] uint* slots);
// typedef void (__cdecl *LPALDELETEAUXILIARYEFFECTSLOTS)( ALsizei n, ALuint* slots );
@ -987,7 +906,10 @@ namespace OpenTK.Audio.OpenAL
/// <param name="slots">Pointer to n Effect Slot object identifiers.</param>
public void DeleteAuxiliaryEffectSlots(int[] slots)
{
if (slots == null) throw new ArgumentNullException("slots");
if (slots == null)
{
throw new ArgumentNullException("slots");
}
DeleteAuxiliaryEffectSlots(slots.Length, ref slots[0]);
}
@ -996,7 +918,10 @@ namespace OpenTK.Audio.OpenAL
[CLSCompliant(false)]
public void DeleteAuxiliaryEffectSlots(uint[] slots)
{
if (slots == null) throw new ArgumentNullException("slots");
if (slots == null)
{
throw new ArgumentNullException("slots");
}
DeleteAuxiliaryEffectSlots(slots.Length, ref slots[0]);
}
@ -1021,10 +946,6 @@ namespace OpenTK.Audio.OpenAL
}
}
#endregion alDeleteAuxiliaryEffectSlots
#region alIsAuxiliaryEffectSlot
//[CLSCompliant(false)]
private delegate bool Delegate_alIsAuxiliaryEffectSlot(uint slot);
// typedef ALboolean (__cdecl *LPALISAUXILIARYEFFECTSLOT)( ALuint slot );
@ -1050,13 +971,9 @@ namespace OpenTK.Audio.OpenAL
return Imported_alIsAuxiliaryEffectSlot((uint)slot);
}
#endregion alIsAuxiliaryEffectSlot
#region alAuxiliaryEffectSloti
//[CLSCompliant(false)]
private delegate void Delegate_alAuxiliaryEffectSloti(uint asid, EfxAuxiliaryi param, int value);
// typedef void (__cdecl *LPALAUXILIARYEFFECTSLOTI)( ALuint asid, ALenum param, ALint value );
// typedef void (__cdecl *LPALAUXILIARYEFFECTSLOTI)( ALuint asid, ALenum param, ALint value );
//[CLSCompliant(false)]
private Delegate_alAuxiliaryEffectSloti Imported_alAuxiliaryEffectSloti;
@ -1081,10 +998,6 @@ namespace OpenTK.Audio.OpenAL
Imported_alAuxiliaryEffectSloti((uint)asid, param, value);
}
#endregion alAuxiliaryEffectSloti
#region alAuxiliaryEffectSlotf
//[CLSCompliant(false)]
private delegate void Delegate_alAuxiliaryEffectSlotf(uint asid, EfxAuxiliaryf param, float value);
// typedef void (__cdecl *LPALAUXILIARYEFFECTSLOTF)( ALuint asid, ALenum param, ALfloat value );
@ -1112,10 +1025,6 @@ namespace OpenTK.Audio.OpenAL
Imported_alAuxiliaryEffectSlotf((uint)asid, param, value);
}
#endregion alAuxiliaryEffectSlotf
#region alGetAuxiliaryEffectSloti
//[CLSCompliant(false)]
unsafe private delegate void Delegate_alGetAuxiliaryEffectSloti(uint asid, EfxAuxiliaryi pname, [Out] int* value);
// typedef void (__cdecl *LPALGETAUXILIARYEFFECTSLOTI)( ALuint asid, ALenum pname, ALint* value );
@ -1149,10 +1058,6 @@ namespace OpenTK.Audio.OpenAL
GetAuxiliaryEffectSlot((uint)asid, pname, out value);
}
#endregion alGetAuxiliaryEffectSloti
#region alGetAuxiliaryEffectSlotf
//[CLSCompliant(false)]
unsafe private delegate void Delegate_alGetAuxiliaryEffectSlotf(uint asid, EfxAuxiliaryf pname, [Out] float* value);
// typedef void (__cdecl *LPALGETAUXILIARYEFFECTSLOTF)( ALuint asid, ALenum pname, ALfloat* value );
@ -1186,38 +1091,26 @@ namespace OpenTK.Audio.OpenAL
GetAuxiliaryEffectSlot((uint)asid, pname, out value);
}
#endregion alGetAuxiliaryEffectSlotf
// Not used:
// typedef void (__cdecl *LPALAUXILIARYEFFECTSLOTIV)( ALuint asid, ALenum param, ALint* values );
// typedef void (__cdecl *LPALAUXILIARYEFFECTSLOTFV)( ALuint asid, ALenum param, ALfloat* values );
// typedef void (__cdecl *LPALAUXILIARYEFFECTSLOTIV)( ALuint asid, ALenum param, ALint* values );
// typedef void (__cdecl *LPALAUXILIARYEFFECTSLOTFV)( ALuint asid, ALenum param, ALfloat* values );
// typedef void (__cdecl *LPALGETAUXILIARYEFFECTSLOTIV)( ALuint asid, ALenum pname, ALint* values );
// typedef void (__cdecl *LPALGETAUXILIARYEFFECTSLOTFV)( ALuint asid, ALenum pname, ALfloat* values );
#endregion Auxiliary Effect Slot Object
#region Constructor / Extension Loading
private bool _valid;
/// <summary>Returns True if the EFX Extension has been found and could be initialized.</summary>
public bool IsInitialized
{
get
{
return _valid;
}
}
public bool IsInitialized { get; }
/// <summary>
/// Constructs a new EffectsExtension instance.
/// </summary>
public EffectsExtension()
{
_valid = false;
IsInitialized = false;
if (AudioContext.CurrentContext == null)
{
throw new InvalidOperationException("AL.LoadAll() needs a current AudioContext.");
}
if (!AudioContext.CurrentContext.SupportsExtension("ALC_EXT_EFX"))
{
@ -1280,9 +1173,7 @@ namespace OpenTK.Audio.OpenAL
// Console.WriteLine("Auxiliary Effect Slot functions appear to be ok.");
// didn't return so far, everything went fine.
_valid = true;
IsInitialized = true;
}
#endregion Constructor / Extension Loading
}
}

View file

@ -1,18 +1,12 @@
#region --- OpenTK.OpenAL License ---
/* EfxTokens.cs
/* EfxTokens.cs
* C headers: \OpenAL 1.1 SDK\include\ "efx.h", "efx-creative.h", "Efx-Util.h"
* Spec: Effects Extension Guide.pdf (bundled with OpenAL SDK)
* Copyright (c) 2008 Christoph Brandtner and Stefanos Apostolopoulos
* See license.txt for license details
* http://www.OpenTK.net */
#endregion
using System;
namespace OpenTK.Audio.OpenAL
{
#region Effect
///<summary>A list of valid 32-bit Float Effect/GetEffect parameters</summary>
public enum EfxEffectf : int
{
@ -167,7 +161,7 @@ namespace OpenTK.Audio.OpenAL
///<summary>A list of valid Math.Vector3 Effect/GetEffect parameters</summary>
public enum EfxEffect3f : int
{
/// <summary>Reverb Pan does for the Reverb what Reflections Pan does for the Reflections. Unit: Vector3 of length 0f to 1f Default: {0.0f, 0.0f, 0.0f}</summary>
/// <summary>Reverb Pan does for the Reverb what Reflections Pan does for the Reflections. Unit: Vector3 of length 0f to 1f Default: {0.0f, 0.0f, 0.0f}</summary>
EaxReverbLateReverbPan = 0x000E,
/// <summary>This Vector3 controls the spatial distribution of the cluster of early reflections. The direction of this vector controls the global direction of the reflections, while its magnitude controls how focused the reflections are towards this direction. For legacy reasons this Vector3 follows a left-handed co-ordinate system! Note that OpenAL uses a right-handed coordinate system. Unit: Vector3 of length 0f to 1f Default: {0.0f, 0.0f, 0.0f}</summary>
EaxReverbReflectionsPan = 0x000B,
@ -230,7 +224,7 @@ namespace OpenTK.Audio.OpenAL
/// The A phoneme of the vocal morpher.
/// </summary>
VocalMorpherPhonemeA = 0,
/// <summary>
/// The E phoneme of the vocal morpher.
/// </summary>
@ -377,7 +371,7 @@ namespace OpenTK.Audio.OpenAL
VocalMorpherPhonemeZ = 29,
}
///<summary>Effect type definitions to be used with EfxEffecti.EffectType.</summary>
///<summary>Effect type definitions to be used with EfxEffecti.EffectType.</summary>
public enum EfxEffectType : int
{
///<summary>No Effect, disable. This Effect type is used when an Effect object is initially created.</summary>
@ -410,10 +404,6 @@ namespace OpenTK.Audio.OpenAL
EaxReverb = 0x8000,
}
#endregion Effect
#region Auxiliary Effect Slot
///<summary>A list of valid Int32 AuxiliaryEffectSlot/GetAuxiliaryEffectSlot parameters</summary>
public enum EfxAuxiliaryi : int
{
@ -431,10 +421,6 @@ namespace OpenTK.Audio.OpenAL
EffectslotGain = 0x0002,
}
#endregion Auxiliary Effect Slot
#region Filter Object
///<summary>A list of valid 32-bits Float Filter/GetFilter parameters</summary>
public enum EfxFilterf : int
{
@ -475,6 +461,4 @@ namespace OpenTK.Audio.OpenAL
///<summary>Currently not implemented. A band-pass filter is used to remove high and low frequency content from a signal.</summary>
Bandpass = 0x0003,
}
#endregion Filter Object
}

View file

@ -1,11 +1,9 @@
#region --- OpenTK.OpenAL License ---
/* EfxPresets.cs
/* EfxPresets.cs
* C headers: \OpenAL 1.1 SDK\include\ "efx.h", "efx-creative.h", "Efx-Util.h"
* Spec: Effects Extension Guide.pdf (bundled with OpenAL SDK)
* Copyright (c) 2008 Christoph Brandtner and Stefanos Apostolopoulos
* See license.txt for license details
* http://www.OpenTK.net */
#endregion
using System;
@ -124,7 +122,7 @@ namespace OpenTK.Audio.OpenAL
output.Gain = 0.32f; // todo, currently default
output.GainHF = 0.89f; // todo, currently default
output.GainLF = 1f;// todo, currently default
output.GainLF = 1f; // todo, currently default
output.LFReference = input.LFReference;
output.HFReference = input.HFReference;
@ -199,7 +197,7 @@ namespace OpenTK.Audio.OpenAL
}
_EFXLOWPASSFILTER EFXLOWPASSFILTER;//, *LPEFXLOWPASSFILTER;
void ConvertReverbParameters(EAXREVERBPROPERTIES *pEAXProp, EFXEAXREVERBPROPERTIES *pEFXEAXReverb);
void ConvertObstructionParameters(EAXOBSTRUCTIONPROPERTIES *pObProp, EFXLOWPASSFILTER *pDirectLowPassFilter);
void ConvertExclusionParameters(EAXEXCLUSIONPROPERTIES *pExProp, EFXLOWPASSFILTER *pSendLowPassFilter);

View file

@ -1,11 +1,9 @@
#region --- OpenTK.OpenAL License ---
/* XRamExtension.cs
/* XRamExtension.cs
* C header: \OpenAL 1.1 SDK\include\xram.h
* Spec: ?
* Copyright (c) 2008 Christoph Brandtner and Stefanos Apostolopoulos
* See license.txt for license details (MIT)
* http://www.OpenTK.net */
#endregion
using System;
using System.Diagnostics;
@ -21,19 +19,8 @@ namespace OpenTK.Audio.OpenAL
[CLSCompliant(true)]
public sealed class XRamExtension
{
#region Instance state
private bool _valid = false;
/// <summary>Returns True if the X-Ram Extension has been found and could be initialized.</summary>
public bool IsInitialized
{
get { return _valid; }
}
#endregion Instance state
#region X-RAM Function pointer definitions
public bool IsInitialized { get; } = false;
// [CLSCompliant(false)]
private delegate bool Delegate_SetBufferMode(int n, ref uint buffers, int value);
@ -48,25 +35,19 @@ namespace OpenTK.Audio.OpenAL
//[CLSCompliant(false)]
private Delegate_GetBufferMode Imported_GetBufferMode;
#endregion X-RAM Function pointer definitions
#region X-RAM Tokens
private int AL_EAX_RAM_SIZE, AL_EAX_RAM_FREE,
AL_STORAGE_AUTOMATIC, AL_STORAGE_HARDWARE, AL_STORAGE_ACCESSIBLE;
#endregion X-RAM Tokens
#region Constructor / Extension Loading
/// <summary>
/// Constructs a new XRamExtension instance.
/// </summary>
public XRamExtension()
{ // Query if Extension supported and retrieve Tokens/Pointers if it is.
_valid = false;
IsInitialized = false;
if (AL.IsExtensionPresent("EAX-RAM") == false)
{
return;
}
AL_EAX_RAM_SIZE = AL.GetEnumValue("AL_EAX_RAM_SIZE");
AL_EAX_RAM_FREE = AL.GetEnumValue("AL_EAX_RAM_FREE");
@ -99,13 +80,9 @@ namespace OpenTK.Audio.OpenAL
return;
}
_valid = true;
IsInitialized = true;
}
#endregion Constructor / Extension Loading
#region Public Methods
/// <summary>Query total amount of X-RAM in bytes.</summary>
public int GetRamSize
{
@ -175,9 +152,13 @@ namespace OpenTK.Audio.OpenAL
int tempresult = Imported_GetBufferMode(buffer, IntPtr.Zero); // IntPtr.Zero due to the parameter being unused/reserved atm
if (tempresult == AL_STORAGE_ACCESSIBLE)
{
return XRamStorage.Accessible;
}
if (tempresult == AL_STORAGE_HARDWARE)
{
return XRamStorage.Hardware;
}
// default:
return XRamStorage.Automatic;
}
@ -191,8 +172,6 @@ namespace OpenTK.Audio.OpenAL
uint temp = (uint)buffer;
return GetBufferMode(ref temp);
}
#endregion Public Methods
}
}

View file

@ -1,11 +1,9 @@
#region --- OpenTK.OpenAL License ---
/* AlcFunctions.cs
/* AlcFunctions.cs
* C header: \OpenAL 1.1 SDK\include\Alc.h
* Spec: http://www.openal.org/openal_webstf/specs/OpenAL11Specification.pdf
* Copyright (c) 2008 Christoph Brandtner and Stefanos Apostolopoulos
* See license.txt for license details
* http://www.OpenTK.net */
#endregion
using System;
using System.Collections.Generic;
@ -14,33 +12,33 @@ using System.Runtime.InteropServices;
using System.Security;
/* Type Mapping
// 8-bit boolean
// 8-bit boolean
typedef char ALCboolean;
* byte
// character
// character
typedef char ALCchar;
* byte
// signed 8-bit 2's complement integer
// signed 8-bit 2's complement integer
typedef char ALCbyte;
* byte
// unsigned 8-bit integer
// unsigned 8-bit integer
typedef unsigned char ALCubyte;
* ubyte
// signed 16-bit 2's complement integer
// signed 16-bit 2's complement integer
typedef short ALCshort;
* short
// unsigned 16-bit integer
// unsigned 16-bit integer
typedef unsigned short ALCushort;
* ushort
// unsigned 32-bit integer
// unsigned 32-bit integer
typedef unsigned int ALCuint;
* uint
// signed 32-bit 2's complement integer
// signed 32-bit 2's complement integer
typedef int ALCint;
* int
// non-negative 32-bit binary integer size
@ -57,11 +55,11 @@ typedef float ALCfloat;
// 64-bit IEEE754 floating-point
typedef double ALCdouble;
* double
// void type (for opaque pointers only)
typedef void ALCvoid;
* void
* ALCdevice
* ALCcontext *context
* IntPtr
@ -73,19 +71,11 @@ namespace OpenTK.Audio.OpenAL
/// <summary>Alc = Audio Library Context</summary>
public static class Alc
{
#region Constants
private const string Lib = AL.Lib;
private const CallingConvention Style = CallingConvention.Cdecl;
#endregion Constants
#region Context Management
#region CreateContext
[DllImport(Alc.Lib, EntryPoint = "alcCreateContext", ExactSpelling = true, CallingConvention = Alc.Style), SuppressUnmanagedCodeSecurity]
unsafe static extern IntPtr sys_CreateContext([In] IntPtr device, [In] int* attrlist);
private unsafe static extern IntPtr sys_CreateContext([In] IntPtr device, [In] int* attrlist);
/// <summary>This function creates a context using a specified device.</summary>
/// <param name="device">a pointer to a device</param>
@ -115,10 +105,8 @@ namespace OpenTK.Audio.OpenAL
}
}
#endregion
[DllImport(Alc.Lib, EntryPoint = "alcMakeContextCurrent", ExactSpelling = true, CallingConvention = Alc.Style), SuppressUnmanagedCodeSecurity()]
static extern bool MakeContextCurrent(IntPtr context);
private static extern bool MakeContextCurrent(IntPtr context);
/// <summary>This function makes a specified context the current context.</summary>
/// <param name="context">A pointer to the new context.</param>
@ -130,7 +118,7 @@ namespace OpenTK.Audio.OpenAL
// ALC_API ALCboolean ALC_APIENTRY alcMakeContextCurrent( ALCcontext *context );
[DllImport(Alc.Lib, EntryPoint = "alcProcessContext", ExactSpelling = true, CallingConvention = Alc.Style), SuppressUnmanagedCodeSecurity()]
static extern void ProcessContext(IntPtr context);
private static extern void ProcessContext(IntPtr context);
/// <summary>This function tells a context to begin processing. When a context is suspended, changes in OpenAL state will be accepted but will not be processed. alcSuspendContext can be used to suspend a context, and then all the OpenAL state changes can be applied at once, followed by a call to alcProcessContext to apply all the state changes immediately. In some cases, this procedure may be more efficient than application of properties in a non-suspended state. In some implementations, process and suspend calls are each a NOP.</summary>
/// <param name="context">a pointer to the new context</param>
@ -141,7 +129,7 @@ namespace OpenTK.Audio.OpenAL
// ALC_API void ALC_APIENTRY alcProcessContext( ALCcontext *context );
[DllImport(Alc.Lib, EntryPoint = "alcSuspendContext", ExactSpelling = true, CallingConvention = Alc.Style), SuppressUnmanagedCodeSecurity()]
static extern void SuspendContext(IntPtr context);
private static extern void SuspendContext(IntPtr context);
/// <summary>This function suspends processing on a specified context. When a context is suspended, changes in OpenAL state will be accepted but will not be processed. A typical use of alcSuspendContext would be to suspend a context, apply all the OpenAL state changes at once, and then call alcProcessContext to apply all the state changes at once. In some cases, this procedure may be more efficient than application of properties in a non-suspended state. In some implementations, process and suspend calls are each a NOP.</summary>
/// <param name="context">a pointer to the context to be suspended.</param>
@ -152,7 +140,7 @@ namespace OpenTK.Audio.OpenAL
// ALC_API void ALC_APIENTRY alcSuspendContext( ALCcontext *context );
[DllImport(Alc.Lib, EntryPoint = "alcDestroyContext", ExactSpelling = true, CallingConvention = Alc.Style), SuppressUnmanagedCodeSecurity()]
static extern void DestroyContext(IntPtr context);
private static extern void DestroyContext(IntPtr context);
/// <summary>This function destroys a context.</summary>
/// <param name="context">a pointer to the new context.</param>
@ -174,7 +162,7 @@ namespace OpenTK.Audio.OpenAL
// ALC_API ALCcontext * ALC_APIENTRY alcGetCurrentContext( void );
[DllImport(Alc.Lib, EntryPoint = "alcGetContextsDevice", ExactSpelling = true, CallingConvention = Alc.Style), SuppressUnmanagedCodeSecurity()]
static extern IntPtr GetContextsDevice(IntPtr context);
private static extern IntPtr GetContextsDevice(IntPtr context);
/// <summary>This function retrieves a context's device pointer.</summary>
/// <param name="context">a pointer to a context.</param>
@ -185,10 +173,6 @@ namespace OpenTK.Audio.OpenAL
}
// ALC_API ALCdevice* ALC_APIENTRY alcGetContextsDevice( ALCcontext *context );
#endregion Context Management
#region Device Management
/// <summary>This function opens a device by name.</summary>
/// <param name="devicename">a null-terminated string describing a device.</param>
/// <returns>Returns a pointer to the opened device. The return value will be NULL if there is an error.</returns>
@ -203,10 +187,6 @@ namespace OpenTK.Audio.OpenAL
public static extern bool CloseDevice([In] IntPtr device);
// ALC_API ALCboolean ALC_APIENTRY alcCloseDevice( ALCdevice *device );
#endregion Device Management
#region Error support.
/// <summary>This function retrieves the current context error state.</summary>
/// <param name="device">a pointer to the device to retrieve the error state from</param>
/// <returns>Errorcode Int32.</returns>
@ -214,10 +194,6 @@ namespace OpenTK.Audio.OpenAL
public static extern AlcError GetError([In] IntPtr device);
// ALC_API ALCenum ALC_APIENTRY alcGetError( ALCdevice *device );
#endregion Error support.
#region Extension support.
/// <summary>This function queries if a specified context extension is available.</summary>
/// <param name="device">a pointer to the device to be queried for an extension.</param>
/// <param name="extname">a null-terminated string describing the extension.</param>
@ -242,10 +218,6 @@ namespace OpenTK.Audio.OpenAL
public static extern int GetEnumValue([In] IntPtr device, [In] string enumname);
// ALC_API ALCenum ALC_APIENTRY alcGetEnumValue( ALCdevice *device, const ALCchar *enumname );
#endregion Extension support.
#region Query functions
[DllImport(Alc.Lib, EntryPoint = "alcGetString", ExactSpelling = true, CallingConvention = Alc.Style, CharSet = CharSet.Ansi), SuppressUnmanagedCodeSecurity()]
private static extern IntPtr GetStringPrivate([In] IntPtr device, AlcGetString param);
// ALC_API const ALCchar * ALC_APIENTRY alcGetString( ALCdevice *device, ALCenum param );
@ -335,7 +307,7 @@ namespace OpenTK.Audio.OpenAL
}
[DllImport(Alc.Lib, EntryPoint = "alcGetIntegerv", ExactSpelling = true, CallingConvention = Alc.Style, CharSet = CharSet.Ansi), SuppressUnmanagedCodeSecurity()]
unsafe static extern void GetInteger(IntPtr device, AlcGetInteger param, int size, int* data);
private unsafe static extern void GetInteger(IntPtr device, AlcGetInteger param, int size, int* data);
// ALC_API void ALC_APIENTRY alcGetIntegerv( ALCdevice *device, ALCenum param, ALCsizei size, ALCint *buffer );
/// <summary>This function returns integers related to the context.</summary>
@ -370,10 +342,6 @@ namespace OpenTK.Audio.OpenAL
}
}
#endregion Query functions
#region Capture functions
/// <summary>This function opens a capture device by name. </summary>
/// <param name="devicename">a pointer to a device name string.</param>
/// <param name="frequency">the frequency that the buffer should be captured at.</param>
@ -467,14 +435,12 @@ namespace OpenTK.Audio.OpenAL
/// <param name="buffer">a buffer, which must be large enough to accommodate the number of samples.</param>
/// <param name="samples">the number of samples to be retrieved.</param>
[CLSCompliant(false)]
public static void CaptureSamples<T>(IntPtr device, T[, ,] buffer, int samples)
public static void CaptureSamples<T>(IntPtr device, T[,,] buffer, int samples)
where T : struct
{
CaptureSamples(device, ref buffer[0, 0, 0], samples);
}
#endregion Capture functions
}
}

View file

@ -1,11 +1,9 @@
#region --- OpenTK.OpenAL License ---
/* AlcTokens.cs
/* AlcTokens.cs
* C header: \OpenAL 1.1 SDK\include\Alc.h
* Spec: http://www.openal.org/openal_webstf/specs/OpenAL11Specification.pdf
* Copyright (c) 2008 Christoph Brandtner and Stefanos Apostolopoulos
* See license.txt for license details
* http://www.OpenTK.net */
#endregion
using System;

Some files were not shown because too many files have changed in this diff Show more