├── .github └── workflows │ └── docker-publish.yml ├── .gitignore ├── BuildVersion ├── BuildVersion.exe └── BuildVersion.exe.config ├── LICENSE ├── README.md ├── ReleaseSteps.txt ├── THIRDPARTYLICENSES ├── InWorldz.PrimExporter ├── LookingGlass.txt ├── OpenSimulator ├── ParameterParse ├── Radegast └── libopenmetaverse ├── VERSION ├── bin ├── Mono.Addins.dll ├── Nini.dll ├── OpenMetaverse.Rendering.Meshmerizer.dll ├── OpenMetaverse.StructuredData.dll ├── OpenMetaverse.dll ├── OpenMetaverse.dll.config ├── OpenMetaverseTypes.dll ├── OpenSim.Capabilities.dll ├── OpenSim.Data.Null.dll ├── OpenSim.Framework.Monitoring.dll ├── OpenSim.Framework.Serialization.dll ├── OpenSim.Framework.Servers.HttpServer.dll ├── OpenSim.Framework.dll ├── OpenSim.Region.CoreModules.dll ├── OpenSim.Region.Framework.dll ├── OpenSim.Region.PhysicsModule.BasicPhysics.dll ├── OpenSim.Region.PhysicsModules.SharedBase.dll ├── OpenSim.Services.Connectors.dll ├── OpenSim.Services.Interfaces.dll ├── OpenSim.Tests.Common.dll ├── PrimMesher.dll ├── SmartThreadPool.dll ├── log4net.dll ├── nunit.framework.dll └── zlib.net.dll ├── buildDocker.sh ├── convoar.sln ├── convoar ├── App.config ├── Convoar.cs ├── ConvoarParams.cs ├── ConvoarStats.cs ├── ConvoarTests.cs ├── NullUserAccountService.cs ├── OarConverter.cs ├── ParameterParsing.cs ├── Properties │ ├── AssemblyInfo.cs │ ├── Resources.Designer.cs │ └── Resources.resx ├── Resources │ └── README.txt ├── VersionInfo.cs ├── convoar.csproj ├── libopenjpeg-dotnet-2-1.5.0-dotnet-1-x86_64.so ├── openjpeg-dotnet-x86_64.dll └── openjpeg-dotnet.dll ├── dist ├── Herbal3d.CommonEntities.dll ├── Herbal3d.CommonEntitiesConv.dll ├── Herbal3d.CommonEntitiesConv.dll.config ├── Herbal3d.CommonEntitiesUtil.dll ├── Herbal3d.CommonUtil.dll ├── Microsoft.Win32.Primitives.dll ├── Mono.Addins.dll ├── NLog.dll ├── NLog.xml ├── Nini.dll ├── OpenMetaverse.Rendering.Meshmerizer.dll ├── OpenMetaverse.StructuredData.dll ├── OpenMetaverse.dll ├── OpenMetaverse.dll.config ├── OpenMetaverseTypes.dll ├── OpenSim.Capabilities.dll ├── OpenSim.Capabilities.pdb ├── OpenSim.Data.Null.dll ├── OpenSim.Data.Null.pdb ├── OpenSim.Framework.Monitoring.dll ├── OpenSim.Framework.Monitoring.pdb ├── OpenSim.Framework.Serialization.dll ├── OpenSim.Framework.Serialization.pdb ├── OpenSim.Framework.Servers.HttpServer.dll ├── OpenSim.Framework.Servers.HttpServer.pdb ├── OpenSim.Framework.dll ├── OpenSim.Framework.pdb ├── OpenSim.Region.CoreModules.dll ├── OpenSim.Region.CoreModules.pdb ├── OpenSim.Region.Framework.dll ├── OpenSim.Region.Framework.pdb ├── OpenSim.Region.PhysicsModule.BasicPhysics.dll ├── OpenSim.Region.PhysicsModule.BasicPhysics.pdb ├── OpenSim.Region.PhysicsModules.SharedBase.dll ├── OpenSim.Region.PhysicsModules.SharedBase.pdb ├── OpenSim.Services.Connectors.dll ├── OpenSim.Services.Connectors.pdb ├── OpenSim.Services.Interfaces.dll ├── OpenSim.Services.Interfaces.pdb ├── OpenSim.Tests.Common.dll ├── OpenSim.Tests.Common.pdb ├── PrimMesher.dll ├── SmartThreadPool.dll ├── SmartThreadPool.pdb ├── System.AppContext.dll ├── System.Collections.Concurrent.dll ├── System.Collections.NonGeneric.dll ├── System.Collections.Specialized.dll ├── System.Collections.dll ├── System.ComponentModel.EventBasedAsync.dll ├── System.ComponentModel.Primitives.dll ├── System.ComponentModel.TypeConverter.dll ├── System.ComponentModel.dll ├── System.Console.dll ├── System.Data.Common.dll ├── System.Diagnostics.Contracts.dll ├── System.Diagnostics.Debug.dll ├── System.Diagnostics.FileVersionInfo.dll ├── System.Diagnostics.Process.dll ├── System.Diagnostics.StackTrace.dll ├── System.Diagnostics.TextWriterTraceListener.dll ├── System.Diagnostics.Tools.dll ├── System.Diagnostics.TraceSource.dll ├── System.Diagnostics.Tracing.dll ├── System.Drawing.Primitives.dll ├── System.Dynamic.Runtime.dll ├── System.Globalization.Calendars.dll ├── System.Globalization.Extensions.dll ├── System.Globalization.dll ├── System.IO.Compression.ZipFile.dll ├── System.IO.Compression.dll ├── System.IO.FileSystem.DriveInfo.dll ├── System.IO.FileSystem.Primitives.dll ├── System.IO.FileSystem.Watcher.dll ├── System.IO.FileSystem.dll ├── System.IO.IsolatedStorage.dll ├── System.IO.MemoryMappedFiles.dll ├── System.IO.Pipes.dll ├── System.IO.UnmanagedMemoryStream.dll ├── System.IO.dll ├── System.Linq.Expressions.dll ├── System.Linq.Parallel.dll ├── System.Linq.Queryable.dll ├── System.Linq.dll ├── System.Net.Http.dll ├── System.Net.NameResolution.dll ├── System.Net.NetworkInformation.dll ├── System.Net.Ping.dll ├── System.Net.Primitives.dll ├── System.Net.Requests.dll ├── System.Net.Security.dll ├── System.Net.Sockets.dll ├── System.Net.WebHeaderCollection.dll ├── System.Net.WebSockets.Client.dll ├── System.Net.WebSockets.dll ├── System.ObjectModel.dll ├── System.Reflection.Extensions.dll ├── System.Reflection.Primitives.dll ├── System.Reflection.dll ├── System.Resources.Reader.dll ├── System.Resources.ResourceManager.dll ├── System.Resources.Writer.dll ├── System.Runtime.CompilerServices.VisualC.dll ├── System.Runtime.Extensions.dll ├── System.Runtime.Handles.dll ├── System.Runtime.InteropServices.RuntimeInformation.dll ├── System.Runtime.InteropServices.dll ├── System.Runtime.Numerics.dll ├── System.Runtime.Serialization.Formatters.dll ├── System.Runtime.Serialization.Json.dll ├── System.Runtime.Serialization.Primitives.dll ├── System.Runtime.Serialization.Xml.dll ├── System.Runtime.dll ├── System.Security.Claims.dll ├── System.Security.Cryptography.Algorithms.dll ├── System.Security.Cryptography.Csp.dll ├── System.Security.Cryptography.Encoding.dll ├── System.Security.Cryptography.Primitives.dll ├── System.Security.Cryptography.X509Certificates.dll ├── System.Security.Principal.dll ├── System.Security.SecureString.dll ├── System.Text.Encoding.Extensions.dll ├── System.Text.Encoding.dll ├── System.Text.RegularExpressions.dll ├── System.Threading.Overlapped.dll ├── System.Threading.Tasks.Parallel.dll ├── System.Threading.Tasks.dll ├── System.Threading.Thread.dll ├── System.Threading.ThreadPool.dll ├── System.Threading.Timer.dll ├── System.Threading.dll ├── System.ValueTuple.dll ├── System.Xml.ReaderWriter.dll ├── System.Xml.XDocument.dll ├── System.Xml.XPath.XDocument.dll ├── System.Xml.XPath.dll ├── System.Xml.XmlDocument.dll ├── System.Xml.XmlSerializer.dll ├── convoar.exe ├── convoar.exe.config ├── convoar.pdb ├── libopenjpeg-dotnet-2-1.5.0-dotnet-1-x86_64.so ├── log4net.dll ├── netstandard.dll ├── nunit.framework.dll ├── openjpeg-dotnet-x86_64.dll ├── openjpeg-dotnet.dll └── zlib.net.dll ├── docker ├── Dockerfile └── run-convoar.sh ├── gatherLibs.sh ├── setupConvoar.sh └── updateVersion.sh /.github/workflows/docker-publish.yml: -------------------------------------------------------------------------------- 1 | name: Convoar Docker image 2 | 3 | on: 4 | push: 5 | # Publish `master` as Docker `latest` image. 6 | branches: 7 | - master 8 | 9 | env: 10 | IMAGE_NAME: convoar 11 | IMAGE_OWNER: misterblue 12 | 13 | jobs: 14 | # Push image to GitHub Packages. 15 | # See also https://docs.docker.com/docker-hub/builds/ 16 | push: 17 | runs-on: ubuntu-latest 18 | if: github.event_name == 'push' 19 | 20 | steps: 21 | - name: checkout 22 | uses: actions/checkout@v2 23 | 24 | - name: Place version number into environment 25 | run: | 26 | echo "CVERSION=$(cat VERSION)" >> $GITHUB_ENV 27 | 28 | - name: Setup QEMU 29 | uses: docker/setup-qemu-action@v1 30 | 31 | - name: Login to Github Container registry 32 | uses: docker/login-action@v1 33 | with: 34 | registry: ghcr.io 35 | username: ${{ github.repository_owner }} 36 | password: ${{ secrets.GITHUB_TOKEN }} 37 | 38 | - name: Build and push 39 | uses: docker/build-push-action@v2 40 | with: 41 | context: ./docker 42 | build-args: | 43 | TARGET=Release 44 | VERSION=${{ env.CVERSION }} 45 | platforms: linux/amd64 46 | # platforms: linux/amd64,linux/arm64 47 | push: true 48 | tags: | 49 | ghcr.io/${{ env.IMAGE_OWNER }}/${{ env.IMAGE_NAME }}:latest 50 | ghcr.io/${{ env.IMAGE_OWNER }}/${{ env.IMAGE_NAME }}:${{ env.CVERSION }} 51 | 52 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # Added for convoar 2 | test/ 3 | addon-modules/ 4 | 5 | ## Ignore Visual Studio temporary files, build results, and 6 | ## files generated by popular Visual Studio add-ons. 7 | ## 8 | ## Get latest from https://github.com/github/gitignore/blob/master/VisualStudio.gitignore 9 | 10 | # User-specific files 11 | *.suo 12 | *.user 13 | *.userosscache 14 | *.sln.docstates 15 | 16 | # User-specific files (MonoDevelop/Xamarin Studio) 17 | *.userprefs 18 | 19 | # Build results 20 | [Dd]ebug/ 21 | [Dd]ebugPublic/ 22 | [Rr]elease/ 23 | [Rr]eleases/ 24 | x64/ 25 | x86/ 26 | bld/ 27 | [Oo]bj/ 28 | [Ll]og/ 29 | 30 | # Visual Studio 2015 cache/options directory 31 | .vs/ 32 | # Uncomment if you have tasks that create the project's static files in wwwroot 33 | #wwwroot/ 34 | 35 | # MSTest test Results 36 | [Tt]est[Rr]esult*/ 37 | [Bb]uild[Ll]og.* 38 | 39 | # NUNIT 40 | *.VisualState.xml 41 | TestResult.xml 42 | 43 | # Build Results of an ATL Project 44 | [Dd]ebugPS/ 45 | [Rr]eleasePS/ 46 | dlldata.c 47 | 48 | # .NET Core 49 | project.lock.json 50 | project.fragment.lock.json 51 | artifacts/ 52 | **/Properties/launchSettings.json 53 | 54 | *_i.c 55 | *_p.c 56 | *_i.h 57 | *.ilk 58 | *.meta 59 | *.obj 60 | *.pch 61 | *.pdb 62 | *.pgc 63 | *.pgd 64 | *.rsp 65 | *.sbr 66 | *.tlb 67 | *.tli 68 | *.tlh 69 | *.tmp 70 | *.tmp_proj 71 | *.log 72 | *.vspscc 73 | *.vssscc 74 | .builds 75 | *.pidb 76 | *.svclog 77 | *.scc 78 | 79 | # Chutzpah Test files 80 | _Chutzpah* 81 | 82 | # Visual C++ cache files 83 | ipch/ 84 | *.aps 85 | *.ncb 86 | *.opendb 87 | *.opensdf 88 | *.sdf 89 | *.cachefile 90 | *.VC.db 91 | *.VC.VC.opendb 92 | 93 | # Visual Studio profiler 94 | *.psess 95 | *.vsp 96 | *.vspx 97 | *.sap 98 | 99 | # TFS 2012 Local Workspace 100 | $tf/ 101 | 102 | # Guidance Automation Toolkit 103 | *.gpState 104 | 105 | # ReSharper is a .NET coding add-in 106 | _ReSharper*/ 107 | *.[Rr]e[Ss]harper 108 | *.DotSettings.user 109 | 110 | # JustCode is a .NET coding add-in 111 | .JustCode 112 | 113 | # TeamCity is a build add-in 114 | _TeamCity* 115 | 116 | # DotCover is a Code Coverage Tool 117 | *.dotCover 118 | 119 | # Visual Studio code coverage results 120 | *.coverage 121 | *.coveragexml 122 | 123 | # NCrunch 124 | _NCrunch_* 125 | .*crunch*.local.xml 126 | nCrunchTemp_* 127 | 128 | # MightyMoose 129 | *.mm.* 130 | AutoTest.Net/ 131 | 132 | # Web workbench (sass) 133 | .sass-cache/ 134 | 135 | # Installshield output folder 136 | [Ee]xpress/ 137 | 138 | # DocProject is a documentation generator add-in 139 | DocProject/buildhelp/ 140 | DocProject/Help/*.HxT 141 | DocProject/Help/*.HxC 142 | DocProject/Help/*.hhc 143 | DocProject/Help/*.hhk 144 | DocProject/Help/*.hhp 145 | DocProject/Help/Html2 146 | DocProject/Help/html 147 | 148 | # Click-Once directory 149 | publish/ 150 | 151 | # Publish Web Output 152 | *.[Pp]ublish.xml 153 | *.azurePubxml 154 | # TODO: Comment the next line if you want to checkin your web deploy settings 155 | # but database connection strings (with potential passwords) will be unencrypted 156 | *.pubxml 157 | *.publishproj 158 | 159 | # Microsoft Azure Web App publish settings. Comment the next line if you want to 160 | # checkin your Azure Web App publish settings, but sensitive information contained 161 | # in these scripts will be unencrypted 162 | PublishScripts/ 163 | 164 | # NuGet Packages 165 | *.nupkg 166 | # The packages folder can be ignored because of Package Restore 167 | **/packages/* 168 | # except build/, which is used as an MSBuild target. 169 | !**/packages/build/ 170 | # Uncomment if necessary however generally it will be regenerated when needed 171 | #!**/packages/repositories.config 172 | # NuGet v3's project.json files produces more ignorable files 173 | *.nuget.props 174 | *.nuget.targets 175 | 176 | # Microsoft Azure Build Output 177 | csx/ 178 | *.build.csdef 179 | 180 | # Microsoft Azure Emulator 181 | ecf/ 182 | rcf/ 183 | 184 | # Windows Store app package directories and files 185 | AppPackages/ 186 | BundleArtifacts/ 187 | Package.StoreAssociation.xml 188 | _pkginfo.txt 189 | 190 | # Visual Studio cache files 191 | # files ending in .cache can be ignored 192 | *.[Cc]ache 193 | # but keep track of directories ending in .cache 194 | !*.[Cc]ache/ 195 | 196 | # Others 197 | ClientBin/ 198 | ~$* 199 | *~ 200 | *.dbmdl 201 | *.dbproj.schemaview 202 | *.jfm 203 | *.pfx 204 | *.publishsettings 205 | orleans.codegen.cs 206 | 207 | # Since there are multiple workflows, uncomment next line to ignore bower_components 208 | # (https://github.com/github/gitignore/pull/1529#issuecomment-104372622) 209 | #bower_components/ 210 | 211 | # RIA/Silverlight projects 212 | Generated_Code/ 213 | 214 | # Backup & report files from converting an old project file 215 | # to a newer Visual Studio version. Backup files are not needed, 216 | # because we have git ;-) 217 | _UpgradeReport_Files/ 218 | Backup*/ 219 | UpgradeLog*.XML 220 | UpgradeLog*.htm 221 | 222 | # SQL Server files 223 | *.mdf 224 | *.ldf 225 | *.ndf 226 | 227 | # Business Intelligence projects 228 | *.rdl.data 229 | *.bim.layout 230 | *.bim_*.settings 231 | 232 | # Microsoft Fakes 233 | FakesAssemblies/ 234 | 235 | # GhostDoc plugin setting file 236 | *.GhostDoc.xml 237 | 238 | # Node.js Tools for Visual Studio 239 | .ntvs_analysis.dat 240 | node_modules/ 241 | 242 | # Typescript v1 declaration files 243 | typings/ 244 | 245 | # Visual Studio 6 build log 246 | *.plg 247 | 248 | # Visual Studio 6 workspace options file 249 | *.opt 250 | 251 | # Visual Studio 6 auto-generated workspace file (contains which files were open etc.) 252 | *.vbw 253 | 254 | # Visual Studio LightSwitch build output 255 | **/*.HTMLClient/GeneratedArtifacts 256 | **/*.DesktopClient/GeneratedArtifacts 257 | **/*.DesktopClient/ModelManifest.xml 258 | **/*.Server/GeneratedArtifacts 259 | **/*.Server/ModelManifest.xml 260 | _Pvt_Extensions 261 | 262 | # Paket dependency manager 263 | .paket/paket.exe 264 | paket-files/ 265 | 266 | # FAKE - F# Make 267 | .fake/ 268 | 269 | # JetBrains Rider 270 | .idea/ 271 | *.sln.iml 272 | 273 | # CodeRush 274 | .cr/ 275 | 276 | # Python Tools for Visual Studio (PTVS) 277 | __pycache__/ 278 | *.pyc 279 | 280 | # Cake - Uncomment if you are using it 281 | # tools/** 282 | # !tools/packages.config 283 | 284 | # Telerik's JustMock configuration file 285 | *.jmconfig 286 | 287 | # BizTalk build output 288 | *.btp.cs 289 | *.btm.cs 290 | *.odx.cs 291 | *.xsd.cs 292 | 293 | -------------------------------------------------------------------------------- /BuildVersion/BuildVersion.exe: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Misterblue/convoar/be7abbedc0d7d295a76800b2fe2e1fc9a58a7934/BuildVersion/BuildVersion.exe -------------------------------------------------------------------------------- /BuildVersion/BuildVersion.exe.config: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | Apache License 2 | Version 2.0, January 2004 3 | http://www.apache.org/licenses/ 4 | 5 | TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION 6 | 7 | 1. Definitions. 8 | 9 | "License" shall mean the terms and conditions for use, reproduction, 10 | and distribution as defined by Sections 1 through 9 of this document. 11 | 12 | "Licensor" shall mean the copyright owner or entity authorized by 13 | the copyright owner that is granting the License. 14 | 15 | "Legal Entity" shall mean the union of the acting entity and all 16 | other entities that control, are controlled by, or are under common 17 | control with that entity. For the purposes of this definition, 18 | "control" means (i) the power, direct or indirect, to cause the 19 | direction or management of such entity, whether by contract or 20 | otherwise, or (ii) ownership of fifty percent (50%) or more of the 21 | outstanding shares, or (iii) beneficial ownership of such entity. 22 | 23 | "You" (or "Your") shall mean an individual or Legal Entity 24 | exercising permissions granted by this License. 25 | 26 | "Source" form shall mean the preferred form for making modifications, 27 | including but not limited to software source code, documentation 28 | source, and configuration files. 29 | 30 | "Object" form shall mean any form resulting from mechanical 31 | transformation or translation of a Source form, including but 32 | not limited to compiled object code, generated documentation, 33 | and conversions to other media types. 34 | 35 | "Work" shall mean the work of authorship, whether in Source or 36 | Object form, made available under the License, as indicated by a 37 | copyright notice that is included in or attached to the work 38 | (an example is provided in the Appendix below). 39 | 40 | "Derivative Works" shall mean any work, whether in Source or Object 41 | form, that is based on (or derived from) the Work and for which the 42 | editorial revisions, annotations, elaborations, or other modifications 43 | represent, as a whole, an original work of authorship. For the purposes 44 | of this License, Derivative Works shall not include works that remain 45 | separable from, or merely link (or bind by name) to the interfaces of, 46 | the Work and Derivative Works thereof. 47 | 48 | "Contribution" shall mean any work of authorship, including 49 | the original version of the Work and any modifications or additions 50 | to that Work or Derivative Works thereof, that is intentionally 51 | submitted to Licensor for inclusion in the Work by the copyright owner 52 | or by an individual or Legal Entity authorized to submit on behalf of 53 | the copyright owner. For the purposes of this definition, "submitted" 54 | means any form of electronic, verbal, or written communication sent 55 | to the Licensor or its representatives, including but not limited to 56 | communication on electronic mailing lists, source code control systems, 57 | and issue tracking systems that are managed by, or on behalf of, the 58 | Licensor for the purpose of discussing and improving the Work, but 59 | excluding communication that is conspicuously marked or otherwise 60 | designated in writing by the copyright owner as "Not a Contribution." 61 | 62 | "Contributor" shall mean Licensor and any individual or Legal Entity 63 | on behalf of whom a Contribution has been received by Licensor and 64 | subsequently incorporated within the Work. 65 | 66 | 2. Grant of Copyright License. Subject to the terms and conditions of 67 | this License, each Contributor hereby grants to You a perpetual, 68 | worldwide, non-exclusive, no-charge, royalty-free, irrevocable 69 | copyright license to reproduce, prepare Derivative Works of, 70 | publicly display, publicly perform, sublicense, and distribute the 71 | Work and such Derivative Works in Source or Object form. 72 | 73 | 3. Grant of Patent License. Subject to the terms and conditions of 74 | this License, each Contributor hereby grants to You a perpetual, 75 | worldwide, non-exclusive, no-charge, royalty-free, irrevocable 76 | (except as stated in this section) patent license to make, have made, 77 | use, offer to sell, sell, import, and otherwise transfer the Work, 78 | where such license applies only to those patent claims licensable 79 | by such Contributor that are necessarily infringed by their 80 | Contribution(s) alone or by combination of their Contribution(s) 81 | with the Work to which such Contribution(s) was submitted. If You 82 | institute patent litigation against any entity (including a 83 | cross-claim or counterclaim in a lawsuit) alleging that the Work 84 | or a Contribution incorporated within the Work constitutes direct 85 | or contributory patent infringement, then any patent licenses 86 | granted to You under this License for that Work shall terminate 87 | as of the date such litigation is filed. 88 | 89 | 4. Redistribution. You may reproduce and distribute copies of the 90 | Work or Derivative Works thereof in any medium, with or without 91 | modifications, and in Source or Object form, provided that You 92 | meet the following conditions: 93 | 94 | (a) You must give any other recipients of the Work or 95 | Derivative Works a copy of this License; and 96 | 97 | (b) You must cause any modified files to carry prominent notices 98 | stating that You changed the files; and 99 | 100 | (c) You must retain, in the Source form of any Derivative Works 101 | that You distribute, all copyright, patent, trademark, and 102 | attribution notices from the Source form of the Work, 103 | excluding those notices that do not pertain to any part of 104 | the Derivative Works; and 105 | 106 | (d) If the Work includes a "NOTICE" text file as part of its 107 | distribution, then any Derivative Works that You distribute must 108 | include a readable copy of the attribution notices contained 109 | within such NOTICE file, excluding those notices that do not 110 | pertain to any part of the Derivative Works, in at least one 111 | of the following places: within a NOTICE text file distributed 112 | as part of the Derivative Works; within the Source form or 113 | documentation, if provided along with the Derivative Works; or, 114 | within a display generated by the Derivative Works, if and 115 | wherever such third-party notices normally appear. The contents 116 | of the NOTICE file are for informational purposes only and 117 | do not modify the License. You may add Your own attribution 118 | notices within Derivative Works that You distribute, alongside 119 | or as an addendum to the NOTICE text from the Work, provided 120 | that such additional attribution notices cannot be construed 121 | as modifying the License. 122 | 123 | You may add Your own copyright statement to Your modifications and 124 | may provide additional or different license terms and conditions 125 | for use, reproduction, or distribution of Your modifications, or 126 | for any such Derivative Works as a whole, provided Your use, 127 | reproduction, and distribution of the Work otherwise complies with 128 | the conditions stated in this License. 129 | 130 | 5. Submission of Contributions. Unless You explicitly state otherwise, 131 | any Contribution intentionally submitted for inclusion in the Work 132 | by You to the Licensor shall be under the terms and conditions of 133 | this License, without any additional terms or conditions. 134 | Notwithstanding the above, nothing herein shall supersede or modify 135 | the terms of any separate license agreement you may have executed 136 | with Licensor regarding such Contributions. 137 | 138 | 6. Trademarks. This License does not grant permission to use the trade 139 | names, trademarks, service marks, or product names of the Licensor, 140 | except as required for reasonable and customary use in describing the 141 | origin of the Work and reproducing the content of the NOTICE file. 142 | 143 | 7. Disclaimer of Warranty. Unless required by applicable law or 144 | agreed to in writing, Licensor provides the Work (and each 145 | Contributor provides its Contributions) on an "AS IS" BASIS, 146 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or 147 | implied, including, without limitation, any warranties or conditions 148 | of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A 149 | PARTICULAR PURPOSE. You are solely responsible for determining the 150 | appropriateness of using or redistributing the Work and assume any 151 | risks associated with Your exercise of permissions under this License. 152 | 153 | 8. Limitation of Liability. In no event and under no legal theory, 154 | whether in tort (including negligence), contract, or otherwise, 155 | unless required by applicable law (such as deliberate and grossly 156 | negligent acts) or agreed to in writing, shall any Contributor be 157 | liable to You for damages, including any direct, indirect, special, 158 | incidental, or consequential damages of any character arising as a 159 | result of this License or out of the use or inability to use the 160 | Work (including but not limited to damages for loss of goodwill, 161 | work stoppage, computer failure or malfunction, or any and all 162 | other commercial damages or losses), even if such Contributor 163 | has been advised of the possibility of such damages. 164 | 165 | 9. Accepting Warranty or Additional Liability. While redistributing 166 | the Work or Derivative Works thereof, You may choose to offer, 167 | and charge a fee for, acceptance of support, warranty, indemnity, 168 | or other liability obligations and/or rights consistent with this 169 | License. However, in accepting such obligations, You may act only 170 | on Your own behalf and on Your sole responsibility, not on behalf 171 | of any other Contributor, and only if You agree to indemnify, 172 | defend, and hold each Contributor harmless for any liability 173 | incurred by, or claims asserted against, such Contributor by reason 174 | of your accepting any such warranty or additional liability. 175 | 176 | END OF TERMS AND CONDITIONS 177 | 178 | APPENDIX: How to apply the Apache License to your work. 179 | 180 | To apply the Apache License to your work, attach the following 181 | boilerplate notice, with the fields enclosed by brackets "{}" 182 | replaced with your own identifying information. (Don't include 183 | the brackets!) The text should be enclosed in the appropriate 184 | comment syntax for the file format. We also recommend that a 185 | file or class name and description of purpose be included on the 186 | same "printed page" as the copyright notice for easier 187 | identification within third-party archives. 188 | 189 | Copyright {yyyy} {name of copyright owner} 190 | 191 | Licensed under the Apache License, Version 2.0 (the "License"); 192 | you may not use this file except in compliance with the License. 193 | You may obtain a copy of the License at 194 | 195 | http://www.apache.org/licenses/LICENSE-2.0 196 | 197 | Unless required by applicable law or agreed to in writing, software 198 | distributed under the License is distributed on an "AS IS" BASIS, 199 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 200 | See the License for the specific language governing permissions and 201 | limitations under the License. 202 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # convoar 2 | 3 | * [Invocation](https://github.com/Misterblue/convoar#invocation) 4 | * [Building](https://github.com/Misterblue/convoar#building) 5 | * [Simple Build](https://github.com/Misterblue/convoar#simple-build) 6 | * [Library Updating Build](https://github.com/Misterblue/convoar#update-build) 7 | * [Docker Image](https://github.com/Misterblue/convoar#docker-image) 8 | * [What Is Converted](https://github.com/Misterblue/convoar#what-is-converted) 9 | * [Releases and Roadmap](https://github.com/Misterblue/convoar#releases-and-roadmap) 10 | 11 | Command line application for converting OpenSimulator OAR files into GLTF scene file. 12 | 13 | An [OpenSimulator] OAR file saves a region's contents. 14 | All the information about the region (parcels, terrain, etc.) 15 | is saved in an OAR file along with 16 | all the objects and their locations (prims, meshes, scripts, textures, etc.). 17 | Thus, an OAR file of a region is convertable into any other scene 18 | representation format. 19 | 20 | Convoar reads an OAR file and outputs a GLTF scene and image files 21 | which is most of the region information. 22 | Most specifically, it outputs the textured mesh representation of 23 | all the objects in the region. 24 | 25 | Convoar is evolving. 26 | See the "Releases and Roadmap" section below. 27 | The current version reads an OAR file and outputs either an unoptimized GLTF 28 | scene file or a "material reorganized" GLTF scene (see below). 29 | The output GLTF is not packed or binary 30 | so the output files are a JSON `.gltf` file, one or more `.buf` files 31 | (containing the vertex information), and an `images` directory with 32 | the texture files for the mesh materials. By default, the output textures 33 | are either JPG or PNG format depending if there is any transparency 34 | in the texture. 35 | 36 | The unoptimized GLTF conversion is a simple conversion of the OAR primitives 37 | which creates many, many meshes and is very inefficient for rendering but 38 | is good for editing (importing into [Blender], for instance). 39 | 40 | The "material reorganized" scene has objects corresponding to each 41 | unique material (texture/color/features) and the meshes have been 42 | assigned to each of these material objects. 43 | This renders the scene uneditable but this should greatly reduce 44 | the number of draw calls needed to render the scene in OpenGL/WebGL. 45 | 46 | Future versions of convoar with either contain or have tools to 47 | perform other optimizations to the scene and the object therein. 48 | 49 | The name "convoar" is from "convert oar" and is pronounced like "condor". 50 | There is a logo idea in there somewhere. 51 | 52 | # Invocation 53 | 54 | Checkout the convoar sources and run the prebuilt binary in the `dist` directory. 55 | The binaries are compiled for .NET Framework 4.8 so you must install that 56 | library version better on Windows10 or, if running on Linux, Mono v4.2.1 57 | or better. 58 | 59 | ```bash 60 | git clone https://github.com/Misterblue/convoar 61 | if Windows: 62 | convoar/dist/convoar.exe region.oar 63 | if Linux: 64 | mono convoar/dist/convoar.exe region.oar 65 | ``` 66 | 67 | The full invocation form is: 68 | 69 | convoar inputOARfile 70 | 71 | A short list of the available parameters (a boolean parameter can be followed with 72 | a `true` or `false`): 73 | 74 | Parameter | Meaning 75 | ---------- | ---------- 76 | `--mergeSharedMaterialMeshes` or `-m` | reorganize all meshes in the scene into groups using the same materials. This makes the scene uneditable but will make for way fewer draw calls when displayed. 77 | `--outputdir` or `-d` | directory for generated GLTF and image files. Default is `./convoar'. 78 | `--regionName` | Name to use for generated scene. Default is name of input OAR file. 79 | `--textureMaxSize` | Maximum size for textures. All images are resized to less than this dimension. Default is 256. 80 | `--halfRezTerrain` | Whether to reduce terrain resolution by two. Default is true. 81 | `--createTerrainSplat` | whether to create a terrain texture based on height. Default is true. 82 | `--verbose` or `-v` | Output information on numbers of meshes, etc. 83 | `--help` | list all available parameters with descriptions and default values 84 | 85 | An invocation of `convoar ../REGION.oar` will create, in the output directory, 86 | the files `REGION.gltf`, one or more `REGION-bufferNNN.buf` files, and an 87 | `images` directory containing .JPG and .PNG files. The GLTF file will reference 88 | the `images directory and the `.buf` files so the relative directory 89 | position of the `.buf and `images` files is significant. 90 | 91 | The output directory is changed with the `--outputdir` parameter. 92 | 93 | # Building 94 | 95 | Convoar uses [OpenSimulator] binaries to do the reading and conversion of the 96 | OAR file. These binaries files are included in the repository. So there is a *simple* 97 | build where one just builds the sources checked out, and there is the *updating* build 98 | where one fetches new versions of the [OpenSimulator] sources. 99 | 100 | Some functionality has been moved out into another project that must be 101 | checked out in the directory `addon-modules`. 102 | The script `setupConvoar.sh` fetches 103 | [HerbalCommonEntitiesCS] and [HerbalCommonUtilCS] into this directory 104 | and sets things up for compilation. 105 | 106 | If you have a current [OpenSimulator] build, you can use the binaries from 107 | that by setting the environment variable `OPENSIMBIN` to point to the 108 | `bin` directory in that build. See below. 109 | 110 | Under windows 10, use Visual Studio 2017 or better. At the moment, convoar is 111 | built under Windows to create the `dist` directory. 112 | The prebuilt binaries will run on Windows10 and with [Mono] on Linux. 113 | There are no external dependencies -- 114 | everything is included in the Convoar GitHub repository. 115 | 116 | If compiling on Linux, one needs [Mono] version 5 or better and one 117 | just uses `msbuild`. 118 | So the steps are: 119 | 120 | ``` 121 | git clone https://github.com/Misterblue/convoar 122 | cd convoar 123 | ./setupConvoar.sh 124 | msbuild # or open the .sln file with Visual Studio 125 | ``` 126 | 127 | ## Updating Build 128 | 129 | To update the OpenSimulator sources, the script `gatherLibs.sh` fetches the 130 | required DLLs from other repositories. The other repositories must be cloned 131 | into the same directory as the convoar repository so the steps could be: 132 | 133 | ``` 134 | git clone https://github.com/Misterblue/convoar 135 | cd convoar 136 | OPENSIMBIN=pathToOpenSimBinDir ./setupConvoar.sh 137 | msbuild # or open the .sln file with Visual Studio 138 | 139 | ``` 140 | 141 | Then convoar can be built using either Visual Studio or `msbuild`. 142 | 143 | # Docker Image 144 | 145 | For those with Docker environments, there is a Docker image of convoar. 146 | 147 | Assume the OAR to be converted is at `/tmp/frog/REGION.oar`. 148 | Then, to do the conversion: 149 | 150 | ```bash 151 | docker pull misterblue/convoar 152 | docker run --rm --user $(id -u):$(id -g) -v /tmp/frog:/oar ghcr.io/misterblue/convoar REGION.oar 153 | ``` 154 | 155 | This maps the local `/tmp/frog` directory to the `/oar` directory in 156 | the Docker container, runs the container, and writes the output GLTF files 157 | into the `/tmp/frog` directory. 158 | 159 | NOTE: the most common problem is permissions. The command above, sets the 160 | user and group IDs to that of the current user (the `--user` parameter) 161 | which is usually is the right thing for write permissions into the mapped directory. 162 | 163 | ALSO NOTE: `docker` does not automatically pull the newest image if 164 | there is a local image of the same name. You must do the `docker pull` 165 | operation to make sure you have the latest version of the image. 166 | 167 | # What Is Converted 168 | 169 | Convoar reads in the totality of the OAR file and then maps the various 170 | features of the scene into the GLTF definition. This mapping is incomplete. 171 | What follows is a list of features that are copied: 172 | 173 | * Scene 174 | * Primitives: converted to a mesh using PrimMesher using highest LOD setting 175 | * Sculptie: converted into a mesh using PrimMesher using highest LOD setting 176 | * Mesh: repackaged as a mesh. Mesh vertices and indices are deduplicated and repacked for GPU efficiency 177 | * Linksets: All meshes in a linkset are grouped into a GLTF group of meshes 178 | * Images: All images are converted into JPEG or PNG. PNG is used if there is any transparency in the image. The images are all resized to be less than `TextureMaxSize` on a side (default is 256); 179 | * Materials: mesh face info is converted into a material and the following attributes are copied: 180 | * face image 181 | * face color (RGBA) 182 | * transparency 183 | * bump 184 | * glow 185 | * shiny 186 | * two sided (parameter `DoubleSided`. Default is `false`) 187 | - Terrain: A mesh is created from the region heightmap. The mesh resolution is in meters (so a standard sized region would be 256x256 vertices) but a half size mesh (parameter `HalfRezTerrain` default is `true`) can be generated 188 | 189 | # Releases and Roadmap 190 | 191 | - [x] Release 1.0 192 | * basic OAR to GLTF conversion 193 | * material-centric optimization 194 | - [x] Release 1.1 195 | * cleaned up and debugged command line and Docker version 196 | - [x] Release 1.2 197 | * bug release -- trying to figure out why some JPEG2000 don't decomopress. 198 | - [x] Release 1.3 and after 199 | * bug releases and optimization experimentation before going to version 2 200 | - [x] Release 2.0 201 | * Rework of initial Convoar to create validated GLTF output 202 | - [ ] Release 3.0 203 | * option to include all prim information in `extras` (scripts, notes, etc.) 204 | * pipeline tools in Docker image for binary/DRACO packing of GLTF file 205 | * invocation options to select sub-regions of OAR region 206 | - [ ] Release 3.1 207 | * pipeline tools for scene optimizations (small mesh elimination, mesh decimation/simplification, etc.) 208 | 209 | [Convoar]: https://github.com/Misterblue/convoar 210 | [OpenSimulator]: http://opensimulator.org 211 | [Mono]: http://www.mono-project.com/ 212 | [Blender]: https://www.blender.org/ 213 | [HerbalCommonEntitiesCS]: https://github.com/Herbal3d/HerbalCommonEntitiesCS 214 | [HerbalCommonUtilCS]: https://github.com/Herbal3d/HerbalCommonUtilCS 215 | 216 | -------------------------------------------------------------------------------- /ReleaseSteps.txt: -------------------------------------------------------------------------------- 1 | Convoar Release steps 2 | 3 | Until we plug into some build and release system, the 4 | steps to build and release convoar are: 5 | 6 | CREATE THE GITHUB PRE-COMPILED BINARIES 7 | ======================================= 8 | Update VERSION 9 | Run ./setupConvoar.sh 10 | Open project in Visual Studio 2019+ 11 | Verify compile target is "Release" 12 | Rebuild Solution 13 | Git commit all changed files (should be exe's and date files) 14 | Push new commit to Github 15 | 16 | CREATE THE DOCKER IMAGE 17 | ======================== 18 | Log into Linux box with Docker installed 19 | Pull latest github sources 20 | cd convoar 21 | docker login # user herbal3d 22 | ./buildDocker.sh 23 | 24 | 25 | -------------------------------------------------------------------------------- /THIRDPARTYLICENSES/InWorldz.PrimExporter: -------------------------------------------------------------------------------- 1 | Apache License 2 | Version 2.0, January 2004 3 | http://www.apache.org/licenses/ 4 | 5 | TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION 6 | 7 | 1. Definitions. 8 | 9 | "License" shall mean the terms and conditions for use, reproduction, 10 | and distribution as defined by Sections 1 through 9 of this document. 11 | 12 | "Licensor" shall mean the copyright owner or entity authorized by 13 | the copyright owner that is granting the License. 14 | 15 | "Legal Entity" shall mean the union of the acting entity and all 16 | other entities that control, are controlled by, or are under common 17 | control with that entity. For the purposes of this definition, 18 | "control" means (i) the power, direct or indirect, to cause the 19 | direction or management of such entity, whether by contract or 20 | otherwise, or (ii) ownership of fifty percent (50%) or more of the 21 | outstanding shares, or (iii) beneficial ownership of such entity. 22 | 23 | "You" (or "Your") shall mean an individual or Legal Entity 24 | exercising permissions granted by this License. 25 | 26 | "Source" form shall mean the preferred form for making modifications, 27 | including but not limited to software source code, documentation 28 | source, and configuration files. 29 | 30 | "Object" form shall mean any form resulting from mechanical 31 | transformation or translation of a Source form, including but 32 | not limited to compiled object code, generated documentation, 33 | and conversions to other media types. 34 | 35 | "Work" shall mean the work of authorship, whether in Source or 36 | Object form, made available under the License, as indicated by a 37 | copyright notice that is included in or attached to the work 38 | (an example is provided in the Appendix below). 39 | 40 | "Derivative Works" shall mean any work, whether in Source or Object 41 | form, that is based on (or derived from) the Work and for which the 42 | editorial revisions, annotations, elaborations, or other modifications 43 | represent, as a whole, an original work of authorship. For the purposes 44 | of this License, Derivative Works shall not include works that remain 45 | separable from, or merely link (or bind by name) to the interfaces of, 46 | the Work and Derivative Works thereof. 47 | 48 | "Contribution" shall mean any work of authorship, including 49 | the original version of the Work and any modifications or additions 50 | to that Work or Derivative Works thereof, that is intentionally 51 | submitted to Licensor for inclusion in the Work by the copyright owner 52 | or by an individual or Legal Entity authorized to submit on behalf of 53 | the copyright owner. For the purposes of this definition, "submitted" 54 | means any form of electronic, verbal, or written communication sent 55 | to the Licensor or its representatives, including but not limited to 56 | communication on electronic mailing lists, source code control systems, 57 | and issue tracking systems that are managed by, or on behalf of, the 58 | Licensor for the purpose of discussing and improving the Work, but 59 | excluding communication that is conspicuously marked or otherwise 60 | designated in writing by the copyright owner as "Not a Contribution." 61 | 62 | "Contributor" shall mean Licensor and any individual or Legal Entity 63 | on behalf of whom a Contribution has been received by Licensor and 64 | subsequently incorporated within the Work. 65 | 66 | 2. Grant of Copyright License. Subject to the terms and conditions of 67 | this License, each Contributor hereby grants to You a perpetual, 68 | worldwide, non-exclusive, no-charge, royalty-free, irrevocable 69 | copyright license to reproduce, prepare Derivative Works of, 70 | publicly display, publicly perform, sublicense, and distribute the 71 | Work and such Derivative Works in Source or Object form. 72 | 73 | 3. Grant of Patent License. Subject to the terms and conditions of 74 | this License, each Contributor hereby grants to You a perpetual, 75 | worldwide, non-exclusive, no-charge, royalty-free, irrevocable 76 | (except as stated in this section) patent license to make, have made, 77 | use, offer to sell, sell, import, and otherwise transfer the Work, 78 | where such license applies only to those patent claims licensable 79 | by such Contributor that are necessarily infringed by their 80 | Contribution(s) alone or by combination of their Contribution(s) 81 | with the Work to which such Contribution(s) was submitted. If You 82 | institute patent litigation against any entity (including a 83 | cross-claim or counterclaim in a lawsuit) alleging that the Work 84 | or a Contribution incorporated within the Work constitutes direct 85 | or contributory patent infringement, then any patent licenses 86 | granted to You under this License for that Work shall terminate 87 | as of the date such litigation is filed. 88 | 89 | 4. Redistribution. You may reproduce and distribute copies of the 90 | Work or Derivative Works thereof in any medium, with or without 91 | modifications, and in Source or Object form, provided that You 92 | meet the following conditions: 93 | 94 | (a) You must give any other recipients of the Work or 95 | Derivative Works a copy of this License; and 96 | 97 | (b) You must cause any modified files to carry prominent notices 98 | stating that You changed the files; and 99 | 100 | (c) You must retain, in the Source form of any Derivative Works 101 | that You distribute, all copyright, patent, trademark, and 102 | attribution notices from the Source form of the Work, 103 | excluding those notices that do not pertain to any part of 104 | the Derivative Works; and 105 | 106 | (d) If the Work includes a "NOTICE" text file as part of its 107 | distribution, then any Derivative Works that You distribute must 108 | include a readable copy of the attribution notices contained 109 | within such NOTICE file, excluding those notices that do not 110 | pertain to any part of the Derivative Works, in at least one 111 | of the following places: within a NOTICE text file distributed 112 | as part of the Derivative Works; within the Source form or 113 | documentation, if provided along with the Derivative Works; or, 114 | within a display generated by the Derivative Works, if and 115 | wherever such third-party notices normally appear. The contents 116 | of the NOTICE file are for informational purposes only and 117 | do not modify the License. You may add Your own attribution 118 | notices within Derivative Works that You distribute, alongside 119 | or as an addendum to the NOTICE text from the Work, provided 120 | that such additional attribution notices cannot be construed 121 | as modifying the License. 122 | 123 | You may add Your own copyright statement to Your modifications and 124 | may provide additional or different license terms and conditions 125 | for use, reproduction, or distribution of Your modifications, or 126 | for any such Derivative Works as a whole, provided Your use, 127 | reproduction, and distribution of the Work otherwise complies with 128 | the conditions stated in this License. 129 | 130 | 5. Submission of Contributions. Unless You explicitly state otherwise, 131 | any Contribution intentionally submitted for inclusion in the Work 132 | by You to the Licensor shall be under the terms and conditions of 133 | this License, without any additional terms or conditions. 134 | Notwithstanding the above, nothing herein shall supersede or modify 135 | the terms of any separate license agreement you may have executed 136 | with Licensor regarding such Contributions. 137 | 138 | 6. Trademarks. This License does not grant permission to use the trade 139 | names, trademarks, service marks, or product names of the Licensor, 140 | except as required for reasonable and customary use in describing the 141 | origin of the Work and reproducing the content of the NOTICE file. 142 | 143 | 7. Disclaimer of Warranty. Unless required by applicable law or 144 | agreed to in writing, Licensor provides the Work (and each 145 | Contributor provides its Contributions) on an "AS IS" BASIS, 146 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or 147 | implied, including, without limitation, any warranties or conditions 148 | of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A 149 | PARTICULAR PURPOSE. You are solely responsible for determining the 150 | appropriateness of using or redistributing the Work and assume any 151 | risks associated with Your exercise of permissions under this License. 152 | 153 | 8. Limitation of Liability. In no event and under no legal theory, 154 | whether in tort (including negligence), contract, or otherwise, 155 | unless required by applicable law (such as deliberate and grossly 156 | negligent acts) or agreed to in writing, shall any Contributor be 157 | liable to You for damages, including any direct, indirect, special, 158 | incidental, or consequential damages of any character arising as a 159 | result of this License or out of the use or inability to use the 160 | Work (including but not limited to damages for loss of goodwill, 161 | work stoppage, computer failure or malfunction, or any and all 162 | other commercial damages or losses), even if such Contributor 163 | has been advised of the possibility of such damages. 164 | 165 | 9. Accepting Warranty or Additional Liability. While redistributing 166 | the Work or Derivative Works thereof, You may choose to offer, 167 | and charge a fee for, acceptance of support, warranty, indemnity, 168 | or other liability obligations and/or rights consistent with this 169 | License. However, in accepting such obligations, You may act only 170 | on Your own behalf and on Your sole responsibility, not on behalf 171 | of any other Contributor, and only if You agree to indemnify, 172 | defend, and hold each Contributor harmless for any liability 173 | incurred by, or claims asserted against, such Contributor by reason 174 | of your accepting any such warranty or additional liability. 175 | 176 | END OF TERMS AND CONDITIONS 177 | 178 | APPENDIX: How to apply the Apache License to your work. 179 | 180 | To apply the Apache License to your work, attach the following 181 | boilerplate notice, with the fields enclosed by brackets "{}" 182 | replaced with your own identifying information. (Don't include 183 | the brackets!) The text should be enclosed in the appropriate 184 | comment syntax for the file format. We also recommend that a 185 | file or class name and description of purpose be included on the 186 | same "printed page" as the copyright notice for easier 187 | identification within third-party archives. 188 | 189 | Copyright {yyyy} {name of copyright owner} 190 | 191 | Licensed under the Apache License, Version 2.0 (the "License"); 192 | you may not use this file except in compliance with the License. 193 | You may obtain a copy of the License at 194 | 195 | http://www.apache.org/licenses/LICENSE-2.0 196 | 197 | Unless required by applicable law or agreed to in writing, software 198 | distributed under the License is distributed on an "AS IS" BASIS, 199 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 200 | See the License for the specific language governing permissions and 201 | limitations under the License. 202 | -------------------------------------------------------------------------------- /THIRDPARTYLICENSES/LookingGlass.txt: -------------------------------------------------------------------------------- 1 | LookingGlass: http://lookingglassviewer.org 2 | https://github.com/Misterblue/LookingGlass-Viewer 3 | 4 | /* Copyright (c) Robert Adams 5 | * Redistribution and use in source and binary forms, with or without 6 | * modification, are permitted provided that the following conditions are met: 7 | * * Redistributions of source code must retain the above copyright 8 | * notice, this list of conditions and the following disclaimer. 9 | * * Redistributions in binary form must reproduce the above copyright 10 | * notice, this list of conditions and the following disclaimer in the 11 | * documentation and/or other materials provided with the distribution. 12 | * * The name of the copyright holder may not be used to endorse or promote products 13 | * derived from this software without specific prior written permission. 14 | * 15 | * THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS ``AS IS'' AND ANY 16 | * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED 17 | * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE 18 | * DISCLAIMED. IN NO EVENT SHALL THE CONTRIBUTORS BE LIABLE FOR ANY 19 | * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES 20 | * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; 21 | * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND 22 | * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 23 | * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS 24 | * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 25 | */ 26 | // November 30, 2008 27 | -------------------------------------------------------------------------------- /THIRDPARTYLICENSES/OpenSimulator: -------------------------------------------------------------------------------- 1 | Copyright (c) Contributors, http://opensimulator.org/ 2 | See CONTRIBUTORS.TXT for a full list of copyright holders. 3 | 4 | Redistribution and use in source and binary forms, with or without 5 | modification, are permitted provided that the following conditions are met: 6 | * Redistributions of source code must retain the above copyright 7 | notice, this list of conditions and the following disclaimer. 8 | * Redistributions in binary form must reproduce the above copyright 9 | notice, this list of conditions and the following disclaimer in the 10 | documentation and/or other materials provided with the distribution. 11 | * Neither the name of the OpenSimulator Project nor the 12 | names of its contributors may be used to endorse or promote products 13 | derived from this software without specific prior written permission. 14 | 15 | THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS ``AS IS'' AND ANY EXPRESS OR 16 | IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED 17 | WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE 18 | DISCLAIMED. IN NO EVENT SHALL THE CONTRIBUTORS BE LIABLE FOR ANY 19 | DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 20 | DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE 21 | GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 22 | INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER 23 | IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR 24 | OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF 25 | ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 26 | -------------------------------------------------------------------------------- /THIRDPARTYLICENSES/ParameterParse: -------------------------------------------------------------------------------- 1 | The parameter parsing and some logging code was derived from the 2 | DSGToolKit (https://github.com/intelvwi/DSGToolkit.git) which was 3 | published with the following license: 4 | 5 | /* ----------------------------------------------------------------- 6 | * Copyright (c) 2013 Intel Corporation 7 | * All rights reserved. 8 | * 9 | * Redistribution and use in source and binary forms, with or without 10 | * modification, are permitted provided that the following conditions are 11 | * met: 12 | * 13 | * * Redistributions of source code must retain the above copyright 14 | * notice, this list of conditions and the following disclaimer. 15 | * 16 | * * Redistributions in binary form must reproduce the above 17 | * copyright notice, this list of conditions and the following 18 | * disclaimer in the documentation and/or other materials provided 19 | * with the distribution. 20 | * 21 | * * Neither the name of the Intel Corporation nor the names of its 22 | * contributors may be used to endorse or promote products derived 23 | * from this software without specific prior written permission. 24 | * 25 | * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 26 | * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 27 | * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 28 | * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE INTEL OR 29 | * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, 30 | * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, 31 | * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR 32 | * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF 33 | * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING 34 | * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS 35 | * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 36 | * 37 | * EXPORT LAWS: THIS LICENSE ADDS NO RESTRICTIONS TO THE EXPORT LAWS OF 38 | * YOUR JURISDICTION. It is licensee's responsibility to comply with any 39 | * export regulations applicable in licensee's jurisdiction. Under 40 | * CURRENT (May 2000) U.S. export regulations this software is eligible 41 | * for export from the U.S. and can be downloaded by or otherwise 42 | * exported or reexported worldwide EXCEPT to U.S. embargoed destinations 43 | * which include Cuba, Iraq, Libya, North Korea, Iran, Syria, Sudan, 44 | * Afghanistan and any other country to which the U.S. has embargoed 45 | * goods and services. 46 | * ----------------------------------------------------------------- 47 | */ 48 | -------------------------------------------------------------------------------- /THIRDPARTYLICENSES/Radegast: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Misterblue/convoar/be7abbedc0d7d295a76800b2fe2e1fc9a58a7934/THIRDPARTYLICENSES/Radegast -------------------------------------------------------------------------------- /THIRDPARTYLICENSES/libopenmetaverse: -------------------------------------------------------------------------------- 1 | 2 | Copyright (c) 2006-2016, openmetaverse.co 3 | All rights reserved. 4 | 5 | - Redistribution and use in source and binary forms, with or without 6 | modification, are permitted provided that the following conditions are met: 7 | 8 | - Redistributions of source code must retain the above copyright notice, this 9 | list of conditions and the following disclaimer. 10 | - Neither the name of the openmetaverse.co nor the names 11 | of its contributors may be used to endorse or promote products derived from 12 | this software without specific prior written permission. 13 | 14 | THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" 15 | AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 16 | IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 17 | ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE 18 | LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 19 | CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 20 | SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 21 | INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 22 | CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 23 | ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 24 | POSSIBILITY OF SUCH DAMAGE. -------------------------------------------------------------------------------- /VERSION: -------------------------------------------------------------------------------- 1 | 2.0.6 2 | -------------------------------------------------------------------------------- /bin/Mono.Addins.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Misterblue/convoar/be7abbedc0d7d295a76800b2fe2e1fc9a58a7934/bin/Mono.Addins.dll -------------------------------------------------------------------------------- /bin/Nini.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Misterblue/convoar/be7abbedc0d7d295a76800b2fe2e1fc9a58a7934/bin/Nini.dll -------------------------------------------------------------------------------- /bin/OpenMetaverse.Rendering.Meshmerizer.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Misterblue/convoar/be7abbedc0d7d295a76800b2fe2e1fc9a58a7934/bin/OpenMetaverse.Rendering.Meshmerizer.dll -------------------------------------------------------------------------------- /bin/OpenMetaverse.StructuredData.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Misterblue/convoar/be7abbedc0d7d295a76800b2fe2e1fc9a58a7934/bin/OpenMetaverse.StructuredData.dll -------------------------------------------------------------------------------- /bin/OpenMetaverse.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Misterblue/convoar/be7abbedc0d7d295a76800b2fe2e1fc9a58a7934/bin/OpenMetaverse.dll -------------------------------------------------------------------------------- /bin/OpenMetaverse.dll.config: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /bin/OpenMetaverseTypes.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Misterblue/convoar/be7abbedc0d7d295a76800b2fe2e1fc9a58a7934/bin/OpenMetaverseTypes.dll -------------------------------------------------------------------------------- /bin/OpenSim.Capabilities.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Misterblue/convoar/be7abbedc0d7d295a76800b2fe2e1fc9a58a7934/bin/OpenSim.Capabilities.dll -------------------------------------------------------------------------------- /bin/OpenSim.Data.Null.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Misterblue/convoar/be7abbedc0d7d295a76800b2fe2e1fc9a58a7934/bin/OpenSim.Data.Null.dll -------------------------------------------------------------------------------- /bin/OpenSim.Framework.Monitoring.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Misterblue/convoar/be7abbedc0d7d295a76800b2fe2e1fc9a58a7934/bin/OpenSim.Framework.Monitoring.dll -------------------------------------------------------------------------------- /bin/OpenSim.Framework.Serialization.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Misterblue/convoar/be7abbedc0d7d295a76800b2fe2e1fc9a58a7934/bin/OpenSim.Framework.Serialization.dll -------------------------------------------------------------------------------- /bin/OpenSim.Framework.Servers.HttpServer.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Misterblue/convoar/be7abbedc0d7d295a76800b2fe2e1fc9a58a7934/bin/OpenSim.Framework.Servers.HttpServer.dll -------------------------------------------------------------------------------- /bin/OpenSim.Framework.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Misterblue/convoar/be7abbedc0d7d295a76800b2fe2e1fc9a58a7934/bin/OpenSim.Framework.dll -------------------------------------------------------------------------------- /bin/OpenSim.Region.CoreModules.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Misterblue/convoar/be7abbedc0d7d295a76800b2fe2e1fc9a58a7934/bin/OpenSim.Region.CoreModules.dll -------------------------------------------------------------------------------- /bin/OpenSim.Region.Framework.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Misterblue/convoar/be7abbedc0d7d295a76800b2fe2e1fc9a58a7934/bin/OpenSim.Region.Framework.dll -------------------------------------------------------------------------------- /bin/OpenSim.Region.PhysicsModule.BasicPhysics.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Misterblue/convoar/be7abbedc0d7d295a76800b2fe2e1fc9a58a7934/bin/OpenSim.Region.PhysicsModule.BasicPhysics.dll -------------------------------------------------------------------------------- /bin/OpenSim.Region.PhysicsModules.SharedBase.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Misterblue/convoar/be7abbedc0d7d295a76800b2fe2e1fc9a58a7934/bin/OpenSim.Region.PhysicsModules.SharedBase.dll -------------------------------------------------------------------------------- /bin/OpenSim.Services.Connectors.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Misterblue/convoar/be7abbedc0d7d295a76800b2fe2e1fc9a58a7934/bin/OpenSim.Services.Connectors.dll -------------------------------------------------------------------------------- /bin/OpenSim.Services.Interfaces.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Misterblue/convoar/be7abbedc0d7d295a76800b2fe2e1fc9a58a7934/bin/OpenSim.Services.Interfaces.dll -------------------------------------------------------------------------------- /bin/OpenSim.Tests.Common.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Misterblue/convoar/be7abbedc0d7d295a76800b2fe2e1fc9a58a7934/bin/OpenSim.Tests.Common.dll -------------------------------------------------------------------------------- /bin/PrimMesher.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Misterblue/convoar/be7abbedc0d7d295a76800b2fe2e1fc9a58a7934/bin/PrimMesher.dll -------------------------------------------------------------------------------- /bin/SmartThreadPool.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Misterblue/convoar/be7abbedc0d7d295a76800b2fe2e1fc9a58a7934/bin/SmartThreadPool.dll -------------------------------------------------------------------------------- /bin/log4net.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Misterblue/convoar/be7abbedc0d7d295a76800b2fe2e1fc9a58a7934/bin/log4net.dll -------------------------------------------------------------------------------- /bin/nunit.framework.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Misterblue/convoar/be7abbedc0d7d295a76800b2fe2e1fc9a58a7934/bin/nunit.framework.dll -------------------------------------------------------------------------------- /bin/zlib.net.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Misterblue/convoar/be7abbedc0d7d295a76800b2fe2e1fc9a58a7934/bin/zlib.net.dll -------------------------------------------------------------------------------- /buildDocker.sh: -------------------------------------------------------------------------------- 1 | #! /bin/bash 2 | # Script to build convoar Docker image. 3 | # Make user file 'VERSION' contains the latest version. 4 | # Make sure you are logged onto DockerHub before running this script. 5 | # Hacked version based on https://medium.com/travis-on-docker/how-to-version-your-docker-images-1d5c577ebf54 6 | 7 | DOCKERHUB_USER=herbal3d 8 | IMAGE=convoar 9 | 10 | # export TARGET=Release 11 | export TARGET=Debug 12 | 13 | if [[ ! -e "./VERSION" ]] ; then 14 | echo "No file named 'VERSION'. You might be in the wrong directory." 15 | echo "Run the build script in the base project directory." 16 | exit 17 | fi 18 | VERSION=$(cat VERSION) 19 | 20 | # Build the docker image of the latest git commited sources. 21 | DO_DOCKER_BUILD=yes 22 | 23 | # Push the built docker image to DockerHub. 24 | DO_DOCKERHUB_PUSH=yes 25 | 26 | if [[ "$DO_DOCKER_BUILD" == "yes" ]] ; then 27 | cd docker 28 | # docker build --build-arg TARGET=${TARGET} --build-arg VERSION=${VERSION} -t herbal3d/convoar . 29 | docker build --no-cache --build-arg TARGET=${TARGET} --build-arg VERSION=${VERSION} -t $DOCKERHUB_USER/convoar . 30 | 31 | docker tag $DOCKERHUB_USER/$IMAGE:latest $DOCKERHUB_USER/$IMAGE:$VERSION 32 | fi 33 | 34 | if [[ "$DO_DOCKERHUB_PUSH" == "yes" ]] ; then 35 | docker push $DOCKERHUB_USER/$IMAGE:latest 36 | docker push $DOCKERHUB_USER/$IMAGE:$VERSION 37 | fi 38 | 39 | 40 | -------------------------------------------------------------------------------- /convoar.sln: -------------------------------------------------------------------------------- 1 | Microsoft Visual Studio Solution File, Format Version 12.00 2 | # Visual Studio Version 17 3 | VisualStudioVersion = 17.1.32328.378 4 | MinimumVisualStudioVersion = 10.0.40219.1 5 | Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "convoar", "convoar\convoar.csproj", "{BD9942A1-315C-4961-B56A-D1770BED83B0}" 6 | EndProject 7 | Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Herbal3d.CommonEntities", "addon-modules\HerbalCommonEntitiesCS\CommonEntities\Herbal3d.CommonEntities.csproj", "{1267952C-0000-0000-0000-000000000000}" 8 | EndProject 9 | Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Herbal3d.CommonEntitiesConv", "addon-modules\HerbalCommonEntitiesCS\CommonEntitiesConv\Herbal3d.CommonEntitiesConv.csproj", "{CE3D1850-0000-0000-0000-000000000000}" 10 | EndProject 11 | Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Herbal3d.CommonUtil", "addon-modules\HerbalCommonUtilCS\Herbal3d.CommonUtil.csproj", "{C0DFAC61-6999-4278-855F-0E9BCA2E8625}" 12 | EndProject 13 | Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Solution Items", "Solution Items", "{7077C142-D972-47D8-BE14-E5417159747E}" 14 | ProjectSection(SolutionItems) = preProject 15 | bin\libopenjpeg-dotnet-2-1.5.0-dotnet-1-x86_64.so = bin\libopenjpeg-dotnet-2-1.5.0-dotnet-1-x86_64.so 16 | bin\openjpeg-dotnet-x86_64.dll = bin\openjpeg-dotnet-x86_64.dll 17 | bin\openjpeg-dotnet.dll = bin\openjpeg-dotnet.dll 18 | EndProjectSection 19 | EndProject 20 | Global 21 | GlobalSection(SolutionConfigurationPlatforms) = preSolution 22 | Debug|Any CPU = Debug|Any CPU 23 | Debug|x64 = Debug|x64 24 | Release|Any CPU = Release|Any CPU 25 | Release|x64 = Release|x64 26 | EndGlobalSection 27 | GlobalSection(ProjectConfigurationPlatforms) = postSolution 28 | {BD9942A1-315C-4961-B56A-D1770BED83B0}.Debug|Any CPU.ActiveCfg = Debug|Any CPU 29 | {BD9942A1-315C-4961-B56A-D1770BED83B0}.Debug|Any CPU.Build.0 = Debug|Any CPU 30 | {BD9942A1-315C-4961-B56A-D1770BED83B0}.Debug|x64.ActiveCfg = Debug|x64 31 | {BD9942A1-315C-4961-B56A-D1770BED83B0}.Debug|x64.Build.0 = Debug|x64 32 | {BD9942A1-315C-4961-B56A-D1770BED83B0}.Release|Any CPU.ActiveCfg = Release|Any CPU 33 | {BD9942A1-315C-4961-B56A-D1770BED83B0}.Release|Any CPU.Build.0 = Release|Any CPU 34 | {BD9942A1-315C-4961-B56A-D1770BED83B0}.Release|x64.ActiveCfg = Release|x64 35 | {BD9942A1-315C-4961-B56A-D1770BED83B0}.Release|x64.Build.0 = Release|x64 36 | {1267952C-0000-0000-0000-000000000000}.Debug|Any CPU.ActiveCfg = Debug|Any CPU 37 | {1267952C-0000-0000-0000-000000000000}.Debug|Any CPU.Build.0 = Debug|Any CPU 38 | {1267952C-0000-0000-0000-000000000000}.Debug|x64.ActiveCfg = Debug|Any CPU 39 | {1267952C-0000-0000-0000-000000000000}.Debug|x64.Build.0 = Debug|Any CPU 40 | {1267952C-0000-0000-0000-000000000000}.Release|Any CPU.ActiveCfg = Release|Any CPU 41 | {1267952C-0000-0000-0000-000000000000}.Release|Any CPU.Build.0 = Release|Any CPU 42 | {1267952C-0000-0000-0000-000000000000}.Release|x64.ActiveCfg = Release|Any CPU 43 | {1267952C-0000-0000-0000-000000000000}.Release|x64.Build.0 = Release|Any CPU 44 | {CE3D1850-0000-0000-0000-000000000000}.Debug|Any CPU.ActiveCfg = Debug|Any CPU 45 | {CE3D1850-0000-0000-0000-000000000000}.Debug|Any CPU.Build.0 = Debug|Any CPU 46 | {CE3D1850-0000-0000-0000-000000000000}.Debug|x64.ActiveCfg = Debug|Any CPU 47 | {CE3D1850-0000-0000-0000-000000000000}.Debug|x64.Build.0 = Debug|Any CPU 48 | {CE3D1850-0000-0000-0000-000000000000}.Release|Any CPU.ActiveCfg = Release|Any CPU 49 | {CE3D1850-0000-0000-0000-000000000000}.Release|Any CPU.Build.0 = Release|Any CPU 50 | {CE3D1850-0000-0000-0000-000000000000}.Release|x64.ActiveCfg = Release|Any CPU 51 | {CE3D1850-0000-0000-0000-000000000000}.Release|x64.Build.0 = Release|Any CPU 52 | {C0DFAC61-6999-4278-855F-0E9BCA2E8625}.Debug|Any CPU.ActiveCfg = Debug|Any CPU 53 | {C0DFAC61-6999-4278-855F-0E9BCA2E8625}.Debug|Any CPU.Build.0 = Debug|Any CPU 54 | {C0DFAC61-6999-4278-855F-0E9BCA2E8625}.Debug|x64.ActiveCfg = Debug|Any CPU 55 | {C0DFAC61-6999-4278-855F-0E9BCA2E8625}.Debug|x64.Build.0 = Debug|Any CPU 56 | {C0DFAC61-6999-4278-855F-0E9BCA2E8625}.Release|Any CPU.ActiveCfg = Release|Any CPU 57 | {C0DFAC61-6999-4278-855F-0E9BCA2E8625}.Release|Any CPU.Build.0 = Release|Any CPU 58 | {C0DFAC61-6999-4278-855F-0E9BCA2E8625}.Release|x64.ActiveCfg = Release|Any CPU 59 | {C0DFAC61-6999-4278-855F-0E9BCA2E8625}.Release|x64.Build.0 = Release|Any CPU 60 | EndGlobalSection 61 | GlobalSection(SolutionProperties) = preSolution 62 | HideSolutionNode = FALSE 63 | EndGlobalSection 64 | GlobalSection(ExtensibilityGlobals) = postSolution 65 | SolutionGuid = {5A7B81A2-9EFD-4287-852D-38E31437A820} 66 | EndGlobalSection 67 | EndGlobal 68 | -------------------------------------------------------------------------------- /convoar/App.config: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 |
5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | 58 | 59 | 60 | 61 | 62 | 63 | -------------------------------------------------------------------------------- /convoar/Convoar.cs: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (c) 2022 Robert Adams 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | using System; 17 | using System.Collections.Generic; 18 | using System.Linq; 19 | using System.IO; 20 | using System.Reflection; 21 | using System.Text; 22 | using System.Threading; 23 | using System.Threading.Tasks; 24 | 25 | using OpenSim.Services.Interfaces; 26 | 27 | using org.herbal3d.cs.CommonEntities; 28 | using org.herbal3d.cs.CommonUtil; 29 | 30 | namespace org.herbal3d.convoar { 31 | 32 | // Class passed around for global context for this region module instance. 33 | // NOT FOR PASSING DATA! Only used for global resources like logging, configuration 34 | // parameters, statistics, and the such. 35 | public class GlobalContext { 36 | public ConvoarParams parms; 37 | public ConvoarStats stats; 38 | public BLogger log; 39 | public string contextName; // a unique identifier for this context -- used in filenames, ... 40 | public string version; 41 | public string versionLong; 42 | public string buildDateShort; 43 | public string gitCommit; 44 | 45 | public GlobalContext() 46 | { 47 | stats = null; 48 | contextName = String.Empty; 49 | version = VersionInfo.appVersion; 50 | buildDateShort = VersionInfo.buildDate; 51 | versionLong = VersionInfo.longVersion; 52 | } 53 | } 54 | 55 | class ConvOAR { 56 | private static readonly string _logHeader = "[ConvOAR]"; 57 | 58 | public static GlobalContext Globals; 59 | 60 | string _outputDir; 61 | 62 | private string Invocation() { 63 | StringBuilder buff = new StringBuilder(); 64 | buff.AppendLine("Invocation: convoar inputOARfile"); 65 | buff.AppendLine(" Possible parameters are (negate bool parameters by prepending 'no'):"); 66 | string[] paramDescs = Globals.parms.ListParameters().Select(kvp => { return kvp.Key + ": " + kvp.Value; }).ToArray(); 67 | buff.AppendLine(String.Join(Environment.NewLine, paramDescs)); 68 | return buff.ToString(); 69 | } 70 | 71 | static void Main(string[] args) { 72 | ConvOAR prog = new ConvOAR(); 73 | CancellationToken cancelToken = new CancellationToken(); 74 | prog.Start(cancelToken, args).Wait(); 75 | return; 76 | } 77 | 78 | // If run from the command line, create instance and call 'Start' with args. 79 | // If run programmatically, create instance and call 'Start' with parameters. 80 | public async Task Start(CancellationToken cancelToken, string[] args) { 81 | var parms = new ConvoarParams(); 82 | var logger = new BLoggerNLog(parms.LogFilename, parms.LogToConsole, parms.LogToFiles); 83 | // var logger = new LoggerLog4Net(), 84 | // var logger = new LoggerConsole(), 85 | 86 | Globals = new GlobalContext() { 87 | log = logger, 88 | stats = new ConvoarStats(), 89 | parms = parms, 90 | }; 91 | 92 | // A single parameter of '--help' outputs the invocation parameters 93 | if (args.Length > 0 && args[0] == "--help") { 94 | System.Console.Write(Invocation()); 95 | return; 96 | } 97 | 98 | // 'ConvoarParams' initializes to default values. 99 | // Over ride default values with command line parameters. 100 | try { 101 | // Note that trailing parameters will be put into "InputOAR" parameter 102 | Globals.parms.MergeCommandLine(args, null, "InputOAR"); 103 | } 104 | catch (Exception e) { 105 | Globals.log.Error("ERROR: bad parameters: " + e.Message); 106 | Globals.log.Error(Invocation()); 107 | return; 108 | } 109 | 110 | if (Globals.parms.Verbose) { 111 | Globals.log.SetLogLevel(LogLevels.Debug); 112 | } 113 | 114 | if (!Globals.parms.Quiet) { 115 | System.Console.WriteLine("Convoar " + Globals.versionLong); 116 | System.Console.WriteLine(" using Herbal3d.CommonEntities " + org.herbal3d.cs.CommonEntities.VersionInfo.longVersion); 117 | System.Console.WriteLine(" using Herbal3d.CommonEntitiesConv " + org.herbal3d.cs.CommonEntitiesConv.VersionInfo.longVersion); 118 | System.Console.WriteLine(" using Herbal3d.CommonUtil " + org.herbal3d.cs.CommonUtil.VersionInfo.longVersion); 119 | } 120 | 121 | // Validate parameters 122 | if (String.IsNullOrEmpty(Globals.parms.InputOAR)) { 123 | Globals.log.Error("An input OAR file must be specified"); 124 | Globals.log.Error(Invocation()); 125 | return; 126 | } 127 | if (String.IsNullOrEmpty(Globals.parms.OutputDir)) { 128 | _outputDir = "./out"; 129 | Globals.log.Debug("Output directory defaulting to {0}", _outputDir); 130 | } 131 | 132 | // Base asset storage system -- 'MemAssetService' is in-memory storage 133 | using (MemAssetService memAssetService = new MemAssetService()) { 134 | 135 | // 'assetManager' is the asset cache and fetching code -- where all the mesh, 136 | // material, and instance information is stored for later processing. 137 | using (AssetManager assetManager = new AssetManager(memAssetService, Globals.log, Globals.parms.OutputDir)) { 138 | 139 | try { 140 | BScene bScene = await LoadOAR(memAssetService, assetManager); 141 | 142 | Globals.contextName = bScene.name; 143 | 144 | Globals.log.Debug("{0} Scene created. name={1}, instances={2}", 145 | _logHeader, bScene.name, bScene.instances.Count); 146 | Globals.log.Debug("{0} num assetFetcher.images={1}", _logHeader, assetManager.Assets.Images.Count); 147 | Globals.log.Debug("{0} num assetFetcher.materials={1}", _logHeader, assetManager.Assets.Materials.Count); 148 | Globals.log.Debug("{0} num assetFetcher.meshes={1}", _logHeader, assetManager.Assets.Meshes.Count); 149 | Globals.log.Debug("{0} num assetFetcher.renderables={1}", _logHeader, assetManager.Assets.Renderables.Count); 150 | 151 | if (ConvOAR.Globals.parms.TerrainOnly) { 152 | ConvOAR.Globals.log.Debug("{0} Clearing out scene so there's only terrain (TerrainOnly)", _logHeader); 153 | bScene.instances.Clear(); 154 | bScene.instances.Add(bScene.terrainInstance); 155 | } 156 | 157 | /* 158 | // Perform any optimizations on the scene and its instances 159 | if (Globals.parms.P("DoMeshSimplification")) { 160 | // TODO: 161 | } 162 | if (Globals.parms.P("DoSceneOptimizations")) { 163 | using (BSceneManipulation optimizer = new BSceneManipulation()) { 164 | bScene = optimizer.OptimizeScene(bScene); 165 | Globals.log.DebugFormat("{0} merged BScene. numInstances={1}", _logHeader, bScene.instances.Count); 166 | } 167 | } 168 | */ 169 | if (Globals.parms.MergeSharedMaterialMeshes) { 170 | // using (BSceneManipulation optimizer = new BSceneManipulation(Globals.log, Globals.parms)) { 171 | var manipParams = new ParamBlock(new Dictionary { 172 | { "SeparateInstancedMeshes", false }, 173 | { "MergeSharedMaterialMeshes", false }, 174 | { "MeshShareThreshold", 5 } 175 | 176 | }); 177 | using (BSceneManipulation optimizer = new BSceneManipulation(Globals.log, manipParams)) { 178 | bScene = optimizer.RebuildSceneBasedOnSharedMeshes(bScene); 179 | Globals.log.Debug("{0} merged meshes in scene. numInstances={1}", _logHeader, bScene.instances.Count); 180 | } 181 | } 182 | 183 | // Output the transformed scene as Gltf version 2 184 | GltfB gltf = new GltfB(bScene.name, Globals.log, new gltfParamsB() { 185 | inputOAR = Globals.parms.InputOAR, 186 | uriBase = Globals.parms.URIBase, 187 | verticesMaxForBuffer = Globals.parms.VerticesMaxForBuffer, 188 | gltfCopyright = Globals.parms.GltfCopyright, 189 | addUniqueCodes = Globals.parms.AddUniqueCodes, 190 | doubleSided = Globals.parms.DoubleSided, 191 | textureMaxSize = Globals.parms.TextureMaxSize, 192 | logBuilding = Globals.parms.LogBuilding, 193 | logGltfBuilding = Globals.parms.LogGltfBuilding, 194 | versionLong = Globals.versionLong 195 | }); 196 | 197 | try { 198 | gltf.LoadScene(bScene); 199 | 200 | Globals.log.Debug("{0} num Gltf.nodes={1}", _logHeader, gltf.nodes.Count); 201 | Globals.log.Debug("{0} num Gltf.meshes={1}", _logHeader, gltf.meshes.Count); 202 | Globals.log.Debug("{0} num Gltf.materials={1}", _logHeader, gltf.materials.Count); 203 | Globals.log.Debug("{0} num Gltf.images={1}", _logHeader, gltf.images.Count); 204 | Globals.log.Debug("{0} num Gltf.accessor={1}", _logHeader, gltf.accessors.Count); 205 | Globals.log.Debug("{0} num Gltf.buffers={1}", _logHeader, gltf.buffers.Count); 206 | Globals.log.Debug("{0} num Gltf.bufferViews={1}", _logHeader, gltf.bufferViews.Count); 207 | } 208 | catch (Exception e) { 209 | Globals.log.Error("{0} Exception loading GltfScene: {1}", _logHeader, e); 210 | } 211 | 212 | try { 213 | if (gltf.scenes.Count > 0) { 214 | string gltfFilename = gltf.GetFilename(gltf.IdentifyingString); 215 | using (var outm = new MemoryStream()) { 216 | using (var outt = new StreamWriter(outm)) { 217 | gltf.ToJSON(outt); 218 | } 219 | await assetManager.AssetStorage.Store(gltfFilename, outm.ToArray()); 220 | } 221 | gltf.WriteBinaryFiles(assetManager.AssetStorage); 222 | 223 | if (Globals.parms.ExportTextures) { 224 | gltf.WriteImages(assetManager.AssetStorage); 225 | } 226 | } 227 | else { 228 | Globals.log.Error("{0} Not writing out GLTF because no scenes", _logHeader); 229 | } 230 | } 231 | catch (Exception e) { 232 | Globals.log.Error("{0} Exception writing GltfScene: {1}", _logHeader, e); 233 | } 234 | 235 | /* 236 | // Output all the instances in the scene as individual GLTF files 237 | if (Globals.parms.P("ExportIndividualGltf")) { 238 | bScene.instances.ForEach(instance => { 239 | string instanceName = instance.handle.ToString(); 240 | Gltf gltf = new Gltf(instanceName); 241 | gltf.persist.baseDirectory = bScene.name; 242 | // gltf.persist.baseDirectory = PersistRules.JoinFilePieces(bScene.name, instanceName); 243 | GltfScene gltfScene = new GltfScene(gltf, instanceName); 244 | gltf.defaultScene = gltfScene; 245 | 246 | Displayable rootDisp = instance.Representation; 247 | GltfNode rootNode = GltfNode.GltfNodeFactory(gltf, gltfScene, rootDisp, assetFetcher); 248 | rootNode.translation = instance.Position; 249 | rootNode.rotation = instance.Rotation; 250 | 251 | gltf.BuildAccessorsAndBuffers(); 252 | gltf.UpdateGltfv2ReferenceIndexes(); 253 | 254 | // After the building, get rid of the default scene name as we're not outputting a scene 255 | gltf.defaultScene = null; 256 | 257 | PersistRules.ResolveAndCreateDir(gltf.persist.filename); 258 | 259 | using (StreamWriter outt = File.CreateText(gltf.persist.filename)) { 260 | gltf.ToJSON(outt); 261 | } 262 | gltf.WriteBinaryFiles(); 263 | 264 | if (Globals.parms.P("ExportTextures")) { 265 | gltf.WriteImages(); 266 | } 267 | }); 268 | } 269 | */ 270 | } 271 | catch (Exception e) { 272 | Globals.log.Error("{0} Global exception converting scene: {1}", _logHeader, e); 273 | // A common error is not having all the DLLs for OpenSimulator. Print out what's missing. 274 | if (e is ReflectionTypeLoadException refE) { 275 | foreach (var ee in refE.LoaderExceptions) { 276 | Globals.log.Error("{0} reference exception: {1}", _logHeader, ee); 277 | } 278 | } 279 | } 280 | } 281 | } 282 | } 283 | 284 | // Initialization if using ConvOAR programmatically. 285 | public void Start(ConvoarParams pParameters, BLogger pLogger) { 286 | Globals = new GlobalContext() { 287 | log = pLogger, 288 | parms = pParameters, 289 | stats = new ConvoarStats() 290 | }; 291 | } 292 | 293 | // Load the OARfile specified in Globals.params.InputOAR. 294 | // Parameters are in 'ConvOAR.Globals.params'. 295 | // For the moment, the OAR file must be specified with a string because of how OpenSimulator 296 | // processes the input files. Note that the filename can be an 'http:' type URL. 297 | public async Task LoadOAR(IAssetService assetService, AssetManager assetManager) { 298 | BScene ret = null; 299 | 300 | try { 301 | OarConverter converter = new OarConverter(Globals.log, Globals.parms); 302 | ret = await converter.ConvertOarToScene(assetService, assetManager); 303 | } 304 | catch (Exception e) { 305 | ConvOAR.Globals.log.Error("{0} LoadOAR exception: {1}", _logHeader, e); 306 | throw (e); 307 | } 308 | return ret; 309 | } 310 | 311 | } 312 | } 313 | -------------------------------------------------------------------------------- /convoar/ConvoarParams.cs: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (c) 2016 Robert Adams 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | /* 17 | * Some code covered by: Copyright (c) Contributors, http://opensimulator.org/ 18 | */ 19 | 20 | using System; 21 | using System.Collections.Generic; 22 | using System.Reflection; 23 | using System.Text; 24 | 25 | using org.herbal3d.cs.CommonUtil; 26 | 27 | using OMV = OpenMetaverse; 28 | 29 | namespace org.herbal3d.convoar { 30 | public class ConfigParam : Attribute { 31 | public ConfigParam(string name, Type valueType, string desc = "", string alt = null) { 32 | this.name = name; 33 | this.valueType = valueType; 34 | this.desc = desc; 35 | this.alt = alt; 36 | } 37 | public string name; 38 | public Type valueType; 39 | public string desc; 40 | public string alt; 41 | } 42 | 43 | public class ConvoarParams { 44 | 45 | public ConvoarParams() { 46 | } 47 | 48 | // ========== General Input and Output Parameters 49 | [ConfigParam(name: "InputOAR", valueType: typeof(string), desc: "Input OAR file", alt: "i")] 50 | public string InputOAR = null; 51 | [ConfigParam(name: "OutputDir", valueType: typeof(string), desc: "Directory (relative to current dir) to store output files", alt: "d")] 52 | public string OutputDir = "./convoar"; 53 | [ConfigParam(name: "URIBase", valueType: typeof(string), desc: "String added to the beginning of asset name to create URI")] 54 | public string URIBase = ""; 55 | [ConfigParam(name: "UseReadableFilenames", valueType: typeof(bool), desc: "Whether filenames should be human readable or UUIDs")] 56 | public bool UseReadableFilenames = true; 57 | [ConfigParam(name: "UseDeepFilenames", valueType: typeof(bool), desc: "Whether filenames organized into deep directory structure")] 58 | public bool UseDeepFilenames = false; 59 | [ConfigParam(name: "WriteBinaryGltf", valueType: typeof(bool), desc: "Whether to write .gltf or .glb file")] 60 | public bool WriteBinaryGltf = false; 61 | 62 | // ========== OAR Reading Specific Parameters" 63 | [ConfigParam(name: "ConvoarID", valueType: typeof(string), desc: "GUID for 'convoar' identity (used for CreatorID, ...)")] 64 | public string ConvoarID = "e67a2ff8-597d-4f03-b559-930aeaf4836b"; 65 | [ConfigParam(name: "RegionName", valueType: typeof(string), desc: "Name to use for the region (default generated from OAR filename)")] 66 | public string RegionName = String.Empty; 67 | [ConfigParam(name: "Displacement", valueType: typeof(OMV.Vector3), desc: "Optional displacement to add to OAR entities")] 68 | public OMV.Vector3 Displacement = OMV.Vector3.Zero; 69 | [ConfigParam(name: "Rotation", valueType: typeof(float), desc: "Optional rotation to add to OAR entities")] 70 | public float Rotation = 0; 71 | [ConfigParam(name: "SubRegion", valueType: typeof(string), desc: "Bounds of subregion to export. upper-right to lower-left as (X,Y,Z,X,Y,Z). Whole region if empty or null")] 72 | public string SubRegion = null; 73 | 74 | // ========== Optimizations 75 | [ConfigParam(name: "MergeSharedMaterialMeshes", valueType: typeof(bool), desc: "whether to merge meshes with similar materials", alt: "m")] 76 | public bool MergeSharedMaterialMeshes = false; 77 | [ConfigParam(name: "UseOpenJPEG", valueType: typeof(bool), desc: "Use OpenJPEG to decode JPEG2000 images. Alternative is CSJ2K")] 78 | public bool UseOpenJPEG = true; 79 | 80 | /* 81 | [ConfigParam(name: "DoMeshSimplification", valueType: typeof(bool), desc: "pass over all the meshes and simplify if needed")] 82 | public bool DoMeshSimplification = true; 83 | [ConfigParam(name: "DoSceneOptimizations", valueType: typeof(bool), desc: "optimize the instances in the scene")] 84 | public bool DoSceneOptimizations = true; 85 | [ConfigParam(name: "SeparateInstancedMeshes", valueType: typeof(bool), desc: "whether to find instanced meshes and not do shared meshes with them")] 86 | public bool SeparateInstancedMeshes = true; 87 | [ConfigParam(name:"MeshShareThreshold", valueType: typeof(int), desc: "meshes used more than this many times are not material combined")] 88 | public int MeshShareThreshold = 5; 89 | [ConfigParam(name: "CreateStaticLayer", valueType: typeof(bool), desc: "whether to merge meshes with similar materials in static objects")] 90 | public bool CreateStaticLayer = false; 91 | [ConfigParam(name: "CreateDynamicLayer", valueType: typeof(bool), desc: "whether to merge meshes within non-static entities ")] 92 | public bool CreateDynamicLayer = false; 93 | */ 94 | 95 | // ========== Export Parameters 96 | [ConfigParam(name: "TerrainOnly", valueType: typeof(bool), desc: "Only create and output the terrain and terrain texture")] 97 | public bool TerrainOnly = false; 98 | [ConfigParam(name: "GltfCopyright", valueType: typeof(string), desc: "Copyright notice embedded into generated GLTF files")] 99 | public string GltfCopyright = "Copyright 2022. All rights reserved"; 100 | [ConfigParam(name: "ExportTextures", valueType: typeof(bool), desc: "Convert textures to PNGs and export to target dir")] 101 | public bool ExportTextures = true; 102 | [ConfigParam(name: "TexturesDir", valueType: typeof(string), desc: "sub-directory for all the image files")] 103 | public string TexturesDir = "images"; 104 | [ConfigParam(name: "TextureMaxSize", valueType: typeof(int), desc: "The maximum size of textures for a simple export")] 105 | public int TextureMaxSize = 256; 106 | [ConfigParam(name: "PreferredTextureFormat", valueType: typeof(string), desc: "One of: PNG, JPG, GIF, BMP")] 107 | public string PreferredTextureFormat = "PNG"; 108 | [ConfigParam(name: "PreferredTextureFormatIfNoTransparency", valueType: typeof(string), desc: "One of: PNG, JPG, GIF, BMP")] 109 | public string PreferredTextureFormatIfNoTransparency = "JPG"; 110 | [ConfigParam(name: "VerticesMaxForBuffer", valueType: typeof(int), desc: "Number of vertices to cause splitting of buffer files")] 111 | public int VerticesMaxForBuffer = 50000; 112 | [ConfigParam(name: "DisplayTimeScaling", valueType: typeof(bool), desc: "If to delay mesh scaling to display/GPU time")] 113 | public bool DisplayTimeScaling = false; 114 | [ConfigParam(name: "DoubleSided", valueType: typeof(bool), desc: "specify whether double sided mesh rendering")] 115 | public bool DoubleSided = false; 116 | [ConfigParam(name: "AddUniqueCodes", valueType: typeof(bool), desc: "Add an extras.unique value to some GLTF objects as a unique hash")] 117 | public bool AddUniqueCodes = true; 118 | 119 | // ========== Terrain Generation Parameters 120 | [ConfigParam(name: "AddTerrainMesh", valueType: typeof(bool), desc: "whether to create and add a terrain mesh")] 121 | public bool AddTerrainMesh = true; 122 | [ConfigParam(name: "HalfRezTerrain", valueType: typeof(bool), desc: "Whether to reduce the terrain resolution by 2")] 123 | public bool HalfRezTerrain = true; 124 | [ConfigParam(name: "CreateTerrainSplat", valueType: typeof(bool), desc: "whether to generate a terrain mesh splat texture")] 125 | public bool CreateTerrainSplat = true; 126 | 127 | // ========== Debugging 128 | [ConfigParam(name: "Quiet", valueType: typeof(bool), desc: "supress as much informational output as possible", alt: "q")] 129 | public bool Quiet = false; 130 | [ConfigParam(name: "Verbose", valueType: typeof(bool), desc: "enable DEBUG information logging", alt: "v")] 131 | public bool Verbose = false; 132 | [ConfigParam(name: "LogToConsole", valueType: typeof(bool), desc: "Whether to also output logs to console")] 133 | public bool LogToConsole = true; 134 | [ConfigParam(name: "LogToFile", valueType: typeof(bool), desc: "Whether to output logs to files")] 135 | public bool LogToFiles = false; 136 | [ConfigParam(name: "LogFilename", valueType: typeof(string), desc: "Base filename of log files")] 137 | public string LogFilename = "Logs/convoar.log"; 138 | [ConfigParam(name: "LogBuilding", valueType: typeof(bool), desc: "log detailed BScene/BInstance object building")] 139 | public bool LogBuilding = false; 140 | [ConfigParam(name: "LogGltfBuilding", valueType: typeof(bool), desc: "log detailed Gltf object building")] 141 | public bool LogGltfBuilding = false; 142 | 143 | // Find the parameter definition and return the config info and the field info 144 | // Returns 'true' of the parameter is found. False otherwise. 145 | public bool TryGetParameterInfo(string pName, out ConfigParam pConfigParam, out FieldInfo pFieldInfo) { 146 | var lName = pName.ToLower(); 147 | foreach (FieldInfo fi in this.GetType().GetFields()) { 148 | foreach (Attribute attr in Attribute.GetCustomAttributes(fi)) { 149 | ConfigParam cp = attr as ConfigParam; 150 | if (cp != null) { 151 | if (cp.name.ToLower() == lName || (cp.alt != null && cp.alt == lName)) { 152 | pConfigParam = cp; 153 | pFieldInfo = fi; 154 | return true; 155 | } 156 | } 157 | } 158 | } 159 | pConfigParam = null; 160 | pFieldInfo = null; 161 | return false; 162 | } 163 | 164 | // Return a string version of a particular parameter value 165 | public string GetParameterValue(string pName) { 166 | var ret = String.Empty; 167 | foreach (FieldInfo fi in this.GetType().GetFields()) { 168 | foreach (Attribute attr in Attribute.GetCustomAttributes(fi)) { 169 | ConfigParam cp = attr as ConfigParam; 170 | if (cp != null) { 171 | if (cp.name == pName) { 172 | var val = fi.GetValue(this); 173 | if (val != null) { 174 | ret = val.ToString(); 175 | } 176 | break; 177 | } 178 | } 179 | } 180 | if (ret != String.Empty) { 181 | break; 182 | } 183 | } 184 | return ret; 185 | } 186 | // Set a parameter value 187 | public bool SetParameterValue(string pName, string pVal) { 188 | var ret = false; 189 | foreach (FieldInfo fi in this.GetType().GetFields()) { 190 | foreach (Attribute attr in Attribute.GetCustomAttributes(fi)) { 191 | ConfigParam cp = attr as ConfigParam; 192 | if (cp != null) { 193 | if (cp.name == pName) { 194 | fi.SetValue(this, ParamBlock.ConvertToObj(cp.valueType, pVal)); 195 | ret = true; 196 | break; 197 | } 198 | } 199 | } 200 | if (ret) { 201 | break; 202 | } 203 | } 204 | return ret; 205 | } 206 | // Return a list of all the parameters and their descriptions 207 | public Dictionary ListParameters() { 208 | var ret = new Dictionary(); 209 | foreach (FieldInfo fi in this.GetType().GetFields()) { 210 | foreach (Attribute attr in Attribute.GetCustomAttributes(fi)) { 211 | ConfigParam cp = attr as ConfigParam; 212 | if (cp != null) { 213 | ret.Add(cp.name, cp.desc); 214 | } 215 | } 216 | } 217 | return ret; 218 | } 219 | 220 | public void MergeCommandLine(string[] args) { 221 | MergeCommandLine(args, null, null); 222 | } 223 | 224 | // Given parameters from the command line, read the parameters and set values specified 225 | // array of command line tokens 226 | // if 'true' presume the first token in the parameter line 227 | // is a special value that should be assigned to the keyword "--firstparam". 228 | // if 'true' presume multiple specs at the end of the line 229 | // are filenames and pack them together into a CSV string in LAST_PARAM. 230 | public bool MergeCommandLine(string[] args, string firstOpParameter, string multipleLastParameters) { 231 | bool ret = true; // start out assuming parsing worked 232 | 233 | bool firstOpFlag = false; // no first op 234 | if (!String.IsNullOrEmpty(firstOpParameter)) { 235 | firstOpFlag = true; 236 | } 237 | bool multipleLast = false; 238 | if (!String.IsNullOrEmpty(multipleLastParameters)) { 239 | multipleLast = true; 240 | } 241 | 242 | for (int ii = 0; ii < args.Length; ii++) { 243 | string para = args[ii]; 244 | // is this a parameter? 245 | if (para[0] == '-') { 246 | ii += AddCommandLineParameter(para, (ii==(args.Length-1)) ? null : args[ii + 1]); 247 | } 248 | else { 249 | if (ii == 0 && firstOpFlag) { 250 | // if the first thing is not a parameter, make like it's an op or something 251 | ii += AddCommandLineParameter(firstOpParameter, args[ii + 1]); 252 | } 253 | else { 254 | if (multipleLast) { 255 | // Pack all remaining arguments into a comma-separated list as LAST_PARAM 256 | StringBuilder multFiles = new StringBuilder(); 257 | for (int jj = ii; jj < args.Length; jj++) { 258 | if (multFiles.Length != 0) { 259 | multFiles.Append(","); 260 | } 261 | multFiles.Append(args[jj]); 262 | } 263 | AddCommandLineParameter(multipleLastParameters, multFiles.ToString()); 264 | 265 | // Skip them all 266 | ii = args.Length; 267 | } 268 | else { 269 | throw new ArgumentException("Unknown parameter " + para); 270 | } 271 | } 272 | } 273 | } 274 | 275 | return ret; 276 | } 277 | 278 | // Store the value for the parameter. 279 | // If we accept the value as a good value for the parameter, return 1 else 0. 280 | // A 'good value' is one that does not start with '-' or is not after a boolean parameter. 281 | // Return the number of parameters to advance the parameter line. That means, return 282 | // a zero of we didn't used the next parameter and a 1 if the next parameter 283 | // was used as a value so don't consider it the next parameter. 284 | private int AddCommandLineParameter(string pParm, string val) { 285 | // System.Console.WriteLine(String.Format("AddCommandLineParameter: parm={0}, val={1}", pParm, val)); 286 | int ret = 1; // start off assuming the next token is the value we're setting 287 | string parm = pParm.ToLower(); 288 | // Strip leading hyphens 289 | while (parm[0] == '-') { 290 | parm = parm.Substring(1); 291 | } 292 | 293 | // If the boolean parameter starts with "no", turn it off rather than on. 294 | string positiveAssertion = "true"; 295 | if (parm.Length > 2 && parm[0] == 'n' && parm[1] == 'o') { 296 | string maybeParm = parm.Substring(2); 297 | if (TryGetParameterInfo(parm, out ConfigParam bcp, out FieldInfo bfi)) { 298 | if (bcp.valueType == typeof(Boolean)) { 299 | // The parameter without the 'no' exists and is a boolean 300 | positiveAssertion = "false"; 301 | parm = maybeParm; 302 | } 303 | } 304 | } 305 | 306 | // If the next token starts with a parameter mark, it's not really a value 307 | if (val == null) { 308 | ret = 0; // the next token is not used here to set the value 309 | } 310 | else { 311 | if (val[0] == '-') { 312 | val = null; // don't use the next token as a value 313 | ret = 0; // the next token is not used here to set the value 314 | } 315 | } 316 | 317 | if (TryGetParameterInfo(parm, out ConfigParam cp, out FieldInfo fi)) { 318 | // If the parameter is a boolean type and the next value is not a parameter, 319 | // don't try to take up the next value. 320 | // This handles boolean flags. 321 | // If there is a value next (val != null) and that value is not the 322 | // values 'true' or 'false' or 't' or 'f', then ignore the next value 323 | // as not belonging to this flag. THis allows (and the logic above) 324 | // allows: 325 | // "--flag --otherFlag ...", 326 | // "--flag something ...", 327 | // "--flag true --otherFlag ...", 328 | // "--noflag --otherflag ...", 329 | // etc 330 | if (cp.valueType == typeof(Boolean)) { 331 | if (val != null) { 332 | string valL = val.ToLower(); 333 | if (valL != "true" && valL != "t" && valL != "false" && valL != "f") { 334 | // The value is not associated with this boolean so ignore it 335 | val = null; // don't use the val token 336 | ret = 0; // the next token is not used here to set the value 337 | } 338 | } 339 | if (val == null) { 340 | // If the value is assumed, use the value based on the optional 'no' 341 | val = positiveAssertion; 342 | } 343 | } 344 | // Set the named parameter to the passed value 345 | fi.SetValue(this, ParamBlock.ConvertToObj(cp.valueType, val)); 346 | } 347 | else { 348 | throw new ArgumentException("Unknown parameter " + parm); 349 | } 350 | return ret; 351 | } 352 | } 353 | } 354 | -------------------------------------------------------------------------------- /convoar/ConvoarStats.cs: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (c) 2016 Robert Adams 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | using System; 18 | using System.Text; 19 | using System.Collections.Generic; 20 | 21 | using log4net; 22 | 23 | using OpenSim.Region.Framework.Scenes; 24 | 25 | using OMV = OpenMetaverse; 26 | using OMVR = OpenMetaverse.Rendering; 27 | 28 | namespace org.herbal3d.convoar { 29 | public class ConvoarStats { 30 | 31 | public int numSimplePrims = 0; 32 | public int numMeshAssets = 0; 33 | public int numSculpties = 0; 34 | 35 | 36 | public Scene m_scene; 37 | #pragma warning disable 414 38 | private static readonly string _logHeader = "[Stats]"; 39 | #pragma warning restore 414 40 | 41 | public ConvoarStats() { 42 | } 43 | 44 | /* TODO: figure out what statistics are wanted 45 | // Gather statistics 46 | public void ExtractStatistics(BasilModule.ReorganizedScene reorgScene) { 47 | staticStats = StatsFromEntityGroupList("static", reorgScene.staticEntities); 48 | nonStaticStats = StatsFromEntityGroupList("nonStatic", reorgScene.nonStaticEntities); 49 | rebuiltStats = StatsFromEntityGroupList("rebuilt", reorgScene.rebuiltFaceEntities); 50 | rebuiltNonStaticStats = StatsFromEntityGroupList("rebuiltNonStatic", reorgScene.rebuiltNonStaticEntities); 51 | } 52 | */ 53 | 54 | /* 55 | public class EntityGroupStats { 56 | public int numEntities = 0; 57 | public int numMeshes = 0; 58 | public int numLinksets = 0; 59 | public int numIndices = 0; 60 | public int numVertices = 0; 61 | public int numMaterials = 0; 62 | public int numTextures = 0; 63 | } 64 | 65 | EntityGroupStats staticStats = null; 66 | EntityGroupStats nonStaticStats = null; 67 | EntityGroupStats rebuiltStats = null; 68 | EntityGroupStats rebuiltNonStaticStats = null; 69 | 70 | 71 | public EntityGroupStats StatsFromEntityGroupList(string listName, EntityGroupList entityList) { 72 | EntityGroupStats egs = new EntityGroupStats(); 73 | try { 74 | List TEFs = new List(); 75 | List TEXs = new List(); 76 | egs.numEntities = entityList.Count; 77 | entityList.ForEach(entity => { 78 | if (entity.Count > 1) { 79 | egs.numLinksets++; 80 | } 81 | entity.ForEach(epg => { 82 | var ep = epg.primaryExtendePrim; 83 | egs.numMeshes += ep.faces.Count; 84 | foreach (FaceInfo fi in ep.faces) { 85 | egs.numIndices += fi.indices.Count; 86 | egs.numVertices += fi.vertexs.Count; 87 | if (!TEFs.Contains(fi.textureEntry)) { 88 | TEFs.Add(fi.textureEntry); 89 | } 90 | if (fi.textureID != null && !TEXs.Contains((OMV.UUID)fi.textureID)) { 91 | TEXs.Add((OMV.UUID)fi.textureID); 92 | } 93 | } 94 | }); 95 | }); 96 | egs.numMaterials = TEFs.Count; 97 | egs.numTextures = TEXs.Count; 98 | } 99 | catch (Exception e) { 100 | m_log.ErrorFormat("{0}: Exception computing {1} stats: {2}", "StatsFromEntityGroupList", listName, e); 101 | } 102 | 103 | return egs; 104 | } 105 | 106 | 107 | // Output the non entitiy list info 108 | public void Log(string header) { 109 | m_log.DebugFormat("{0} numSimplePrims={1}", header, numSimplePrims); 110 | m_log.DebugFormat("{0} numSculpties={1}", header, numSculpties); 111 | m_log.DebugFormat("{0} numMeshAssets={1}", header, numMeshAssets); 112 | } 113 | 114 | public void Log(EntityGroupStats stats, string header) { 115 | m_log.DebugFormat("{0} numEntities={1}", header, stats.numEntities); 116 | m_log.DebugFormat("{0} numMeshes={1}", header, stats.numMeshes); 117 | m_log.DebugFormat("{0} numLinksets={1}", header, stats.numLinksets); 118 | m_log.DebugFormat("{0} numIndices={1}", header, stats.numIndices); 119 | m_log.DebugFormat("{0} numVertices={1}", header, stats.numVertices); 120 | m_log.DebugFormat("{0} numMaterials={1}", header, stats.numMaterials); 121 | m_log.DebugFormat("{0} numTextures={1}", header, stats.numTextures); 122 | } 123 | 124 | public void LogAll(string header) { 125 | Log(header + " " + m_scene.Name); 126 | 127 | if (staticStats != null) { 128 | Log(staticStats, header + " " + m_scene.Name + " static"); 129 | } 130 | if (nonStaticStats != null) { 131 | Log(nonStaticStats, header + " " + m_scene.Name + " nonStatic"); 132 | } 133 | if (rebuiltStats != null) { 134 | Log(rebuiltStats, header + " " + m_scene.Name + " rebuilt"); 135 | } 136 | if (rebuiltNonStaticStats != null) { 137 | Log(rebuiltNonStaticStats, header + " " + m_scene.Name + " rebuiltNonStatic"); 138 | } 139 | } 140 | 141 | private const int indentStep = 2; 142 | private string MI(int indent) { // short for "MakeIndent" 143 | return _logHeader + " ".Substring(0, indent * indentStep); 144 | } 145 | public void DumpDetailed(EntityGroupList egl) { 146 | DumpDetailed(1, egl); 147 | } 148 | public void DumpDetailed(int indent, EntityGroupList egl) { 149 | m_log.Debug(MI(indent) + "EntityGroupList. Num entities=" + egl.Count); 150 | egl.ForEach(eg => { 151 | DumpDetailed(indent+1, eg); 152 | }); 153 | } 154 | public void DumpDetailed(int indent, EntityGroup eg) { 155 | m_log.Debug(MI(indent) + "EntityGroup. NumExtendedPrims=" + eg.Count); 156 | eg.ForEach(epg => { 157 | DumpDetailed(indent+1, epg); 158 | }); 159 | } 160 | public void DumpDetailed(int indent, ExtendedPrimGroup epg) { 161 | m_log.Debug(MI(indent) + "ExtendedPrimGroup"); 162 | foreach (PrimGroupType lodKey in epg.Keys) { 163 | DumpDetailed(indent+1, lodKey, epg[lodKey]); 164 | } 165 | } 166 | public void DumpDetailed(int indent, PrimGroupType lodKey, ExtendedPrim ep) { 167 | m_log.Debug(MI(indent) + "LOD=" + lodKey); 168 | DumpDetailed(indent+1, ep); 169 | } 170 | public void DumpDetailed(int indent, ExtendedPrim ep) { 171 | var name = ep.fromOS.SOG == null ? "TERRAIN" : ep.fromOS.SOG.Name; 172 | m_log.Debug(MI(indent) + "name=" + name); 173 | StringBuilder buff = new StringBuilder(); 174 | buff.Append(MI(indent) + "faces=" + ep.faces.Count); 175 | foreach (FaceInfo face in ep.faces) { 176 | buff.Append("("); 177 | buff.Append(face.vertexs.Count.ToString()); 178 | buff.Append("/"); 179 | buff.Append(face.indices.Count.ToString()); 180 | buff.Append("/"); 181 | var hash = face.textureEntry == null ? 0 : face.GetTextureHash(); 182 | buff.Append(hash.ToString()); 183 | if (face.textureID != null 184 | && face.textureID != OMV.UUID.Zero 185 | && face.textureID != OMV.Primitive.TextureEntry.WHITE_TEXTURE) { 186 | buff.Append("T"); 187 | } 188 | buff.Append(") "); 189 | } 190 | m_log.Debug(buff.ToString()); 191 | } 192 | */ 193 | } 194 | } 195 | -------------------------------------------------------------------------------- /convoar/ConvoarTests.cs: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (c) 2016 Robert Adams 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | using System; 18 | using System.Collections.Generic; 19 | using System.Linq; 20 | using System.Text; 21 | using System.Threading.Tasks; 22 | 23 | using OpenSim.Region.Framework.Scenes; 24 | 25 | using org.herbal3d.cs.CommonEntities; 26 | using org.herbal3d.cs.CommonUtil; 27 | 28 | using OMV = OpenMetaverse; 29 | using OMVR = OpenMetaverse.Rendering; 30 | 31 | using org.herbal3d.convoar; 32 | 33 | using NUnit.Framework; 34 | 35 | namespace org.herbal3d.convoar.tests { 36 | 37 | [TestFixture] 38 | public class ConvoarTestCase { 39 | // Documentation on attributes: http://www.nunit.org/index.php?p=attributes&r=2.6.1 40 | // Documentation on assertions: http://www.nunit.org/index.php?p=assertions&r=2.6.1 41 | 42 | [SetUp] 43 | public virtual void Setup() { 44 | } 45 | } 46 | 47 | // ========================================================================================= 48 | [TestFixture] 49 | public class ParameterParsing : ConvoarTestCase { 50 | 51 | ConvoarParams _params; 52 | BLogger _log; 53 | 54 | [TestFixtureSetUp] 55 | public void Init() { 56 | _log = new BLoggerConsole(); 57 | _params = new ConvoarParams(); 58 | ConvOAR.Globals = new GlobalContext() { 59 | log = _log, 60 | parms = _params 61 | }; 62 | } 63 | 64 | [TestFixtureTearDown] 65 | public void TearDown() { 66 | } 67 | 68 | [TestCase] 69 | public void ProcessArgsParameter() { 70 | bool oldExportTextures = _params.ExportTextures; 71 | string inputOARFileParameterName = "InputOAR"; 72 | string inputOARFile = "AnOARFileToRead.oar"; 73 | string outputDirectory = "this/that"; 74 | string[] args = new string[] { 75 | "-d", outputDirectory, 76 | "--exporttextures", 77 | "--preferredTextureFormat", "GIF", 78 | "--mergeStaticMeshes", 79 | "--verticesmaxForBuffer", "1234", 80 | inputOARFile 81 | }; 82 | _params.SetParameterValue("ExportTextures", "false"); 83 | _params.SetParameterValue("MergeStaticMeshes", "false"); 84 | 85 | Exception exceptionCode = null; 86 | try { 87 | _params.MergeCommandLine(args, null, inputOARFileParameterName); 88 | } 89 | catch (Exception e) { 90 | exceptionCode = e; 91 | } 92 | 93 | if (exceptionCode != null) { 94 | Assert.Fail("Exception merging parameters: " + exceptionCode.ToString()); 95 | } 96 | else { 97 | Assert.AreEqual(outputDirectory, _params.OutputDir, "Output directory specification short form was not set"); 98 | Assert.AreEqual(true, _params.ExportTextures, "ExportTextures was not parameterized properly"); 99 | Assert.AreEqual("GIF", _params.PreferredTextureFormat, "Preferred texture format was not set"); 100 | // Assert.AreEqual(true, _params.MergeStaticMeshes, "MergeStaticMeshes was not set"); 101 | Assert.AreEqual(1234, _params.VerticesMaxForBuffer, "VerticesMaxForBuffer was not set"); 102 | // Assert.AreEqual(inputOARFile, InputOAR, "The trailing filename was not set"); 103 | } 104 | } 105 | 106 | [TestCase] 107 | public void ProcessNoParameter() { 108 | string outputDirectory = "this/that"; 109 | string[] args = new string[] { 110 | "-d", outputDirectory, 111 | "--noExportTextures", 112 | "--preferredTextureFormat", "GIF", 113 | }; 114 | _params.SetParameterValue("ExportTextures", "true"); 115 | 116 | Exception exceptionCode = null; 117 | try { 118 | _params.MergeCommandLine(args); 119 | } 120 | catch (Exception e) { 121 | exceptionCode = e; 122 | } 123 | 124 | if (exceptionCode != null) { 125 | Assert.Fail("Exception merging parameters: " + exceptionCode.ToString()); 126 | } 127 | else { 128 | Assert.AreEqual(false, _params.ExportTextures, "ExportTextures was not set to false"); 129 | } 130 | } 131 | } 132 | 133 | // ========================================================================================= 134 | // Verify that terrain mesh is generated across the whole region area. 135 | [TestFixture] 136 | public class TerrainMeshGeneration : ConvoarTestCase { 137 | 138 | ConvoarParams _params; 139 | BLogger _log; 140 | MemAssetService _assetService; 141 | private AssetManager _assetManager = null; 142 | private OarConverter _converter = null; 143 | private OMV.Primitive.TextureEntryFace _defaultTexture = null; 144 | Scene _scene; 145 | 146 | [TestFixtureSetUp] 147 | public void Init() { 148 | _log = new BLoggerConsole(); 149 | _params = new ConvoarParams(); 150 | ConvOAR.Globals = new GlobalContext() { 151 | log = _log, 152 | parms = _params 153 | }; 154 | _assetService = new MemAssetService(); 155 | _converter = new OarConverter(_log, _params); 156 | _scene = _converter.CreateScene(_assetService, "convoar-test"); 157 | _assetManager = new AssetManager(_assetService, _log, _params.OutputDir); 158 | OMV.UUID defaultTextureID = new OMV.UUID("179cdabd-398a-9b6b-1391-4dc333ba321f"); 159 | _defaultTexture = new OMV.Primitive.TextureEntryFace(null) { 160 | TextureID = defaultTextureID 161 | }; 162 | } 163 | 164 | [TestFixtureTearDown] 165 | public void TearDown() { 166 | _scene.Close(); 167 | _assetManager.Dispose(); 168 | _assetService.Dispose(); 169 | } 170 | 171 | [TestCase] 172 | public void VerifyHeightmapMatchesMesh() { 173 | } 174 | 175 | [TestCase(100, 200)] 176 | public async void VerifyMeshCoversWholeRegion(int heightmapSize, int regionSize) { 177 | float[,] heightMap = CreateHeightmap(heightmapSize); 178 | PrimToMesh mesher = new PrimToMesh(_log, new BConverterOSParams() { 179 | addTerrainMesh = false, 180 | displayTimeScaling = false, 181 | doubleSided = false, 182 | logBuilding = false, 183 | }); 184 | DisplayableRenderable dr = await mesher.MeshFromHeightMap(heightMap, regionSize, regionSize, 185 | _assetManager, _defaultTexture); 186 | RenderableMeshGroup rmg = dr as RenderableMeshGroup; 187 | Assert.IsTrue(rmg != null, "MeshFromHeightMap did not return a RenderableMeshGroup"); 188 | Assert.AreEqual(rmg.meshes.Count, 1, "MeshFromHeightMap returned more than one mesh"); 189 | } 190 | 191 | // Creates a heightmap of specificed size with a simple gradient from on corner to the 192 | // opposite corner. 193 | private float[,] CreateHeightmap(int pHeightmapSize) { 194 | float[,] heightmap = new float[pHeightmapSize, pHeightmapSize]; 195 | int xSize = heightmap.GetLength(0); 196 | int ySize = heightmap.GetLength(1); 197 | float xStep = 1.0f / (float)xSize; 198 | float yStep = 1.0f / (float)ySize; 199 | for (int xx = 0; xx < xSize; xx++) { 200 | for (int yy = 0; yy < ySize; yy++) { 201 | heightmap[xx, yy] = (xStep * (float)xx) + (yStep * (float)yy); 202 | } 203 | } 204 | return heightmap; 205 | } 206 | } 207 | 208 | // ========================================================================================= 209 | // Test the operations of BHasher and BHash. 210 | [TestFixture] 211 | public class BHasherTests : ConvoarTestCase { 212 | 213 | [TestFixtureSetUp] 214 | public void Init() { 215 | } 216 | 217 | [TestFixtureTearDown] 218 | public void TearDown() { 219 | } 220 | 221 | [TestCase(Result = 8511673652397437578L)] 222 | public ulong BHasherMdjb2TestParams() { 223 | BHasher hasher = new BHasherMdjb2(); 224 | hasher.Add('c'); 225 | hasher.Add((ushort)6); 226 | hasher.Add((int)12345); 227 | hasher.Add(-2345L); 228 | byte[] byt = Encoding.ASCII.GetBytes("This is a string"); 229 | hasher.Add(byt, 0, byt.Length); 230 | BHash hash = hasher.Finish(); 231 | // System.Console.WriteLine("BHasher hash output = " + hash.ToString()); 232 | return hash.ToULong(); 233 | } 234 | 235 | [TestCase("This is a string", Result = "1036731341136637329")] 236 | [TestCase("A long string which is much longer than we are willing to test", Result = "6489722179198911432")] 237 | [TestCase("A string witA one difference", Result = "254346540298589279")] 238 | [TestCase("A string witB one difference", Result = "5728349923385932352")] 239 | [TestCase("A string witC one difference", Result = "11202353306473275425")] 240 | public string BHasherMdjb2Test(string toHash) { 241 | BHasher hasher = new BHasherMdjb2(); 242 | byte[] byt = Encoding.ASCII.GetBytes(toHash); 243 | hasher.Add(byt, 0, byt.Length); 244 | BHash hash = hasher.Finish(); 245 | // System.Console.WriteLine("BHasherMdjb2 hash output = " + hash.ToString()); 246 | return hash.ToString(); 247 | } 248 | 249 | [TestCase("This is a string", Result = "41FB5B5AE4D57C5EE528ADB00E5E8E74")] 250 | [TestCase("A long string which is much longer than we are willing to test", Result = "7DA9312B687AEF9E776DD9F441254437")] 251 | [TestCase("A string witA one difference", Result = "D3E5DC1272277204DEC8B8009AC31CE7")] 252 | [TestCase("A string witB one difference", Result = "AF4F00FE82C49DA99623911BA79B61A4")] 253 | [TestCase("A string witC one difference", Result = "B7954F90F15DBEB6EE4974F38895D8C8")] 254 | public string BHasherMD5Test(string toHash) { 255 | BHasher hasher = new BHasherMD5(); 256 | byte[] byt = Encoding.ASCII.GetBytes(toHash); 257 | hasher.Add(byt, 0, byt.Length); 258 | BHash hash = hasher.Finish(); 259 | System.Console.WriteLine("BHasherMD5 hash output = " + hash.ToString()); 260 | return hash.ToString(); 261 | } 262 | 263 | [TestCase("This is a string", Result = "4E9518575422C9087396887CE20477AB5F550A4AA3D161C5C22A996B0ABB8B35")] 264 | [TestCase("A long string which is much longer than we are willing to test", Result = "312BB2AFFEF9E276C83C30342A742CD05CE51BDB7E15DB5209B3CCADDBBDF3B5")] 265 | [TestCase("A string witA one difference", Result = "D0E312AC7CA43B85822A95ADB1D12014EF5DE6B66F4F7A4905078941BB0C27C1")] 266 | [TestCase("A string witB one difference", Result = "59129922BEBED4D0F9EBF1C450D77C3C3600D6535E0F6E39CB270898A3865369")] 267 | [TestCase("A string witC one difference", Result = "D260E15C2F3251F1D8AD037418B39311BBE2AA828E914415408A3E60F0AC84EF")] 268 | public string BHasherSHA256Test(string toHash) { 269 | BHasher hasher = new BHasherSHA256(); 270 | byte[] byt = Encoding.ASCII.GetBytes(toHash); 271 | hasher.Add(byt, 0, byt.Length); 272 | BHash hash = hasher.Finish(); 273 | System.Console.WriteLine("BHasherSHA256 hash output = " + hash.ToString()); 274 | return hash.ToString(); 275 | } 276 | 277 | // Test that passing the hashing input in parts is the same as passing it all at once. 278 | [TestCase] 279 | public void BHasherParameterParts() { 280 | byte[] testBytes = new byte[100]; 281 | Random rand = new Random(); 282 | rand.NextBytes(testBytes); 283 | BHasher hasher1 = new BHasherMdjb2(); 284 | BHasher hasher2 = new BHasherMdjb2(); 285 | TestHasher("Mdjb2", hasher1, hasher2, testBytes); 286 | hasher1 = new BHasherMD5(); 287 | hasher2 = new BHasherMD5(); 288 | TestHasher("MD5", hasher1, hasher2, testBytes); 289 | hasher1 = new BHasherSHA256(); 290 | hasher2 = new BHasherSHA256(); 291 | TestHasher("SHA256", hasher1, hasher2, testBytes); 292 | } 293 | 294 | private void TestHasher(string name, BHasher hasher1, BHasher hasher2, byte[] testBytes) { 295 | hasher1.Add(testBytes, 0, testBytes.Length); 296 | BHash hash1 = hasher1.Finish(); 297 | hasher2.Add(testBytes[0]); 298 | hasher2.Add(testBytes, 1, 10); 299 | hasher2.Add(testBytes[11]); 300 | hasher2.Add(testBytes, 12, testBytes.Length - 12); 301 | BHash hash2 = hasher2.Finish(); 302 | Assert.AreEqual(hash1.ToString(), hash2.ToString(), "Adding bytes in different order gave different results in " + name); 303 | } 304 | } 305 | 306 | // ========================================================================================= 307 | // Test the operations of PersistRules 308 | [TestFixture] 309 | public class PersistRulesTest : ConvoarTestCase { 310 | 311 | [TestFixtureSetUp] 312 | public void Init() { 313 | } 314 | 315 | [TestFixtureTearDown] 316 | public void TearDown() { 317 | } 318 | } 319 | // ========================================================================================= 320 | // Test whether the coordinates and child rotations happen properly when 321 | // converting linksets. 322 | [TestFixture] 323 | public class LinksetToEntity : ConvoarTestCase { 324 | 325 | [TestFixtureSetUp] 326 | public void Init() { 327 | } 328 | 329 | [TestFixtureTearDown] 330 | public void TearDown() { 331 | } 332 | } 333 | 334 | } 335 | -------------------------------------------------------------------------------- /convoar/NullUserAccountService.cs: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (c) 2017 Robert Adams 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | using System; 17 | using System.Collections.Generic; 18 | using System.Linq; 19 | using System.Text; 20 | using System.Threading.Tasks; 21 | using OpenMetaverse; 22 | using OpenSim.Services.Interfaces; 23 | 24 | namespace org.herbal3d.convoar { 25 | // A dummy class used to fool OpenSimulator routines that there is a real user account service 26 | class NullUserAccountService : IUserAccountService 27 | { 28 | public UserAccount GetUserAccount(UUID scopeID, UUID userID) { 29 | UserAccount ua = new UserAccount(scopeID, userID, "firstname", "lastname", "firstname.lastname@example.com"); 30 | return ua; 31 | } 32 | 33 | public UserAccount GetUserAccount(UUID scopeID, string FirstName, string LastName) { 34 | UserAccount ua = new UserAccount(scopeID, FirstName, LastName, "firstname.lastname@example.com"); 35 | return ua; 36 | } 37 | 38 | public UserAccount GetUserAccount(UUID scopeID, string Email) { 39 | UserAccount ua = new UserAccount(scopeID, "firstname", "lastname", Email); 40 | return ua; 41 | } 42 | 43 | public List GetUserAccounts(UUID scopeID, string query) { 44 | UserAccount ua = new UserAccount(scopeID, "firstname", "lastname", "firstname.lastname@example.com"); 45 | return new List() { ua } ; 46 | } 47 | 48 | public List GetUserAccounts(UUID scopeID, List IDs) { 49 | UserAccount ua = new UserAccount(scopeID, "firstname", "lastname", "firstname.lastname@example.com"); 50 | return new List() { ua } ; 51 | throw new NotImplementedException(); 52 | } 53 | 54 | public List GetUserAccountsWhere(UUID scopeID, string where) { 55 | throw new NotImplementedException(); 56 | } 57 | 58 | public void InvalidateCache(UUID userID) { 59 | throw new NotImplementedException(); 60 | } 61 | 62 | public bool StoreUserAccount(UserAccount data) { 63 | throw new NotImplementedException(); 64 | } 65 | } 66 | } 67 | -------------------------------------------------------------------------------- /convoar/OarConverter.cs: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (c) 2017 Robert Adams 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | using System; 18 | using System.Collections.Generic; 19 | using System.Linq; 20 | using System.IO; 21 | using System.Reflection; 22 | using System.Text; 23 | using System.Threading.Tasks; 24 | using System.Xml; 25 | 26 | using OpenSim.Framework; 27 | using OpenSim.Services.Interfaces; 28 | using OpenSim.Region.CoreModules; 29 | using OpenSim.Region.CoreModules.World.Serialiser; 30 | using OpenSim.Region.Framework.Interfaces; 31 | using OpenSim.Region.Framework.Scenes; 32 | using OpenSim.Region.CoreModules.World.Terrain; 33 | using OpenSim.Region.CoreModules.World.Archiver; 34 | using OpenSim.Region.PhysicsModule.BasicPhysics; 35 | using OpenSim.Region.PhysicsModules.SharedBase; 36 | using OpenSim.Tests.Common; 37 | using OpenSim.Data.Null; 38 | 39 | using org.herbal3d.cs.CommonEntities; 40 | using org.herbal3d.cs.CommonUtil; 41 | 42 | using OMV = OpenMetaverse; 43 | using OMVS = OpenMetaverse.StructuredData; 44 | using OMVA = OpenMetaverse.Assets; 45 | using OMVR = OpenMetaverse.Rendering; 46 | 47 | 48 | namespace org.herbal3d.convoar { 49 | // Convert things from OpenSimulator to Instances and Displayables things 50 | public class OarConverter { 51 | // private static readonly string _logHeader = "[OarConverter]"; 52 | 53 | private readonly BLogger _log; 54 | private readonly ConvoarParams _params; 55 | private readonly BConverterOS _converter; 56 | 57 | public OarConverter(BLogger pLog, ConvoarParams pParams) { 58 | _log = pLog; 59 | _params = pParams; 60 | _converter = new BConverterOS(_log, new BConverterOSParams() { 61 | addTerrainMesh = _params.AddTerrainMesh, 62 | displayTimeScaling = _params.DisplayTimeScaling, 63 | doubleSided = _params.DoubleSided, 64 | logBuilding = _params.LogBuilding, 65 | convoarId = _params.ConvoarID 66 | }); 67 | 68 | } 69 | 70 | public async Task ConvertOarToScene(IAssetService assetService, AssetManager assetManager) { 71 | 72 | // Assemble all the parameters that loadoar takes and uses 73 | Dictionary options = new Dictionary { 74 | // options.Add("merge", false); 75 | { "displacement", _params.Displacement } 76 | }; 77 | //if (optRotation != null) options.Add("rotation", float.Parse(optRotation, System.Threading.Thread.CurrentThread.CurrentCulture)); 78 | if (_params.Rotation != 0) options.Add("rotation", _params.Rotation); 79 | // options.Add("default-user", OMV.UUID.Random()); 80 | // if (optSkipAssets != null) options.Add('skipAssets', true); 81 | // if (optForceTerrain != null) options.Add("force-terrain", true); 82 | // if (optNoObjects != null) options.Add("no-objects", true); 83 | string optSubRegion = _params.SubRegion; 84 | if (optSubRegion != null) { 85 | List bounds = optSubRegion.Split(',').Select(x => { return float.Parse(x); }).ToList(); 86 | options.Add("bounding-origin", new OMV.Vector3(bounds[0], bounds[1], bounds[2])); 87 | options.Add("bounding-size", new OMV.Vector3(bounds[3] - bounds[0], bounds[4] - bounds[1], bounds[5] - bounds[2])); 88 | } 89 | 90 | // Create an OpenSimulator region and scene to load the OAR into 91 | string regionName = "convoar"; 92 | if (String.IsNullOrEmpty(_params.RegionName)) { 93 | // Try to build the region name from the OAR filesname 94 | regionName = Path.GetFileNameWithoutExtension(_params.InputOAR); 95 | } 96 | else { 97 | regionName = _params.RegionName; 98 | } 99 | Scene scene = CreateScene(assetService, regionName); 100 | 101 | // Load the archive into our scene 102 | ArchiveReadRequest archive = new ArchiveReadRequest(scene, _params.InputOAR, Guid.Empty, options); 103 | archive.DearchiveRegion(false); 104 | 105 | return await _converter.ConvertRegionToBScene(scene, assetManager); 106 | } 107 | 108 | // Create an OpenSimulator Scene and add enough auxillery services and objects 109 | // to it so it will allow the loading of assets. 110 | public Scene CreateScene(IAssetService memAssetService, string regionName) { 111 | var estateSettings = new EstateSettings { 112 | EstateOwner = OMV.UUID.Random() 113 | }; 114 | RegionInfo regionInfo = new RegionInfo(0, 0, null, regionName) { 115 | RegionName = regionName, 116 | RegionSizeX = Constants.RegionSize, 117 | RegionSizeY = Constants.RegionSize, 118 | RegionID = OMV.UUID.Random(), 119 | EstateSettings = estateSettings 120 | }; 121 | 122 | Scene scene = new Scene(regionInfo); 123 | 124 | // Add an in-memory asset service for all the loaded assets to go into 125 | scene.RegisterModuleInterface(memAssetService); 126 | 127 | ISimulationDataService simulationDataService = new NullDataService(); 128 | scene.RegisterModuleInterface(simulationDataService); 129 | 130 | IRegionSerialiserModule serializerModule = new SerialiserModule(); 131 | scene.RegisterModuleInterface(serializerModule); 132 | 133 | IUserAccountService userAccountService = new NullUserAccountService(); 134 | scene.RegisterModuleInterface(userAccountService); 135 | 136 | PhysicsScene physScene = CreateSimplePhysicsEngine(); 137 | ((INonSharedRegionModule)physScene).AddRegion(scene); 138 | ((INonSharedRegionModule)physScene).RegionLoaded(scene); 139 | scene.PhysicsScene = physScene; 140 | 141 | scene.LandChannel = new TestLandChannel(scene); // simple land with no parcels 142 | Nini.Config.IConfigSource config = new Nini.Config.IniConfigSource(); 143 | config.AddConfig("Terrain"); 144 | config.Configs["Terrain"].Set("InitialTerrain", "flat"); 145 | var terrainModule = new TerrainModule(); 146 | try { 147 | terrainModule.Initialise(config); 148 | terrainModule.AddRegion(scene); 149 | } 150 | catch (ReflectionTypeLoadException e) { 151 | // The terrain module loads terrain brushes and they might not all have been included 152 | StringBuilder sb = new StringBuilder(); 153 | foreach (Exception exSub in e.LoaderExceptions) { 154 | sb.AppendLine(exSub.Message); 155 | if (exSub is FileNotFoundException exFileNotFound) { 156 | if (!string.IsNullOrEmpty(exFileNotFound.FusionLog)) { 157 | sb.AppendLine("Fusion Log:"); 158 | sb.AppendLine(exFileNotFound.FusionLog); 159 | } 160 | } 161 | sb.AppendLine(); 162 | } 163 | string errorMessage = sb.ToString(); 164 | _log.Error("BConverterOS.CreateScene: exception adding region:"); 165 | _log.Error(errorMessage); 166 | } 167 | catch (Exception e) { 168 | _log.Error("BConverterOS.CreateScene: exception adding region: {0}", e); 169 | } 170 | 171 | SceneManager.Instance.Add(scene); 172 | 173 | return scene; 174 | } 175 | 176 | public PhysicsScene CreateSimplePhysicsEngine() { 177 | Nini.Config.IConfigSource config = new Nini.Config.IniConfigSource(); 178 | config.AddConfig("Startup"); 179 | config.Configs["Startup"].Set("physics", "basicphysics"); 180 | 181 | PhysicsScene pScene = new BasicScene(); 182 | INonSharedRegionModule mod = pScene as INonSharedRegionModule; 183 | mod.Initialise(config); 184 | 185 | return pScene; 186 | } 187 | 188 | public void LogBProgress(string msg, params Object[] args) { 189 | if (_params.LogBuilding) { 190 | _log.Debug(msg, args); 191 | } 192 | } 193 | } 194 | } 195 | -------------------------------------------------------------------------------- /convoar/ParameterParsing.cs: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (c) 2017 Robert Adams 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | // Derived from DSGLogToolkit, BSD 3-clause license. 18 | // Copyright (c) 2013 Intel Corporation. All rights reserved. 19 | 20 | using System; 21 | using System.Collections.Generic; 22 | using System.Text; 23 | 24 | namespace org.herbal3d.convoar { 25 | 26 | public static class ParameterParse { 27 | 28 | public const string FIRST_PARAM = "--firstParameter"; 29 | public const string LAST_PARAM = "--lastParameter"; 30 | public const string ERROR_PARAM = "--errorParameter"; 31 | 32 | // ================================================================ 33 | /// 34 | /// Given the array of command line arguments, create a dictionary of the parameter 35 | /// keyword to values. If there is no value for a parameter keyword, the value of 36 | /// 'null' is stored. 37 | /// Command line keywords begin with "-" or "--". Anything else is presumed to be 38 | /// a value. 39 | /// 40 | /// array of command line tokens 41 | /// if 'true' presume the first token in the parameter line 42 | /// is a special value that should be assigned to the keyword "--firstparam". 43 | /// if 'true' presume multiple specs at the end of the line 44 | /// are filenames and pack them together into a CSV string in LAST_PARAM. 45 | /// 46 | public static Dictionary ParseArguments(string[] args, bool firstOpFlag, bool multipleFiles) { 47 | Dictionary m_params = new Dictionary(); 48 | 49 | for (int ii = 0; ii < args.Length; ii++) { 50 | string para = args[ii]; 51 | // is this a parameter? 52 | if (para[0] == '-') { 53 | // is the next one a parameter? 54 | if (ii == (args.Length - 1) || args[ii + 1][0] == '-') { 55 | // two parameters in a row. this must be a toggle parameter 56 | m_params.Add(para, null); 57 | } 58 | else { 59 | // looks like a parameter followed by a value 60 | m_params.Add(para, args[ii + 1]); 61 | ii++; // skip the value we just added to the dictionary 62 | } 63 | } 64 | else { 65 | if (ii == 0 && firstOpFlag) { 66 | // if the first thing is not a parameter, make like it's an op or something 67 | m_params.Add(FIRST_PARAM, para); 68 | } 69 | else { 70 | if (multipleFiles) { 71 | // Pack all remaining arguments into a comma-separated list as LAST_PARAM 72 | StringBuilder multFiles = new StringBuilder(); 73 | for (int jj = ii; jj < args.Length; jj++) { 74 | if (multFiles.Length != 0) { 75 | multFiles.Append(","); 76 | } 77 | multFiles.Append(args[jj]); 78 | } 79 | m_params.Add(LAST_PARAM, multFiles.ToString()); 80 | 81 | // Skip them all 82 | ii = args.Length; 83 | } 84 | else { 85 | // This token is not a keyword. If it's the last thing, place it 86 | // into the dictionary as the last parameter. Otherwise an error. 87 | if (ii == args.Length - 1) { 88 | m_params.Add(LAST_PARAM, para); 89 | } 90 | else { 91 | // something is wrong with the format of the parameters 92 | m_params.Add(ERROR_PARAM, "Unknown parameter " + para); 93 | } 94 | } 95 | } 96 | } 97 | } 98 | return m_params; 99 | } 100 | } 101 | } 102 | -------------------------------------------------------------------------------- /convoar/Properties/AssemblyInfo.cs: -------------------------------------------------------------------------------- 1 | using System.Reflection; 2 | using System.Runtime.CompilerServices; 3 | using System.Runtime.InteropServices; 4 | 5 | // General Information about an assembly is controlled through the following 6 | // set of attributes. Change these attribute values to modify the information 7 | // associated with an assembly. 8 | [assembly: AssemblyTitle("convoar")] 9 | [assembly: AssemblyDescription("Convert OpenSimulator OAR files to GLTF scene files")] 10 | [assembly: AssemblyConfiguration("")] 11 | [assembly: AssemblyCompany("")] 12 | [assembly: AssemblyProduct("convoar")] 13 | [assembly: AssemblyCopyright("Copyright © 2022")] 14 | [assembly: AssemblyTrademark("")] 15 | [assembly: AssemblyCulture("")] 16 | 17 | // Setting ComVisible to false makes the types in this assembly not visible 18 | // to COM components. If you need to access a type in this assembly from 19 | // COM, set the ComVisible attribute to true on that type. 20 | [assembly: ComVisible(false)] 21 | 22 | // The following GUID is for the ID of the typelib if this project is exposed to COM 23 | [assembly: Guid("bd9942a1-315c-4961-b56a-d1770bed83b0")] 24 | 25 | // Version information for an assembly consists of the following four values: 26 | // 27 | // Major Version 28 | // Minor Version 29 | // Build Number 30 | // Revision 31 | // 32 | // You can specify all the values or you can default the Build and Revision Numbers 33 | // by using the '*' as shown below: 34 | // [assembly: AssemblyVersion("1.0.*")] 35 | [assembly: AssemblyVersion("2.0.6.0")] 36 | [assembly: AssemblyFileVersion("2.0.6.0")] 37 | 38 | [assembly: log4net.Config.XmlConfigurator(Watch = true)] 39 | 40 | -------------------------------------------------------------------------------- /convoar/Properties/Resources.Designer.cs: -------------------------------------------------------------------------------- 1 | //------------------------------------------------------------------------------ 2 | // 3 | // This code was generated by a tool. 4 | // Runtime Version:4.0.30319.42000 5 | // 6 | // Changes to this file may cause incorrect behavior and will be lost if 7 | // the code is regenerated. 8 | // 9 | //------------------------------------------------------------------------------ 10 | 11 | namespace org.herbal3d.convoar.Properties { 12 | using System; 13 | 14 | 15 | /// 16 | /// A strongly-typed resource class, for looking up localized strings, etc. 17 | /// 18 | // This class was auto-generated by the StronglyTypedResourceBuilder 19 | // class via a tool like ResGen or Visual Studio. 20 | // To add or remove a member, edit your .ResX file then rerun ResGen 21 | // with the /str option, or rebuild your VS project. 22 | [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "17.0.0.0")] 23 | [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] 24 | [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] 25 | internal class Resources { 26 | 27 | private static global::System.Resources.ResourceManager resourceMan; 28 | 29 | private static global::System.Globalization.CultureInfo resourceCulture; 30 | 31 | [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] 32 | internal Resources() { 33 | } 34 | 35 | /// 36 | /// Returns the cached ResourceManager instance used by this class. 37 | /// 38 | [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] 39 | internal static global::System.Resources.ResourceManager ResourceManager { 40 | get { 41 | if (object.ReferenceEquals(resourceMan, null)) { 42 | global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("org.herbal3d.convoar.Properties.Resources", typeof(Resources).Assembly); 43 | resourceMan = temp; 44 | } 45 | return resourceMan; 46 | } 47 | } 48 | 49 | /// 50 | /// Overrides the current thread's CurrentUICulture property for all 51 | /// resource lookups using this strongly typed resource class. 52 | /// 53 | [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] 54 | internal static global::System.Globalization.CultureInfo Culture { 55 | get { 56 | return resourceCulture; 57 | } 58 | set { 59 | resourceCulture = value; 60 | } 61 | } 62 | } 63 | } 64 | -------------------------------------------------------------------------------- /convoar/Properties/Resources.resx: -------------------------------------------------------------------------------- 1 |  2 | 3 | 62 | 63 | 64 | 65 | 66 | 67 | 68 | 69 | 70 | 71 | 72 | 73 | 74 | 75 | 76 | 77 | 78 | 79 | 80 | 81 | 82 | 83 | 84 | 85 | 86 | 87 | 88 | 89 | 90 | 91 | 92 | 93 | 94 | 95 | 96 | 97 | 98 | 99 | 100 | 101 | 102 | 103 | 104 | 105 | 106 | 107 | 108 | 109 | text/microsoft-resx 110 | 111 | 112 | 2.0 113 | 114 | 115 | System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 116 | 117 | 118 | System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 119 | 120 | 121 | -------------------------------------------------------------------------------- /convoar/Resources/README.txt: -------------------------------------------------------------------------------- 1 | The items in this directory are created by pre-build actions 2 | in convoar.csproj. In particular, the actions are: 3 | 4 | echo %date% %time% > "$(ProjectDir)\Resources\BuildDate.txt" 5 | git rev-parse HEAD > "$(ProjectDir)\Resources\GitCommit.txt" 6 | 7 | The files so created are set as embedded resources in convoar.csproj 8 | and, as resources, their contents are available for the 9 | convoar application. 10 | -------------------------------------------------------------------------------- /convoar/VersionInfo.cs: -------------------------------------------------------------------------------- 1 | // This file is auto-generated by BuildVersion 2 | // Before editting, check out the application's build environment for use of BuildVersion 3 | using System; 4 | namespace org.herbal3d.convoar { 5 | public class VersionInfo { 6 | public static string appVersion = "2.0.6"; 7 | public static string longVersion = "2.0.6-20220516-98d4885d"; 8 | public static string buildDate = "20220516"; 9 | } 10 | } 11 | -------------------------------------------------------------------------------- /convoar/convoar.csproj: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | Debug 6 | AnyCPU 7 | {BD9942A1-315C-4961-B56A-D1770BED83B0} 8 | Exe 9 | org.herbal3d.convoar 10 | convoar 11 | v4.8 12 | 512 13 | true 14 | false 15 | 16 | 17 | 18 | publish\ 19 | true 20 | Disk 21 | false 22 | Foreground 23 | 7 24 | Days 25 | false 26 | false 27 | true 28 | 0 29 | 1.2.4.%2a 30 | false 31 | true 32 | 33 | 34 | AnyCPU 35 | true 36 | full 37 | false 38 | ..\dist\ 39 | DEBUG;TRACE 40 | prompt 41 | 4 42 | false 43 | 44 | 45 | AnyCPU 46 | pdbonly 47 | true 48 | ..\dist\ 49 | TRACE 50 | prompt 51 | 4 52 | 53 | 54 | true 55 | bin\x64\Debug\ 56 | DEBUG;TRACE 57 | full 58 | x64 59 | prompt 60 | MinimumRecommendedRules.ruleset 61 | 62 | 63 | bin\x64\Release\ 64 | TRACE 65 | true 66 | pdbonly 67 | x64 68 | prompt 69 | MinimumRecommendedRules.ruleset 70 | true 71 | 72 | 73 | 74 | False 75 | ..\libs\log4net.dll 76 | 77 | 78 | ..\libs\Mono.Addins.dll 79 | 80 | 81 | ..\libs\Nini.dll 82 | 83 | 84 | False 85 | ..\libs\nunit.framework.dll 86 | 87 | 88 | False 89 | ..\bin\OpenMetaverse.dll 90 | 91 | 92 | False 93 | ..\bin\OpenMetaverse.Rendering.Meshmerizer.dll 94 | 95 | 96 | False 97 | ..\bin\OpenMetaverse.StructuredData.dll 98 | 99 | 100 | False 101 | ..\bin\OpenMetaverseTypes.dll 102 | 103 | 104 | ..\bin\OpenSim.Capabilities.dll 105 | 106 | 107 | False 108 | ..\bin\OpenSim.Data.Null.dll 109 | 110 | 111 | ..\bin\OpenSim.Framework.dll 112 | 113 | 114 | ..\bin\OpenSim.Framework.Monitoring.dll 115 | 116 | 117 | ..\bin\OpenSim.Framework.Serialization.dll 118 | 119 | 120 | ..\bin\OpenSim.Framework.Servers.HttpServer.dll 121 | 122 | 123 | ..\bin\OpenSim.Region.CoreModules.dll 124 | 125 | 126 | ..\bin\OpenSim.Region.Framework.dll 127 | 128 | 129 | False 130 | ..\bin\OpenSim.Region.PhysicsModule.BasicPhysics.dll 131 | 132 | 133 | False 134 | ..\bin\OpenSim.Region.PhysicsModules.SharedBase.dll 135 | 136 | 137 | ..\bin\OpenSim.Services.Connectors.dll 138 | 139 | 140 | ..\bin\OpenSim.Services.Interfaces.dll 141 | 142 | 143 | ..\bin\OpenSim.Tests.Common.dll 144 | 145 | 146 | ..\bin\SmartThreadPool.dll 147 | 148 | 149 | 150 | 151 | 152 | 153 | 154 | 155 | 156 | 157 | 158 | 159 | 160 | 161 | 162 | 163 | 164 | 165 | 166 | True 167 | True 168 | Resources.resx 169 | 170 | 171 | 172 | 173 | 174 | 175 | 176 | 177 | False 178 | Microsoft .NET Framework 4.5.2 %28x86 and x64%29 179 | true 180 | 181 | 182 | False 183 | .NET Framework 3.5 SP1 184 | false 185 | 186 | 187 | 188 | 189 | 190 | 191 | 192 | ResXFileCodeGenerator 193 | Resources.Designer.cs 194 | Designer 195 | 196 | 197 | 198 | 199 | {ce3d1850-0000-0000-0000-000000000000} 200 | Herbal3d.CommonEntitiesConv 201 | 202 | 203 | {1267952c-0000-0000-0000-000000000000} 204 | Herbal3d.CommonEntities 205 | 206 | 207 | {c0dfac61-6999-4278-855f-0e9bca2e8625} 208 | Herbal3d.CommonUtil 209 | 210 | 211 | 212 | -------------------------------------------------------------------------------- /convoar/libopenjpeg-dotnet-2-1.5.0-dotnet-1-x86_64.so: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Misterblue/convoar/be7abbedc0d7d295a76800b2fe2e1fc9a58a7934/convoar/libopenjpeg-dotnet-2-1.5.0-dotnet-1-x86_64.so -------------------------------------------------------------------------------- /convoar/openjpeg-dotnet-x86_64.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Misterblue/convoar/be7abbedc0d7d295a76800b2fe2e1fc9a58a7934/convoar/openjpeg-dotnet-x86_64.dll -------------------------------------------------------------------------------- /convoar/openjpeg-dotnet.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Misterblue/convoar/be7abbedc0d7d295a76800b2fe2e1fc9a58a7934/convoar/openjpeg-dotnet.dll -------------------------------------------------------------------------------- /dist/Herbal3d.CommonEntities.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Misterblue/convoar/be7abbedc0d7d295a76800b2fe2e1fc9a58a7934/dist/Herbal3d.CommonEntities.dll -------------------------------------------------------------------------------- /dist/Herbal3d.CommonEntitiesConv.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Misterblue/convoar/be7abbedc0d7d295a76800b2fe2e1fc9a58a7934/dist/Herbal3d.CommonEntitiesConv.dll -------------------------------------------------------------------------------- /dist/Herbal3d.CommonEntitiesConv.dll.config: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | -------------------------------------------------------------------------------- /dist/Herbal3d.CommonEntitiesUtil.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Misterblue/convoar/be7abbedc0d7d295a76800b2fe2e1fc9a58a7934/dist/Herbal3d.CommonEntitiesUtil.dll -------------------------------------------------------------------------------- /dist/Herbal3d.CommonUtil.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Misterblue/convoar/be7abbedc0d7d295a76800b2fe2e1fc9a58a7934/dist/Herbal3d.CommonUtil.dll -------------------------------------------------------------------------------- /dist/Microsoft.Win32.Primitives.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Misterblue/convoar/be7abbedc0d7d295a76800b2fe2e1fc9a58a7934/dist/Microsoft.Win32.Primitives.dll -------------------------------------------------------------------------------- /dist/Mono.Addins.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Misterblue/convoar/be7abbedc0d7d295a76800b2fe2e1fc9a58a7934/dist/Mono.Addins.dll -------------------------------------------------------------------------------- /dist/NLog.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Misterblue/convoar/be7abbedc0d7d295a76800b2fe2e1fc9a58a7934/dist/NLog.dll -------------------------------------------------------------------------------- /dist/Nini.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Misterblue/convoar/be7abbedc0d7d295a76800b2fe2e1fc9a58a7934/dist/Nini.dll -------------------------------------------------------------------------------- /dist/OpenMetaverse.Rendering.Meshmerizer.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Misterblue/convoar/be7abbedc0d7d295a76800b2fe2e1fc9a58a7934/dist/OpenMetaverse.Rendering.Meshmerizer.dll -------------------------------------------------------------------------------- /dist/OpenMetaverse.StructuredData.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Misterblue/convoar/be7abbedc0d7d295a76800b2fe2e1fc9a58a7934/dist/OpenMetaverse.StructuredData.dll -------------------------------------------------------------------------------- /dist/OpenMetaverse.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Misterblue/convoar/be7abbedc0d7d295a76800b2fe2e1fc9a58a7934/dist/OpenMetaverse.dll -------------------------------------------------------------------------------- /dist/OpenMetaverse.dll.config: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /dist/OpenMetaverseTypes.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Misterblue/convoar/be7abbedc0d7d295a76800b2fe2e1fc9a58a7934/dist/OpenMetaverseTypes.dll -------------------------------------------------------------------------------- /dist/OpenSim.Capabilities.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Misterblue/convoar/be7abbedc0d7d295a76800b2fe2e1fc9a58a7934/dist/OpenSim.Capabilities.dll -------------------------------------------------------------------------------- /dist/OpenSim.Capabilities.pdb: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Misterblue/convoar/be7abbedc0d7d295a76800b2fe2e1fc9a58a7934/dist/OpenSim.Capabilities.pdb -------------------------------------------------------------------------------- /dist/OpenSim.Data.Null.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Misterblue/convoar/be7abbedc0d7d295a76800b2fe2e1fc9a58a7934/dist/OpenSim.Data.Null.dll -------------------------------------------------------------------------------- /dist/OpenSim.Data.Null.pdb: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Misterblue/convoar/be7abbedc0d7d295a76800b2fe2e1fc9a58a7934/dist/OpenSim.Data.Null.pdb -------------------------------------------------------------------------------- /dist/OpenSim.Framework.Monitoring.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Misterblue/convoar/be7abbedc0d7d295a76800b2fe2e1fc9a58a7934/dist/OpenSim.Framework.Monitoring.dll -------------------------------------------------------------------------------- /dist/OpenSim.Framework.Monitoring.pdb: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Misterblue/convoar/be7abbedc0d7d295a76800b2fe2e1fc9a58a7934/dist/OpenSim.Framework.Monitoring.pdb -------------------------------------------------------------------------------- /dist/OpenSim.Framework.Serialization.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Misterblue/convoar/be7abbedc0d7d295a76800b2fe2e1fc9a58a7934/dist/OpenSim.Framework.Serialization.dll -------------------------------------------------------------------------------- /dist/OpenSim.Framework.Serialization.pdb: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Misterblue/convoar/be7abbedc0d7d295a76800b2fe2e1fc9a58a7934/dist/OpenSim.Framework.Serialization.pdb -------------------------------------------------------------------------------- /dist/OpenSim.Framework.Servers.HttpServer.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Misterblue/convoar/be7abbedc0d7d295a76800b2fe2e1fc9a58a7934/dist/OpenSim.Framework.Servers.HttpServer.dll -------------------------------------------------------------------------------- /dist/OpenSim.Framework.Servers.HttpServer.pdb: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Misterblue/convoar/be7abbedc0d7d295a76800b2fe2e1fc9a58a7934/dist/OpenSim.Framework.Servers.HttpServer.pdb -------------------------------------------------------------------------------- /dist/OpenSim.Framework.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Misterblue/convoar/be7abbedc0d7d295a76800b2fe2e1fc9a58a7934/dist/OpenSim.Framework.dll -------------------------------------------------------------------------------- /dist/OpenSim.Framework.pdb: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Misterblue/convoar/be7abbedc0d7d295a76800b2fe2e1fc9a58a7934/dist/OpenSim.Framework.pdb -------------------------------------------------------------------------------- /dist/OpenSim.Region.CoreModules.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Misterblue/convoar/be7abbedc0d7d295a76800b2fe2e1fc9a58a7934/dist/OpenSim.Region.CoreModules.dll -------------------------------------------------------------------------------- /dist/OpenSim.Region.CoreModules.pdb: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Misterblue/convoar/be7abbedc0d7d295a76800b2fe2e1fc9a58a7934/dist/OpenSim.Region.CoreModules.pdb -------------------------------------------------------------------------------- /dist/OpenSim.Region.Framework.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Misterblue/convoar/be7abbedc0d7d295a76800b2fe2e1fc9a58a7934/dist/OpenSim.Region.Framework.dll -------------------------------------------------------------------------------- /dist/OpenSim.Region.Framework.pdb: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Misterblue/convoar/be7abbedc0d7d295a76800b2fe2e1fc9a58a7934/dist/OpenSim.Region.Framework.pdb -------------------------------------------------------------------------------- /dist/OpenSim.Region.PhysicsModule.BasicPhysics.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Misterblue/convoar/be7abbedc0d7d295a76800b2fe2e1fc9a58a7934/dist/OpenSim.Region.PhysicsModule.BasicPhysics.dll -------------------------------------------------------------------------------- /dist/OpenSim.Region.PhysicsModule.BasicPhysics.pdb: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Misterblue/convoar/be7abbedc0d7d295a76800b2fe2e1fc9a58a7934/dist/OpenSim.Region.PhysicsModule.BasicPhysics.pdb -------------------------------------------------------------------------------- /dist/OpenSim.Region.PhysicsModules.SharedBase.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Misterblue/convoar/be7abbedc0d7d295a76800b2fe2e1fc9a58a7934/dist/OpenSim.Region.PhysicsModules.SharedBase.dll -------------------------------------------------------------------------------- /dist/OpenSim.Region.PhysicsModules.SharedBase.pdb: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Misterblue/convoar/be7abbedc0d7d295a76800b2fe2e1fc9a58a7934/dist/OpenSim.Region.PhysicsModules.SharedBase.pdb -------------------------------------------------------------------------------- /dist/OpenSim.Services.Connectors.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Misterblue/convoar/be7abbedc0d7d295a76800b2fe2e1fc9a58a7934/dist/OpenSim.Services.Connectors.dll -------------------------------------------------------------------------------- /dist/OpenSim.Services.Connectors.pdb: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Misterblue/convoar/be7abbedc0d7d295a76800b2fe2e1fc9a58a7934/dist/OpenSim.Services.Connectors.pdb -------------------------------------------------------------------------------- /dist/OpenSim.Services.Interfaces.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Misterblue/convoar/be7abbedc0d7d295a76800b2fe2e1fc9a58a7934/dist/OpenSim.Services.Interfaces.dll -------------------------------------------------------------------------------- /dist/OpenSim.Services.Interfaces.pdb: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Misterblue/convoar/be7abbedc0d7d295a76800b2fe2e1fc9a58a7934/dist/OpenSim.Services.Interfaces.pdb -------------------------------------------------------------------------------- /dist/OpenSim.Tests.Common.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Misterblue/convoar/be7abbedc0d7d295a76800b2fe2e1fc9a58a7934/dist/OpenSim.Tests.Common.dll -------------------------------------------------------------------------------- /dist/OpenSim.Tests.Common.pdb: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Misterblue/convoar/be7abbedc0d7d295a76800b2fe2e1fc9a58a7934/dist/OpenSim.Tests.Common.pdb -------------------------------------------------------------------------------- /dist/PrimMesher.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Misterblue/convoar/be7abbedc0d7d295a76800b2fe2e1fc9a58a7934/dist/PrimMesher.dll -------------------------------------------------------------------------------- /dist/SmartThreadPool.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Misterblue/convoar/be7abbedc0d7d295a76800b2fe2e1fc9a58a7934/dist/SmartThreadPool.dll -------------------------------------------------------------------------------- /dist/SmartThreadPool.pdb: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Misterblue/convoar/be7abbedc0d7d295a76800b2fe2e1fc9a58a7934/dist/SmartThreadPool.pdb -------------------------------------------------------------------------------- /dist/System.AppContext.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Misterblue/convoar/be7abbedc0d7d295a76800b2fe2e1fc9a58a7934/dist/System.AppContext.dll -------------------------------------------------------------------------------- /dist/System.Collections.Concurrent.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Misterblue/convoar/be7abbedc0d7d295a76800b2fe2e1fc9a58a7934/dist/System.Collections.Concurrent.dll -------------------------------------------------------------------------------- /dist/System.Collections.NonGeneric.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Misterblue/convoar/be7abbedc0d7d295a76800b2fe2e1fc9a58a7934/dist/System.Collections.NonGeneric.dll -------------------------------------------------------------------------------- /dist/System.Collections.Specialized.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Misterblue/convoar/be7abbedc0d7d295a76800b2fe2e1fc9a58a7934/dist/System.Collections.Specialized.dll -------------------------------------------------------------------------------- /dist/System.Collections.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Misterblue/convoar/be7abbedc0d7d295a76800b2fe2e1fc9a58a7934/dist/System.Collections.dll -------------------------------------------------------------------------------- /dist/System.ComponentModel.EventBasedAsync.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Misterblue/convoar/be7abbedc0d7d295a76800b2fe2e1fc9a58a7934/dist/System.ComponentModel.EventBasedAsync.dll -------------------------------------------------------------------------------- /dist/System.ComponentModel.Primitives.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Misterblue/convoar/be7abbedc0d7d295a76800b2fe2e1fc9a58a7934/dist/System.ComponentModel.Primitives.dll -------------------------------------------------------------------------------- /dist/System.ComponentModel.TypeConverter.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Misterblue/convoar/be7abbedc0d7d295a76800b2fe2e1fc9a58a7934/dist/System.ComponentModel.TypeConverter.dll -------------------------------------------------------------------------------- /dist/System.ComponentModel.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Misterblue/convoar/be7abbedc0d7d295a76800b2fe2e1fc9a58a7934/dist/System.ComponentModel.dll -------------------------------------------------------------------------------- /dist/System.Console.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Misterblue/convoar/be7abbedc0d7d295a76800b2fe2e1fc9a58a7934/dist/System.Console.dll -------------------------------------------------------------------------------- /dist/System.Data.Common.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Misterblue/convoar/be7abbedc0d7d295a76800b2fe2e1fc9a58a7934/dist/System.Data.Common.dll -------------------------------------------------------------------------------- /dist/System.Diagnostics.Contracts.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Misterblue/convoar/be7abbedc0d7d295a76800b2fe2e1fc9a58a7934/dist/System.Diagnostics.Contracts.dll -------------------------------------------------------------------------------- /dist/System.Diagnostics.Debug.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Misterblue/convoar/be7abbedc0d7d295a76800b2fe2e1fc9a58a7934/dist/System.Diagnostics.Debug.dll -------------------------------------------------------------------------------- /dist/System.Diagnostics.FileVersionInfo.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Misterblue/convoar/be7abbedc0d7d295a76800b2fe2e1fc9a58a7934/dist/System.Diagnostics.FileVersionInfo.dll -------------------------------------------------------------------------------- /dist/System.Diagnostics.Process.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Misterblue/convoar/be7abbedc0d7d295a76800b2fe2e1fc9a58a7934/dist/System.Diagnostics.Process.dll -------------------------------------------------------------------------------- /dist/System.Diagnostics.StackTrace.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Misterblue/convoar/be7abbedc0d7d295a76800b2fe2e1fc9a58a7934/dist/System.Diagnostics.StackTrace.dll -------------------------------------------------------------------------------- /dist/System.Diagnostics.TextWriterTraceListener.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Misterblue/convoar/be7abbedc0d7d295a76800b2fe2e1fc9a58a7934/dist/System.Diagnostics.TextWriterTraceListener.dll -------------------------------------------------------------------------------- /dist/System.Diagnostics.Tools.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Misterblue/convoar/be7abbedc0d7d295a76800b2fe2e1fc9a58a7934/dist/System.Diagnostics.Tools.dll -------------------------------------------------------------------------------- /dist/System.Diagnostics.TraceSource.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Misterblue/convoar/be7abbedc0d7d295a76800b2fe2e1fc9a58a7934/dist/System.Diagnostics.TraceSource.dll -------------------------------------------------------------------------------- /dist/System.Diagnostics.Tracing.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Misterblue/convoar/be7abbedc0d7d295a76800b2fe2e1fc9a58a7934/dist/System.Diagnostics.Tracing.dll -------------------------------------------------------------------------------- /dist/System.Drawing.Primitives.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Misterblue/convoar/be7abbedc0d7d295a76800b2fe2e1fc9a58a7934/dist/System.Drawing.Primitives.dll -------------------------------------------------------------------------------- /dist/System.Dynamic.Runtime.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Misterblue/convoar/be7abbedc0d7d295a76800b2fe2e1fc9a58a7934/dist/System.Dynamic.Runtime.dll -------------------------------------------------------------------------------- /dist/System.Globalization.Calendars.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Misterblue/convoar/be7abbedc0d7d295a76800b2fe2e1fc9a58a7934/dist/System.Globalization.Calendars.dll -------------------------------------------------------------------------------- /dist/System.Globalization.Extensions.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Misterblue/convoar/be7abbedc0d7d295a76800b2fe2e1fc9a58a7934/dist/System.Globalization.Extensions.dll -------------------------------------------------------------------------------- /dist/System.Globalization.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Misterblue/convoar/be7abbedc0d7d295a76800b2fe2e1fc9a58a7934/dist/System.Globalization.dll -------------------------------------------------------------------------------- /dist/System.IO.Compression.ZipFile.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Misterblue/convoar/be7abbedc0d7d295a76800b2fe2e1fc9a58a7934/dist/System.IO.Compression.ZipFile.dll -------------------------------------------------------------------------------- /dist/System.IO.Compression.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Misterblue/convoar/be7abbedc0d7d295a76800b2fe2e1fc9a58a7934/dist/System.IO.Compression.dll -------------------------------------------------------------------------------- /dist/System.IO.FileSystem.DriveInfo.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Misterblue/convoar/be7abbedc0d7d295a76800b2fe2e1fc9a58a7934/dist/System.IO.FileSystem.DriveInfo.dll -------------------------------------------------------------------------------- /dist/System.IO.FileSystem.Primitives.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Misterblue/convoar/be7abbedc0d7d295a76800b2fe2e1fc9a58a7934/dist/System.IO.FileSystem.Primitives.dll -------------------------------------------------------------------------------- /dist/System.IO.FileSystem.Watcher.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Misterblue/convoar/be7abbedc0d7d295a76800b2fe2e1fc9a58a7934/dist/System.IO.FileSystem.Watcher.dll -------------------------------------------------------------------------------- /dist/System.IO.FileSystem.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Misterblue/convoar/be7abbedc0d7d295a76800b2fe2e1fc9a58a7934/dist/System.IO.FileSystem.dll -------------------------------------------------------------------------------- /dist/System.IO.IsolatedStorage.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Misterblue/convoar/be7abbedc0d7d295a76800b2fe2e1fc9a58a7934/dist/System.IO.IsolatedStorage.dll -------------------------------------------------------------------------------- /dist/System.IO.MemoryMappedFiles.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Misterblue/convoar/be7abbedc0d7d295a76800b2fe2e1fc9a58a7934/dist/System.IO.MemoryMappedFiles.dll -------------------------------------------------------------------------------- /dist/System.IO.Pipes.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Misterblue/convoar/be7abbedc0d7d295a76800b2fe2e1fc9a58a7934/dist/System.IO.Pipes.dll -------------------------------------------------------------------------------- /dist/System.IO.UnmanagedMemoryStream.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Misterblue/convoar/be7abbedc0d7d295a76800b2fe2e1fc9a58a7934/dist/System.IO.UnmanagedMemoryStream.dll -------------------------------------------------------------------------------- /dist/System.IO.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Misterblue/convoar/be7abbedc0d7d295a76800b2fe2e1fc9a58a7934/dist/System.IO.dll -------------------------------------------------------------------------------- /dist/System.Linq.Expressions.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Misterblue/convoar/be7abbedc0d7d295a76800b2fe2e1fc9a58a7934/dist/System.Linq.Expressions.dll -------------------------------------------------------------------------------- /dist/System.Linq.Parallel.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Misterblue/convoar/be7abbedc0d7d295a76800b2fe2e1fc9a58a7934/dist/System.Linq.Parallel.dll -------------------------------------------------------------------------------- /dist/System.Linq.Queryable.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Misterblue/convoar/be7abbedc0d7d295a76800b2fe2e1fc9a58a7934/dist/System.Linq.Queryable.dll -------------------------------------------------------------------------------- /dist/System.Linq.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Misterblue/convoar/be7abbedc0d7d295a76800b2fe2e1fc9a58a7934/dist/System.Linq.dll -------------------------------------------------------------------------------- /dist/System.Net.Http.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Misterblue/convoar/be7abbedc0d7d295a76800b2fe2e1fc9a58a7934/dist/System.Net.Http.dll -------------------------------------------------------------------------------- /dist/System.Net.NameResolution.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Misterblue/convoar/be7abbedc0d7d295a76800b2fe2e1fc9a58a7934/dist/System.Net.NameResolution.dll -------------------------------------------------------------------------------- /dist/System.Net.NetworkInformation.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Misterblue/convoar/be7abbedc0d7d295a76800b2fe2e1fc9a58a7934/dist/System.Net.NetworkInformation.dll -------------------------------------------------------------------------------- /dist/System.Net.Ping.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Misterblue/convoar/be7abbedc0d7d295a76800b2fe2e1fc9a58a7934/dist/System.Net.Ping.dll -------------------------------------------------------------------------------- /dist/System.Net.Primitives.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Misterblue/convoar/be7abbedc0d7d295a76800b2fe2e1fc9a58a7934/dist/System.Net.Primitives.dll -------------------------------------------------------------------------------- /dist/System.Net.Requests.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Misterblue/convoar/be7abbedc0d7d295a76800b2fe2e1fc9a58a7934/dist/System.Net.Requests.dll -------------------------------------------------------------------------------- /dist/System.Net.Security.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Misterblue/convoar/be7abbedc0d7d295a76800b2fe2e1fc9a58a7934/dist/System.Net.Security.dll -------------------------------------------------------------------------------- /dist/System.Net.Sockets.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Misterblue/convoar/be7abbedc0d7d295a76800b2fe2e1fc9a58a7934/dist/System.Net.Sockets.dll -------------------------------------------------------------------------------- /dist/System.Net.WebHeaderCollection.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Misterblue/convoar/be7abbedc0d7d295a76800b2fe2e1fc9a58a7934/dist/System.Net.WebHeaderCollection.dll -------------------------------------------------------------------------------- /dist/System.Net.WebSockets.Client.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Misterblue/convoar/be7abbedc0d7d295a76800b2fe2e1fc9a58a7934/dist/System.Net.WebSockets.Client.dll -------------------------------------------------------------------------------- /dist/System.Net.WebSockets.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Misterblue/convoar/be7abbedc0d7d295a76800b2fe2e1fc9a58a7934/dist/System.Net.WebSockets.dll -------------------------------------------------------------------------------- /dist/System.ObjectModel.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Misterblue/convoar/be7abbedc0d7d295a76800b2fe2e1fc9a58a7934/dist/System.ObjectModel.dll -------------------------------------------------------------------------------- /dist/System.Reflection.Extensions.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Misterblue/convoar/be7abbedc0d7d295a76800b2fe2e1fc9a58a7934/dist/System.Reflection.Extensions.dll -------------------------------------------------------------------------------- /dist/System.Reflection.Primitives.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Misterblue/convoar/be7abbedc0d7d295a76800b2fe2e1fc9a58a7934/dist/System.Reflection.Primitives.dll -------------------------------------------------------------------------------- /dist/System.Reflection.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Misterblue/convoar/be7abbedc0d7d295a76800b2fe2e1fc9a58a7934/dist/System.Reflection.dll -------------------------------------------------------------------------------- /dist/System.Resources.Reader.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Misterblue/convoar/be7abbedc0d7d295a76800b2fe2e1fc9a58a7934/dist/System.Resources.Reader.dll -------------------------------------------------------------------------------- /dist/System.Resources.ResourceManager.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Misterblue/convoar/be7abbedc0d7d295a76800b2fe2e1fc9a58a7934/dist/System.Resources.ResourceManager.dll -------------------------------------------------------------------------------- /dist/System.Resources.Writer.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Misterblue/convoar/be7abbedc0d7d295a76800b2fe2e1fc9a58a7934/dist/System.Resources.Writer.dll -------------------------------------------------------------------------------- /dist/System.Runtime.CompilerServices.VisualC.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Misterblue/convoar/be7abbedc0d7d295a76800b2fe2e1fc9a58a7934/dist/System.Runtime.CompilerServices.VisualC.dll -------------------------------------------------------------------------------- /dist/System.Runtime.Extensions.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Misterblue/convoar/be7abbedc0d7d295a76800b2fe2e1fc9a58a7934/dist/System.Runtime.Extensions.dll -------------------------------------------------------------------------------- /dist/System.Runtime.Handles.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Misterblue/convoar/be7abbedc0d7d295a76800b2fe2e1fc9a58a7934/dist/System.Runtime.Handles.dll -------------------------------------------------------------------------------- /dist/System.Runtime.InteropServices.RuntimeInformation.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Misterblue/convoar/be7abbedc0d7d295a76800b2fe2e1fc9a58a7934/dist/System.Runtime.InteropServices.RuntimeInformation.dll -------------------------------------------------------------------------------- /dist/System.Runtime.InteropServices.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Misterblue/convoar/be7abbedc0d7d295a76800b2fe2e1fc9a58a7934/dist/System.Runtime.InteropServices.dll -------------------------------------------------------------------------------- /dist/System.Runtime.Numerics.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Misterblue/convoar/be7abbedc0d7d295a76800b2fe2e1fc9a58a7934/dist/System.Runtime.Numerics.dll -------------------------------------------------------------------------------- /dist/System.Runtime.Serialization.Formatters.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Misterblue/convoar/be7abbedc0d7d295a76800b2fe2e1fc9a58a7934/dist/System.Runtime.Serialization.Formatters.dll -------------------------------------------------------------------------------- /dist/System.Runtime.Serialization.Json.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Misterblue/convoar/be7abbedc0d7d295a76800b2fe2e1fc9a58a7934/dist/System.Runtime.Serialization.Json.dll -------------------------------------------------------------------------------- /dist/System.Runtime.Serialization.Primitives.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Misterblue/convoar/be7abbedc0d7d295a76800b2fe2e1fc9a58a7934/dist/System.Runtime.Serialization.Primitives.dll -------------------------------------------------------------------------------- /dist/System.Runtime.Serialization.Xml.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Misterblue/convoar/be7abbedc0d7d295a76800b2fe2e1fc9a58a7934/dist/System.Runtime.Serialization.Xml.dll -------------------------------------------------------------------------------- /dist/System.Runtime.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Misterblue/convoar/be7abbedc0d7d295a76800b2fe2e1fc9a58a7934/dist/System.Runtime.dll -------------------------------------------------------------------------------- /dist/System.Security.Claims.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Misterblue/convoar/be7abbedc0d7d295a76800b2fe2e1fc9a58a7934/dist/System.Security.Claims.dll -------------------------------------------------------------------------------- /dist/System.Security.Cryptography.Algorithms.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Misterblue/convoar/be7abbedc0d7d295a76800b2fe2e1fc9a58a7934/dist/System.Security.Cryptography.Algorithms.dll -------------------------------------------------------------------------------- /dist/System.Security.Cryptography.Csp.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Misterblue/convoar/be7abbedc0d7d295a76800b2fe2e1fc9a58a7934/dist/System.Security.Cryptography.Csp.dll -------------------------------------------------------------------------------- /dist/System.Security.Cryptography.Encoding.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Misterblue/convoar/be7abbedc0d7d295a76800b2fe2e1fc9a58a7934/dist/System.Security.Cryptography.Encoding.dll -------------------------------------------------------------------------------- /dist/System.Security.Cryptography.Primitives.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Misterblue/convoar/be7abbedc0d7d295a76800b2fe2e1fc9a58a7934/dist/System.Security.Cryptography.Primitives.dll -------------------------------------------------------------------------------- /dist/System.Security.Cryptography.X509Certificates.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Misterblue/convoar/be7abbedc0d7d295a76800b2fe2e1fc9a58a7934/dist/System.Security.Cryptography.X509Certificates.dll -------------------------------------------------------------------------------- /dist/System.Security.Principal.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Misterblue/convoar/be7abbedc0d7d295a76800b2fe2e1fc9a58a7934/dist/System.Security.Principal.dll -------------------------------------------------------------------------------- /dist/System.Security.SecureString.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Misterblue/convoar/be7abbedc0d7d295a76800b2fe2e1fc9a58a7934/dist/System.Security.SecureString.dll -------------------------------------------------------------------------------- /dist/System.Text.Encoding.Extensions.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Misterblue/convoar/be7abbedc0d7d295a76800b2fe2e1fc9a58a7934/dist/System.Text.Encoding.Extensions.dll -------------------------------------------------------------------------------- /dist/System.Text.Encoding.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Misterblue/convoar/be7abbedc0d7d295a76800b2fe2e1fc9a58a7934/dist/System.Text.Encoding.dll -------------------------------------------------------------------------------- /dist/System.Text.RegularExpressions.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Misterblue/convoar/be7abbedc0d7d295a76800b2fe2e1fc9a58a7934/dist/System.Text.RegularExpressions.dll -------------------------------------------------------------------------------- /dist/System.Threading.Overlapped.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Misterblue/convoar/be7abbedc0d7d295a76800b2fe2e1fc9a58a7934/dist/System.Threading.Overlapped.dll -------------------------------------------------------------------------------- /dist/System.Threading.Tasks.Parallel.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Misterblue/convoar/be7abbedc0d7d295a76800b2fe2e1fc9a58a7934/dist/System.Threading.Tasks.Parallel.dll -------------------------------------------------------------------------------- /dist/System.Threading.Tasks.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Misterblue/convoar/be7abbedc0d7d295a76800b2fe2e1fc9a58a7934/dist/System.Threading.Tasks.dll -------------------------------------------------------------------------------- /dist/System.Threading.Thread.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Misterblue/convoar/be7abbedc0d7d295a76800b2fe2e1fc9a58a7934/dist/System.Threading.Thread.dll -------------------------------------------------------------------------------- /dist/System.Threading.ThreadPool.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Misterblue/convoar/be7abbedc0d7d295a76800b2fe2e1fc9a58a7934/dist/System.Threading.ThreadPool.dll -------------------------------------------------------------------------------- /dist/System.Threading.Timer.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Misterblue/convoar/be7abbedc0d7d295a76800b2fe2e1fc9a58a7934/dist/System.Threading.Timer.dll -------------------------------------------------------------------------------- /dist/System.Threading.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Misterblue/convoar/be7abbedc0d7d295a76800b2fe2e1fc9a58a7934/dist/System.Threading.dll -------------------------------------------------------------------------------- /dist/System.ValueTuple.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Misterblue/convoar/be7abbedc0d7d295a76800b2fe2e1fc9a58a7934/dist/System.ValueTuple.dll -------------------------------------------------------------------------------- /dist/System.Xml.ReaderWriter.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Misterblue/convoar/be7abbedc0d7d295a76800b2fe2e1fc9a58a7934/dist/System.Xml.ReaderWriter.dll -------------------------------------------------------------------------------- /dist/System.Xml.XDocument.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Misterblue/convoar/be7abbedc0d7d295a76800b2fe2e1fc9a58a7934/dist/System.Xml.XDocument.dll -------------------------------------------------------------------------------- /dist/System.Xml.XPath.XDocument.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Misterblue/convoar/be7abbedc0d7d295a76800b2fe2e1fc9a58a7934/dist/System.Xml.XPath.XDocument.dll -------------------------------------------------------------------------------- /dist/System.Xml.XPath.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Misterblue/convoar/be7abbedc0d7d295a76800b2fe2e1fc9a58a7934/dist/System.Xml.XPath.dll -------------------------------------------------------------------------------- /dist/System.Xml.XmlDocument.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Misterblue/convoar/be7abbedc0d7d295a76800b2fe2e1fc9a58a7934/dist/System.Xml.XmlDocument.dll -------------------------------------------------------------------------------- /dist/System.Xml.XmlSerializer.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Misterblue/convoar/be7abbedc0d7d295a76800b2fe2e1fc9a58a7934/dist/System.Xml.XmlSerializer.dll -------------------------------------------------------------------------------- /dist/convoar.exe: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Misterblue/convoar/be7abbedc0d7d295a76800b2fe2e1fc9a58a7934/dist/convoar.exe -------------------------------------------------------------------------------- /dist/convoar.exe.config: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 |
5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | 58 | 59 | 60 | 61 | 62 | 63 | 64 | 65 | 66 | 67 | 68 | 69 | 70 | 71 | 72 | 73 | 74 | 75 | 76 | 77 | -------------------------------------------------------------------------------- /dist/convoar.pdb: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Misterblue/convoar/be7abbedc0d7d295a76800b2fe2e1fc9a58a7934/dist/convoar.pdb -------------------------------------------------------------------------------- /dist/libopenjpeg-dotnet-2-1.5.0-dotnet-1-x86_64.so: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Misterblue/convoar/be7abbedc0d7d295a76800b2fe2e1fc9a58a7934/dist/libopenjpeg-dotnet-2-1.5.0-dotnet-1-x86_64.so -------------------------------------------------------------------------------- /dist/log4net.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Misterblue/convoar/be7abbedc0d7d295a76800b2fe2e1fc9a58a7934/dist/log4net.dll -------------------------------------------------------------------------------- /dist/netstandard.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Misterblue/convoar/be7abbedc0d7d295a76800b2fe2e1fc9a58a7934/dist/netstandard.dll -------------------------------------------------------------------------------- /dist/nunit.framework.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Misterblue/convoar/be7abbedc0d7d295a76800b2fe2e1fc9a58a7934/dist/nunit.framework.dll -------------------------------------------------------------------------------- /dist/openjpeg-dotnet-x86_64.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Misterblue/convoar/be7abbedc0d7d295a76800b2fe2e1fc9a58a7934/dist/openjpeg-dotnet-x86_64.dll -------------------------------------------------------------------------------- /dist/openjpeg-dotnet.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Misterblue/convoar/be7abbedc0d7d295a76800b2fe2e1fc9a58a7934/dist/openjpeg-dotnet.dll -------------------------------------------------------------------------------- /dist/zlib.net.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Misterblue/convoar/be7abbedc0d7d295a76800b2fe2e1fc9a58a7934/dist/zlib.net.dll -------------------------------------------------------------------------------- /docker/Dockerfile: -------------------------------------------------------------------------------- 1 | # Dockerfile for building a runnable version of convoar 2 | 3 | FROM mono:latest as builder 4 | 5 | # add the development environment and base tools 6 | RUN apt-get update \ 7 | && apt-get upgrade -y \ 8 | && apt-get install -y \ 9 | curl \ 10 | git \ 11 | vim \ 12 | libc6-dev libgdiplus 13 | 14 | ARG TARGET=Release 15 | 16 | ARG PLACE=/tmp 17 | 18 | ARG OPENSIM_BRANCH=master 19 | ARG CONVOAR_BRANCH=master 20 | ARG COMMON_ENTITIES_BRANCH=master 21 | ARG COMMON_UTIL_BRANCH=main 22 | 23 | ADD https://api.github.com/repos/opensim/opensim/git/refs/heads/$OPENSIM_BRANCH opensim-git-version.json 24 | RUN cd $PLACE \ 25 | && git clone --depth 1 -b $OPENSIM_BRANCH --single-branch https://github.com/opensim/opensim.git \ 26 | && cd opensim \ 27 | && ./runprebuild48.sh \ 28 | && msbuild /p:Configuration=${TARGET} 29 | 30 | # Gather all the sources 31 | # The following ADD's break the caching of the sources changed 32 | ADD https://api.github.com/repos/Misterblue/convoar/git/refs/heads/$CONVOAR_BRANCH convoar-git-version.json 33 | ADD https://api.github.com/repos/Herbal3d/HerbalCommonEntitiesCS/git/refs/heads/$COMMON_ENTITES_BRANCH commonentites-git-version.json 34 | ADD https://api.github.com/repos/Herbal3d/HerbalCommonUtilCS/git/refs/heads/$COMMON_UTIL_BRANCH commonutil-git-version.json 35 | RUN cd $PLACE \ 36 | && git clone --depth 1 -b $CONVOAR_BRANCH --single-branch https://github.com/Misterblue/convoar.git \ 37 | && cd convoar \ 38 | && mkdir -p bin \ 39 | && OPENSIMBIN=$PLACE/opensim/bin LIBOMVBIN=$PLACE/opensim/bin ./gatherLibs.sh \ 40 | && ./updateVersion.sh "mono ./BuildVersion/BuildVersion.exe" \ 41 | && mkdir -p addon-modules \ 42 | && cd addon-modules \ 43 | && git clone --depth 1 -b $COMMON_ENTITIES_BRANCH --single-branch https://github.com/Herbal3d/HerbalCommonEntitiesCS.git \ 44 | && git clone --depth 1 -b $COMMON_UTIL_BRANCH --single-branch https://github.com/Herbal3d/HerbalCommonUtilCS.git 45 | 46 | RUN cd $PLACE/convoar \ 47 | && nuget restore convoar.sln \ 48 | && msbuild /p:Configuration=${TARGET} 49 | 50 | # Convoar is now built into $PLACE/convoar/dist 51 | 52 | # =================================================================== 53 | FROM mono:latest 54 | 55 | ARG VERSION 56 | 57 | LABEL Version=${VERSION} 58 | LABEL Description="Docker container convoar" 59 | 60 | # Optout of the .NET Core Telemetry (https://aka.ms/dotnet-cli-telemetry) 61 | ENV DOTNET_CLI_TELEMETRY_OPTOUT=true 62 | 63 | # Must be same as in the 'builder' step above 64 | ARG PLACE=/tmp 65 | 66 | # An account is created in the docker file for building and running the app. 67 | # Set the real password in the calling environment. This is just a default. 68 | ENV USER=convoar 69 | ENV CONVOAR_PASSWORD=convoarconvoar 70 | 71 | # Add and switch to user 'convoar' 72 | RUN adduser --disabled-password --gecos 'Convoar user' ${USER} \ 73 | && echo "${USER}:${CONVOAR_PASSWORD}" | chpasswd 74 | WORKDIR /home/${USER} 75 | USER ${USER}:${USER} 76 | 77 | RUN mkdir -p /home/${USER}/convoar/dist 78 | COPY --from=builder --chown=${USER}:${USER} $PLACE/convoar/dist /home/${USER}/convoar/dist/ 79 | 80 | COPY ./run-convoar.sh /home/convoar 81 | 82 | ENTRYPOINT [ "./run-convoar.sh" ] 83 | 84 | -------------------------------------------------------------------------------- /docker/run-convoar.sh: -------------------------------------------------------------------------------- 1 | #! /bin/bash 2 | # Run convoar in a special target directory 3 | # The idea would be the person running the docker container would 4 | # mount the remote directory in that place. 5 | 6 | for DIR in /home/convoar/oar /oar /tmp/oar ; do 7 | # echo "Checking $DIR" 8 | if [[ -d "$DIR" ]] ; then 9 | echo "Found $DIR" 10 | cd "$DIR" 11 | echo "Doing: /home/convoar/convoar/dist/convoar.exe $@" 12 | mono /home/convoar/convoar/dist/convoar.exe $@ 13 | exit $? 14 | fi 15 | done 16 | -------------------------------------------------------------------------------- /gatherLibs.sh: -------------------------------------------------------------------------------- 1 | #! /bin/bash 2 | 3 | OPENSIMBIN=${OPENSIMBIN:-../opensim/bin} 4 | # It is best to get the libomv dll's that OpenSim was built with 5 | LIBOMVBIN=${LIBOMVBIN:-../opensim/bin} 6 | # LIBOMVBIN=${LIBOMVBIN:-../libopenmetaverse/bin} 7 | 8 | DSTDIR=./bin 9 | 10 | echo "Copying from $OPENSIMBIN to $DSTDIR" 11 | 12 | # Copy the dll file and the PDB file if it exists 13 | function GetLib() { 14 | if [[ -z "$3" ]] ; then 15 | cp "$1/$2" "$DSTDIR" 16 | else 17 | cp "$1/$2" "$3" 18 | fi 19 | pdbfile=$1/${2%.dll}.pdb 20 | if [[ -e "$pdbfile" ]] ; then 21 | cp "$pdbfile" "$DSTDIR" 22 | fi 23 | } 24 | 25 | GetLib "$OPENSIMBIN" "OpenSim.Data.Null.dll" 26 | GetLib "$OPENSIMBIN" "OpenSim.Capabilities.dll" 27 | GetLib "$OPENSIMBIN" "OpenSim.Framework.dll" 28 | GetLib "$OPENSIMBIN" "OpenSim.Framework.Monitoring.dll" 29 | GetLib "$OPENSIMBIN" "OpenSim.Framework.Serialization.dll" 30 | GetLib "$OPENSIMBIN" "OpenSim.Framework.Servers.HttpServer.dll" 31 | GetLib "$OPENSIMBIN" "OpenSim.Services.Interfaces.dll" 32 | GetLib "$OPENSIMBIN" "OpenSim.Services.Connectors.dll" 33 | GetLib "$OPENSIMBIN" "OpenSim.Region.CoreModules.dll" 34 | GetLib "$OPENSIMBIN" "OpenSim.Region.Framework.dll" 35 | GetLib "$OPENSIMBIN" "OpenSim.Region.PhysicsModule.BasicPhysics.dll" 36 | GetLib "$OPENSIMBIN" "OpenSim.Region.PhysicsModules.SharedBase.dll" 37 | GetLib "$OPENSIMBIN" "OpenSim.Tests.Common.dll" 38 | 39 | GetLib "$OPENSIMBIN" "log4net.dll" 40 | GetLib "$OPENSIMBIN" "Nini.dll" 41 | GetLib "$OPENSIMBIN" "nunit.framework.dll" 42 | GetLib "$OPENSIMBIN" "Mono.Addins.dll" 43 | GetLib "$OPENSIMBIN" "SmartThreadPool.dll" 44 | GetLib "$OPENSIMBIN" "zlib.net.dll" 45 | # Following are required for OpenSimulator terrain/baking code. 46 | GetLib "$OPENSIMBIN" "openjpeg-dotnet.dll" "convoar" 47 | GetLib "$OPENSIMBIN" "openjpeg-dotnet-x86_64.dll" "convoar" 48 | GetLib "$OPENSIMBIN" "libopenjpeg-dotnet-2-1.5.0-dotnet-1-x86_64.so" "convoar" 49 | 50 | GetLib "$LIBOMVBIN" "OpenMetaverse.dll" 51 | GetLib "$LIBOMVBIN" "OpenMetaverse.dll.config" 52 | # GetLib "$LIBOMVBIN" "OpenMetaverse.XML" 53 | GetLib "$LIBOMVBIN" "OpenMetaverseTypes.dll" 54 | # GetLib "$LIBOMVBIN" "OpenMetaverseTypes.XML" 55 | GetLib "$LIBOMVBIN" "OpenMetaverse.StructuredData.dll" 56 | # GetLib "$LIBOMVBIN" "OpenMetaverse.StructuredData.XML" 57 | GetLib "$LIBOMVBIN" "OpenMetaverse.Rendering.Meshmerizer.dll" 58 | GetLib "$LIBOMVBIN" "PrimMesher.dll" 59 | -------------------------------------------------------------------------------- /setupConvoar.sh: -------------------------------------------------------------------------------- 1 | #! /bin/bash 2 | # Script run after checkout out Convoar to get the needed other libraries. 3 | 4 | if [[ -z "$OPENSIMBIN" ]] ; then 5 | echo "Will use OpenSimulator binaries supplied in checkouted bin/" 6 | fi 7 | 8 | export TARGET=Release 9 | 10 | export PLACE=$(pwd) 11 | 12 | export CONVOAR_BRANCH=${CONVOAR_BRANCH:-master} 13 | export COMMON_ENTITIES_BRANCH=${COMMON_ENTITIES_BRANCH:-master} 14 | export COMMON_UTIL_BRANCH=${COMMON_UTIL_BRANCH:-main} 15 | 16 | if [[ ! -z "$OPENSIMBIN" ]] ; then 17 | if [[ -z "$LIBOMVBIN" ]] ; then 18 | echo "Assuming libOpenMetaverse binaries are in $OPENSIMBIN" 19 | export LIBOMVBIN="$OPENSIMBIN" 20 | fi 21 | echo "Fetching OpenSimulator binaries from $OPENSIMBIN" 22 | mkdir -p bin 23 | ./gatherLibs.sh 24 | fi 25 | 26 | # Update the version info from the checkout 27 | ./updateVersion.sh 28 | 29 | # Gather all the sources for the tool libraries 30 | mkdir -p addon-modules 31 | cd addon-modules 32 | git clone --depth 1 -b $COMMON_ENTITIES_BRANCH --single-branch https://github.com/Herbal3d/HerbalCommonEntitiesCS.git 33 | git clone --depth 1 -b $COMMON_UTIL_BRANCH --single-branch https://github.com/Herbal3d/HerbalCommonUtilCS.git 34 | -------------------------------------------------------------------------------- /updateVersion.sh: -------------------------------------------------------------------------------- 1 | #! /bin/bash 2 | 3 | BUILDVERSION=${1:-./BuildVersion/BuildVersion.exe} 4 | 5 | $BUILDVERSION --namespace org.herbal3d.convoar \ 6 | --verbose \ 7 | --version $(cat VERSION) \ 8 | --versionFile convoar/VersionInfo.cs \ 9 | --assemblyInfoFile convoar/Properties/AssemblyInfo.cs 10 | --------------------------------------------------------------------------------